pax_global_header00006660000000000000000000000064136700450750014521gustar00rootroot0000000000000052 comment=012388aa3abfa3b3114d1ff9cb0f0c3d0ff4385c go-cloud-0.20.0/000077500000000000000000000000001367004507500133115ustar00rootroot00000000000000go-cloud-0.20.0/.codecov.yml000066400000000000000000000003041367004507500155310ustar00rootroot00000000000000coverage: status: project: default: target: 0 threshold: null base: auto patch: default: target: 0 threshold: null base: auto go-cloud-0.20.0/.gitattributes000066400000000000000000000002401367004507500162000ustar00rootroot00000000000000/internal/website/data/examples.json linguist-generated=true **/testdata/**/*.yaml linguist-generated=true **/testdata/**/*.replay linguist-generated=true go-cloud-0.20.0/.github/000077500000000000000000000000001367004507500146515ustar00rootroot00000000000000go-cloud-0.20.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001367004507500170345ustar00rootroot00000000000000go-cloud-0.20.0/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000013351367004507500215300ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve --- Please use a title starting with the name of the affected package, or \"all\", followed by a colon, followed by a short summary of the issue. Example: `blob/gcsblob: not blobby enough`. You can use `go bug` to have a cool, automatically filled out bug template, or fill out the template below. ### Describe the bug A clear and concise description of what the bug is. ### To Reproduce Steps to reproduce the behavior. ## Expected behavior A clear and concise description of what you expected to happen. ### Version Which version(s) of the Go Cloud modules are you seeing the bug with? ### Additional context Add any other context about the problem here. go-cloud-0.20.0/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000014051367004507500225610ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project --- Please use a title starting with the name of the affected package, or \"all\", followed by a colon, followed by a short summary of the feature request. Example: `blob/gcsblob: add support for more blobbing`. ### Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] ### Describe the solution you'd like A clear and concise description of what you want to happen. ### Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered. ### Additional context Add any other context or screenshots about the feature request here. go-cloud-0.20.0/.github/pull_request_template.md000066400000000000000000000006231367004507500216130ustar00rootroot00000000000000Please use a title starting with the name of the affected package, or \"all\", followed by a colon, followed by a short summary of the issue. Example: `blob/gcsblob: fix typo in documentation`. Please reference any Issue related to this Pull Request. Example: `Fixes #1`. See [here](https://blog.github.com/2015-01-21-how-to-write-the-perfect-pull-request/) for tips on good Pull Request description. go-cloud-0.20.0/.gitignore000066400000000000000000000026701367004507500153060ustar00rootroot00000000000000# Binaries for programs and plugins *.exe *.dll *.so *.dylib /internal/contributebot/contributebot /internal/cmd/gocdk/gocdk /internal/website/gatherexamples/gatherexamples /internal/website/public/ /internal/testing/test-summary/test-summary /samples/gocdk-blob/gocdk-blob /samples/gocdk-docstore/gocdk-docstore /samples/gocdk-pubsub/gocdk-pubsub /samples/gocdk-runtimevar/gocdk-runtimevar /samples/gocdk-secrets/gocdk-secrets /samples/guestbook/guestbook /samples/guestbook/gcp/guestbook /samples/tutorial/tutorial /samples/tutorial/upload # Test binary, build with `go test -c` *.test # Output of the go coverage tool, specifically when used with LiteIDE *.out # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 .glide/ # Go vendor directory vendor/ # Populated config files /internal/contributebot/dev/ /internal/contributebot/webhook/app.yaml /tests/gcp/app/gcp-test.yaml # Cryptographic keys *.pem # Terraform Temporary Files *.tfstate *.tfstate.* .terraform/ terraform.tfvars # OSX leaves these everywhere on SMB shares ._* # OSX stuff .DS_Store # Eclipse files .classpath .project .settings/** # Files generated by JetBrains IDEs, e.g. Goland .idea/ *.iml # VSCode files .vscode # Emacs save files *~ \#*\# .\#* # Vim-related files [._]*.s[a-w][a-z] [._]s[a-w][a-z] *.un~ Session.vim .netrwhist # Mercurial files **/.hg **/.hg* # runtimevar/etcdvar tests create this directory. runtimevar/etcdvar/default.etcd go-cloud-0.20.0/.travis.yml000066400000000000000000000046171367004507500154320ustar00rootroot00000000000000language: go go_import_path: gocloud.dev services: - docker before_install: - "df -k" # The Bash that comes with OS X is ancient. # grep is similar: it's not GNU grep, which means commands aren't portable. # Homebrew installs grep as ggrep if you don't build from source, so it needs # moving so it takes precedence in the PATH. - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then HOMEBREW_NO_AUTO_UPDATE=1 brew install bash grep; mv $(brew --prefix)/bin/ggrep $(brew --prefix)/bin/grep; fi # Install Terraform. - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then TERRAFORM_OS="darwin"; else TERRAFORM_OS="$TRAVIS_OS_NAME"; fi - curl -sLo /tmp/terraform.zip https://releases.hashicorp.com/terraform/0.12.2/terraform_0.12.2_"${TERRAFORM_OS}"_amd64.zip - unzip /tmp/terraform.zip -d /tmp - mkdir -p ~/bin - mv /tmp/terraform ~/bin - export PATH="$HOME/bin:$PATH" - terraform -version install: # Re-checkout files preserving line feeds. This prevents Windows builds from # converting \n to \r\n. - "git config --global core.autocrlf input" - "git checkout -- ." script: - 'internal/testing/runchecks.sh' env: global: - GOPROXY=https://proxy.golang.org - GO111MODULE=on # When updating Go versions: # In addition to changing the "go:" versions below, edit the version # test in runchecks.sh. jobs: include: - go: "1.13.x" os: linux - go: "1.14.x" os: linux - go: "1.14.x" os: osx - go: "1.14.x" os: windows # TODO(rvangent): Remove filter_secrets: false once the Travis issue is fixed: # https://travis-ci.community/t/current-known-issues-please-read-this-before-posting-a-new-topic/264/10 filter_secrets: false # Deploy to GitHub Pages. - stage: website os: linux install: "curl -fsSL https://github.com/gohugoio/hugo/releases/download/v0.54.0/hugo_0.54.0_Linux-64bit.tar.gz | tar zxf - -C \"$HOME\" hugo" script: "HUGO_GOOGLEANALYTICS=UA-135118641-1 \"$HOME/hugo\" -s internal/website" deploy: provider: pages fqdn: gocloud.dev skip-cleanup: true local-dir: internal/website/public github-token: $GITHUB_TOKEN # set in the Settings page of the repo keep-history: true verbose: true # temporarily, while verifying on: branch: master stages: - name: website if: branch = master AND type = push - test go-cloud-0.20.0/.vscode/000077500000000000000000000000001367004507500146525ustar00rootroot00000000000000go-cloud-0.20.0/.vscode/settings.json000066400000000000000000000001441367004507500174040ustar00rootroot00000000000000{ "search.exclude": { "**/*.replay": true, "**/testdata/**/*.yaml": true } }go-cloud-0.20.0/.vscode/tasks.json000066400000000000000000000006151367004507500166740ustar00rootroot00000000000000{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "Test", "type": "shell", "command": "internal/testing/runchecks.sh", "group": { "kind": "test", "isDefault": true } } ] } go-cloud-0.20.0/AUTHORS000066400000000000000000000016431367004507500143650ustar00rootroot00000000000000# This is the official list of Go Cloud Development Kit authors for copyright # purposes. # This file is distinct from the CONTRIBUTORS files. # See the latter for an explanation. # Names should be added to this file as one of # Organization's name # Individual's name # Individual's name # See CONTRIBUTORS for the meaning of multiple email addresses. # Please keep the list sorted. Ben Hinchley Boris Popovschi Gerasimos (Makis) Maropoulos Google LLC Oleg Kovalov oliverpool Sendil Kumar N Steve Jiang Vishal Saroopchand Zachary Romero go-cloud-0.20.0/CODE_OF_CONDUCT.md000066400000000000000000000005171367004507500161130ustar00rootroot00000000000000# Code of Conduct This project is covered under the [Go Code of Conduct][]. In summary: - Treat everyone with respect and kindness. - Be thoughtful in how you communicate. - Don’t be destructive or inflammatory. - If you encounter an issue, please mail conduct@golang.org. [Go Code of Conduct]: https://golang.org/conduct go-cloud-0.20.0/CONTRIBUTING.md000066400000000000000000000257231367004507500155530ustar00rootroot00000000000000# How to Contribute We would love to accept your patches and contributions to this project. Here is how you can help. ## Filing issues Filing issues is an important way you can contribute to the Go Cloud Development Kit. We want your feedback on things like bugs, desired API changes, or just anything that isn't working for you. ### Bugs If your issue is a bug, open one [here](https://github.com/google/go-cloud/issues/new). The easiest way to file an issue with all the right information is to run `go bug`. `go bug` will print out a handy template of questions and system information that will help us get to the root of the issue quicker. Please start the title of your bug with the name of the affected package, followed by a colon, followed by a short summary of the issue, like "blob/gcsblob: not blobby enough". ### Changes Unlike the core Go project, we do not have a formal proposal process for changes. If you have a change you would like to see in the Go CDK, please file an issue with the necessary details. ### Triaging The Go CDK team triages issues at least every two weeks, but usually within two business days. Issues that we would like to address, but do not have time for are placed into the [Unplanned][] milestone. [Unplanned]: https://github.com/google/go-cloud/milestone/2 ## Contributing Code We love accepting contributions! If your change is minor, please feel free to submit a [pull request](https://help.github.com/articles/about-pull-requests/). If your change is larger, or adds a feature, please file an issue beforehand so that we can discuss the change. You're welcome to file an implementation pull request immediately as well, although we generally lean towards discussing the change and then reviewing the implementation separately. Be sure to take a look at the [internal docs][], which include more information about conventions and design patterns found in the project. [internal docs]: internal/docs/README.md ### Finding something to work on If you want to write some code, but don't know where to start or what you might want to do, take a look at the [Good First Issue] label and our [Unplanned][] milestone. The latter is where you can find issues we would like to address, but can't currently find time for. See if any of the latest ones look interesting! If you need help before you can start work, you can comment on the issue, and we will try to help as best we can. [Good First Issue]: https://github.com/google/go-cloud/labels/good%20first%20issue ### Contributor License Agreement Contributions to this project can only be made by those who have signed Google's Contributor License Agreement. You (or your employer) retain the copyright to your contribution, so this simply gives us permission to use and redistribute your contributions as part of the project. Head over to to see your current agreements on file or to sign a new one. As a personal contributor, you only need to sign the Google CLA once across all Google projects. If you've already signed the CLA, there is no need to do it again. If you are submitting code on behalf of your employer, there's [a separate corporate CLA that your employer manages for you](https://opensource.google.com/docs/cla/#external-contributors). ### A Warning About Tests Tests that interact with cloud providers are written using a replay method, where the test is run and actually performs the operations, and the requests/results of the operations are stored in a replay file. This replay file is then read back in unit tests on Travis, so the tests get to operate with real data. Unfortunately, while the Go CDK team can generate these replay files against our test cloud infrastructure, it is not yet possible for external contributors to do the same. We want to improve this process in the future and are researching how we can do this. If you have any ideas, please [file an issue](https://github.com/google/go-cloud/issues/new)! #### Writing and running tests against a cloud environment If you can create cloud resources, setup your authentication using either `aws` or `gcloud` and set the default project as the test project. Most tests will have constants defining the resource names they use (for example, for `blob` tests, the bucket name); update the constant and then run `go test -record`. New replay files will be generated. This uses API quota and will create and delete cloud resources. Replay files scrub sensitive information. [Send your PR](#making-a-pull-request) without the replay files, and we can generate new ones to be used by others. ### Dependencies The Go CDK has a policy to depend only on code licensed under one of the [`notice`][notice licenses], [`permissive`][permissive licenses], or [`unencumbered`][unencumbered licenses] categories in the [Google Open Source Licenses][] documentation. This is enforced with a Travis build check that verifies that every dependency is in the [`alldeps` file][]. Do not add new direct or indirect dependencies to the Go CDK unless you have verified that the dependency is released under an acceptable license. [`alldeps` file]: https://github.com/google/go-cloud/blob/master/internal/testing/alldeps [notice licenses]: https://opensource.google.com/docs/thirdparty/licenses/#notice [permissive licenses]: https://opensource.google.com/docs/thirdparty/licenses/#permissive [unencumbered licenses]: https://opensource.google.com/docs/thirdparty/licenses/#unencumbered [Google Open Source Licenses]: https://opensource.google.com/docs/thirdparty/licenses/ ## Making a pull request * Follow the normal [pull request flow](https://help.github.com/articles/creating-a-pull-request/). * Build your changes using Go 1.11 with Go modules enabled. The Go CDK's continuous integration uses Go modules in order to ensure [reproducible builds](https://research.swtch.com/vgo-repro). * Test your changes using `go test ./...`. Please add tests that show the change does what it says it does, even if there wasn't a test in the first place. Don't add the replay files to your commits. * Feel free to make as many commits as you want; we will squash them all into a single commit before merging your change. * Check the diffs, write a useful description (including something like `Fixes #123` if it's fixing a bug) and send the PR out. Please start the title of your pull request with the name of the affected package, followed by a colon, followed by a short summary of the change, like "blob/gcsblob: add more tests". * [Travis CI](http://travis-ci.com) will run tests against the PR. This should happen within 10 minutes or so. If a test fails, go back to the coding stage and try to fix the test and push the same branch again. You won't need to make a new pull request, the changes will be rolled directly into the PR you already opened. Wait for Travis again. There is no need to assign a reviewer to the PR, the project team will assign someone for review during the standard [triage](#triaging) process. ## Code review All submissions, including submissions by project members, require review. It is almost never the case that a pull request is accepted without some changes requested, so please do not be offended! When you have finished making requested changes to your pull request, please make a comment containing "PTAL" (Please Take Another Look) on your pull request. GitHub notifications can be noisy, and it is unfortunately easy for things to be lost in the shuffle. Once your PR is approved (hooray!), the reviewer will squash your commits into a single commit and then merge the commit onto the Go CDK master branch. Thank you! ## Github code review workflow conventions (For project members and frequent contributors.) As a contributor: - Try hard to make each Pull Request as small and focused as possible. In particular, this means that if a reviewer asks you to do something that is beyond the scope of the Pull Request, the best practice is to file another issue and reference it from the Pull Request rather than just adding more commits to the existing PR. - Adding someone as a Reviewer means "please feel free to look and comment"; the review is optional. Choose as many Reviewers as you'd like. - Adding someone as an Assignee means that the Pull Request should not be submitted until they approve. If you choose multiple Assignees, wait until all of them approve. It is fine to ask someone if they are OK with being removed as an Assignee. - Note that if you don't select any assignees, ContributeBot will turn all of your Reviewers into Assignees. - Make as many commits as you want locally, but try not to push them to Github until you've addressed comments; this allows the email notification about the push to be a signal to reviewers that the PR is ready to be looked at again. - When there may be confusion about what should happen next for a PR, be explicit; add a "PTAL" comment if it is ready for review again, or a "Please hold off on reviewing for now" if you are still working on addressing comments. - "Resolve" comments that you are sure you've addressed; let your reviewers resolve ones that you're not sure about. - Do not use `git push --force`; this can cause comments from your reviewers that are associated with a specific commit to be lost. This implies that once you've sent a Pull Request, you should use `git merge` instead of `git rebase` to incorporate commits from the master branch. - Travis checks will fail if you haven't run `gofmt -w -s`. - Travis checks will fail if your PR has backwards-incompatible changes, unless one of your commits has the strings `BREAKING_CHANGE_OK` in the first line of the commit message. As a reviewer: - Be timely in your review process, especially if you are an Assignee. - Try to use `Start a Review` instead of single comments, to reduce email spam. - "Resolve" your own comments if they have been addressed. - If you want your review to be blocking, and are not currently an Assignee, add yourself as an Assignee. When squashing-and-merging: - Ensure that **all** of the Assignees have approved. - Do a final review of the one-line PR summary, ensuring that it meets the guidelines (e.g., "blob: add more blobbing") and accurately describes the change. - Mark breaking changes with `BREAKING_CHANGE` in the commit message (e.g., "blob: BREAKING_CHANGE remove old blob"). - If the PR includes a breaking change, it will be declared via a commit with `BREAKING_CHANGE_OK` in it (see Contributor section above). - You can omit the marker if the change is technically breaking, but not expected to affect users (e.g., it's a breaking change to an object that wasn't in the last tagged release, or it's a change to a portable API function that's only expected to be used by driver implementations). - Delete the automatically added commit lines; these are generally not interesting and make commit history harder to read. go-cloud-0.20.0/CONTRIBUTORS000066400000000000000000000041621367004507500151740ustar00rootroot00000000000000# This is the official list of people who can contribute # (and typically have contributed) code to the Go CDK repository. # The AUTHORS file lists the copyright holders; this file # lists people. For example, Google employees are listed here # but not in AUTHORS, because Google holds the copyright. # # Names should be added to this file only after verifying that # the individual or the individual's organization has agreed to # the appropriate Contributor License Agreement, found here: # # http://code.google.com/legal/individual-cla-v1.0.html # http://code.google.com/legal/corporate-cla-v1.0.html # # The agreement for individuals can be filled out on the web. # # When adding J Random Contributor's name to this file, # either J's name or J's organization's name should be # added to the AUTHORS file, depending on whether the # individual or corporate CLA was used. # Names should be added to this file like so: # Individual's name # Individual's name # # An entry with multiple email addresses specifies that the # first address should be used in the submit logs and # that the other addresses should be recognized as the # same person when interacting with Git. # Please keep the list sorted. Ben Hinchley Boris Popovschi Chris Lewis Eno Compton Gerasimos (Makis) Maropoulos Issac Trotts Oleg Kovalov oliverpool Robert van Gent Ross Light Sendil Kumar N Steve Jiang Tuo Shan Tyler Bui-Palsulich <26876514+tbpg@users.noreply.github.com> Vishal Saroopchand Vivek Sekhar Zachary Romero go-cloud-0.20.0/LICENSE000066400000000000000000000261361367004507500143260ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. go-cloud-0.20.0/README.md000066400000000000000000000121501367004507500145670ustar00rootroot00000000000000# The Go Cloud Development Kit (Go CDK) _Write once, run on any cloud ☁️_ [![Build Status](https://travis-ci.com/google/go-cloud.svg?branch=master)][travis] [![godoc](https://godoc.org/github.com/google/go-cloud?status.svg)][godoc] [![Coverage](https://codecov.io/gh/google/go-cloud/branch/master/graph/badge.svg)](https://codecov.io/gh/google/go-cloud) [![Go Report Card](https://goreportcard.com/badge/github.com/google/go-cloud)](https://goreportcard.com/report/github.com/google/go-cloud)

The Go Cloud Development Kit (Go CDK) allows Go application developers to seamlessly deploy cloud applications on any combination of cloud providers. It does this by providing stable, idiomatic interfaces for common uses like storage and databases. Think `database/sql` for cloud products. Imagine writing this to read from blob storage (like Google Cloud Storage or S3): ```go ctx := context.Background() bucket, err := blob.OpenBucket(ctx, "s3://my-bucket") if err != nil { return err } defer bucket.Close() blobReader, err := bucket.NewReader(ctx, "my-blob", nil) if err != nil { return err } ``` and being able to run that code on any cloud you want, avoiding all the ceremony of cloud-specific authorization, tracing, SDKs and all the other code required to make an application portable across cloud platforms. The project works well with a code generator called [Wire](https://github.com/google/wire/blob/master/README.md). It creates human-readable code that only imports the cloud SDKs for services you use. This allows the Go CDK to grow to support any number of cloud services, without increasing compile times or binary sizes, and avoiding any side effects from `init()` functions. You can learn more about the project from our [announcement blog post][], or our talk at Next 2018: [![Video: Building Go Applications for the Open Cloud (Cloud Next '18)](https://img.youtube.com/vi/_2ZwhvIkgek/0.jpg)][video] [announcement blog post]: https://blog.golang.org/go-cloud [godoc]: https://godoc.org/github.com/google/go-cloud [travis]: https://travis-ci.com/google/go-cloud [video]: https://www.youtube.com/watch?v=_2ZwhvIkgek ## Installation ```shell # First "cd" into your project directory if you have one to ensure "go get" uses # Go modules (or not) appropriately. See "go help modules" for more info. go get gocloud.dev ``` The Go CDK builds at the latest stable release of Go. Previous Go versions may compile but are not supported. ## Documentation Documentation for the project lives primarily on https://gocloud.dev/, including [tutorials][]. You can also browse Go package reference on [godoc.org][godoc]. [tutorials]: https://gocloud.dev/tutorials/ ## Project status The APIs are still in alpha, but we think they are production-ready and are actively looking for feedback from early adopters. If you have comments or questions, you can post to the [go-cloud mailing list][] or email us at go-cdk-feedback@google.com. ## Current features The Go CDK provides generic APIs for: * Unstructured binary (blob) storage * Publish/Subscribe (pubsub) * Variables that change at runtime (runtimevar) * Connecting to MySQL and PostgreSQL databases (mysql, postgres) * Server startup and diagnostics: request logging, tracing, and health checking (server) ## Contributing Thank you for your interest in contributing to the Go Cloud Development Kit! :heart: Everyone is welcome to contribute, whether it's in the form of code, documentation, bug reports, feature requests, or anything else. We encourage you to experiment with the Go CDK and make contributions to help evolve it to meet your needs! The GitHub repository at [google/go-cloud][go-cloud] contains some driver implementations for each portable API. We intend to include [Google Cloud Platform][gcp], [Amazon Web Services][aws], and [Azure][azure] implementations, as well as prominent open source services and at least one implementation suitable for use in local testing. Unfortunately, we cannot support every service directly from the project; however, we encourage contributions in separate repositories. If you create a repository that implements the Go CDK interfaces for other services, let us know! We would be happy to link to it here and give you a heads-up before making any breaking changes. See [the contributing guide](./CONTRIBUTING.md) for more details. [go-cloud]: https://github.com/google/go-cloud [gcp]: http://cloud.google.com [aws]: http://aws.amazon.com [azure]: https://azure.microsoft.com/ ## Community You can contact us on the [go-cloud mailing list][]. This project is covered by the Go [Code of Conduct][]. [Code of Conduct]: ./CODE_OF_CONDUCT.md [go-cloud mailing list]: https://groups.google.com/forum/#!forum/go-cloud ## Legal disclaimer The Go CDK is open-source and released under an [Apache 2.0 License](https://github.com/google/go-cloud/blob/master/LICENSE). Copyright © 2018–2019 The Go Cloud Development Kit Authors. If you are looking for the website of GoCloud Systems, which is unrelated to the Go CDK, visit https://gocloud.systems. go-cloud-0.20.0/allmodules000066400000000000000000000016521367004507500154010ustar00rootroot00000000000000# This file lists all the modules in our repository; it's used by scripts that # have to perform operations for each module. # # Any line that doesn't begin with a '#' character and isn't empty is treated # as a path relative to the top of the repository that has a module in it. # The 'released' field specifies whether this is a module we release and tag (a # module importable by users). # # Note: another file that lists all the modules in our repo is # the VSCode workspace gocloud.code-workspace - for now it has to be updated # manually whenever this file changes. # module-directory released . yes docstore/mongodocstore yes internal/contributebot no internal/website no pubsub/kafkapubsub yes pubsub/natspubsub yes pubsub/rabbitpubsub yes runtimevar/etcdvar yes samples no secrets/hashivault yes go-cloud-0.20.0/aws/000077500000000000000000000000001367004507500141035ustar00rootroot00000000000000go-cloud-0.20.0/aws/aws.go000066400000000000000000000074451367004507500152360ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package aws provides fundamental Wire providers for Amazon Web Services (AWS). package aws // import "gocloud.dev/aws" import ( "fmt" "net/url" "strconv" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "github.com/google/wire" ) // DefaultSession is a Wire provider set that provides a *session.Session using // the default options. var DefaultSession = wire.NewSet( SessionConfig, ConfigCredentials, NewDefaultSession, wire.Bind(new(client.ConfigProvider), new(*session.Session)), ) // NewDefaultSession returns a *session.Session using the default options. func NewDefaultSession() (*session.Session, error) { return session.NewSessionWithOptions(session.Options{SharedConfigState: session.SharedConfigEnable}) } // SessionConfig returns sess.Config. func SessionConfig(sess *session.Session) *aws.Config { return sess.Config } // ConfigCredentials returns cfg.Credentials. func ConfigCredentials(cfg *aws.Config) *credentials.Credentials { return cfg.Credentials } // ConfigOverrider implements client.ConfigProvider by overlaying a list of // configurations over a base configuration provider. type ConfigOverrider struct { Base client.ConfigProvider Configs []*aws.Config } // ClientConfig calls the base provider's ClientConfig method with co.Configs // followed by the arguments given to ClientConfig. func (co ConfigOverrider) ClientConfig(serviceName string, cfgs ...*aws.Config) client.Config { cfgs = append(co.Configs[:len(co.Configs):len(co.Configs)], cfgs...) return co.Base.ClientConfig(serviceName, cfgs...) } // ConfigFromURLParams returns an aws.Config initialized based on the URL // parameters in q. It is intended to be used by URLOpeners for AWS services. // https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config // // It returns an error if q contains any unknown query parameters; callers // should remove any query parameters they know about from q before calling // ConfigFromURLParams. // // The following query options are supported: // - region: The AWS region for requests; sets aws.Config.Region. // - endpoint: The endpoint URL (hostname only or fully qualified URI); sets aws.Config.Endpoint. // - disableSSL: A value of "true" disables SSL when sending requests; sets aws.Config.DisableSSL. // - s3ForcePathStyle: A value of "true" forces the request to use path-style addressing; sets aws.Config.S3ForcePathStyle. func ConfigFromURLParams(q url.Values) (*aws.Config, error) { var cfg aws.Config for param, values := range q { value := values[0] switch param { case "region": cfg.Region = aws.String(value) case "endpoint": cfg.Endpoint = aws.String(value) case "disableSSL": b, err := strconv.ParseBool(value) if err != nil { return nil, fmt.Errorf("invalid value for query parameter %q: %v", param, err) } cfg.DisableSSL = aws.Bool(b) case "s3ForcePathStyle": b, err := strconv.ParseBool(value) if err != nil { return nil, fmt.Errorf("invalid value for query parameter %q: %v", param, err) } cfg.S3ForcePathStyle = aws.Bool(b) default: return nil, fmt.Errorf("unknown query parameter %q", param) } } return &cfg, nil } go-cloud-0.20.0/aws/aws_test.go000066400000000000000000000050601367004507500162640ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package aws_test import ( "net/url" "testing" "github.com/aws/aws-sdk-go/aws" "github.com/google/go-cmp/cmp" gcaws "gocloud.dev/aws" ) func TestURLOpenerForParams(t *testing.T) { tests := []struct { name string query url.Values wantCfg *aws.Config wantErr bool }{ { name: "No overrides", query: url.Values{}, wantCfg: &aws.Config{}, }, { name: "Invalid query parameter", query: url.Values{"foo": {"bar"}}, wantErr: true, }, { name: "Region", query: url.Values{"region": {"my_region"}}, wantCfg: &aws.Config{Region: aws.String("my_region")}, }, { name: "Endpoint", query: url.Values{"endpoint": {"foo"}}, wantCfg: &aws.Config{Endpoint: aws.String("foo")}, }, { name: "DisableSSL true", query: url.Values{"disableSSL": {"true"}}, wantCfg: &aws.Config{DisableSSL: aws.Bool(true)}, }, { name: "DisableSSL false", query: url.Values{"disableSSL": {"false"}}, wantCfg: &aws.Config{DisableSSL: aws.Bool(false)}, }, { name: "DisableSSL false", query: url.Values{"disableSSL": {"invalid"}}, wantErr: true, }, { name: "S3ForcePathStyle true", query: url.Values{"s3ForcePathStyle": {"true"}}, wantCfg: &aws.Config{S3ForcePathStyle: aws.Bool(true)}, }, { name: "S3ForcePathStyle false", query: url.Values{"s3ForcePathStyle": {"false"}}, wantCfg: &aws.Config{S3ForcePathStyle: aws.Bool(false)}, }, { name: "S3ForcePathStyle false", query: url.Values{"s3ForcePathStyle": {"invalid"}}, wantErr: true, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { got, err := gcaws.ConfigFromURLParams(test.query) if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } if err != nil { return } if diff := cmp.Diff(got, test.wantCfg); diff != "" { t.Errorf("opener.forParams(...) diff (-want +got):\n%s", diff) } }) } } go-cloud-0.20.0/aws/awscloud/000077500000000000000000000000001367004507500157245ustar00rootroot00000000000000go-cloud-0.20.0/aws/awscloud/awscloud.go000066400000000000000000000032131367004507500200730ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package awscloud contains Wire providers for AWS services. package awscloud // import "gocloud.dev/aws/awscloud" import ( "net/http" "github.com/google/wire" "gocloud.dev/aws" "gocloud.dev/aws/rds" "gocloud.dev/blob/s3blob" "gocloud.dev/docstore/awsdynamodb" "gocloud.dev/pubsub/awssnssqs" "gocloud.dev/runtimevar/awsparamstore" "gocloud.dev/secrets/awskms" "gocloud.dev/server/xrayserver" ) // AWS is a Wire provider set that includes all Amazon Web Services interface // implementations in the Go CDK and authenticates using the default session. var AWS = wire.NewSet( Services, aws.DefaultSession, wire.Value(http.DefaultClient), ) // Services is a Wire provider set that includes the default wiring for all // Amazon Web Services interface implementations in the Go CDK but unlike the // AWS set, does not include credentials. Individual services may require // additional configuration. var Services = wire.NewSet( s3blob.Set, awssnssqs.Set, awsparamstore.Set, awskms.Set, rds.CertFetcherSet, awsdynamodb.Set, xrayserver.Set, ) go-cloud-0.20.0/aws/awscloud/example_test.go000066400000000000000000000047221367004507500207520ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awscloud_test import ( "context" "fmt" "log" "net/http" "github.com/google/wire" "go.opencensus.io/trace" "gocloud.dev/aws/awscloud" "gocloud.dev/server" "gocloud.dev/server/health" ) // This is an example of how to bootstrap an HTTP server running on // Amazon Web Services (AWS). The code in this function would be // placed in main(). func Example() { // Connect and authenticate to AWS. srv, cleanup, err := setup(context.Background()) if err != nil { log.Fatal(err) } defer cleanup() // Set up the HTTP routes. http.HandleFunc("/", greet) // Run the server. This behaves much like http.ListenAndServe, // including that passing a nil handler will use http.DefaultServeMux. log.Fatal(srv.ListenAndServe(":8080")) } // setup is a Wire injector function that creates an HTTP server // configured to send diagnostics to AWS X-Ray. The second return // value is a clean-up function that can be called to shut down any // resources created by setup. // // The body of this function will be filled in by running Wire. While // the name of the function does not matter, the signature signals to // Wire what provider functions to call. See // https://github.com/google/wire/blob/master/docs/guide.md#injectors // for more details. func setup(ctx context.Context) (*server.Server, func(), error) { wire.Build( // The AWS set includes all the default wiring for AWS, including // for *server.Server. awscloud.AWS, // Providing nil instructs the server to use the default sampling policy. wire.Value(trace.Sampler(nil)), // Health checks can be added to delay your server reporting healthy // to the load balancer before critical dependencies are available. wire.Value([]health.Checker(nil)), ) return nil, nil, nil } // greet is an ordinary http.HandleFunc. func greet(w http.ResponseWriter, req *http.Request) { fmt.Fprintln(w, "Hello, World!") } go-cloud-0.20.0/aws/rds/000077500000000000000000000000001367004507500146735ustar00rootroot00000000000000go-cloud-0.20.0/aws/rds/rds.go000066400000000000000000000062471367004507500160230ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package rds contains Wire providers that are common across RDS. package rds // import "gocloud.dev/aws/rds" import ( "context" "crypto/x509" "encoding/pem" "fmt" "io" "io/ioutil" "net/http" "github.com/google/wire" "golang.org/x/net/context/ctxhttp" ) // CertFetcherSet is a Wire provider set that provides the RDS certificate pool // by pulling from Amazon's servers. var CertFetcherSet = wire.NewSet( wire.Struct(new(CertFetcher), "Client"), wire.Bind(new(CertPoolProvider), new(*CertFetcher)), ) // A CertPoolProvider obtains a certificate pool that contains the RDS CA certificate. type CertPoolProvider interface { RDSCertPool(context.Context) (*x509.CertPool, error) } // caBundleURL is the URL to the public RDS Certificate Authority keys. const caBundleURL = "https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem" // CertFetcher pulls the RDS CA certificates from Amazon's servers. The zero // value will fetch certificates using the default HTTP client. type CertFetcher struct { // Client is the HTTP client used to make requests. If nil, then // http.DefaultClient is used. Client *http.Client } // RDSCertPool fetches the RDS CA certificates and places them into a pool. // It is safe to call from multiple goroutines. func (cf *CertFetcher) RDSCertPool(ctx context.Context) (*x509.CertPool, error) { certs, err := cf.Fetch(ctx) if err != nil { return nil, err } certPool := x509.NewCertPool() for _, c := range certs { certPool.AddCert(c) } return certPool, nil } // Fetch fetches the RDS CA certificates. It is safe to call from multiple goroutines. func (cf *CertFetcher) Fetch(ctx context.Context) ([]*x509.Certificate, error) { client := cf.Client if client == nil { client = http.DefaultClient } resp, err := ctxhttp.Get(ctx, client, caBundleURL) if err != nil { return nil, fmt.Errorf("fetch RDS certificates: %v", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("fetch RDS certificates: HTTP %s", resp.Status) } pemData, err := ioutil.ReadAll(&io.LimitedReader{R: resp.Body, N: 1 << 20}) // limit to 1MiB if err != nil { return nil, fmt.Errorf("fetch RDS certificates: %v", err) } var certs []*x509.Certificate for len(pemData) > 0 { var block *pem.Block block, pemData = pem.Decode(pemData) if block == nil { break } if block.Type != "CERTIFICATE" || len(block.Headers) != 0 { continue } c, err := x509.ParseCertificate(block.Bytes) if err != nil { return nil, fmt.Errorf("fetch RDS certificates: %v", err) } certs = append(certs, c) } return certs, nil } go-cloud-0.20.0/azure/000077500000000000000000000000001367004507500144375ustar00rootroot00000000000000go-cloud-0.20.0/azure/azurecloud/000077500000000000000000000000001367004507500166145ustar00rootroot00000000000000go-cloud-0.20.0/azure/azurecloud/azurecloud.go000066400000000000000000000021461367004507500213230ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package azurecloud contains Wire providers for Azure services. package azurecloud // import "gocloud.dev/azure/azurecloud" import ( "github.com/google/wire" "gocloud.dev/blob/azureblob" "gocloud.dev/secrets/azurekeyvault" ) // Azure is a Wire provider set that includes the default wiring for all // Microsoft Azure services in this repository, but does not include // credentials. Individual services may require additional configuration. var Azure = wire.NewSet( azurekeyvault.Set, azureblob.Set, ) go-cloud-0.20.0/azure/azuredb/000077500000000000000000000000001367004507500160735ustar00rootroot00000000000000go-cloud-0.20.0/azure/azuredb/azuredb.go000066400000000000000000000055251367004507500200650ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package azuredb contains Wire providers that are common across Azure Database. package azuredb import ( "context" "crypto/x509" "encoding/pem" "fmt" "io" "io/ioutil" "net/http" "golang.org/x/net/context/ctxhttp" ) const caBundleURL = "https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem" // A CertPoolProvider returns a certificate pool that contains the Azure CA certificate. type CertPoolProvider interface { AzureCertPool(context.Context) (*x509.CertPool, error) } // CertFetcher pulls the Azure CA certificates from Digicert's servers. The zero // value will fetch certificates using the default HTTP client. type CertFetcher struct { // Client is the HTTP client used to make requests. If nil, then // http.DefaultClient is used. Client *http.Client } // AzureCertPool fetches the Azure CA certificates and places them into a pool. // It is safe to call from multiple goroutines. func (cf *CertFetcher) AzureCertPool(ctx context.Context) (*x509.CertPool, error) { certs, err := cf.Fetch(ctx) if err != nil { return nil, err } certPool := x509.NewCertPool() for _, c := range certs { certPool.AddCert(c) } return certPool, nil } // Fetch fetches the Azure CA certificates. It is safe to call from multiple goroutines. func (cf *CertFetcher) Fetch(ctx context.Context) ([]*x509.Certificate, error) { client := cf.Client if client == nil { client = http.DefaultClient } resp, err := ctxhttp.Get(ctx, client, caBundleURL) if err != nil { return nil, fmt.Errorf("fetch Azure certificates: %v", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("fetch Azure certificates: HTTP %s", resp.Status) } pemData, err := ioutil.ReadAll(&io.LimitedReader{R: resp.Body, N: 1 << 20}) // limit to 1MiB if err != nil { return nil, fmt.Errorf("fetch Azure certificates: %v", err) } var certs []*x509.Certificate for len(pemData) > 0 { var block *pem.Block block, pemData = pem.Decode(pemData) if block == nil { break } if block.Type != "CERTIFICATE" || len(block.Headers) != 0 { continue } c, err := x509.ParseCertificate(block.Bytes) if err != nil { return nil, fmt.Errorf("fetch Azure certificates: %v", err) } certs = append(certs, c) } return certs, nil } go-cloud-0.20.0/blob/000077500000000000000000000000001367004507500142275ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/000077500000000000000000000000001367004507500162145ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/azureblob.go000066400000000000000000000653141367004507500205410ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package azureblob provides a blob implementation that uses Azure Storage’s // BlockBlob. Use OpenBucket to construct a *blob.Bucket. // // NOTE: SignedURLs for PUT created with this package are not fully portable; // they will not work unless the PUT request includes a "x-ms-blob-type" header // set to "BlockBlob". // See https://stackoverflow.com/questions/37824136/put-on-sas-blob-url-without-specifying-x-ms-blob-type-header. // // URLs // // For blob.OpenBucket, azureblob registers for the scheme "azblob". // The default URL opener will use credentials from the environment variables // AZURE_STORAGE_ACCOUNT, AZURE_STORAGE_KEY, and AZURE_STORAGE_SAS_TOKEN. // AZURE_STORAGE_ACCOUNT is required, along with one of the other two. // AZURE_STORAGE_DOMAIN can optionally be used to provide an Azure Environment // blob storage domain to use. If no AZURE_STORAGE_DOMAIN is provided, the // default Azure public domain "blob.core.windows.net" will be used. Check // the Azure Developer Guide for your particular cloud environment to see // the proper blob storage domain name to provide. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Escaping // // Go CDK supports all UTF-8 strings; to make this work with services lacking // full UTF-8 support, strings must be escaped (during writes) and unescaped // (during reads). The following escapes are performed for azureblob: // - Blob keys: ASCII characters 0-31, 92 ("\"), and 127 are escaped to // "__0x__". Additionally, the "/" in "../" and a trailing "/" in a // key (e.g., "foo/") are escaped in the same way. // - Metadata keys: Per https://docs.microsoft.com/en-us/azure/storage/blobs/storage-properties-metadata, // Azure only allows C# identifiers as metadata keys. Therefore, characters // other than "[a-z][A-z][0-9]_" are escaped using "__0x__". In addition, // characters "[0-9]" are escaped when they start the string. // URL encoding would not work since "%" is not valid. // - Metadata values: Escaped using URL encoding. // // As // // azureblob exposes the following types for As: // - Bucket: *azblob.ContainerURL // - Error: azblob.StorageError // - ListObject: azblob.BlobItem for objects, azblob.BlobPrefix for "directories" // - ListOptions.BeforeList: *azblob.ListBlobsSegmentOptions // - Reader: azblob.DownloadResponse // - Reader.BeforeRead: *azblob.BlockBlobURL, *azblob.BlobAccessConditions // - Attributes: azblob.BlobGetPropertiesResponse // - CopyOptions.BeforeCopy: azblob.Metadata, *azblob.ModifiedAccessConditions, *azblob.BlobAccessConditions // - WriterOptions.BeforeWrite: *azblob.UploadStreamToBlockBlobOptions package azureblob import ( "context" "errors" "fmt" "io" "net/http" "net/url" "os" "sort" "strconv" "strings" "sync" "time" "github.com/Azure/azure-pipeline-go/pipeline" "github.com/Azure/azure-storage-blob-go/azblob" "github.com/google/uuid" "github.com/google/wire" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/escape" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/useragent" ) // Options sets options for constructing a *blob.Bucket backed by Azure Block Blob. type Options struct { // Credential represents the authorizer for SignedURL. // Required to use SignedURL. Credential azblob.StorageAccountCredential // SASToken can be provided along with anonymous credentials to use // delegated privileges. // See https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1#shared-access-signature-parameters. SASToken SASToken // StorageDomain can be provided to specify an Azure Cloud Environment // domain to target for the blob storage account (i.e. public, government, china). // The default value is "blob.core.windows.net". Possible values will look similar // to this but are different for each cloud (i.e. "blob.core.govcloudapi.net" for USGovernment). // Check the Azure developer guide for the cloud environment where your bucket resides. StorageDomain StorageDomain } const ( defaultMaxDownloadRetryRequests = 3 // download retry policy (Azure default is zero) defaultPageSize = 1000 // default page size for ListPaged (Azure default is 5000) defaultUploadBuffers = 5 // configure the number of rotating buffers that are used when uploading (for degree of parallelism) defaultUploadBlockSize = 8 * 1024 * 1024 // configure the upload buffer size ) func init() { blob.DefaultURLMux().RegisterBucket(Scheme, new(lazyCredsOpener)) } // Set holds Wire providers for this package. var Set = wire.NewSet( NewPipeline, wire.Struct(new(Options), "Credential", "SASToken"), wire.Struct(new(URLOpener), "AccountName", "Pipeline", "Options"), ) // lazyCredsOpener obtains credentials from the environment on the first call // to OpenBucketURL. type lazyCredsOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyCredsOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { o.init.Do(func() { // Use default credential info from the environment. // Ignore errors, as we'll get errors from OpenBucket later. accountName, _ := DefaultAccountName() accountKey, _ := DefaultAccountKey() sasToken, _ := DefaultSASToken() storageDomain, _ := DefaultStorageDomain() o.opener, o.err = openerFromEnv(accountName, accountKey, sasToken, storageDomain) }) if o.err != nil { return nil, fmt.Errorf("open bucket %v: %v", u, o.err) } return o.opener.OpenBucketURL(ctx, u) } // Scheme is the URL scheme gcsblob registers its URLOpener under on // blob.DefaultMux. const Scheme = "azblob" // URLOpener opens Azure URLs like "azblob://mybucket". // // The URL host is used as the bucket name. // // No query parameters are supported. type URLOpener struct { // AccountName must be specified. AccountName AccountName // Pipeline must be set to a non-nil value. Pipeline pipeline.Pipeline // Options specifies the options to pass to OpenBucket. Options Options } func openerFromEnv(accountName AccountName, accountKey AccountKey, sasToken SASToken, storageDomain StorageDomain) (*URLOpener, error) { // azblob.Credential is an interface; we will use either a SharedKeyCredential // or anonymous credentials. If the former, we will also fill in // Options.Credential so that SignedURL will work. var credential azblob.Credential var storageAccountCredential azblob.StorageAccountCredential if accountKey != "" { sharedKeyCred, err := NewCredential(accountName, accountKey) if err != nil { return nil, fmt.Errorf("invalid credentials %s/%s: %v", accountName, accountKey, err) } credential = sharedKeyCred storageAccountCredential = sharedKeyCred } else { credential = azblob.NewAnonymousCredential() } return &URLOpener{ AccountName: accountName, Pipeline: NewPipeline(credential, azblob.PipelineOptions{}), Options: Options{ Credential: storageAccountCredential, SASToken: sasToken, StorageDomain: storageDomain, }, }, nil } // OpenBucketURL opens a blob.Bucket based on u. func (o *URLOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { for k := range u.Query() { return nil, fmt.Errorf("open bucket %v: invalid query parameter %q", u, k) } return OpenBucket(ctx, o.Pipeline, o.AccountName, u.Host, &o.Options) } // DefaultIdentity is a Wire provider set that provides an Azure storage // account name, key, and SharedKeyCredential from environment variables. var DefaultIdentity = wire.NewSet( DefaultAccountName, DefaultAccountKey, NewCredential, wire.Bind(new(azblob.Credential), new(*azblob.SharedKeyCredential)), wire.Value(azblob.PipelineOptions{}), ) // SASTokenIdentity is a Wire provider set that provides an Azure storage // account name, SASToken, and anonymous credential from environment variables. var SASTokenIdentity = wire.NewSet( DefaultAccountName, DefaultSASToken, azblob.NewAnonymousCredential, wire.Value(azblob.PipelineOptions{}), ) // AccountName is an Azure storage account name. type AccountName string // AccountKey is an Azure storage account key (primary or secondary). type AccountKey string // SASToken is an Azure shared access signature. // https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1 type SASToken string // StorageDomain is an Azure Cloud Environment domain name to target // (i.e. blob.core.windows.net, blob.core.govcloudapi.net, blob.core.chinacloudapi.cn). // It is read from the AZURE_STORAGE_DOMAIN environment variable. type StorageDomain string // DefaultAccountName loads the Azure storage account name from the // AZURE_STORAGE_ACCOUNT environment variable. func DefaultAccountName() (AccountName, error) { s := os.Getenv("AZURE_STORAGE_ACCOUNT") if s == "" { return "", errors.New("azureblob: environment variable AZURE_STORAGE_ACCOUNT not set") } return AccountName(s), nil } // DefaultAccountKey loads the Azure storage account key (primary or secondary) // from the AZURE_STORAGE_KEY environment variable. func DefaultAccountKey() (AccountKey, error) { s := os.Getenv("AZURE_STORAGE_KEY") if s == "" { return "", errors.New("azureblob: environment variable AZURE_STORAGE_KEY not set") } return AccountKey(s), nil } // DefaultSASToken loads a Azure SAS token from the AZURE_STORAGE_SAS_TOKEN // environment variable. func DefaultSASToken() (SASToken, error) { s := os.Getenv("AZURE_STORAGE_SAS_TOKEN") if s == "" { return "", errors.New("azureblob: environment variable AZURE_STORAGE_SAS_TOKEN not set") } return SASToken(s), nil } // DefaultStorageDomain loads the desired Azure Cloud to target from // the AZURE_STORAGE_DOMAIN environment variable. func DefaultStorageDomain() (StorageDomain, error) { s := os.Getenv("AZURE_STORAGE_DOMAIN") return StorageDomain(s), nil } // NewCredential creates a SharedKeyCredential. func NewCredential(accountName AccountName, accountKey AccountKey) (*azblob.SharedKeyCredential, error) { return azblob.NewSharedKeyCredential(string(accountName), string(accountKey)) } // NewPipeline creates a Pipeline for making HTTP requests to Azure. func NewPipeline(credential azblob.Credential, opts azblob.PipelineOptions) pipeline.Pipeline { opts.Telemetry.Value = useragent.AzureUserAgentPrefix("blob") + opts.Telemetry.Value return azblob.NewPipeline(credential, opts) } // bucket represents a Azure Storage Account Container, which handles read, // write and delete operations on objects within it. // See https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction. type bucket struct { name string pageMarkers map[string]azblob.Marker serviceURL *azblob.ServiceURL containerURL azblob.ContainerURL opts *Options } // OpenBucket returns a *blob.Bucket backed by Azure Storage Account. See the package // documentation for an example and // https://godoc.org/github.com/Azure/azure-storage-blob-go/azblob // for more details. func OpenBucket(ctx context.Context, pipeline pipeline.Pipeline, accountName AccountName, containerName string, opts *Options) (*blob.Bucket, error) { b, err := openBucket(ctx, pipeline, accountName, containerName, opts) if err != nil { return nil, err } return blob.NewBucket(b), nil } func openBucket(ctx context.Context, pipeline pipeline.Pipeline, accountName AccountName, containerName string, opts *Options) (*bucket, error) { if pipeline == nil { return nil, errors.New("azureblob.OpenBucket: pipeline is required") } if accountName == "" { return nil, errors.New("azureblob.OpenBucket: accountName is required") } if containerName == "" { return nil, errors.New("azureblob.OpenBucket: containerName is required") } if opts == nil { opts = &Options{} } if opts.StorageDomain == "" { // If opts.StorageDomain is missing, use default domain. opts.StorageDomain = "blob.core.windows.net" } blobURL, err := url.Parse(fmt.Sprintf("https://%s.%s", accountName, opts.StorageDomain)) if err != nil { return nil, err } if opts.SASToken != "" { // The Azure portal includes a leading "?" for the SASToken, which we // don't want here. blobURL.RawQuery = strings.TrimPrefix(string(opts.SASToken), "?") } serviceURL := azblob.NewServiceURL(*blobURL, pipeline) return &bucket{ name: containerName, pageMarkers: map[string]azblob.Marker{}, serviceURL: &serviceURL, containerURL: serviceURL.NewContainerURL(containerName), opts: opts, }, nil } // Close implements driver.Close. func (b *bucket) Close() error { return nil } // Copy implements driver.Copy. func (b *bucket) Copy(ctx context.Context, dstKey, srcKey string, opts *driver.CopyOptions) error { dstKey = escapeKey(dstKey, false) dstBlobURL := b.containerURL.NewBlobURL(dstKey) srcKey = escapeKey(srcKey, false) srcURL := b.containerURL.NewBlobURL(srcKey).URL() md := azblob.Metadata{} mac := azblob.ModifiedAccessConditions{} bac := azblob.BlobAccessConditions{} if opts.BeforeCopy != nil { asFunc := func(i interface{}) bool { switch v := i.(type) { case *azblob.Metadata: *v = md return true case **azblob.ModifiedAccessConditions: *v = &mac return true case **azblob.BlobAccessConditions: *v = &bac return true } return false } if err := opts.BeforeCopy(asFunc); err != nil { return err } } resp, err := dstBlobURL.StartCopyFromURL(ctx, srcURL, md, mac, bac) if err != nil { return err } copyStatus := resp.CopyStatus() nErrors := 0 for copyStatus == azblob.CopyStatusPending { // Poll until the copy is complete. time.Sleep(500 * time.Millisecond) propertiesResp, err := dstBlobURL.GetProperties(ctx, azblob.BlobAccessConditions{}) if err != nil { // A GetProperties failure may be transient, so allow a couple // of them before giving up. nErrors++ if ctx.Err() != nil || nErrors == 3 { return err } } copyStatus = propertiesResp.CopyStatus() } if copyStatus != azblob.CopyStatusSuccess { return fmt.Errorf("Copy failed with status: %s", copyStatus) } return nil } // Delete implements driver.Delete. func (b *bucket) Delete(ctx context.Context, key string) error { key = escapeKey(key, false) blockBlobURL := b.containerURL.NewBlockBlobURL(key) _, err := blockBlobURL.Delete(ctx, azblob.DeleteSnapshotsOptionInclude, azblob.BlobAccessConditions{}) return err } // reader reads an azblob. It implements io.ReadCloser. type reader struct { body io.ReadCloser attrs driver.ReaderAttributes raw *azblob.DownloadResponse } func (r *reader) Read(p []byte) (int, error) { return r.body.Read(p) } func (r *reader) Close() error { return r.body.Close() } func (r *reader) Attributes() *driver.ReaderAttributes { return &r.attrs } func (r *reader) As(i interface{}) bool { p, ok := i.(*azblob.DownloadResponse) if !ok { return false } *p = *r.raw return true } // NewRangeReader implements driver.NewRangeReader. func (b *bucket) NewRangeReader(ctx context.Context, key string, offset, length int64, opts *driver.ReaderOptions) (driver.Reader, error) { key = escapeKey(key, false) blockBlobURL := b.containerURL.NewBlockBlobURL(key) blockBlobURLp := &blockBlobURL accessConditions := &azblob.BlobAccessConditions{} end := length if end < 0 { end = azblob.CountToEnd } if opts.BeforeRead != nil { asFunc := func(i interface{}) bool { if p, ok := i.(**azblob.BlockBlobURL); ok { *p = blockBlobURLp return true } if p, ok := i.(**azblob.BlobAccessConditions); ok { *p = accessConditions return true } return false } if err := opts.BeforeRead(asFunc); err != nil { return nil, err } } blobDownloadResponse, err := blockBlobURLp.Download(ctx, offset, end, *accessConditions, false) if err != nil { return nil, err } attrs := driver.ReaderAttributes{ ContentType: blobDownloadResponse.ContentType(), Size: getSize(blobDownloadResponse.ContentLength(), blobDownloadResponse.ContentRange()), ModTime: blobDownloadResponse.LastModified(), } var body io.ReadCloser if length == 0 { body = http.NoBody } else { body = blobDownloadResponse.Body(azblob.RetryReaderOptions{MaxRetryRequests: defaultMaxDownloadRetryRequests}) } return &reader{ body: body, attrs: attrs, raw: blobDownloadResponse, }, nil } func getSize(contentLength int64, contentRange string) int64 { // Default size to ContentLength, but that's incorrect for partial-length reads, // where ContentLength refers to the size of the returned Body, not the entire // size of the blob. ContentRange has the full size. size := contentLength if contentRange != "" { // Sample: bytes 10-14/27 (where 27 is the full size). parts := strings.Split(contentRange, "/") if len(parts) == 2 { if i, err := strconv.ParseInt(parts[1], 10, 64); err == nil { size = i } } } return size } // As implements driver.As. func (b *bucket) As(i interface{}) bool { p, ok := i.(**azblob.ContainerURL) if !ok { return false } *p = &b.containerURL return true } // As implements driver.ErrorAs. func (b *bucket) ErrorAs(err error, i interface{}) bool { switch v := err.(type) { case azblob.StorageError: if p, ok := i.(*azblob.StorageError); ok { *p = v return true } } return false } func (b *bucket) ErrorCode(err error) gcerrors.ErrorCode { if code := gcerrors.Code(err); code != gcerrors.Unknown { return code } serr, ok := err.(azblob.StorageError) switch { case !ok: return gcerrors.Unknown case serr.ServiceCode() == azblob.ServiceCodeBlobNotFound || serr.Response().StatusCode == 404: // Check and fail both the SDK ServiceCode and the Http Response Code for NotFound return gcerrors.NotFound default: return gcerrors.Unknown } } // Attributes implements driver.Attributes. func (b *bucket) Attributes(ctx context.Context, key string) (*driver.Attributes, error) { key = escapeKey(key, false) blockBlobURL := b.containerURL.NewBlockBlobURL(key) blobPropertiesResponse, err := blockBlobURL.GetProperties(ctx, azblob.BlobAccessConditions{}) if err != nil { return nil, err } azureMD := blobPropertiesResponse.NewMetadata() md := make(map[string]string, len(azureMD)) for k, v := range azureMD { // See the package comments for more details on escaping of metadata // keys & values. md[escape.HexUnescape(k)] = escape.URLUnescape(v) } return &driver.Attributes{ CacheControl: blobPropertiesResponse.CacheControl(), ContentDisposition: blobPropertiesResponse.ContentDisposition(), ContentEncoding: blobPropertiesResponse.ContentEncoding(), ContentLanguage: blobPropertiesResponse.ContentLanguage(), ContentType: blobPropertiesResponse.ContentType(), Size: blobPropertiesResponse.ContentLength(), MD5: blobPropertiesResponse.ContentMD5(), ModTime: blobPropertiesResponse.LastModified(), Metadata: md, AsFunc: func(i interface{}) bool { p, ok := i.(*azblob.BlobGetPropertiesResponse) if !ok { return false } *p = *blobPropertiesResponse return true }, }, nil } // ListPaged implements driver.ListPaged. func (b *bucket) ListPaged(ctx context.Context, opts *driver.ListOptions) (*driver.ListPage, error) { pageSize := opts.PageSize if pageSize == 0 { pageSize = defaultPageSize } marker := azblob.Marker{} if len(opts.PageToken) > 0 { if m, ok := b.pageMarkers[string(opts.PageToken)]; ok { marker = m } } azOpts := azblob.ListBlobsSegmentOptions{ MaxResults: int32(pageSize), Prefix: escapeKey(opts.Prefix, true), } if opts.BeforeList != nil { asFunc := func(i interface{}) bool { p, ok := i.(**azblob.ListBlobsSegmentOptions) if !ok { return false } *p = &azOpts return true } if err := opts.BeforeList(asFunc); err != nil { return nil, err } } listBlob, err := b.containerURL.ListBlobsHierarchySegment(ctx, marker, escapeKey(opts.Delimiter, true), azOpts) if err != nil { return nil, err } page := &driver.ListPage{} page.Objects = []*driver.ListObject{} for _, blobPrefix := range listBlob.Segment.BlobPrefixes { page.Objects = append(page.Objects, &driver.ListObject{ Key: unescapeKey(blobPrefix.Name), Size: 0, IsDir: true, AsFunc: func(i interface{}) bool { p, ok := i.(*azblob.BlobPrefix) if !ok { return false } *p = blobPrefix return true }}) } for _, blobInfo := range listBlob.Segment.BlobItems { page.Objects = append(page.Objects, &driver.ListObject{ Key: unescapeKey(blobInfo.Name), ModTime: blobInfo.Properties.LastModified, Size: *blobInfo.Properties.ContentLength, MD5: blobInfo.Properties.ContentMD5, IsDir: false, AsFunc: func(i interface{}) bool { p, ok := i.(*azblob.BlobItem) if !ok { return false } *p = blobInfo return true }, }) } if listBlob.NextMarker.NotDone() { token := uuid.New().String() b.pageMarkers[token] = listBlob.NextMarker page.NextPageToken = []byte(token) } if len(listBlob.Segment.BlobPrefixes) > 0 && len(listBlob.Segment.BlobItems) > 0 { sort.Slice(page.Objects, func(i, j int) bool { return page.Objects[i].Key < page.Objects[j].Key }) } return page, nil } // SignedURL implements driver.SignedURL. func (b *bucket) SignedURL(ctx context.Context, key string, opts *driver.SignedURLOptions) (string, error) { if b.opts.Credential == nil { return "", errors.New("azureblob: to use SignedURL, you must call OpenBucket with a non-nil Options.Credential") } if opts.ContentType != "" || opts.EnforceAbsentContentType { return "", gcerr.New(gcerr.Unimplemented, nil, 1, "azureblob: does not enforce Content-Type on PUT") } key = escapeKey(key, false) blockBlobURL := b.containerURL.NewBlockBlobURL(key) srcBlobParts := azblob.NewBlobURLParts(blockBlobURL.URL()) perms := azblob.BlobSASPermissions{} switch opts.Method { case http.MethodGet: perms.Read = true case http.MethodPut: perms.Create = true perms.Write = true case http.MethodDelete: perms.Delete = true default: return "", fmt.Errorf("unsupported Method %s", opts.Method) } var err error srcBlobParts.SAS, err = azblob.BlobSASSignatureValues{ Protocol: azblob.SASProtocolHTTPS, ExpiryTime: time.Now().UTC().Add(opts.Expiry), ContainerName: b.name, BlobName: srcBlobParts.BlobName, Permissions: perms.String(), }.NewSASQueryParameters(b.opts.Credential) if err != nil { return "", err } srcBlobURLWithSAS := srcBlobParts.URL() return srcBlobURLWithSAS.String(), nil } type writer struct { ctx context.Context blockBlobURL *azblob.BlockBlobURL uploadOpts *azblob.UploadStreamToBlockBlobOptions w *io.PipeWriter donec chan struct{} err error } // escapeKey does all required escaping for UTF-8 strings to work with Azure. // isPrefix indicates whether the key is a full key, or a prefix/delimiter. func escapeKey(key string, isPrefix bool) string { return escape.HexEscape(key, func(r []rune, i int) bool { c := r[i] switch { // Azure does not work well with backslashes in blob names. case c == '\\': return true // Azure doesn't handle these characters (determined via experimentation). case c < 32 || c == 127: return true // Escape trailing "/" for full keys, otherwise Azure can't address them // consistently. case !isPrefix && i == len(key)-1 && c == '/': return true // For "../", escape the trailing slash. case i > 1 && r[i] == '/' && r[i-1] == '.' && r[i-2] == '.': return true } return false }) } // unescapeKey reverses escapeKey. func unescapeKey(key string) string { return escape.HexUnescape(key) } // NewTypedWriter implements driver.NewTypedWriter. func (b *bucket) NewTypedWriter(ctx context.Context, key string, contentType string, opts *driver.WriterOptions) (driver.Writer, error) { key = escapeKey(key, false) blockBlobURL := b.containerURL.NewBlockBlobURL(key) if opts.BufferSize == 0 { opts.BufferSize = defaultUploadBlockSize } md := make(map[string]string, len(opts.Metadata)) for k, v := range opts.Metadata { // See the package comments for more details on escaping of metadata // keys & values. e := escape.HexEscape(k, func(runes []rune, i int) bool { c := runes[i] switch { case i == 0 && c >= '0' && c <= '9': return true case escape.IsASCIIAlphanumeric(c): return false case c == '_': return false } return true }) if _, ok := md[e]; ok { return nil, fmt.Errorf("duplicate keys after escaping: %q => %q", k, e) } md[e] = escape.URLEscape(v) } uploadOpts := &azblob.UploadStreamToBlockBlobOptions{ BufferSize: opts.BufferSize, MaxBuffers: defaultUploadBuffers, Metadata: md, BlobHTTPHeaders: azblob.BlobHTTPHeaders{ CacheControl: opts.CacheControl, ContentDisposition: opts.ContentDisposition, ContentEncoding: opts.ContentEncoding, ContentLanguage: opts.ContentLanguage, ContentMD5: opts.ContentMD5, ContentType: contentType, }, } if opts.BeforeWrite != nil { asFunc := func(i interface{}) bool { p, ok := i.(**azblob.UploadStreamToBlockBlobOptions) if !ok { return false } *p = uploadOpts return true } if err := opts.BeforeWrite(asFunc); err != nil { return nil, err } } return &writer{ ctx: ctx, blockBlobURL: &blockBlobURL, uploadOpts: uploadOpts, donec: make(chan struct{}), }, nil } // Write appends p to w. User must call Close to close the w after done writing. func (w *writer) Write(p []byte) (int, error) { if len(p) == 0 { return 0, nil } if w.w == nil { pr, pw := io.Pipe() w.w = pw if err := w.open(pr); err != nil { return 0, err } } return w.w.Write(p) } func (w *writer) open(pr *io.PipeReader) error { go func() { defer close(w.donec) var body io.Reader if pr == nil { body = http.NoBody } else { body = pr } _, w.err = azblob.UploadStreamToBlockBlob(w.ctx, body, *w.blockBlobURL, *w.uploadOpts) if w.err != nil { if pr != nil { pr.CloseWithError(w.err) } return } }() return nil } // Close completes the writer and closes it. Any error occurring during write will // be returned. If a writer is closed before any Write is called, Close will // create an empty file at the given key. func (w *writer) Close() error { if w.w == nil { w.open(nil) } else if err := w.w.Close(); err != nil { return err } <-w.donec return w.err } go-cloud-0.20.0/blob/azureblob/azureblob_test.go000066400000000000000000000267571367004507500216100ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package azureblob import ( "context" "encoding/base64" "errors" "fmt" "net/http" "os" "strings" "testing" "github.com/Azure/azure-pipeline-go/pipeline" "github.com/Azure/azure-storage-blob-go/azblob" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/blob/drivertest" "gocloud.dev/internal/testing/setup" ) // Prerequisites for -record mode // 1. Sign-in to your Azure Subscription at http://portal.azure.com. // // 2. Create a Storage Account. // // 3. Locate the Access Key (Primary or Secondary) under your Storage Account > Settings > Access Keys. // // 4. Set the environment variables AZURE_STORAGE_ACCOUNT, AZURE_STORAGE_KEY to // the storage account name and your access key. // // 5. Create a container in your Storage Account > Blob. Update the bucketName // constant to your container name. // // Here is a step-by-step walkthrough using the Azure Portal // https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal // // 5. Run the tests with -record. const ( bucketName = "go-cloud-bucket" accountName = AccountName("gocloudblobtests") ) type harness struct { pipeline pipeline.Pipeline credential *azblob.SharedKeyCredential closer func() httpClient *http.Client } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { var key AccountKey if *setup.Record { name, err := DefaultAccountName() if err != nil { t.Fatal(err) } if name != accountName { t.Fatalf("Please update the accountName constant to match your settings file so future records work (%q vs %q)", name, accountName) } key, err = DefaultAccountKey() if err != nil { t.Fatal(err) } } else { // In replay mode, we use fake credentials. key = AccountKey(base64.StdEncoding.EncodeToString([]byte("FAKECREDS"))) } credential, err := NewCredential(accountName, key) if err != nil { return nil, err } p, done, httpClient := setup.NewAzureTestPipeline(ctx, t, "blob", credential, string(accountName)) // Hack to work around the fact that SignedURLs for PUTs are not fully // portable; they require a "x-ms-blob-type" header. Intercept all // requests, and insert that header where needed. httpClient.Transport = &requestInterceptor{httpClient.Transport} return &harness{pipeline: p, credential: credential, closer: done, httpClient: httpClient}, nil } // requestInterceptor implements a hack for the lack of portability for // SignedURLs for PUT. It adds the required "x-ms-blob-type" header where // Azure requires it. type requestInterceptor struct { base http.RoundTripper } func (ri *requestInterceptor) RoundTrip(req *http.Request) (*http.Response, error) { if req.Method == http.MethodPut && strings.Contains(req.URL.Path, "blob-for-signing") { reqClone := *req reqClone.Header.Add("x-ms-blob-type", "BlockBlob") req = &reqClone } return ri.base.RoundTrip(req) } func (h *harness) HTTPClient() *http.Client { return h.httpClient } func (h *harness) MakeDriver(ctx context.Context) (driver.Bucket, error) { return openBucket(ctx, h.pipeline, accountName, bucketName, &Options{Credential: h.credential}) } func (h *harness) Close() { h.closer() } func TestConformance(t *testing.T) { // See setup instructions above for more details. drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyContentLanguage{}}) } func BenchmarkAzureblob(b *testing.B) { name, err := DefaultAccountName() if err != nil { b.Fatal(err) } key, err := DefaultAccountKey() if err != nil { b.Fatal(err) } credential, err := NewCredential(name, key) if err != nil { b.Fatal(err) } p := NewPipeline(credential, azblob.PipelineOptions{}) bkt, err := OpenBucket(context.Background(), p, name, bucketName, nil) if err != nil { b.Fatal(err) } drivertest.RunBenchmarks(b, bkt) } const language = "nl" // verifyContentLanguage uses As to access the underlying Azure types and // read/write the ContentLanguage field. type verifyContentLanguage struct{} func (verifyContentLanguage) Name() string { return "verify ContentLanguage can be written and read through As" } func (verifyContentLanguage) BucketCheck(b *blob.Bucket) error { var u *azblob.ContainerURL if !b.As(&u) { return errors.New("Bucket.As failed") } return nil } func (verifyContentLanguage) ErrorCheck(b *blob.Bucket, err error) error { var to azblob.StorageError if !b.ErrorAs(err, &to) { return errors.New("Bucket.ErrorAs failed") } return nil } func (verifyContentLanguage) BeforeRead(as func(interface{}) bool) error { var u *azblob.BlockBlobURL if !as(&u) { return fmt.Errorf("BeforeRead As failed to get %T", u) } var ac *azblob.BlobAccessConditions if !as(&ac) { return fmt.Errorf("BeforeRead As failed to get %T", ac) } return nil } func (verifyContentLanguage) BeforeWrite(as func(interface{}) bool) error { var azOpts *azblob.UploadStreamToBlockBlobOptions if !as(&azOpts) { return errors.New("Writer.As failed") } azOpts.BlobHTTPHeaders.ContentLanguage = language return nil } func (verifyContentLanguage) BeforeCopy(as func(interface{}) bool) error { var md azblob.Metadata if !as(&md) { return errors.New("BeforeCopy.As failed for Metadata") } var mac *azblob.ModifiedAccessConditions if !as(&mac) { return errors.New("BeforeCopy.As failed for ModifiedAccessConditions") } var bac *azblob.BlobAccessConditions if !as(&bac) { return errors.New("BeforeCopy.As failed for BlobAccessConditions") } return nil } func (verifyContentLanguage) BeforeList(as func(interface{}) bool) error { var azOpts *azblob.ListBlobsSegmentOptions if !as(&azOpts) { return errors.New("BeforeList.As failed") } return nil } func (verifyContentLanguage) AttributesCheck(attrs *blob.Attributes) error { var resp azblob.BlobGetPropertiesResponse if !attrs.As(&resp) { return errors.New("Attributes.As returned false") } if got := resp.ContentLanguage(); got != language { return fmt.Errorf("got %q want %q", got, language) } return nil } func (verifyContentLanguage) ReaderCheck(r *blob.Reader) error { var resp azblob.DownloadResponse if !r.As(&resp) { return errors.New("Reader.As returned false") } if got := resp.ContentLanguage(); got != language { return fmt.Errorf("got %q want %q", got, language) } return nil } func (verifyContentLanguage) ListObjectCheck(o *blob.ListObject) error { if o.IsDir { var prefix azblob.BlobPrefix if !o.As(&prefix) { return errors.New("ListObject.As for directory returned false") } return nil } var item azblob.BlobItem if !o.As(&item) { return errors.New("ListObject.As for object returned false") } if got := *item.Properties.ContentLanguage; got != language { return fmt.Errorf("got %q want %q", got, language) } return nil } func TestOpenBucket(t *testing.T) { tests := []struct { description string nilPipeline bool accountName AccountName containerName string want string wantErr bool }{ { description: "nil pipeline results in error", nilPipeline: true, accountName: "myaccount", containerName: "foo", wantErr: true, }, { description: "empty account name results in error", containerName: "foo", wantErr: true, }, { description: "empty container name results in error", accountName: "myaccount", wantErr: true, }, { description: "success", accountName: "myaccount", containerName: "foo", want: "foo", }, } ctx := context.Background() for _, test := range tests { t.Run(test.description, func(t *testing.T) { var p pipeline.Pipeline if !test.nilPipeline { p = NewPipeline(azblob.NewAnonymousCredential(), azblob.PipelineOptions{}) } // Create driver impl. drv, err := openBucket(ctx, p, test.accountName, test.containerName, nil) if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } if err == nil && drv != nil && drv.name != test.want { t.Errorf("got %q want %q", drv.name, test.want) } // Create portable type. b, err := OpenBucket(ctx, p, test.accountName, test.containerName, nil) if b != nil { defer b.Close() } if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } }) } } func TestOpenerFromEnv(t *testing.T) { tests := []struct { name string accountName AccountName accountKey AccountKey storageDomain StorageDomain sasToken SASToken wantSharedCreds bool wantSASToken SASToken wantStorageDomain StorageDomain }{ { name: "AccountKey", accountName: "myaccount", accountKey: AccountKey(base64.StdEncoding.EncodeToString([]byte("FAKECREDS"))), wantSharedCreds: true, }, { name: "SASToken", accountName: "myaccount", sasToken: "borkborkbork", storageDomain: "mycloudenv", wantSharedCreds: false, wantSASToken: "borkborkbork", wantStorageDomain: "mycloudenv", }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { o, err := openerFromEnv(test.accountName, test.accountKey, test.sasToken, test.storageDomain) if err != nil { t.Fatal(err) } if o.AccountName != test.accountName { t.Errorf("AccountName = %q; want %q", o.AccountName, test.accountName) } if o.Pipeline == nil { t.Error("Pipeline = ; want non-nil") } if o.Options.Credential == nil { if test.wantSharedCreds { t.Error("Options.Credential = ; want non-nil") } } else { if !test.wantSharedCreds { t.Errorf("Options.Credential = %#v; want ", o.Options.Credential) } if got := AccountName(o.Options.Credential.AccountName()); got != test.accountName { t.Errorf("Options.Credential.AccountName() = %q; want %q", got, test.accountName) } } if o.Options.SASToken != test.wantSASToken { t.Errorf("Options.SASToken = %q; want %q", o.Options.SASToken, test.wantSASToken) } if o.Options.StorageDomain != test.wantStorageDomain { t.Errorf("Options.StorageDomain = %q; want %q", o.Options.StorageDomain, test.wantStorageDomain) } }) } } func TestOpenBucketFromURL(t *testing.T) { prevAccount := os.Getenv("AZURE_STORAGE_ACCOUNT") prevKey := os.Getenv("AZURE_STORAGE_KEY") prevEnv := os.Getenv("AZURE_STORAGE_DOMAIN") os.Setenv("AZURE_STORAGE_ACCOUNT", "my-account") os.Setenv("AZURE_STORAGE_KEY", "bXlrZXk=") // mykey base64 encoded os.Setenv("AZURE_STORAGE_DOMAIN", "my-cloud") defer func() { os.Setenv("AZURE_STORAGE_ACCOUNT", prevAccount) os.Setenv("AZURE_STORAGE_KEY", prevKey) os.Setenv("AZURE_STORAGE_DOMAIN", prevEnv) }() tests := []struct { URL string WantErr bool }{ // OK. {"azblob://mybucket", false}, // Invalid parameter. {"azblob://mybucket?param=value", true}, } ctx := context.Background() for _, test := range tests { b, err := blob.OpenBucket(ctx, test.URL) if b != nil { defer b.Close() } if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } } } go-cloud-0.20.0/blob/azureblob/example_test.go000066400000000000000000000122311367004507500212340ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package azureblob_test import ( "context" "log" "github.com/Azure/azure-storage-blob-go/azblob" "github.com/Azure/go-autorest/autorest/azure/auth" "gocloud.dev/blob" "gocloud.dev/blob/azureblob" ) func ExampleOpenBucket() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() const ( // Fill in with your Azure Storage Account and Access Key. accountName azureblob.AccountName = "my-account" accountKey azureblob.AccountKey = "my-account-key" // Fill in with the storage container to access. containerName = "my-container" ) // Create a credentials object. credential, err := azureblob.NewCredential(accountName, accountKey) if err != nil { log.Fatal(err) } // Create a Pipeline, using whatever PipelineOptions you need. pipeline := azureblob.NewPipeline(credential, azblob.PipelineOptions{}) // Create a *blob.Bucket. // The credential Option is required if you're going to use blob.SignedURL. bucket, err := azureblob.OpenBucket(ctx, pipeline, accountName, containerName, &azureblob.Options{Credential: credential}) if err != nil { log.Fatal(err) } defer bucket.Close() } func ExampleOpenBucket_usingSASToken() { const ( // Your Azure Storage Account and SASToken. accountName = azureblob.AccountName("my-account") sasToken = azureblob.SASToken("my-SAS-token") // The storage container to access. containerName = "my-container" ) // Since we're using a SASToken, we can use anonymous credentials. credential := azblob.NewAnonymousCredential() // Create a Pipeline, using whatever PipelineOptions you need. pipeline := azureblob.NewPipeline(credential, azblob.PipelineOptions{}) // Create a *blob.Bucket. // Note that we're not supplying azureblob.Options.Credential, so SignedURL // won't work. To use SignedURL, you need a real credential (see the other // example). ctx := context.Background() b, err := azureblob.OpenBucket(ctx, pipeline, accountName, containerName, &azureblob.Options{SASToken: sasToken}) if err != nil { log.Fatal(err) } defer b.Close() // Now we can use b to read or write files to the container. data, err := b.ReadAll(ctx, "my-key") if err != nil { log.Fatal(err) } _ = data } func Example_openBucketFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/blob/azureblob" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // blob.OpenBucket creates a *blob.Bucket from a URL. // This URL will open the container "my-container" using default // credentials found in the environment variables // AZURE_STORAGE_ACCOUNT plus at least one of AZURE_STORAGE_KEY // and AZURE_STORAGE_SAS_TOKEN. bucket, err := blob.OpenBucket(ctx, "azblob://my-container") if err != nil { log.Fatal(err) } defer bucket.Close() } func ExampleOpenBucket_usingAADCredentials() { const ( // Your Azure Storage Account. accountName = azureblob.AccountName("my-account") // Your Azure AAD Service Principal with access to the storage account. // https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-app clientID = "123" clientSecret = "456" tenantID = "789" // The storage container to access. containerName = "my-container" ) // Get an Oauth2 token for the account for use with Azure Storage. ccc := auth.NewClientCredentialsConfig(clientID, clientSecret, tenantID) // Set the target resource to the Azure storage. This is available as a // constant using "azure.PublicCloud.ResourceIdentifiers.Storage". ccc.Resource = "https://storage.azure.com/" token, err := ccc.ServicePrincipalToken() if err != nil { log.Fatal(err) } // Refresh OAuth2 token. if err := token.RefreshWithContext(context.Background()); err != nil { log.Fatal(err) } // Create the credential using the OAuth2 token. credential := azblob.NewTokenCredential(token.OAuthToken(), nil) // Create a Pipeline, using whatever PipelineOptions you need. pipeline := azureblob.NewPipeline(credential, azblob.PipelineOptions{}) // Create a *blob.Bucket. // Note that we're not supplying azureblob.Options.Credential, so SignedURL // won't work. To use SignedURL, you need a real credential (see the other // example). ctx := context.Background() b, err := azureblob.OpenBucket(ctx, pipeline, accountName, containerName, new(azureblob.Options)) if err != nil { log.Fatal(err) } defer b.Close() } go-cloud-0.20.0/blob/azureblob/testdata/000077500000000000000000000000001367004507500200255ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/000077500000000000000000000000001367004507500231175ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestAs/000077500000000000000000000000001367004507500243225ustar00rootroot00000000000000verify_As_returns_false_when_passed_nil.replay000066400000000000000000000402101367004507500355630ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestAs{ "Initial": "AQAAAA7WcSPYBuE7ef5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "a4fc5a8953b7f1ff", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBEA4BE9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:52 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "304d42d4-101e-00cd-5a27-3e319c000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "3e77952e8264642b", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBEA4BE9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:52 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:52 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "304d42e6-101e-00cd-6827-3e319c000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "b27aeafd00d83365", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBEA4BE9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:52 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:52 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "304d42f3-101e-00cd-7327-3e319c000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "b32be3260c581f87", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026maxresults=1000\u0026prefix=mydir\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "304d430c-101e-00cd-0b27-3e319c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5teWRpcjwvUHJlZml4PjxNYXhSZXN1bHRzPjEwMDA8L01heFJlc3VsdHM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iUHJlZml4PjxOYW1lPm15ZGlyLzwvTmFtZT48L0Jsb2JQcmVmaXg+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "90e6278e099cd555", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=mydir%2Fas-test\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "304d431f-101e-00cd-1c27-3e319c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5teWRpci9hcy10ZXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+bXlkaXIvYXMtdGVzdDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDA5IEp1biAyMDIwIDA2OjMxOjUyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDA5IEp1biAyMDIwIDA2OjMxOjUyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhEODBDM0VDQkVBNEJFOTwvRXRhZz48Q29udGVudC1MZW5ndGg+MTE8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WHJZN3UrQWU3dENUeXlLN2oxck53dz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "2a4400e24d98c63b", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "304d4330-101e-00cd-2d27-3e319c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjMwNGQ0MzMwLTEwMWUtMDBjZC0yZDI3LTNlMzE5YzAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NTIuMjE2NzI3M1o8L01lc3NhZ2U+PC9FcnJvcj4=" } }, { "ID": "75dc73bb61dc5c52", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBF634F7\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:52 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Copy-Id": [ "899954b4-a238-4420-8a64-cbbcbc09c700" ], "X-Ms-Copy-Status": [ "success" ], "X-Ms-Request-Id": [ "304d4341-101e-00cd-3d27-3e319c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "9fb731ec58ab5c1f", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "304d435b-101e-00cd-5227-3e319c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "86165954e88cc153", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:52 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "304d4365-101e-00cd-5b27-3e319c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }verify_ContentLanguage_can_be_written_and_read_through_As.replay000066400000000000000000000404361367004507500411750ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestAs{ "Initial": "AQAAAA7WcSPXNA+W/P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "ecce5481455095f5", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "nl" ], "X-Ms-Blob-Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBC61B70\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "b363e3ee-701e-00f4-5827-3e7138000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "49cd23ad4b491e09", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBC61B70\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "b363e3f6-701e-00f4-6027-3e7138000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "c3e70e007193bbf6", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBC61B70\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "b363e3fb-701e-00f4-6527-3e7138000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "2ad97d8ccc4491eb", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026maxresults=1000\u0026prefix=mydir\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "b363e405-701e-00f4-6d27-3e7138000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5teWRpcjwvUHJlZml4PjxNYXhSZXN1bHRzPjEwMDA8L01heFJlc3VsdHM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iUHJlZml4PjxOYW1lPm15ZGlyLzwvTmFtZT48L0Jsb2JQcmVmaXg+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "ac17e3e275e78738", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=mydir%2Fas-test\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "b363e40b-701e-00f4-7327-3e7138000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5teWRpci9hcy10ZXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+bXlkaXIvYXMtdGVzdDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDA5IEp1biAyMDIwIDA2OjMxOjUxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDA5IEp1biAyMDIwIDA2OjMxOjUxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhEODBDM0VDQkM2MUI3MDwvRXRhZz48Q29udGVudC1MZW5ndGg+MTE8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2U+bmw8L0NvbnRlbnQtTGFuZ3VhZ2U+PENvbnRlbnQtTUQ1PlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "092532eb81835d5c", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "b363e411-701e-00f4-7927-3e7138000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOmIzNjNlNDExLTcwMWUtMDBmNC03OTI3LTNlNzEzODAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NTEuOTkxMjUzOVo8L01lc3NhZ2U+PC9FcnJvcj4=" } }, { "ID": "6e6225508747035a", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBDC3F93\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:52 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Copy-Id": [ "02f60855-8da4-404a-b108-32cd07417890" ], "X-Ms-Copy-Status": [ "success" ], "X-Ms-Request-Id": [ "b363e414-701e-00f4-7c27-3e7138000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "ad64a78e19c89247", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "b363e465-701e-00f4-3d27-3e7138000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "3a09c59c9a845b02", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "b363e46e-701e-00f4-4527-3e7138000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestAttributes.replay000066400000000000000000000365011367004507500273300ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPSEKKYmP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "2a7c89f90d44fb7c", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "12" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "no-cache" ], "X-Ms-Blob-Content-Disposition": [ "inline" ], "X-Ms-Blob-Content-Encoding": [ "identity" ], "X-Ms-Blob-Content-Language": [ "en" ], "X-Ms-Blob-Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "X-Ms-Blob-Content-Type": [ "text/plain" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQh" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC8703873\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "6847cf51-101e-0089-7027-3eedf0000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "efd49227f4a17616", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/not-found", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "6847cf63-101e-0089-8027-3eedf0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "bc5053ef48ef520f", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/someDir", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "6847cf6b-101e-0089-0727-3eedf0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "ebfc44bd7d6710f9", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/someDir__0x2f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "6847cf71-101e-0089-0d27-3eedf0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "c66e9c0358817319", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/someDir/blob-for-attributes", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC8703873\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "6847cf7b-101e-0089-1627-3eedf0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "ae1c4860bd30525e", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC8703873\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "6847cf84-101e-0089-1e27-3eedf0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "SGVsbG8gV29ybGQh" } }, { "ID": "128927e98669e75a", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "12" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQh" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC87FF2CC\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "6847cf97-101e-0089-2c27-3eedf0000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "5948584e4c7ae6c0", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/someDir/blob-for-attributes", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "12" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC87FF2CC\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "6847cfab-101e-0089-3e27-3eedf0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "6fcfb4fef71a868f", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "6847cfb1-101e-0089-4427-3eedf0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestCanceledWrite/000077500000000000000000000000001367004507500264705ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestCanceledWrite/BlobExists.replay000066400000000000000000000174321367004507500317730ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPTK8T+kv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "6f92262ea779b28d", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC94E8C62\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "fa876e77-601e-010a-6627-3e0b08000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "4eb5b2b4c92f34e9", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC94E8C62\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "fa876e85-601e-010a-7227-3e0b08000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "8b641fcfda88889c", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC94E8C62\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "fa876e8b-601e-010a-7627-3e0b08000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "075d5d325259f294", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "fa876e90-601e-010a-7b27-3e0b08000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestCanceledWrite/EmptyContentType.replay000066400000000000000000000074151367004507500332100ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPTJG5jIf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "17b47b89d557b766", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "7c2f337b-601e-0041-1d27-3e7cc7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjdjMmYzMzdiLTYwMWUtMDA0MS0xZDI3LTNlN2NjNzAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDcuNjQ3MTc0NFo8L01lc3NhZ2U+PC9FcnJvcj4=" } }, { "ID": "a1326304563d92d1", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "7c2f3386-601e-0041-2527-3e7cc7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjdjMmYzMzg2LTYwMWUtMDA0MS0yNTI3LTNlN2NjNzAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDcuNjY0MTg2NVo8L01lc3NhZ2U+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestCanceledWrite/NonEmptyContentType.replay000066400000000000000000000074151367004507500336630ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPTKA+CNv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "5303f2ab931eb8ec", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "14a16694-101e-00a0-4b27-3e9bb2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjE0YTE2Njk0LTEwMWUtMDBhMC00YjI3LTNlOWJiMjAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDcuNzE1Mzk1Nlo8L01lc3NhZ2U+PC9FcnJvcj4=" } }, { "ID": "56e04c23a780316a", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "14a1669d-101e-00a0-5127-3e9bb2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjE0YTE2NjlkLTEwMWUtMDBhMC01MTI3LTNlOWJiMjAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDcuNzI2NDAzNVo8L01lc3NhZ2U+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestConcurrentWriteAndRead.replay000066400000000000000000011675031367004507500315660ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPTMeWQe/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "1bebc5f6582e1573", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key2", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "ZUHn/UhoC5tg7AVev6McAg==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "ZUHn/UhoC5tg7AVev6McAg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96721FD\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "e2032cee-d01e-0071-5e27-3e26ed000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "b69c61cee75f5d7c", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "Yg8LZ6kff3QVG8W+dFtxEA==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "Yg8LZ6kff3QVG8W+dFtxEA==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96721FD\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "7cda4b94-b01e-00c0-3427-3ede90000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "239dad7f4d1b854b", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key5", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "YfRaKQkG0Wv1UeeMsD1f+Q==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "YfRaKQkG0Wv1UeeMsD1f+Q==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC967702C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "76cc0874-701e-0115-2827-3ed018000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "ad32440e8230ee0b", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key4", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "H06jyF3ZsJDOcwyB5gg+zw==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "H06jyF3ZsJDOcwyB5gg+zw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96833A0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "220b6ed5-e01e-0050-6627-3e4bdc000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "310b615f192f7c0c", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key11", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "AbDmWR96f1VIFnW4JQ5/SA==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "AbDmWR96f1VIFnW4JQ5/SA==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96833A0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "4c116afb-f01e-0029-3d27-3e2296000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "cbd04e8eef3e4655", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key19", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "2w9S4aRqKABHoeAhyiAJMA==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "2w9S4aRqKABHoeAhyiAJMA==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC967BE5A\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "a9a13209-d01e-003e-6e27-3ee2f5000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "a8b9132e3f7aff41", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key17", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "32eeXsj7ZyhCl0o20wPQ/w==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQ==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "32eeXsj7ZyhCl0o20wPQ/w==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC9772A81\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "fac5c8e5-501e-00e8-2d27-3ea92f000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "a6e9f24a4dc9dc74", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key7", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "kbuiTp5JEugjwAkgztPoXA==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "kbuiTp5JEugjwAkgztPoXA==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96A08B6\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "7d0076c7-001e-00f0-0b27-3e84ba000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "22e0657b851c8513", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key16", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "65n9CjdrJkNQEaG4fFWMgQ==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "65n9CjdrJkNQEaG4fFWMgQ==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC968A8E5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "e2032cf4-d01e-0071-6327-3e26ed000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "cbc5adbaf156a7dd", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key15", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "qHqy3TOCPLWABZ/YTEeiAg==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "qHqy3TOCPLWABZ/YTEeiAg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC9691E27\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "76cc0887-701e-0115-3927-3ed018000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "13f21bb3787a375e", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key6", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "lko2uDqoJrgEyYNnvcJ6vw==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "lko2uDqoJrgEyYNnvcJ6vw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC969453E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "a9a1320d-d01e-003e-7127-3ee2f5000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "5e3fa68acaa1fd83", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key12", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "VkGQ+3LJseHAFopbb+BYvg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "VkGQ+3LJseHAFopbb+BYvg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96A08B6\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "220b6ede-e01e-0050-6e27-3e4bdc000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "b9188b172c100027", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key3", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "7tBPOyKIo0omYOmbN3Ht7w==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "7tBPOyKIo0omYOmbN3Ht7w==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96A56E0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "e2032cfa-d01e-0071-6927-3e26ed000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "a6a89b1ec216b992", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key9", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "kfsiuKRZ73D7CzauKodAhg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "kfsiuKRZ73D7CzauKodAhg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96AA50F\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "4c116b10-f01e-0029-5027-3e2296000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "1dc50e000259ccd8", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key13", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "SsTzFZ3m7R1NrIc42UKW+Q==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "SsTzFZ3m7R1NrIc42UKW+Q==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96AF33D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "a9a1320e-d01e-003e-7227-3ee2f5000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "6ed56635c5d21840", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key1", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "qo85ln3rRBpudISWOUWpYA==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "qo85ln3rRBpudISWOUWpYA==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96AF33D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "76cc089c-701e-0115-4e27-3ed018000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "15f74ff42b78fdf6", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key18", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "wZvI1MtOgANGQD0gzZ4NUg==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "wZvI1MtOgANGQD0gzZ4NUg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96B8F9E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "515bcd12-301e-0052-0727-3e4926000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "659275af7c1501e7", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key10", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "AXKK1JVcZ791KxchIXYNNg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "AXKK1JVcZ791KxchIXYNNg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96BB6B1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "220b6ee9-e01e-0050-7827-3e4bdc000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "42581173f84141a9", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key8", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "qPZPE0uAGBNKE6LhEQTA8Q==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "qPZPE0uAGBNKE6LhEQTA8Q==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96C2BF7\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "e2032d01-d01e-0071-6e27-3e26ed000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "e614b751e77ff039", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key14", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "NlFDUFM0TpF1S+MXE1PxDg==" ], "X-Ms-Blob-Content-Type": [ "application/octet-stream" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "NlFDUFM0TpF1S+MXE1PxDg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96BDDC8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "7d0076da-001e-00f0-1727-3e84ba000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "5351ab5fd6088b81", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key0", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "Yg8LZ6kff3QVG8W+dFtxEA==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96721FD\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "4c116b7b-f01e-0029-2d27-3e2296000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" } }, { "ID": "bbfc7d2d5e89acdb", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qo85ln3rRBpudISWOUWpYA==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96AF33D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "350b14c1-901e-00dc-1b27-3e0687000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ==" } }, { "ID": "18241901c3ce9ee8", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key7", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "kbuiTp5JEugjwAkgztPoXA==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96A08B6\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "4c116bba-f01e-0029-5f27-3e2296000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw==" } }, { "ID": "d6f7932e21c9b81a", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key2", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "ZUHn/UhoC5tg7AVev6McAg==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96721FD\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "350b14ef-901e-00dc-3b27-3e0687000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg==" } }, { "ID": "f41171b05c229cb6", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key3", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "7tBPOyKIo0omYOmbN3Ht7w==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96A56E0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "4c116bca-f01e-0029-6c27-3e2296000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==" } }, { "ID": "6f00cb683c3e67c8", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key6", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "lko2uDqoJrgEyYNnvcJ6vw==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC969453E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "4c116bd4-f01e-0029-7627-3e2296000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg==" } }, { "ID": "1aeac1d056349c33", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key4", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "H06jyF3ZsJDOcwyB5gg+zw==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96833A0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "350b14f7-901e-00dc-4127-3e0687000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA==" } }, { "ID": "8b4e70975388512d", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key8", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qPZPE0uAGBNKE6LhEQTA8Q==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96C2BF7\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "d68b8ad1-a01e-00b2-4927-3eafae000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA==" } }, { "ID": "65a68f1f01391d4c", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key5", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "YfRaKQkG0Wv1UeeMsD1f+Q==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC967702C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "605f679a-301e-00b7-7d27-3e5bd1000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ==" } }, { "ID": "1aa7a74579bc76a4", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key15", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qHqy3TOCPLWABZ/YTEeiAg==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC9691E27\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "2245b00b-501e-006b-4927-3e0982000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw==" } }, { "ID": "ee60b65c1cec010f", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key13", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "SsTzFZ3m7R1NrIc42UKW+Q==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96AF33D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "abc08747-901e-00fe-2f27-3e68b1000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ==" } }, { "ID": "062cfff8dacb3681", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key9", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "kfsiuKRZ73D7CzauKodAhg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96AA50F\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "4c116bd8-f01e-0029-7a27-3e2296000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ==" } }, { "ID": "99bc35fe0aa3b3a9", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key10", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "AXKK1JVcZ791KxchIXYNNg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96BB6B1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "350b14fb-901e-00dc-4427-3e0687000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==" } }, { "ID": "b85f0fa4e78ccb02", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key12", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "VkGQ+3LJseHAFopbb+BYvg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96A08B6\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "608f2762-b01e-012a-5127-3e67c4000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA==" } }, { "ID": "4d6438d304292039", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key18", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "wZvI1MtOgANGQD0gzZ4NUg==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3EC96B8F9E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "27bbe7c3-001e-001e-1227-3e8e39000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg==" } }, { "ID": "d59954eb01aad4f9", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key16", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "65n9CjdrJkNQEaG4fFWMgQ==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3EC968A8E5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "d90ebec0-d01e-00bd-3727-3e4258000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA==" } }, { "ID": "ea57ebee6d448d97", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key14", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "NlFDUFM0TpF1S+MXE1PxDg==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96BDDC8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "23462f30-401e-0074-4927-3ed292000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg==" } }, { "ID": "650d86af806c80cf", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key11", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "AbDmWR96f1VIFnW4JQ5/SA==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC96833A0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "40bb5a66-601e-00c2-3c27-3edc6a000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw==" } }, { "ID": "51fd22d933a9b095", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key17", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "32eeXsj7ZyhCl0o20wPQ/w==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC9772A81\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "4c116bdd-f01e-0029-7d27-3e2296000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQ==" } }, { "ID": "18cc500fe939ae7e", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key19", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "4096" ], "Content-Md5": [ "2w9S4aRqKABHoeAhyiAJMA==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC967BE5A\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "350b1504-901e-00dc-4927-3e0687000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw==" } }, { "ID": "d9cc00b71bf5fcc0", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key19", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398cca-401e-007f-3827-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "24e00bed24cf20b6", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key18", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398ceb-401e-007f-5127-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "1f37d8e54be69ed8", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key17", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398cf6-401e-007f-5927-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "0c74a019c5ca5c27", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key16", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d00-401e-007f-6227-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "d9ab7cde55761914", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key15", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d0c-401e-007f-6927-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "90f5de01a85d3404", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key14", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d0f-401e-007f-6c27-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "28977f23f8a55fc9", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key13", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d15-401e-007f-7027-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "21e92be0e28c1e4a", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key12", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d18-401e-007f-7327-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "656a66a77a8dd17d", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key11", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d25-401e-007f-7b27-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "87003152b4148e4e", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key10", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d27-401e-007f-7d27-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "01e0cc304e9d9f86", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key9", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d35-401e-007f-0527-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "bbbc4806e11cb642", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key8", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d3a-401e-007f-0927-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "3ea8d63018a41d21", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key7", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d46-401e-007f-1127-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "ac9abf77a05af4ab", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key6", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d4d-401e-007f-1827-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "9e6d74ee2d7fd531", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key5", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d56-401e-007f-1f27-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "6d97b576eee75a31", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key4", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d63-401e-007f-2b27-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "e49bbcf71120a15e", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key3", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d67-401e-007f-2f27-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "def35308b76b18f0", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key2", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d6d-401e-007f-3427-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "b68abd2813888258", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d72-401e-007f-3827-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "c21d293624ab6190", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key0", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "de398d79-401e-007f-3d27-3ecae6000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestCopy/000077500000000000000000000000001367004507500246715ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestCopy/NonExistentSourceFails.replay000066400000000000000000000046671367004507500325420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVCmy9UP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "39b9c892c00598f0", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/does-not-exist" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "98540f3f-d01e-007a-1c27-3e3e99000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjk4NTQwZjNmLWQwMWUtMDA3YS0xYzI3LTNlM2U5OTAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDkuMjI5MTg3OVo8L01lc3NhZ2U+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestCopy/Works.replay000066400000000000000000000513501367004507500272200ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVDg9F9/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "e2610b7fd59e4fd8", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-src", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "no-cache" ], "X-Ms-Blob-Content-Disposition": [ "inline" ], "X-Ms-Blob-Content-Encoding": [ "identity" ], "X-Ms-Blob-Content-Language": [ "en" ], "X-Ms-Blob-Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "X-Ms-Blob-Content-Type": [ "text/plain" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQ=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA32D4E3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c908379e-b01e-0121-0227-3e7fb0000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "65ba166eb37ad7bd", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-src", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA32D4E3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Mon, 15 Jul 2019 16:10:26 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Request-Id": [ "c90837ab-b01e-0121-0c27-3e7fb0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "d7c7a876a869f9cc", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "10" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "oPqafXJA1cXuvXCJlDDFlw==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "Y2xvYmJlciBtZQ==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "oPqafXJA1cXuvXCJlDDFlw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA36A61F\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c90837b0-b01e-0121-1127-3e7fb0000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "0b8f84a3f9d8d856", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-src" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA3E96D9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Copy-Id": [ "989cc35e-22ce-421b-96b8-2ea43d1764b0" ], "X-Ms-Copy-Status": [ "success" ], "X-Ms-Request-Id": [ "c90837b9-b01e-0121-1a27-3e7fb0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "ee6b3c4abbd224b6", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA3E96D9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Copy-Completion-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Copy-Id": [ "989cc35e-22ce-421b-96b8-2ea43d1764b0" ], "X-Ms-Copy-Progress": [ "11/11" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-src" ], "X-Ms-Copy-Status": [ "success" ], "X-Ms-Creation-Time": [ "Mon, 15 Jul 2019 16:10:27 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Request-Id": [ "c90837f6-b01e-0121-5127-3e7fb0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "SGVsbG8gV29ybGQ=" } }, { "ID": "1091b5125ed2b99b", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-dest", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA3E96D9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Copy-Completion-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Copy-Id": [ "989cc35e-22ce-421b-96b8-2ea43d1764b0" ], "X-Ms-Copy-Progress": [ "11/11" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-src" ], "X-Ms-Copy-Status": [ "success" ], "X-Ms-Creation-Time": [ "Mon, 15 Jul 2019 16:10:27 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Request-Id": [ "c9083807-b01e-0121-5f27-3e7fb0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "216490fba83f428b", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-src" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA46AEA8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Copy-Id": [ "33c2d02b-87f4-433e-a4cd-c4e85e3ae7d5" ], "X-Ms-Copy-Status": [ "success" ], "X-Ms-Request-Id": [ "c9083818-b01e-0121-6e27-3e7fb0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "0c52d421f2bc2189", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA46AEA8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Copy-Completion-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Copy-Id": [ "33c2d02b-87f4-433e-a4cd-c4e85e3ae7d5" ], "X-Ms-Copy-Progress": [ "11/11" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-src" ], "X-Ms-Copy-Status": [ "success" ], "X-Ms-Creation-Time": [ "Mon, 15 Jul 2019 16:10:27 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Request-Id": [ "c9083831-b01e-0121-0627-3e7fb0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "SGVsbG8gV29ybGQ=" } }, { "ID": "3750958d640252c0", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-dest-exists", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA46AEA8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Copy-Completion-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Copy-Id": [ "33c2d02b-87f4-433e-a4cd-c4e85e3ae7d5" ], "X-Ms-Copy-Progress": [ "11/11" ], "X-Ms-Copy-Source": [ "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-copying-src" ], "X-Ms-Copy-Status": [ "success" ], "X-Ms-Creation-Time": [ "Mon, 15 Jul 2019 16:10:27 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Request-Id": [ "c908383f-b01e-0121-1227-3e7fb0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestDelete/000077500000000000000000000000001367004507500251615ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestDelete/NonExistentFails.replay000066400000000000000000000044671367004507500316470ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVGsEdRP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "6907207d19e82978", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "3d832973-d01e-0035-7527-3efa81000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjNkODMyOTczLWQwMWUtMDAzNS03NTI3LTNlZmE4MTAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDkuNDgxNDMwN1o8L01lc3NhZ2U+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestDelete/Works.replay000066400000000000000000000161011367004507500275030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVHTENvv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "67f04e1413dfd85a", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "PiWWCnnbxptnTNTsZ6csYg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "PiWWCnnbxptnTNTsZ6csYg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA5A8878\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c418272b-701e-011e-2627-3ec86c000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "85bbdd29c2c13e7c", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "c4182735-701e-011e-2e27-3ec86c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "e0d044ce48fddd86", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "c418273c-701e-011e-3427-3ec86c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOmM0MTgyNzNjLTcwMWUtMDExZS0zNDI3LTNlYzg2YzAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDkuNTYzMjgyOFo8L01lc3NhZ2U+PC9FcnJvcj4=" } }, { "ID": "c5fb4cd3eda00008", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "c4182749-701e-011e-3b27-3ec86c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOmM0MTgyNzQ5LTcwMWUtMDExZS0zYjI3LTNlYzg2YzAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDkuNTc0MjkwN1o8L01lc3NhZ2U+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/000077500000000000000000000000001367004507500246725ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/ascii-1.replay000066400000000000000000000241701367004507500273420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPXGtAY2f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "ef424930fa5159e9", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECB84C0A3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "a6fe29f7-c01e-00a9-7427-3e813c000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "856c02ea8a71f91d", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECB84C0A3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a6fe2a04-c01e-00a9-8027-3e813c000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "9eb24253e303d4ec", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECB84C0A3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a6fe2a0f-c01e-00a9-0927-3e813c000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "8586ffbcffdbb01c", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECB84C0A3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a6fe2a18-c01e-00a9-1027-3e813c000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "b40cbc6820778fff", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "a6fe2a1b-c01e-00a9-1327-3e813c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/ascii-2.replay000066400000000000000000000243101367004507500273370ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVIx6qS/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "f07186f5cc637137", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA695848\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "1f77c3d1-401e-0116-5e27-3ed31f000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "fc2ad4c1b1f3bf80", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA695848\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "1f77c3d9-401e-0116-6427-3ed31f000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "db27bd1644873765", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA695848\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "1f77c3df-401e-0116-6827-3ed31f000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "a10101322f5d6bc5", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA695848\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "1f77c3e2-401e-0116-6b27-3ed31f000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "27c100834bd6404e", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "1f77c3ea-401e-0116-7127-3ed31f000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/ascii-3.replay000066400000000000000000000234561367004507500273520ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPXILUuUv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "9bc7a4ee369cf003", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%20%21%22%23$%25\u0026%27%28%29%2A+,-.__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB94F042\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "fb924d90-f01e-004f-4627-3e90cc000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "7edbf1341987396e", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%20%21%22%23$%25\u0026%27%28%29%2A+,-.__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB94F042\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "fb924d94-f01e-004f-4927-3e90cc000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "7c1770d738365946", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%20%21%22%23$%25\u0026%27%28%29%2A+,-.__0x2f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB94F042\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "fb924d9b-f01e-004f-4e27-3e90cc000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "ff2557aaf065f3d3", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%20%21%22%23$%25\u0026%27%28%29%2A+,-.__0x2f__?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB94F042\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "fb924d9e-f01e-004f-5127-3e90cc000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "7256d32e21338432", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%20%21%22%23$%25\u0026%27%28%29%2A+,-.__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "fb924da0-f01e-004f-5327-3e90cc000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/ascii-4.replay000066400000000000000000000232041367004507500273420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVKXLcpP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "01d7e75abb8e123e", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys:;%3C=%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA7B0ECE\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "356af83a-101e-000a-6227-3e4d5d000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "303cd83b7fa8de51", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys:;%3C=%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA7B0ECE\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "356af846-101e-000a-6b27-3e4d5d000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "535540a6133163ff", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys:;%3C=%3E%3F", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA7B0ECE\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "356af84c-101e-000a-7027-3e4d5d000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "96cc20dc8db84c1b", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys:;%3C=%3E%3F?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA7B0ECE\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "356af853-101e-000a-7727-3e4d5d000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "67a49286a3e9ec5a", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys:;%3C=%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "356af855-101e-000a-7927-3e4d5d000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/ascii-5.replay000066400000000000000000000231151367004507500273440ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVMPB9b/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "8780b2ad4c57247e", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys@", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA8C772A\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "a4d4fd1f-501e-00ca-6d27-3ec719000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "75bbc5971599472b", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys@", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA8C772A\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a4d4fd2c-501e-00ca-7927-3ec719000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "ffbc7961dd223e11", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys@", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA8C772A\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a4d4fd32-501e-00ca-7f27-3ec719000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "e0b7ef6e72eb43cf", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys@?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA8C772A\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a4d4fd39-501e-00ca-0527-3ec719000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "5e4c1cc6ac5075b5", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys@", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "a4d4fd3d-501e-00ca-0827-3ec719000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/ascii-6.replay000066400000000000000000000232421367004507500273460ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWFpeWN/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "999ec0dd1c870c7b", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%5B__0x5c__%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAE30BB1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "826c2ede-f01e-0044-7d27-3e88b8000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "7b12f1e5295f0f5c", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%5B__0x5c__%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAE30BB1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "826c2eef-f01e-0044-0a27-3e88b8000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "cc2fb1f16378df35", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%5B__0x5c__%5D%5E_", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAE30BB1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "826c2efa-f01e-0044-1327-3e88b8000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "f08a6df1b2c9d849", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%5B__0x5c__%5D%5E_?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAE30BB1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "826c2f01-f01e-0044-1a27-3e88b8000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "aaadc0b4c66639f4", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%5B__0x5c__%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "826c2f0f-f01e-0044-2627-3e88b8000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/ascii-7.replay000066400000000000000000000231271367004507500273510ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPXBmN6KP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "e135fe7be42476b0", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECB514B1E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "adc47b13-d01e-001c-3327-3e8cc3000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "2818a1b828ca5c16", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECB514B1E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "adc47b24-d01e-001c-4327-3e8cc3000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "1715724cfceceac6", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%60", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECB514B1E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "adc47b2f-d01e-001c-4d27-3e8cc3000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "6894690730ff0dbf", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%60?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECB514B1E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "adc47b39-d01e-001c-5527-3e8cc3000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "e5d95b36d67c3c38", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "adc47b3d-d01e-001c-5927-3e8cc3000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/ascii-8.replay000066400000000000000000000232421367004507500273500ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPXDTTN7v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "16a4f9e576b0eaf6", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%7B%7C%7D~__0x7f__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB623E2C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "a224db53-d01e-013a-0627-3e5122000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "83b9541a87bdeb22", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%7B%7C%7D~__0x7f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB623E2C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a224db58-d01e-013a-0827-3e5122000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "6260dfec39cd7d62", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%7B%7C%7D~__0x7f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB623E2C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a224db5e-d01e-013a-0d27-3e5122000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "7ed745e0fd13adb4", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%7B%7C%7D~__0x7f__?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB623E2C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a224db60-d01e-013a-0e27-3e5122000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "352e094f0bf17191", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%7B%7C%7D~__0x7f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "a224db61-d01e-013a-0f27-3e5122000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/backslashes.replay000066400000000000000000000233051367004507500303760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWL/0HNf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "1722442e532563e8", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo__0x5c__bar__0x5c__baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECB23CA1D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "b363e17c-701e-00f4-3727-3e7138000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "c9d8fdd35d7cfb48", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo__0x5c__bar__0x5c__baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECB23CA1D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "b363e185-701e-00f4-3d27-3e7138000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "70cac1868dafa367", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo__0x5c__bar__0x5c__baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECB23CA1D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "b363e18b-701e-00f4-4127-3e7138000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "e5f9ae3d2430e12f", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo__0x5c__bar__0x5c__baz?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB23CA1D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "b363e18d-701e-00f4-4327-3e7138000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "be8d1d7c80eaca3a", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo__0x5c__bar__0x5c__baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "b363e195-701e-00f4-4927-3e7138000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/dotdotbackslash.replay000066400000000000000000000236771367004507500313000ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWKZGMy/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "4363bee66b751381", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c__..__0x5c__bar__0x5c__..__0x5c__..__0x5c__baz..__0x5c__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB119E58\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "3b3fbeb9-201e-0081-1127-3ef683000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "207d6516c22cb78c", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c__..__0x5c__bar__0x5c__..__0x5c__..__0x5c__baz..__0x5c__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB119E58\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "3b3fbebf-201e-0081-1627-3ef683000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "ac379acbe5701191", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c__..__0x5c__bar__0x5c__..__0x5c__..__0x5c__baz..__0x5c__", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB119E58\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "3b3fbeca-201e-0081-1f27-3ef683000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "c998f88012ff2bbc", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c__..__0x5c__bar__0x5c__..__0x5c__..__0x5c__baz..__0x5c__?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB119E58\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "3b3fbecc-201e-0081-2127-3ef683000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "978ee127ae767af1", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c__..__0x5c__bar__0x5c__..__0x5c__..__0x5c__baz..__0x5c__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "3b3fbed3-201e-0081-2727-3ef683000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/dotdotslash.replay000066400000000000000000000235711367004507500304500ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPXFEX2mP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "f845df24813b2c93", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB750652\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "23463936-401e-0074-6d27-3ed292000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "a865fdadf05465cf", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB750652\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "2346393f-401e-0074-7627-3ed292000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "0800fedbf419d955", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB750652\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "23463946-401e-0074-7d27-3ed292000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "faf3f0b9ab3a089b", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB750652\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "23463950-401e-0074-0527-3ed292000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "89f8841bba46e27d", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "2346395b-401e-0074-0f27-3ed292000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/fwdslashes.replay000066400000000000000000000231771367004507500302650ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWHSvXEv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "25be54f4572f4d5b", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECAF1DB77\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "debd0919-401e-009a-2727-3ed811000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "911071bfa7ff38ed", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECAF1DB77\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "debd0925-401e-009a-3027-3ed811000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "fbbe2f33ac6c4c2c", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo/bar/baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECAF1DB77\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "debd0928-401e-009a-3227-3ed811000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "5c0491cd3c13d29e", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo/bar/baz?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECAF1DB77\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "debd092f-401e-009a-3827-3ed811000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "9b074ffed167fe56", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "debd0934-401e-009a-3d27-3ed811000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/non-UTF8_fails.replay000066400000000000000000000013351367004507500306060ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVIt01uP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": null }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/quote.replay000066400000000000000000000232231367004507500272470ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWEQ0Agf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "1a2505e2d9ba13bc", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECAD2B4FB\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "0ec23e08-601e-0063-5727-3e12f1000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "f3cd4ddb8f9a35b3", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECAD2B4FB\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "0ec23e1f-601e-0063-6e27-3e12f1000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "620e6ea40c08a1c2", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%22bar%22baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECAD2B4FB\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "0ec23e2a-601e-0063-7927-3e12f1000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "66bb36b3cc29bd3a", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%22bar%22baz?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECAD2B4FB\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "0ec23e39-601e-0063-0827-3e12f1000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "0fa4e2271de4c70a", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "0ec23e45-601e-0063-1227-3e12f1000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/repeatedbackslashes.replay000066400000000000000000000235571367004507500321210ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVOFuRt/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "ca5994f8952b9fb6", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c____0x5c__bar__0x5c____0x5c____0x5c__baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA9FB4A1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "b76d5aa8-301e-003f-3d27-3ee308000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "1399127f26be768b", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c____0x5c__bar__0x5c____0x5c____0x5c__baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA9FB4A1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "b76d5abf-301e-003f-5127-3ee308000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "d5950473d31db8f6", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c____0x5c__bar__0x5c____0x5c____0x5c__baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA9FB4A1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "b76d5acd-301e-003f-5d27-3ee308000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "1f8fc970f0271260", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c____0x5c__bar__0x5c____0x5c____0x5c__baz?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECA9FB4A1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "b76d5ad8-301e-003f-6727-3ee308000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "143996d509262c78", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys..__0x5c__foo__0x5c____0x5c__bar__0x5c____0x5c____0x5c__baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "b76d5ade-301e-003f-6d27-3ee308000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/repeatedfwdslashes.replay000066400000000000000000000232161367004507500317710ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWIvTKI/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "8b530413c188a2b9", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo//bar///baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB01BCE8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "add4c9cc-001e-0138-2c27-3e53d8000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "d8904ba595618e63", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo//bar///baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB01BCE8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "add4c9df-001e-0138-3d27-3e53d8000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "db2d9ea165b6d824", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo//bar///baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB01BCE8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "add4c9ec-001e-0138-4827-3e53d8000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "1421a91048acc3f7", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo//bar///baz?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB01BCE8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "add4c9f5-001e-0138-5027-3e53d8000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "99787d98dedf52fd", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo//bar///baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "add4c9fc-001e-0138-5727-3e53d8000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/spaces.replay000066400000000000000000000232231367004507500273700ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWAvGII/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "65e20d560179b62b", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAB00B56\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "e40306e8-501e-002f-0627-3ed5ee000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "b7e94f8ccc398074", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAB00B56\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "e4030704-501e-002f-1f27-3ed5ee000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "9a6b55757818d97b", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%20bar%20baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAB00B56\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "e403070d-501e-002f-2727-3ed5ee000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "f6ceaf2500526614", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%20bar%20baz?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAB00B56\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "e4030712-501e-002f-2b27-3ed5ee000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "4be4cdec24fd1cd4", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "e4030716-501e-002f-2f27-3ed5ee000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/startwithdigit.replay000066400000000000000000000231411367004507500311630ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWCxrr4/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "5305cabbd17742ca", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAC48187\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "4290123f-601e-00e0-0827-3eb25c000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "2bde9e96e50bfd57", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAC48187\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "42901251-601e-00e0-1627-3eb25c000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "acab11d3679d7578", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys12345", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAC48187\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "4290125a-601e-00e0-1e27-3eb25c000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "df4e434b93b142b6", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys12345?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Etag": [ "\"0x8D80C3ECAC48187\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "4290125d-601e-00e0-2127-3eb25c000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "ad56c843daf4bacd", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "42901262-601e-00e0-2627-3eb25c000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestKeys/unicode.replay000066400000000000000000000233171367004507500275440ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPWN0whI/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "66f3ec5770f5045f", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB350B56\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "aa5469cc-101e-006c-0a27-3eff07000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "3edb7e01a92ba54f", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB350B56\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "aa5469d1-101e-006c-0f27-3eff07000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "847692e69f2d8870", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB350B56\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "aa5469d9-101e-006c-1627-3eff07000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "8ae3b15ec88bbd06", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Etag": [ "\"0x8D80C3ECB350B56\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "aa5469e0-101e-006c-1c27-3eff07000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8=" } }, { "ID": "bb98d9abdffd789c", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:50 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "aa546a17-101e-006c-4427-3eff07000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList/000077500000000000000000000000001367004507500246725ustar00rootroot00000000000000PaginationConsistencyAfterDelete.replay000066400000000000000000000337041367004507500344600ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList{ "Initial": "AQAAAA7WcSPQM/v0dP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "d6cd9d7a4f3c5f69", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "d993c53d-101e-00c6-2027-3e29e8000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "bc810a899bb52f69", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=2\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "d993c550-101e-00c6-2f27-3e29e8000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MjwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyPjIhODAhTURBd01ERTFJV0pzYjJJdFptOXlMV3hwYzNRdE1pRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS08L05leHRNYXJrZXI+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "c84eb42b604da4c0", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-list-1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "d993c557-101e-00c6-3627-3e29e8000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "a3b9ca2f2d6f0fbd", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026marker=2%2180%21MDAwMDE1IWJsb2ItZm9yLWxpc3QtMiEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiE-\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "d993c561-101e-00c6-4027-3e29e8000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1hcmtlcj4yITgwIU1EQXdNREUxSVdKc2IySXRabTl5TFd4cGMzUXRNaUV3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtPC9NYXJrZXI+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0yPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGRTIyMzM5PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "443ba1d20b785e03", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-list-1", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Etag": [ "\"0x8D80C3EC7A1ECCF\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "d993c567-101e-00c6-4427-3e29e8000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }PaginationConsistencyAfterInsert.replay000066400000000000000000000337061367004507500345240ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList{ "Initial": "AQAAAA7WcSPQLGVg8/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "a2515a0635e7e300", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "9cebc1da-a01e-013e-2727-3ea4a0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "87ccc344ee5a5cfe", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=2\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "9cebc1e5-a01e-013e-3027-3ea4a0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MjwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyPjIhODAhTURBd01ERTFJV0pzYjJJdFptOXlMV3hwYzNRdE1pRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS08L05leHRNYXJrZXI+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "a0123c627cf62ee7", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-list-0a", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Etag": [ "\"0x8D80C3EC78B535E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "9cebc1f7-a01e-013e-3f27-3ea4a0000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "85882aea3c1f48e6", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026marker=2%2180%21MDAwMDE1IWJsb2ItZm9yLWxpc3QtMiEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiE-\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "9cebc1fe-a01e-013e-4627-3ea4a0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1hcmtlcj4yITgwIU1EQXdNREUxSVdKc2IySXRabTl5TFd4cGMzUXRNaUV3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtPC9NYXJrZXI+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0yPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGRTIyMzM5PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "6bf91bfc35e93125", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-list-0a", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "9cebc203-a01e-013e-4b27-3ea4a0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList/by_1.replay000066400000000000000000000311401367004507500267410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPQHOaoR/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "8d4722a117acdd78", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "32715d34-701e-00b0-5427-3ead54000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "83e2c5c0e09c6473", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "32715d48-701e-00b0-6327-3ead54000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXI+MiE4MCFNREF3TURFMUlXSnNiMkl0Wm05eUxXeHBjM1F0TVNFd01EQXdNamdoT1RrNU9TMHhNaTB6TVZReU16bzFPVG8xT1M0NU9UazVPVGs1V2lFLTwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "a60eaaa2b933d2fd", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026marker=2%2180%21MDAwMDE1IWJsb2ItZm9yLWxpc3QtMSEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiE-\u0026maxresults=1\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "32715d4f-701e-00b0-6a27-3ead54000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1hcmtlcj4yITgwIU1EQXdNREUxSVdKc2IySXRabTl5TFd4cGMzUXRNU0V3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtPC9NYXJrZXI+PE1heFJlc3VsdHM+MTwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0xPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPlR1ZSwgMTkgTm92IDIwMTkgMTc6MDA6MTYgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPlR1ZSwgMTkgTm92IDIwMTkgMTc6MDA6MTYgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3NkQxMUYzQTMwOTc1PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXI+MiE4MCFNREF3TURFMUlXSnNiMkl0Wm05eUxXeHBjM1F0TWlFd01EQXdNamdoT1RrNU9TMHhNaTB6TVZReU16bzFPVG8xT1M0NU9UazVPVGs1V2lFLTwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "35db29349a44c4f4", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026marker=2%2180%21MDAwMDE1IWJsb2ItZm9yLWxpc3QtMiEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiE-\u0026maxresults=1\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "32715d52-701e-00b0-6d27-3ead54000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1hcmtlcj4yITgwIU1EQXdNREUxSVdKc2IySXRabTl5TFd4cGMzUXRNaUV3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtPC9NYXJrZXI+PE1heFJlc3VsdHM+MTwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0yPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGRTIyMzM5PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList/by_2.replay000066400000000000000000000253251367004507500267520ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPQIqqY2/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "a64a1bb187872361", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "688483ba-c01e-0047-6827-3e8bbf000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "b88a5f4ac2f4681b", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=2\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "688483cc-c01e-0047-7727-3e8bbf000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MjwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyPjIhODAhTURBd01ERTFJV0pzYjJJdFptOXlMV3hwYzNRdE1pRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS08L05leHRNYXJrZXI+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "47be096890fe895e", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026marker=2%2180%21MDAwMDE1IWJsb2ItZm9yLWxpc3QtMiEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiE-\u0026maxresults=2\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "688483d8-c01e-0047-0227-3e8bbf000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1hcmtlcj4yITgwIU1EQXdNREUxSVdKc2IySXRabTl5TFd4cGMzUXRNaUV3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtPC9NYXJrZXI+PE1heFJlc3VsdHM+MjwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0yPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGRTIyMzM5PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList/by_3.replay000066400000000000000000000215161367004507500267510ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPQJ5xNUv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "c93bacedcdeecc7e", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "7cda477c-b01e-00c0-5b27-3ede90000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "3c758f36b049b9c2", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=3\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "7cda4783-b01e-00c0-6027-3ede90000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MzwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } } ] }exactly_1_object_due_to_prefix.replay000066400000000000000000000162371367004507500341750ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList{ "Initial": "AQAAAA7WcSPQE/ipM/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "80c1d6ab002aecb5", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "585e138c-e01e-011b-4727-3e3c13000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "6d1b8552db0b98f9", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list-1\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "585e1390-e01e-011b-4927-3e3c13000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0LTE8L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxCbG9icz48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTE8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+VHVlLCAxOSBOb3YgMjAxOSAxNzowMDoxNiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+VHVlLCAxOSBOb3YgMjAxOSAxNzowMDoxNiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDc2RDExRjNBMzA5NzU8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList/no_objects.replay000066400000000000000000000145231367004507500302420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPPJyaqBv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "a653d3eba3745ac6", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "8c30875c-e01e-00f1-3a27-3e8547000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "c10e9e5c33f85f49", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=no-objects-with-this-prefix\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:43 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "8c3087b7-e01e-00f1-0a27-3e8547000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5uby1vYmplY3RzLXdpdGgtdGhpcy1wcmVmaXg8L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxCbG9icyAvPjxOZXh0TWFya2VyIC8+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestList/no_pagination.replay000066400000000000000000000215251367004507500307420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPQF/YPyf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "2f757537b3d8b020", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c90829f2-b01e-0121-3e27-3e7fb0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "ee6131e2ac9c727e", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-list\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c90829ff-b01e-0121-4927-3e7fb0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1saXN0PC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbGlzdC0wPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjEgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUVGREQ0MDU2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWxpc3QtMTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0EzMDk3NTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1saXN0LTI8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRUZFMjIzMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestListDelimiters/000077500000000000000000000000001367004507500267145ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestListDelimiters/abc.replay000066400000000000000000001152731367004507500306700ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPRHmfHjv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "ce54f99082cc1ac0", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-delimiters-abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8dda6-901e-0032-5127-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiYzwvUHJlZml4PjxNYXhSZXN1bHRzPjEwMDA8L01heFJlc3VsdHM+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDAwOUZDPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDJDOTlEPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDU4OTNFPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDdEMzlBPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPlR1ZSwgMTkgTm92IDIwMTkgMTc6MDA6MTcgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPlR1ZSwgMTkgTm92IDIwMTkgMTc6MDA6MTcgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3NkQxMUYzRUQxODVEPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjBEQzQxMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "60f435744498907e", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-delimiters-abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8ddb7-901e-0032-5f27-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiYzwvUHJlZml4PjxNYXhSZXN1bHRzPjEwMDA8L01heFJlc3VsdHM+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDAwOUZDPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDJDOTlEPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDU4OTNFPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDdEMzlBPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPlR1ZSwgMTkgTm92IDIwMTkgMTc6MDA6MTcgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPlR1ZSwgMTkgTm92IDIwMTkgMTc6MDA6MTcgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3NkQxMUYzRUQxODVEPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjBEQzQxMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "a7e96549af6f5fbf", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=abc\u0026maxresults=1000\u0026prefix=blob-for-delimiters-abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8ddc4-901e-0032-6b27-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiYzwvUHJlZml4PjxNYXhSZXN1bHRzPjEwMDA8L01heFJlc3VsdHM+PERlbGltaXRlcj5hYmM8L0RlbGltaXRlcj48QmxvYnM+PEJsb2JQcmVmaXg+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjPC9OYW1lPjwvQmxvYlByZWZpeD48QmxvYlByZWZpeD48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmM8L05hbWU+PC9CbG9iUHJlZml4PjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjBEQzQxMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "79b1d74d4a42a6fc", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=abc\u0026maxresults=1000\u0026prefix=blob-for-delimiters-abcdir1abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8ddcb-901e-0032-7227-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmM8L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDAwOUZDPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDJDOTlEPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iUHJlZml4PjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiYzwvTmFtZT48L0Jsb2JQcmVmaXg+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "5a698d7462f92d1a", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=abc\u0026maxresults=1000\u0026prefix=blob-for-delimiters-abcdir1abcsubdirabc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8ddce-901e-0032-7527-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmM8L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDU4OTNFPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwRDdEMzlBPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "1865b07418a90d88", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=abc\u0026maxresults=1000\u0026prefix=blob-for-delimiters-abcdir2abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8ddd0-901e-0032-7727-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmM8L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPlR1ZSwgMTkgTm92IDIwMTkgMTc6MDA6MTcgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPlR1ZSwgMTkgTm92IDIwMTkgMTc6MDA6MTcgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3NkQxMUYzRUQxODVEPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "b0e08d1b3757a5ab", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=abc\u0026maxresults=1\u0026prefix=blob-for-delimiters-abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8ddd9-901e-0032-7f27-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiYzwvUHJlZml4PjxNYXhSZXN1bHRzPjE8L01heFJlc3VsdHM+PERlbGltaXRlcj5hYmM8L0RlbGltaXRlcj48QmxvYnM+PEJsb2JQcmVmaXg+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjPC9OYW1lPjwvQmxvYlByZWZpeD48L0Jsb2JzPjxOZXh0TWFya2VyPjIhMTA4IU1EQXdNRE0xSVdKc2IySXRabTl5TFdSbGJHbHRhWFJsY25NdFlXSmpaR2x5TW1GaVkyVXVkSGgwSVRBd01EQXlPQ0U1T1RrNUxURXlMVE14VkRJek9qVTVPalU1TGprNU9UazVPVGxhSVEtLTwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "a3973c12061c84ec", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=abc\u0026marker=2%21108%21MDAwMDM1IWJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0ITAwMDAyOCE5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTlaIQ--\u0026maxresults=1\u0026prefix=blob-for-delimiters-abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8dddf-901e-0032-0527-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiYzwvUHJlZml4PjxNYXJrZXI+MiExMDghTURBd01ETTFJV0pzYjJJdFptOXlMV1JsYkdsdGFYUmxjbk10WVdKalpHbHlNbUZpWTJVdWRIaDBJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tPC9NYXJrZXI+PE1heFJlc3VsdHM+MTwvTWF4UmVzdWx0cz48RGVsaW1pdGVyPmFiYzwvRGVsaW1pdGVyPjxCbG9icz48QmxvYlByZWZpeD48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmM8L05hbWU+PC9CbG9iUHJlZml4PjwvQmxvYnM+PE5leHRNYXJrZXI+MiE5NiFNREF3TURJNElXSnNiMkl0Wm05eUxXUmxiR2x0YVhSbGNuTXRZV0pqWmk1MGVIUWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2g8L05leHRNYXJrZXI+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "1c8aeeb780b73ca1", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=abc\u0026marker=2%2196%21MDAwMDI4IWJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQhMDAwMDI4ITk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OVoh\u0026maxresults=1\u0026prefix=blob-for-delimiters-abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8dde8-901e-0032-0e27-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiYzwvUHJlZml4PjxNYXJrZXI+MiE5NiFNREF3TURJNElXSnNiMkl0Wm05eUxXUmxiR2x0YVhSbGNuTXRZV0pqWmk1MGVIUWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2g8L01hcmtlcj48TWF4UmVzdWx0cz4xPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjBEQzQxMzk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "d26e2606625f0b85", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-delimiters-abcdir2abce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "c7b8ddef-901e-0032-1527-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "a560d39f45bf9067", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=abc\u0026maxresults=1000\u0026prefix=blob-for-delimiters-abc\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8ddf6-901e-0032-1c27-3e0c04000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiYzwvUHJlZml4PjxNYXhSZXN1bHRzPjEwMDA8L01heFJlc3VsdHM+PERlbGltaXRlcj5hYmM8L0RlbGltaXRlcj48QmxvYnM+PEJsb2JQcmVmaXg+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjPC9OYW1lPjwvQmxvYlByZWZpeD48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwREM0MTM5PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "7d93c2cc7b29e1ba", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-delimiters-abcdir2abce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC8116505\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c7b8ddff-901e-0032-2527-3e0c04000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestListDelimiters/backslash.replay000066400000000000000000001165761367004507500321050ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPREVtSvv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "5ae70a5232ae3f6f", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-delimiters-__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb9264c6-c01e-0008-6027-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fPC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1fXzB4NWNfX2RpcjFfXzB4NWNfX2EudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwOUMxRjMxPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIxX18weDVjX19iLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDlFNjk5MTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMV9fMHg1Y19fc3ViZGlyX18weDVjX19jLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMEEwREFGRjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMV9fMHg1Y19fc3ViZGlyX18weDVjX19kLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMEEzMjU1RjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMl9fMHg1Y19fZS50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+VHVlLCAxOSBOb3YgMjAxOSAxNzowMDoxNiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+VHVlLCAxOSBOb3YgMjAxOSAxNzowMDoxNiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDc2RDExRjNENzY5N0I8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1fXzB4NWNfX2YudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwQUEyQjg5PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "5b120c5079dea480", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-delimiters-__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb9264d8-c01e-0008-7027-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fPC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1fXzB4NWNfX2RpcjFfXzB4NWNfX2EudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwOUMxRjMxPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIxX18weDVjX19iLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDlFNjk5MTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMV9fMHg1Y19fc3ViZGlyX18weDVjX19jLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMEEwREFGRjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMV9fMHg1Y19fc3ViZGlyX18weDVjX19kLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMEEzMjU1RjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMl9fMHg1Y19fZS50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+VHVlLCAxOSBOb3YgMjAxOSAxNzowMDoxNiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+VHVlLCAxOSBOb3YgMjAxOSAxNzowMDoxNiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDc2RDExRjNENzY5N0I8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1fXzB4NWNfX2YudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwQUEyQjg5PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "bb083f34001d05d6", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=__0x5c__\u0026maxresults=1000\u0026prefix=blob-for-delimiters-__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb9264e6-c01e-0008-7d27-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fPC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48RGVsaW1pdGVyPl9fMHg1Y19fPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iUHJlZml4PjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIxX18weDVjX188L05hbWU+PC9CbG9iUHJlZml4PjxCbG9iUHJlZml4PjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIyX18weDVjX188L05hbWU+PC9CbG9iUHJlZml4PjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19mLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMEFBMkI4OTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyIC8+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "9a0076c2890618cb", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=__0x5c__\u0026maxresults=1000\u0026prefix=blob-for-delimiters-__0x5c__dir1__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb9264ec-c01e-0008-0227-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMV9fMHg1Y19fPC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48RGVsaW1pdGVyPl9fMHg1Y19fPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIxX18weDVjX19hLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDlDMUYzMTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMV9fMHg1Y19fYi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA5RTY5OTE8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2JQcmVmaXg+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1fXzB4NWNfX2RpcjFfXzB4NWNfX3N1YmRpcl9fMHg1Y19fPC9OYW1lPjwvQmxvYlByZWZpeD48L0Jsb2JzPjxOZXh0TWFya2VyIC8+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "4908fa3c1e66fb83", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=__0x5c__\u0026maxresults=1000\u0026prefix=blob-for-delimiters-__0x5c__dir1__0x5c__subdir__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb9264f9-c01e-0008-0f27-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMV9fMHg1Y19fc3ViZGlyX18weDVjX188L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+X18weDVjX188L0RlbGltaXRlcj48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1fXzB4NWNfX2RpcjFfXzB4NWNfX3N1YmRpcl9fMHg1Y19fYy50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjBBMERBRkY8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1fXzB4NWNfX2RpcjFfXzB4NWNfX3N1YmRpcl9fMHg1Y19fZC50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjBBMzI1NUY8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "16c1412e491c46c0", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=__0x5c__\u0026maxresults=1000\u0026prefix=blob-for-delimiters-__0x5c__dir2__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb9264ff-c01e-0008-1527-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZGlyMl9fMHg1Y19fPC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48RGVsaW1pdGVyPl9fMHg1Y19fPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIyX18weDVjX19lLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0Q3Njk3QjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyIC8+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "dd1f91371741f267", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=__0x5c__\u0026maxresults=1\u0026prefix=blob-for-delimiters-__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb92650b-c01e-0008-1f27-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fPC9QcmVmaXg+PE1heFJlc3VsdHM+MTwvTWF4UmVzdWx0cz48RGVsaW1pdGVyPl9fMHg1Y19fPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iUHJlZml4PjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIxX18weDVjX188L05hbWU+PC9CbG9iUHJlZml4PjwvQmxvYnM+PE5leHRNYXJrZXI+MiExMjAhTURBd01EUTFJV0pzYjJJdFptOXlMV1JsYkdsdGFYUmxjbk10WDE4d2VEVmpYMTlrYVhJeVgxOHdlRFZqWDE5bExuUjRkQ0V3TURBd01qZ2hPVGs1T1MweE1pMHpNVlF5TXpvMU9UbzFPUzQ1T1RrNU9UazVXaUUtPC9OZXh0TWFya2VyPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "eb6a24645369cf76", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=__0x5c__\u0026marker=2%21120%21MDAwMDQ1IWJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIyX18weDVjX19lLnR4dCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiE-\u0026maxresults=1\u0026prefix=blob-for-delimiters-__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb926512-c01e-0008-2627-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fPC9QcmVmaXg+PE1hcmtlcj4yITEyMCFNREF3TURRMUlXSnNiMkl0Wm05eUxXUmxiR2x0YVhSbGNuTXRYMTh3ZURWalgxOWthWEl5WDE4d2VEVmpYMTlsTG5SNGRDRXdNREF3TWpnaE9UazVPUzB4TWkwek1WUXlNem8xT1RvMU9TNDVPVGs1T1RrNVdpRS08L01hcmtlcj48TWF4UmVzdWx0cz4xPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+X18weDVjX188L0RlbGltaXRlcj48QmxvYnM+PEJsb2JQcmVmaXg+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy1fXzB4NWNfX2RpcjJfXzB4NWNfXzwvTmFtZT48L0Jsb2JQcmVmaXg+PC9CbG9icz48TmV4dE1hcmtlcj4yITEwNCFNREF3TURNeklXSnNiMkl0Wm05eUxXUmxiR2x0YVhSbGNuTXRYMTh3ZURWalgxOW1MblI0ZENFd01EQXdNamdoT1RrNU9TMHhNaTB6TVZReU16bzFPVG8xT1M0NU9UazVPVGs1V2lFLTwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "c34e690a8f128c93", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=__0x5c__\u0026marker=2%21104%21MDAwMDMzIWJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19mLnR4dCEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiE-\u0026maxresults=1\u0026prefix=blob-for-delimiters-__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb92651a-c01e-0008-2d27-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fPC9QcmVmaXg+PE1hcmtlcj4yITEwNCFNREF3TURNeklXSnNiMkl0Wm05eUxXUmxiR2x0YVhSbGNuTXRYMTh3ZURWalgxOW1MblI0ZENFd01EQXdNamdoT1RrNU9TMHhNaTB6TVZReU16bzFPVG8xT1M0NU9UazVPVGs1V2lFLTwvTWFya2VyPjxNYXhSZXN1bHRzPjE8L01heFJlc3VsdHM+PERlbGltaXRlcj5fXzB4NWNfXzwvRGVsaW1pdGVyPjxCbG9icz48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fZi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjBBQTJCODk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "1c824c1405686387", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-delimiters-__0x5c__dir2__0x5c__e.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "eb926523-c01e-0008-3627-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "1f85aea017dfa1e8", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=__0x5c__\u0026maxresults=1000\u0026prefix=blob-for-delimiters-__0x5c__\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb92652e-c01e-0008-4027-3e4fa7000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLV9fMHg1Y19fPC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48RGVsaW1pdGVyPl9fMHg1Y19fPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iUHJlZml4PjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19kaXIxX18weDVjX188L05hbWU+PC9CbG9iUHJlZml4PjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtX18weDVjX19mLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMEFBMkI4OTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyIC8+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "2a508e250720bdaf", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-delimiters-__0x5c__dir2__0x5c__e.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Etag": [ "\"0x8D80C3EC7F105BE\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "eb926536-c01e-0008-4827-3e4fa7000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestListDelimiters/fwdslash.replay000066400000000000000000001147071367004507500317570ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPRBb5Ucv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "c92fa73bc5d6b5f7", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-delimiters-%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f31a-201e-006f-4b27-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS88L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxCbG9icz48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwNzdBMDk3PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA3QTYwMzc8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA3QzgzN0I8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA3RTU4OTQ8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0JGNzA0MjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDgyRUQ0NjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyIC8+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "16eb42701757d892", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-delimiters-%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f32d-201e-006f-5b27-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS88L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxCbG9icz48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwNzdBMDk3PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA3QTYwMzc8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA3QzgzN0I8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA3RTU4OTQ8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDE5IE5vdiAyMDE5IDE3OjAwOjE2IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzZEMTFGM0JGNzA0MjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDgyRUQ0NjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyIC8+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "8ed85b4549af7107", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026maxresults=1000\u0026prefix=blob-for-delimiters-%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f33b-201e-006f-6927-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS88L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxCbG9icz48QmxvYlByZWZpeD48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxLzwvTmFtZT48L0Jsb2JQcmVmaXg+PEJsb2JQcmVmaXg+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi88L05hbWU+PC9CbG9iUHJlZml4PjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwODJFRDQ2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "a9871923984085bd", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026maxresults=1000\u0026prefix=blob-for-delimiters-%2Fdir1%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f345-201e-006f-7327-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxLzwvUHJlZml4PjxNYXhSZXN1bHRzPjEwMDA8L01heFJlc3VsdHM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA3N0EwOTc8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDdBNjAzNzwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYlByZWZpeD48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci88L05hbWU+PC9CbG9iUHJlZml4PjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "fc86ef69fb2c1831", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026maxresults=1000\u0026prefix=blob-for-delimiters-%2Fdir1%2Fsubdir%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f34c-201e-006f-7a27-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci88L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxCbG9icz48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDdDODM3QjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9kLnR4dDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDdFNTg5NDwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48L0Jsb2JzPjxOZXh0TWFya2VyIC8+PC9FbnVtZXJhdGlvblJlc3VsdHM+" } }, { "ID": "a7b7a905607187b9", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026maxresults=1000\u0026prefix=blob-for-delimiters-%2Fdir2%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f357-201e-006f-0527-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLzwvUHJlZml4PjxNYXhSZXN1bHRzPjEwMDA8L01heFJlc3VsdHM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PEJsb2JzPjxCbG9iPjxOYW1lPmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+VHVlLCAxOSBOb3YgMjAxOSAxNzowMDoxNiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+VHVlLCAxOSBOb3YgMjAxOSAxNzowMDoxNiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDc2RDExRjNCRjcwNDI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "3cc9c68289a7481c", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026maxresults=1\u0026prefix=blob-for-delimiters-%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f361-201e-006f-0f27-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS88L1ByZWZpeD48TWF4UmVzdWx0cz4xPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxCbG9icz48QmxvYlByZWZpeD48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxLzwvTmFtZT48L0Jsb2JQcmVmaXg+PC9CbG9icz48TmV4dE1hcmtlcj4yITEwMCFNREF3TURNeElXSnNiMkl0Wm05eUxXUmxiR2x0YVhSbGNuTXRMMlJwY2pJdlpTNTBlSFFoTURBd01ESTRJVGs1T1RrdE1USXRNekZVTWpNNk5UazZOVGt1T1RrNU9UazVPVm9oPC9OZXh0TWFya2VyPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "973c511b98bf8efa", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026marker=2%21100%21MDAwMDMxIWJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQhMDAwMDI4ITk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OVoh\u0026maxresults=1\u0026prefix=blob-for-delimiters-%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f36c-201e-006f-1727-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS88L1ByZWZpeD48TWFya2VyPjIhMTAwIU1EQXdNRE14SVdKc2IySXRabTl5TFdSbGJHbHRhWFJsY25NdEwyUnBjakl2WlM1MGVIUWhNREF3TURJNElUazVPVGt0TVRJdE16RlVNak02TlRrNk5Ua3VPVGs1T1RrNU9Wb2g8L01hcmtlcj48TWF4UmVzdWx0cz4xPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxCbG9icz48QmxvYlByZWZpeD48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLzwvTmFtZT48L0Jsb2JQcmVmaXg+PC9CbG9icz48TmV4dE1hcmtlcj4yITk2IU1EQXdNREkySVdKc2IySXRabTl5TFdSbGJHbHRhWFJsY25NdEwyWXVkSGgwSVRBd01EQXlPQ0U1T1RrNUxURXlMVE14VkRJek9qVTVPalU1TGprNU9UazVPVGxhSVEtLTwvTmV4dE1hcmtlcj48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "624fa289e196b463", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026marker=2%2196%21MDAwMDI2IWJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0ITAwMDAyOCE5OTk5LTEyLTMxVDIzOjU5OjU5Ljk5OTk5OTlaIQ--\u0026maxresults=1\u0026prefix=blob-for-delimiters-%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f376-201e-006f-2127-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS88L1ByZWZpeD48TWFya2VyPjIhOTYhTURBd01ESTJJV0pzYjJJdFptOXlMV1JsYkdsdGFYUmxjbk10TDJZdWRIaDBJVEF3TURBeU9DRTVPVGs1TFRFeUxUTXhWREl6T2pVNU9qVTVMams1T1RrNU9UbGFJUS0tPC9NYXJrZXI+PE1heFJlc3VsdHM+MTwvTWF4UmVzdWx0cz48RGVsaW1pdGVyPi88L0RlbGltaXRlcj48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA4MkVENDY8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "d7447220848fe22c", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-delimiters-/dir2/e.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "2924f381-201e-006f-2c27-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "a50beb646e763a3f", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=%2F\u0026maxresults=1000\u0026prefix=blob-for-delimiters-%2F\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f38d-201e-006f-3727-3efc00000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS88L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxCbG9icz48QmxvYlByZWZpeD48TmFtZT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxLzwvTmFtZT48L0Jsb2JQcmVmaXg+PEJsb2I+PE5hbWU+YmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQ8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA4MkVENDY8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "52301b1b539b16c7", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-delimiters-/dir2/e.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Etag": [ "\"0x8D80C3EC7CF94E3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "2924f399-201e-006f-4127-3efc00000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestListWeirdKeys.replay000066400000000000000000001071511367004507500277440ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPQOt/g7/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "f515b17b65a7b674", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=list-weirdkeys-\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "b67c5fa0-f01e-010f-5b27-3eff77000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5saXN0LXdlaXJka2V5cy08L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxCbG9icz48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy0gISIjJCUmYW1wOycoKSorLC0uX18weDJmX188L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA1QzRCNkI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXzwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDU5RDlGOTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy0uLl9fMHg1Y19fZm9vX18weDVjX18uLl9fMHg1Y19fYmFyX18weDVjX18uLl9fMHg1Y19fLi5fXzB4NWNfX2Jhei4uX18weDVjX188L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjAzNTgyODY8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtLi5fXzB4NWNfX2Zvb19fMHg1Y19fX18weDVjX19iYXJfXzB4NWNfX19fMHg1Y19fX18weDVjX19iYXo8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA0NjRFNzA8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtMTIzNDU8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjAzOUM5MDk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtOjsmbHQ7PSZndDs/PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwNTU0NTRDPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmxpc3Qtd2VpcmRrZXlzLUA8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjAzQkVDNEM8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtW19fMHg1Y19fXV5fPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwNjMwMzZDPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmxpc3Qtd2VpcmRrZXlzLV9fMHgwX19fXzB4MV9fX18weDJfX19fMHgzX19fXzB4NF9fX18weDVfX19fMHg2X19fXzB4N19fX18weDhfX19fMHg5X19fXzB4YV9fX18weGJfX19fMHhjX19fXzB4ZF9fX18weGVfX19fMHhmX188L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA2NTc0REE8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtX18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX188L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA2N0JGMzQ8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtYDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDNFNURCRTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhejwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDZDNTNFOTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb28iYmFyImJhejwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDM3N0VBRTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb28vL2Jhci8vL2JhejwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDQyRjI3ODwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb28vYmFyL2JhejwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDU3QjZCQTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb29fXzB4NWNfX2Jhcl9fMHg1Y19fYmF6PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwNkEzMEE2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmxpc3Qtd2VpcmRrZXlzLXt8fX5fXzB4N2ZfXzwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDQwODEwMjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy3imLrimLrimLo8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA0RDU0OTc8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } }, { "ID": "9d7bba87f5ee5fa0", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=list-weirdkeys-\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:44 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "b67c5fc0-f01e-010f-7527-3eff77000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5saXN0LXdlaXJka2V5cy08L1ByZWZpeD48TWF4UmVzdWx0cz4xMDAwPC9NYXhSZXN1bHRzPjxCbG9icz48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy0gISIjJCUmYW1wOycoKSorLC0uX18weDJmX188L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA1QzRCNkI8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXzwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDU5RDlGOTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy0uLl9fMHg1Y19fZm9vX18weDVjX18uLl9fMHg1Y19fYmFyX18weDVjX18uLl9fMHg1Y19fLi5fXzB4NWNfX2Jhei4uX18weDVjX188L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjAzNTgyODY8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtLi5fXzB4NWNfX2Zvb19fMHg1Y19fX18weDVjX19iYXJfXzB4NWNfX19fMHg1Y19fX18weDVjX19iYXo8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA0NjRFNzA8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtMTIzNDU8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjAzOUM5MDk8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtOjsmbHQ7PSZndDs/PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwNTU0NTRDPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmxpc3Qtd2VpcmRrZXlzLUA8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMSBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjAzQkVDNEM8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtW19fMHg1Y19fXV5fPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwNjMwMzZDPC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmxpc3Qtd2VpcmRrZXlzLV9fMHgwX19fXzB4MV9fX18weDJfX19fMHgzX19fXzB4NF9fX18weDVfX19fMHg2X19fXzB4N19fX18weDhfX19fMHg5X19fXzB4YV9fX18weGJfX19fMHhjX19fXzB4ZF9fX18weGVfX19fMHhmX188L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA2NTc0REE8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtX18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX188L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA2N0JGMzQ8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PEJsb2I+PE5hbWU+bGlzdC13ZWlyZGtleXMtYDwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDNFNURCRTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhejwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDZDNTNFOTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb28iYmFyImJhejwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDM3N0VBRTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb28vL2Jhci8vL2JhejwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDQyRjI3ODwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb28vYmFyL2JhejwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIyIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDU3QjZCQTwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy1mb29fXzB4NWNfX2Jhcl9fMHg1Y19fYmF6PC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPk1vbiwgMTUgSnVsIDIwMTkgMTY6MTA6MjIgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ3MDkzRUYwNkEzMEE2PC9FdGFnPjxDb250ZW50LUxlbmd0aD41PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjxCbG9iPjxOYW1lPmxpc3Qtd2VpcmRrZXlzLXt8fX5fXzB4N2ZfXzwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5Nb24sIDE1IEp1bCAyMDE5IDE2OjEwOjIxIEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhENzA5M0VGMDQwODEwMjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5saXN0LXdlaXJka2V5cy3imLrimLrimLo8L05hbWU+PFByb3BlcnRpZXM+PENyZWF0aW9uLVRpbWU+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0NyZWF0aW9uLVRpbWU+PExhc3QtTW9kaWZpZWQ+TW9uLCAxNSBKdWwgMjAxOSAxNjoxMDoyMiBHTVQ8L0xhc3QtTW9kaWZpZWQ+PEV0YWc+MHg4RDcwOTNFRjA0RDU0OTc8L0V0YWc+PENvbnRlbnQtTGVuZ3RoPjU8L0NvbnRlbnQtTGVuZ3RoPjxDb250ZW50LVR5cGU+dGV4dC9wbGFpbjsgY2hhcnNldD11dGYtODwvQ29udGVudC1UeXBlPjxDb250ZW50LUVuY29kaW5nIC8+PENvbnRlbnQtTGFuZ3VhZ2UgLz48Q29udGVudC1NRDU+WFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09PC9Db250ZW50LU1ENT48Q2FjaGUtQ29udHJvbCAvPjxDb250ZW50LURpc3Bvc2l0aW9uIC8+PEJsb2JUeXBlPkJsb2NrQmxvYjwvQmxvYlR5cGU+PEFjY2Vzc1RpZXI+SG90PC9BY2Nlc3NUaWVyPjxBY2Nlc3NUaWVySW5mZXJyZWQ+dHJ1ZTwvQWNjZXNzVGllckluZmVycmVkPjxMZWFzZVN0YXR1cz51bmxvY2tlZDwvTGVhc2VTdGF0dXM+PExlYXNlU3RhdGU+YXZhaWxhYmxlPC9MZWFzZVN0YXRlPjxTZXJ2ZXJFbmNyeXB0ZWQ+dHJ1ZTwvU2VydmVyRW5jcnlwdGVkPjwvUHJvcGVydGllcz48L0Jsb2I+PC9CbG9icz48TmV4dE1hcmtlciAvPjwvRW51bWVyYXRpb25SZXN1bHRzPg==" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMD5.replay000066400000000000000000000344651367004507500255760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVAndrPf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "d29588c0de25b84e", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-md5-aaa", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA161FD6\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "cfd02fa2-301e-00f3-5827-3e87bd000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "0f46d50d14f0a646", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-md5-bbb", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "7" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "afqrYmg1ApVVDefVh7wyPQ==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "Z29vZGJ5ZQ==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "afqrYmg1ApVVDefVh7wyPQ==" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA18914D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "cfd02fb3-301e-00f3-6627-3e87bd000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "de19fe5cdf4abc32", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-md5-aaa", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA161FD6\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "cfd02fbd-301e-00f3-6f27-3e87bd000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "0461e892f064f198", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-md5-bbb", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "7" ], "Content-Md5": [ "afqrYmg1ApVVDefVh7wyPQ==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA18914D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:49 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "cfd02fc5-301e-00f3-7427-3e87bd000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "160934b247f844ab", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket?comp=list\u0026delimiter=\u0026maxresults=1000\u0026prefix=blob-for-md5-\u0026restype=container", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "cfd02fcd-301e-00f3-7b27-3e87bd000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RW51bWVyYXRpb25SZXN1bHRzIFNlcnZpY2VFbmRwb2ludD0iaHR0cHM6Ly9nb2Nsb3VkYmxvYnRlc3RzLmJsb2IuY29yZS53aW5kb3dzLm5ldC8iIENvbnRhaW5lck5hbWU9ImdvLWNsb3VkLWJ1Y2tldCI+PFByZWZpeD5ibG9iLWZvci1tZDUtPC9QcmVmaXg+PE1heFJlc3VsdHM+MTAwMDwvTWF4UmVzdWx0cz48QmxvYnM+PEJsb2I+PE5hbWU+YmxvYi1mb3ItbWQ1LWFhYTwvTmFtZT48UHJvcGVydGllcz48Q3JlYXRpb24tVGltZT5UdWUsIDA5IEp1biAyMDIwIDA2OjMxOjQ5IEdNVDwvQ3JlYXRpb24tVGltZT48TGFzdC1Nb2RpZmllZD5UdWUsIDA5IEp1biAyMDIwIDA2OjMxOjQ5IEdNVDwvTGFzdC1Nb2RpZmllZD48RXRhZz4weDhEODBDM0VDQTE2MUZENjwvRXRhZz48Q29udGVudC1MZW5ndGg+NTwvQ29udGVudC1MZW5ndGg+PENvbnRlbnQtVHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04PC9Db250ZW50LVR5cGU+PENvbnRlbnQtRW5jb2RpbmcgLz48Q29udGVudC1MYW5ndWFnZSAvPjxDb250ZW50LU1ENT5YVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT08L0NvbnRlbnQtTUQ1PjxDYWNoZS1Db250cm9sIC8+PENvbnRlbnQtRGlzcG9zaXRpb24gLz48QmxvYlR5cGU+QmxvY2tCbG9iPC9CbG9iVHlwZT48QWNjZXNzVGllcj5Ib3Q8L0FjY2Vzc1RpZXI+PEFjY2Vzc1RpZXJJbmZlcnJlZD50cnVlPC9BY2Nlc3NUaWVySW5mZXJyZWQ+PExlYXNlU3RhdHVzPnVubG9ja2VkPC9MZWFzZVN0YXR1cz48TGVhc2VTdGF0ZT5hdmFpbGFibGU8L0xlYXNlU3RhdGU+PFNlcnZlckVuY3J5cHRlZD50cnVlPC9TZXJ2ZXJFbmNyeXB0ZWQ+PC9Qcm9wZXJ0aWVzPjwvQmxvYj48QmxvYj48TmFtZT5ibG9iLWZvci1tZDUtYmJiPC9OYW1lPjxQcm9wZXJ0aWVzPjxDcmVhdGlvbi1UaW1lPlR1ZSwgMDkgSnVuIDIwMjAgMDY6MzE6NDkgR01UPC9DcmVhdGlvbi1UaW1lPjxMYXN0LU1vZGlmaWVkPlR1ZSwgMDkgSnVuIDIwMjAgMDY6MzE6NDkgR01UPC9MYXN0LU1vZGlmaWVkPjxFdGFnPjB4OEQ4MEMzRUNBMTg5MTREPC9FdGFnPjxDb250ZW50LUxlbmd0aD43PC9Db250ZW50LUxlbmd0aD48Q29udGVudC1UeXBlPnRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTg8L0NvbnRlbnQtVHlwZT48Q29udGVudC1FbmNvZGluZyAvPjxDb250ZW50LUxhbmd1YWdlIC8+PENvbnRlbnQtTUQ1PmFmcXJZbWcxQXBWVkRlZlZoN3d5UFE9PTwvQ29udGVudC1NRDU+PENhY2hlLUNvbnRyb2wgLz48Q29udGVudC1EaXNwb3NpdGlvbiAvPjxCbG9iVHlwZT5CbG9ja0Jsb2I8L0Jsb2JUeXBlPjxBY2Nlc3NUaWVyPkhvdDwvQWNjZXNzVGllcj48QWNjZXNzVGllckluZmVycmVkPnRydWU8L0FjY2Vzc1RpZXJJbmZlcnJlZD48TGVhc2VTdGF0dXM+dW5sb2NrZWQ8L0xlYXNlU3RhdHVzPjxMZWFzZVN0YXRlPmF2YWlsYWJsZTwvTGVhc2VTdGF0ZT48U2VydmVyRW5jcnlwdGVkPnRydWU8L1NlcnZlckVuY3J5cHRlZD48L1Byb3BlcnRpZXM+PC9CbG9iPjwvQmxvYnM+PE5leHRNYXJrZXIgLz48L0VudW1lcmF0aW9uUmVzdWx0cz4=" } }, { "ID": "0350b985ea2af5c2", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-md5-bbb", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "cfd02fd3-301e-00f3-7f27-3e87bd000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "5c8f1df8f063d808", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-md5-aaa", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "cfd02fd8-301e-00f3-0227-3e87bd000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata/000077500000000000000000000000001367004507500254775ustar00rootroot00000000000000duplicate_case-insensitive_key_fails.replay000066400000000000000000000013351367004507500361710ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSPUJ88TPP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": null }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata/empty.replay000066400000000000000000000136321367004507500300600ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPUIOu8kv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "a93bb555eb5e4256", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC9CAFF3C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "61236d62-001e-0015-3b27-3e964d000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "b600a4b85c3b8479", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC9CAFF3C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "61236d90-001e-0015-6627-3e964d000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "1e689aecdb8791d3", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "61236d9e-001e-0015-7127-3e964d000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata/empty_key_fails.replay000066400000000000000000000013351367004507500321030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPUJ4lbGP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": null }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata/non-utf8_metadata_key.replay000066400000000000000000000013351367004507500331050ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVAfmkn/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": null }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata/non-utf8_metadata_value.replay000066400000000000000000000013351367004507500334310ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPVAjbZPv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": null }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata/valid_metadata.replay000066400000000000000000000144461367004507500316650ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPUKA7UaP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "6925dba10394408e", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Meta-Key_a": [ "value-a" ], "X-Ms-Meta-Key_b": [ "value-b" ], "X-Ms-Meta-Key_c": [ "vAlUe-c" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3EC9DDC762\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "aa546589-101e-006c-1727-3eff07000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "23074008bf96ba4a", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3EC9DDC762\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Key_a": [ "value-a" ], "X-Ms-Meta-Key_b": [ "value-b" ], "X-Ms-Meta-Key_c": [ "vAlUe-c" ], "X-Ms-Request-Id": [ "aa546590-101e-006c-1d27-3eff07000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "49b333c3d06b93d6", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "aa546597-101e-006c-2027-3eff07000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }valid_metadata_with_content_type.replay000066400000000000000000000137641367004507500354360ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSPUMey+F/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "b551fd95169c456a", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3EC9F635E5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "3d83273c-d01e-0035-1127-3efa81000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "d804597048b421c0", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3EC9F635E5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Request-Id": [ "3d832751-d01e-0035-2427-3efa81000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "3f24f377e36e26af", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "3d832757-d01e-0035-2a27-3efa81000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }valid_metadata_with_empty_body.replay000066400000000000000000000140221367004507500350620ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSPULR0CHv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "266a260c8ec39864", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3EC9EAC215\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "0ec2378e-601e-0063-0527-3e12f1000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "f5fbdfe6108045f6", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3EC9EAC215\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Foo": [ "bar" ], "X-Ms-Request-Id": [ "0ec237a5-601e-0063-1827-3e12f1000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "4b7555ba5968ddf5", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "0ec237b4-601e-0063-2327-3e12f1000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestMetadata/weird_metadata_keys.replay000066400000000000000000000252501367004507500327260ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPUNni7Xv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "576cb60794f2c9ac", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Meta-Foo__0x20__bar__0x20__baz": [ "foo%20bar%20baz" ], "X-Ms-Meta-Foo__0x22__bar__0x22__baz": [ "foo%22bar%22baz" ], "X-Ms-Meta-Foo__0x2f____0x2f__bar__0x2f____0x2f____0x2f__baz": [ "foo%2F%2Fbar%2F%2F%2Fbaz" ], "X-Ms-Meta-Foo__0x2f__bar__0x2f__baz": [ "foo%2Fbar%2Fbaz" ], "X-Ms-Meta-Foo__0x5c__bar__0x5c__baz": [ "foo%5Cbar%5Cbaz" ], "X-Ms-Meta-__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__": [ "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ], "X-Ms-Meta-__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__": [ "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ], "X-Ms-Meta-__0x20____0x21____0x22____0x23____0x24____0x25____0x26____0x27____0x28____0x29____0x2a____0x2b____0x2c____0x2d____0x2e____0x2f__": [ "%20%21%22%23$%25\u0026%27%28%29%2A+%2C-.%2F" ], "X-Ms-Meta-__0x263a____0x263a____0x263a__": [ "%E2%98%BA%E2%98%BA%E2%98%BA" ], "X-Ms-Meta-__0x2e____0x2e____0x2f__foo__0x2f____0x2e____0x2e____0x2f__bar__0x2f____0x2e____0x2e____0x2f____0x2e____0x2e____0x2f__baz__0x2e____0x2e____0x2f__": [ "..%2Ffoo%2F..%2Fbar%2F..%2F..%2Fbaz..%2F" ], "X-Ms-Meta-__0x2e____0x2e____0x5c__foo__0x5c____0x2e____0x2e____0x5c__bar__0x5c____0x2e____0x2e____0x5c____0x2e____0x2e____0x5c__baz__0x2e____0x2e____0x5c__": [ "..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C" ], "X-Ms-Meta-__0x2e____0x2e____0x5c__foo__0x5c____0x5c__bar__0x5c____0x5c____0x5c__baz": [ "..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz" ], "X-Ms-Meta-__0x31__2345": [ "12345" ], "X-Ms-Meta-__0x3a____0x3b____0x3c____0x3d____0x3e____0x3f__": [ ":%3B%3C=%3E%3F" ], "X-Ms-Meta-__0x40__": [ "@" ], "X-Ms-Meta-__0x5b____0x5c____0x5d____0x5e___": [ "%5B%5C%5D%5E_" ], "X-Ms-Meta-__0x60__": [ "%60" ], "X-Ms-Meta-__0x7b____0x7c____0x7d____0x7e____0x7f__": [ "%7B%7C%7D~%7F" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA07771E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "fa87713d-601e-010a-4827-3e0b08000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "8a572f21b714df28", "Request": { "Method": "HEAD", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Etag": [ "\"0x8D80C3ECA07771E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Access-Tier": [ "Hot" ], "X-Ms-Access-Tier-Inferred": [ "true" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Meta-Foo__0x20__bar__0x20__baz": [ "foo%20bar%20baz" ], "X-Ms-Meta-Foo__0x22__bar__0x22__baz": [ "foo%22bar%22baz" ], "X-Ms-Meta-Foo__0x2f____0x2f__bar__0x2f____0x2f____0x2f__baz": [ "foo%2F%2Fbar%2F%2F%2Fbaz" ], "X-Ms-Meta-Foo__0x2f__bar__0x2f__baz": [ "foo%2Fbar%2Fbaz" ], "X-Ms-Meta-Foo__0x5c__bar__0x5c__baz": [ "foo%5Cbar%5Cbaz" ], "X-Ms-Meta-__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__": [ "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ], "X-Ms-Meta-__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__": [ "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ], "X-Ms-Meta-__0x20____0x21____0x22____0x23____0x24____0x25____0x26____0x27____0x28____0x29____0x2a____0x2b____0x2c____0x2d____0x2e____0x2f__": [ "%20%21%22%23$%25\u0026%27%28%29%2A+%2C-.%2F" ], "X-Ms-Meta-__0x263a____0x263a____0x263a__": [ "%E2%98%BA%E2%98%BA%E2%98%BA" ], "X-Ms-Meta-__0x2e____0x2e____0x2f__foo__0x2f____0x2e____0x2e____0x2f__bar__0x2f____0x2e____0x2e____0x2f____0x2e____0x2e____0x2f__baz__0x2e____0x2e____0x2f__": [ "..%2Ffoo%2F..%2Fbar%2F..%2F..%2Fbaz..%2F" ], "X-Ms-Meta-__0x2e____0x2e____0x5c__foo__0x5c____0x2e____0x2e____0x5c__bar__0x5c____0x2e____0x2e____0x5c____0x2e____0x2e____0x5c__baz__0x2e____0x2e____0x5c__": [ "..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C" ], "X-Ms-Meta-__0x2e____0x2e____0x5c__foo__0x5c____0x5c__bar__0x5c____0x5c____0x5c__baz": [ "..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz" ], "X-Ms-Meta-__0x31__2345": [ "12345" ], "X-Ms-Meta-__0x3a____0x3b____0x3c____0x3d____0x3e____0x3f__": [ ":%3B%3C=%3E%3F" ], "X-Ms-Meta-__0x40__": [ "@" ], "X-Ms-Meta-__0x5b____0x5c____0x5d____0x5e___": [ "%5B%5C%5D%5E_" ], "X-Ms-Meta-__0x60__": [ "%60" ], "X-Ms-Meta-__0x7b____0x7c____0x7d____0x7e____0x7f__": [ "%7B%7C%7D~%7F" ], "X-Ms-Request-Id": [ "fa87715b-601e-010a-5827-3e0b08000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "ca55771b83db9d87", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:48 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "fa877161-601e-010a-5e27-3e0b08000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestRead/000077500000000000000000000000001367004507500246325ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestRead/length_0_read.replay000066400000000000000000000136171367004507500305530ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPRMe+dAf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "74434a3f67908b67", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC82C932E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "22ceff88-d01e-0118-3027-3e3f14000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "8b2db417ccd8fd6b", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC82C932E\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "22ceff91-d01e-0118-3827-3e3f14000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "061538af514c8a1c", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "22ceff99-d01e-0118-3e27-3e3f14000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestRead/negative_offset_fails.replay000066400000000000000000000013351367004507500324000ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPRMa9kEv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": null }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestRead/read_a_part_in_middle.replay000066400000000000000000000140041367004507500323140ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPSAIThh/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "44fb7e77816cb1f9", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC84724FD\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "608f236f-b01e-012a-1e27-3e67c4000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "bb4c32f7886f7de2", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Range": [ "bytes=10-14" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "5" ], "Content-Range": [ "bytes 10-14/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC84724FD\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "608f237b-b01e-012a-2927-3e67c4000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "a2xtbm8=" } }, { "ID": "8db27bb315e7e45c", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "608f238d-b01e-012a-3527-3e67c4000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }read_from_positive_offset_to_end.replay000066400000000000000000000140231367004507500345470ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestRead{ "Initial": "AQAAAA7WcSPRN0w5OP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "45e9f0e49b723053", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC83AEDB8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "0699448c-201e-010d-7e27-3efd8d000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "0e3aca7e4be4ab76", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Range": [ "bytes=10-" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "17" ], "Content-Range": [ "bytes 10-26/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC83AEDB8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "06994493-201e-010d-0427-3efd8d000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "a2xtbm9wcXVyc3R1dnd4eXo=" } }, { "ID": "44b41f436678422a", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "0699449b-201e-010d-0a27-3efd8d000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestRead/read_in_full.replay000066400000000000000000000136171367004507500305030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPSBkaIJv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "b1b14330b43e5b13", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC8566A18\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "36d13745-301e-0059-2727-3e5152000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "bf72aa4cef48da45", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC8566A18\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "36d13754-301e-0059-3227-3e5152000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "49efef1e2ad40f70", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "36d13760-301e-0059-3c27-3e5152000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }read_in_full_with_negative_length_not_-1.replay000066400000000000000000000136171367004507500360570ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestRead{ "Initial": "AQAAAA7WcSPSC4Diof5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "7607af784e875f17", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC862EF8B\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "68d18d42-201e-0009-5e27-3e4e5a000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "cc25e0b446ee6726", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC862EF8B\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "68d18d5b-201e-0009-7427-3e4e5a000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "e7bd38f858e4f457", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "68d18d6f-201e-0009-0527-3e4e5a000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }read_of_nonexistent_key_fails.replay000066400000000000000000000127671367004507500340710ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestRead{ "Initial": "AQAAAA7WcSPRLE34Lv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "771947c143e61cd6", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC81E86D2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "3cb267d7-801e-004b-1627-3e654e000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "59ddf9339ff7d695", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "3cb267e3-801e-004b-1f27-3e654e000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjNjYjI2N2UzLTgwMWUtMDA0Yi0xZjI3LTNlNjU0ZTAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDUuODA5NzIyNVo8L01lc3NhZ2U+PC9FcnJvcj4=" } }, { "ID": "d9909723dee23b25", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "3cb267ee-801e-004b-2927-3e654e000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestSignedURL.replay000066400000000000000000000424471367004507500270040ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPXJ7q9bP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "da6bd68906cbb166", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Type": [ "BlockBlob" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "279" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "AuthorizationPermissionMismatch" ], "X-Ms-Request-Id": [ "6e310f3d-e01e-003d-7027-3ee1f2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QXV0aG9yaXphdGlvblBlcm1pc3Npb25NaXNtYXRjaDwvQ29kZT48TWVzc2FnZT5UaGlzIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB1c2luZyB0aGlzIHBlcm1pc3Npb24uClJlcXVlc3RJZDo2ZTMxMGYzZC1lMDFlLTAwM2QtNzAyNy0zZWUxZjIwMDAwMDAKVGltZToyMDIwLTA2LTA5VDA2OjMxOjUxLjcwMjM5MTVaPC9NZXNzYWdlPjwvRXJyb3I+" } }, { "ID": "22353516ee5c095e", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=d\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Type": [ "BlockBlob" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "279" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "AuthorizationPermissionMismatch" ], "X-Ms-Request-Id": [ "6e310f52-e01e-003d-0127-3ee1f2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QXV0aG9yaXphdGlvblBlcm1pc3Npb25NaXNtYXRjaDwvQ29kZT48TWVzc2FnZT5UaGlzIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB1c2luZyB0aGlzIHBlcm1pc3Npb24uClJlcXVlc3RJZDo2ZTMxMGY1Mi1lMDFlLTAwM2QtMDEyNy0zZWUxZjIwMDAwMDAKVGltZToyMDIwLTA2LTA5VDA2OjMxOjUxLjcyMDQwNDJaPC9NZXNzYWdlPjwvRXJyb3I+" } }, { "ID": "2c4b7eef107e9581", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=cw\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Type": [ "BlockBlob" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBAAC637\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "6e310f5e-e01e-003d-0c27-3ee1f2000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "f4af24a332ceaac8", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=d\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "279" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "AuthorizationPermissionMismatch" ], "X-Ms-Request-Id": [ "6e310f6a-e01e-003d-1727-3ee1f2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QXV0aG9yaXphdGlvblBlcm1pc3Npb25NaXNtYXRjaDwvQ29kZT48TWVzc2FnZT5UaGlzIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB1c2luZyB0aGlzIHBlcm1pc3Npb24uClJlcXVlc3RJZDo2ZTMxMGY2YS1lMDFlLTAwM2QtMTcyNy0zZWUxZjIwMDAwMDAKVGltZToyMDIwLTA2LTA5VDA2OjMxOjUxLjc1MTQyNjBaPC9NZXNzYWdlPjwvRXJyb3I+" } }, { "ID": "32637fafe7459f4d", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=cw\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "279" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "AuthorizationPermissionMismatch" ], "X-Ms-Request-Id": [ "6e310f77-e01e-003d-2327-3ee1f2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QXV0aG9yaXphdGlvblBlcm1pc3Npb25NaXNtYXRjaDwvQ29kZT48TWVzc2FnZT5UaGlzIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB1c2luZyB0aGlzIHBlcm1pc3Npb24uClJlcXVlc3RJZDo2ZTMxMGY3Ny1lMDFlLTAwM2QtMjMyNy0zZWUxZjIwMDAwMDAKVGltZToyMDIwLTA2LTA5VDA2OjMxOjUxLjc2NzQzNzNaPC9NZXNzYWdlPjwvRXJyb3I+" } }, { "ID": "687fd5bf95200325", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "223" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Blob Service Version 1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "6e310f84-e01e-003d-3027-3ee1f2000000" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+UmVzb3VyY2VOb3RGb3VuZDwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIHJlc291cmNlIGRvZXMgbm90IGV4aXN0LgpSZXF1ZXN0SWQ6NmUzMTBmODQtZTAxZS0wMDNkLTMwMjctM2VlMWYyMDAwMDAwClRpbWU6MjAyMC0wNi0wOVQwNjozMTo1MS43ODU0NTAwWjwvTWVzc2FnZT48L0Vycm9yPg==" } }, { "ID": "f6684b549bf0aceb", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Etag": [ "\"0x8D80C3ECBAAC637\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "6e310f8c-e01e-003d-3827-3ee1f2000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "f581f2b2af634b25", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "279" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "AuthorizationPermissionMismatch" ], "X-Ms-Request-Id": [ "6e310f92-e01e-003d-3e27-3ee1f2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QXV0aG9yaXphdGlvblBlcm1pc3Npb25NaXNtYXRjaDwvQ29kZT48TWVzc2FnZT5UaGlzIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB1c2luZyB0aGlzIHBlcm1pc3Npb24uClJlcXVlc3RJZDo2ZTMxMGY5Mi1lMDFlLTAwM2QtM2UyNy0zZWUxZjIwMDAwMDAKVGltZToyMDIwLTA2LTA5VDA2OjMxOjUxLjgxMDQ2ODBaPC9NZXNzYWdlPjwvRXJyb3I+" } }, { "ID": "e190f32382ab4373", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=cw\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "279" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "AuthorizationPermissionMismatch" ], "X-Ms-Request-Id": [ "6e310fa3-e01e-003d-4c27-3ee1f2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QXV0aG9yaXphdGlvblBlcm1pc3Npb25NaXNtYXRjaDwvQ29kZT48TWVzc2FnZT5UaGlzIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB1c2luZyB0aGlzIHBlcm1pc3Npb24uClJlcXVlc3RJZDo2ZTMxMGZhMy1lMDFlLTAwM2QtNGMyNy0zZWUxZjIwMDAwMDAKVGltZToyMDIwLTA2LTA5VDA2OjMxOjUxLjgyNzQ3OTZaPC9NZXNzYWdlPjwvRXJyb3I+" } }, { "ID": "5962534fe015adb2", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=d\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "6e310faf-e01e-003d-5827-3ee1f2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "4f462bfa53d02648", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-signing?sp=r\u0026spr=https\u0026sr=b\u0026sv=2018-11-09", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:51 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "6e310fb4-e01e-003d-5d27-3ee1f2000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjZlMzEwZmI0LWUwMWUtMDAzZC01ZDI3LTNlZTFmMjAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NTEuODU2NTAwNVo8L01lc3NhZ2U+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite/000077500000000000000000000000001367004507500250515ustar00rootroot00000000000000ContentType_is_discovered_if_not_provided.replay000066400000000000000000000544371367004507500366350ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPSL0URHf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "4af4dc0bdef36fdc", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "6354" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Type": [ "text/html; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/html", "BodyParts": [ "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "D2p8n/PT13C49/oZwq4Z0A==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC8BEDC22\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "9a4e8a6f-701e-001a-5727-3e7bbb000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "7cbef1613902d924", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "6354" ], "Content-Md5": [ "D2p8n/PT13C49/oZwq4Z0A==" ], "Content-Type": [ "text/html; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC8BEDC22\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "9a4e8a76-701e-001a-5b27-3e7bbb000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" } }, { "ID": "c4ef428abe565908", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "9a4e8a79-701e-001a-5d27-3e7bbb000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }Content_md5_did_not_match,_blob_existed.replay000066400000000000000000000135671367004507500360560ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPTCEc0sv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "984ac5464a1e928e", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "16" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "dH9B/ScP7BuCvgMMwc1IAQ==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "ZXhpc3RpbmcgY29udGVudA==" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "dH9B/ScP7BuCvgMMwc1IAQ==" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC8F3B178\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "27c7c418-f01e-0104-5427-3ee703000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "afae14a6b218433f", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "16" ], "Content-Md5": [ "dH9B/ScP7BuCvgMMwc1IAQ==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC8F3B178\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "27c7c428-f01e-0104-6027-3ee703000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "ZXhpc3RpbmcgY29udGVudA==" } }, { "ID": "5c7681f2df1a69cf", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "27c7c433-f01e-0104-6727-3ee703000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite/Content_md5_did_not_match.replay000066400000000000000000000043561367004507500333320ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPTBXq5zv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "6dfb82ce6f969f3c", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "515bcb6f-301e-0052-3827-3e4926000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOjUxNWJjYjZmLTMwMWUtMDA1Mi0zODI3LTNlNDkyNjAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDcuMTMwMzE3Nlo8L01lc3NhZ2U+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite/Content_md5_match.replay000066400000000000000000000135471367004507500316340ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPSObb4GP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "a01e25ca1f31f2ff", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC8DB42F8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "3d83214f-d01e-0035-0927-3efa81000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "7589b2db349f70f2", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC8DB42F8\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "3d832159-d01e-0035-1127-3efa81000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "fa932eef27720c96", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "3d832185-d01e-0035-3727-3efa81000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite/a_large_jpg_file.replay000066400000000000000000003234461367004507500315340ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPTFFBUcf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "b1955321e7741d1e", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "38430" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Type": [ "image/jpeg" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "image/jpeg", "BodyParts": [ "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "YtQ/og5wv6H9siUQ0cBg0g==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC912FF10\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "ad4adcdc-901e-0010-0d27-3e6232000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "f27f58e61a150ad7", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "38430" ], "Content-Md5": [ "YtQ/og5wv6H9siUQ0cBg0g==" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC912FF10\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "ad4adcf0-901e-0010-1f27-3e6232000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" } }, { "ID": "a4047c50caee602d", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "ad4add01-901e-0010-2d27-3e6232000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }a_large_jpg_file_written_in_two_chunks.replay000066400000000000000000003234461367004507500361630ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPTHATG+f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "3d954c2277267247", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "38430" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Type": [ "image/jpeg" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "image/jpeg", "BodyParts": [ "/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAH0A+gDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKDRzQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFMkkSJS7sFUdSTQA+iq/wBth3Fd65xnGamV1YZByKAHUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAAGBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFNd1QEsQAOpNADqKwr3xhoVg+y41O2jbjgyDv0qXSfE+ka2hfT76GcA7TtbkH6UAbFFICD0NLQAUUUUAFFGRRQAUUmaTcPWgB1FN3j1FKWA7igAZgqknoK8H+InjWbVNZfSLB7zCtsWOA43sD349vf8ACvV/Getx6H4Wvb9tx2R4G3sTwDXm3wm8OQS2cmuXRWe6uJGdXcElBnpzQBg23w/8ZzWx1VdRe2ugQ8VqJTwPQt612HgDx3qt/q02haxAqXlumWIBBbnuO3avTFjQRYwOBXjscsQ+O935TNkxBWA4Gdo6468etAHtkbbkBp9RQf6sfSpaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAzzRRRQAUUUhIHU0ALRTd6+op2QaACiiigAooooAKKKSgBaKKKACiiigAooooAKKKKACkzzS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAjHCk+leGfFLx1Lcu+jaeWVt+C5yuSO3PHPrXtWoXAtrCaYnARCa+f/CsVpr/AMTrm4kh27GJH/TQjvQBteDPhLb3lrDqOuhppZIx+5YkY5zzg81ual8Jbe0/03wzdy6bfpkptfcjcdDnJ/KvTII0hhAHAAqG21S0unZIpkZkOGAPSgDzjw58R7iz1FNC8URi11PzCgbGFcdiPY9K9PhuEmQMjAgjNeY/GDwuuraL/adoyx31mCwbpuTuMiuK0r4u3dn4dWK2t/PvEUKzHO1T0+tAH0M0iqMkiqN7rVhYQmS5uooVHJLuAAK8bt9b8b+I51tSk1sHhwxQfu8nnduAz07Z61sxfDDU7u1SS91udpjy6uisufUZHB/GgDrbvx5pdtG0yTfaI1++0QyE6dfzFY//AAtrRxbzvtuGkjJxEqZLc4GCOOfrUtn8KdFifzLjzbgk5Ikbg57YHaujtPB+iWciywWECSKMbggzigDz+/8AjEpkENhp879N7MCpXjJ4I7fWs+38ZeM9TZpNP064G9SYy8W5Poc4A7cjNewLo1gq4FrCBnOAg61Zjto4wAqKAOmBQB5E918S4oTO0NvgA5QqWJ54IA6fmaW3uPiUbIl4UM8pUpkj5Fzzn3wf0r2DYuMYFARR2FAHjEuieP8AVdMeO+lhk8zG23lVQFI65I/+vUdnYfELSVjgiht4oUXhLeNNuc/d59QeuO1e17B6UFAe1AHkJ1P4kral5LW3B3bQvl7mJ9eD07Dp71xOneIbnS/HtzfavpzQXHypcm35AY45Oe2PSvpQxqR0FUP7HsvPkmFvGJJDl22DLfWgDldD+JWg6mgCzvC27afPQqAc9CwyM/jXaQXUU6bkdWHqDmuO8Q/DTStaVmiZ7Nnbe4twArtggMR689f8K4dPCPjvwlqAbR7yXUbJWBWIyhV285BDd/cUAe35FLXmWj/FKKG6+xeI7cabMuMlycZ98jjPNei2l9b30KTW0qyRsMqynINAFiiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkJAHNDMFUk14/8Svik2ku+j6Q2b8nYxGcqT6Y70AdX4z+I+l+E0WJmE94+QkKHOD746V5i+vfEfxvI0mnIdOt1YDumee2eTWt4E+Hd3qdxFrPibdNPnekbnOOc5P8AhXssNjDCiqiABemBQB4LeeGPiNpdp9rbV5rnaQzJFKxbaBzycelbPgv4k6hFd29lrMwlE+7bIy4KlTjHGc+tezmNSuCARXm/xA8HW0Wh3OraVFFb3to5vC2OHI5bd+FAHpEUgkjV1OQRmn1zHgjXBrfh2zuiyF3jBYIcgHvXT0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUCigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDm/HAu/8AhGLr7Jy+35lClsr36V4F4V1P+yvHscqPuieQq+8EHBPvX09KgkQowyCMGvCvif4Hk066XW9LgJgiO6ZUYIUHc5oA9vgkE1sD1BFeF+LdS1Dwd4s8+CSRoZpCxYrhR7H1r0jwf4lh1Tw/bzLICdoUgsD04NR+JfCFr4ihfdEjyEEpuJ2nPrigCDw74ms/F2nK6uCRw6MO/wBK85tLaDwf8UrnT57Um01Ah4eBjJI7exroPCngHWfC3irfAXksHHzlnGB9PU/hXoeueD9M8Q/ZpL2FvPt23wzRsVdD7EUAatlbxrEpRQBjjAq6BUdtCIIEjBJCgDJ6mpaACiiigAooooAKKKKACiiigAooooAKTaKWigDmPFnhKz1+xYmygmukH7vzRgH2J9K8ut18VfDAtcmyku9IL5ljik3LCM9VHX8694qOWFJkKOoKngg0AYnhrxXpvifTY72wuFkVuGXoynuCOxrf615l4h+H13pt1Jrng2b7Dfg7pLVR+5n9iOgPvT/C/wAUoL27Ok65bHS9WiKpJDKRhiRxtNAHpVFRxyrIqkHORUlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVa/keOxnaLmURsUGcZOOOaAPNfix4/Gh6c+l6dMpv5/kyhyUB6/Q1zfw5+Hvk3S6xrDia4kXKIQSFzzk5715idahtvFM97rllNc3CSNiLO75857mtS/8AiP4k1W+SbSEmtYYQFjRTlQfU9j+NAH1NbNFHGFUjgVP5qk4Br5k0i6+J2syzPb3txFIcYUqFTBHXNbF/YfEnwzbNrl7rxniiw0sSMSAM+mAMc0AfQqnNRXltFd2c1vMu6KVCjqe4IwRWT4T1pdd8P2t9n5pE+b69622+6aAPHfhQyaTr+r6MVdHimb5cgrgMRwevQDrXsleFWVw9l8b9SSGDejNyzM3yBgDkDpyT+le4RSB0BHTFAEtFFFABRRRQAUUUUAFFFFABSb1zjIzXGePfHEXhayEEGJNQnGIowRkZ4Bx1PPavJp7nxvcvJqckOooWVZPMVDwvU4xyOO2B0oA+jcg0V4l4d+KN3pl3Fb6zPFd2Uj7Eu425QcD5hjOM8ZNeyWV/b39vHPbyrJG43KVOcigCzRRRQAUUUUAFFFFABQM45oooAKKKKACiijFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACMcKTXkvxX8cPpsf9iWNsZ7q4jOcgNt/4Dg5rr/GfjO28Lae0hTz7huEhVwGOe/Nee/D7wzceINduvFOsRyM0r/6OJjk7fXGPyxQBw2gp4m8Hz2zzwsIZz54DcKOuVx2r6D8Oa7bavYQTxkB3UNs3AkfXFR+KPCNt4j0OWwfZG5H7qUpkxt6iub8HfDm88MysTdpIdy/OAQWUHoc0AekqB1xwafSKMACloAKKKKACiiigAprNtHNQXN5DbRs8jgBQTXk/ib4nHzZLPSZvtN0GwIYoWLNg84PT/P4UAeszXkNuheWRVAGck4rIu/FemWgQyXMY3HH3xgcZ5ryo6J498TuiNs0q0YjIaUvJj/P0rorH4M6SrmW/uru9Z1AkE0nBPqMcigDoJviT4bhKhtTg2scAq2f5fStey8UaTfQiWC+hlQ91auePwm8KnP/ABLEyV2n526enWqFz8GNAaN0s3u7TcAMxTH8+c0Ad/FqdrM5RJkZ1ALKGyRmrSyK3Qg14xqnwl8QQSxz6T4ou96YUGWRgQmOmRwfyrNtPGPi/wAATxw+KIzdWJcr5wIZwBnBOPXjrQB73RWFoXifTtds457KdZFYZ6YrcBB6UALRRRQAhFcJ49+Hdl4rtvtEP+j6nD80M6Hbkjs3qK7ykIzQB5R4E8Z3sOoyeGPEMMkGp254ZyMSDtg9+Oc16Y+o2kKAyzxp0HzMBzXnvxb8L3F5ow1zSJHh1PTyZQ0fV1A5B+grzz4e+H38d2klze63dvMshEyMxJz26nGPwoA9guviV4dtZpInumby+rJEzL+YFRzfE/w5FKsYuJZCcZ8uJm2k9jgdam0L4f6Nom54YmllY5LytuPTFaR8JaOZXm+wwiRyCzBcE4II/kKADRvFuk65G72dyGCMVIYFTkdeDWzHPFKMo6kH0NcNq3wt0W6gdrKN7O5bJEsUjDJPrz0rjLHwd448Jy3UtnqsdxCpXyoSSxcDtg8LQB7gKK8x0T4pQrNFYa7by2V8ZPJIdMBnx25OByOtekwXEdxGHjYEHmgCWiiigAooooAKKKKACop4EnQqyg5GOalooA4w/D3QU1c3rWELvJnJdQ3P49K37fRbC0j2Q20SKOgVQBVy9uBbWrykZCjNeHax8ZNdu76Wy0DSVkkRmBcqzAAH0GKAPZha28N0SgVc8kCuU+JGrWVn4N1SNp4RNJAyohkClieOK4C3n+J/iLT3hZ1t1n+UyeRtKg475+tOh+Ceu6iqHWvEUsgUAbFLNx+JoAr/AAv8fW+neGja3swQ20nVmABB5rvY/i74edMO86ZztYxHDfTFZGkfArSLOM/apnncjjtiuug+G/huGFY/7LtzjqdnJ/GgD551/wAW3f8Awnd/renxXAjlOFDcE4AwenT2r0X4ffFu8vNTTSfEVutrLJgRSlSgY+hB716oPCejKBixiyvQlc15x8Z9MtLfw/aXcapFcRXAMbKBu6HPHftQB7DG4kQOpyD0p1c74L1JdT8M2M6ur7ohyvTI4NdFQAUUUUAFFFFABRRQelAHhHjRbfVPi5psMkhZVlAIC4K7e3X1HoK9straMQKAoxivEviXbxaX8QLK+l3ojyK4kCA7TkdDn869ig1W2h0xLiWZFiCbixPbGaAMzXPAWga4h+1WSh+MPESjDGccj6mvJdO1zUvhd4wk0vVJrm40eXLRyMdwRScAj+tdzqXxp8KWbvGLiWR1BxsjPzEehryHxr42/wCEs1azbStMupkjyNkiEs+e3HbvQB9M6Xq9pq1lHdWkySxSKCrKcgiru9c4yM18ueHrr4hWmbDR7C6tY2zKUlQquTzwx/lXXaXp/wATpA1zdPtfj5GlGT/hQB7o0iKOWA+ppv2mHOPNTJ7bhXicvhrx9NObi9kNwrc7DKCI/YAde361Wm8MeLZFP+hlkzgMu4MuAexP+c0Ae7+bGf41/OnBgehFeFjSPFltNvlhvmhUqMRTMMdOncioodZ8RaYRFNdarHwSEADgEDOORn8M96APeqK8LtPilrxkSGYwCQrv2zRMm0e/ua6nTfig77Beaa7DgGS2bzByM5xjNAHpdFc7pnjXRNUYRxXqJKf+WcvyN+RrfSVJEDI4ZT0INAD6O9FFAATiiikJA70ALRWXqHiLSdLLC8v4IioywZxkD1I9KXT9f0vVP+PK+gmOM4RwePWgDTooBzRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWXr+s2+haRPf3LAJGucE9T6CtMnAzXivxZ11tV1a18PWe+TDBpFRScseAOv40AUfD+lTePPF82ramubVCNsbgMCOw9OPpXt9nZx2kKxxqFUAAADpXO+CfDkPh/R0hXl3O52xjJNdZQAmDmloooAKKKKACiiigAqlql9Hp1jJcybiqDkKuTVwkKCT0FeR/EfxfcXV3F4e0O6zcXLbGePDAdiCCD/kUAZN/wCI9V8feJZNG0WdodNjH76dAQR0zyRj1GPavRvC/gbS/DlikVvCrPnc0rqNzH1zVfwF4Pg8M6UIgTJPJ880p/iau0AxQA1Y1UABQKfRRQAYooqGS6gibDyKp9CaAJsVla34e07X7NrbULWOeMjow6e4q7He28rFUlViOuDnFTggjigDwTVvhz4g8BiTVfCt956oWJgeL5tp984OPwrrfhv8R28Ro1jqqRW+pxHDRA/f9wK9MkjWRSrAEHgg14P8QdHk8F+L7LxHpqxpDJIA0YQD6gdOtAHvKtuAPrTqzdGvl1HTYLlCdsiBgD15FaVABRRRQAySNZEKsMg14TfwN8NvifHIg26Vq0pdnx91jnK+mM4Ne8E4ryv46WLXXgoTxKDLbzrJnbkgdyD2oA9OtpVlhRgc5GanriPhjrX9s+ELO4aQvIF2Mx6kjiu3oAKjlhWUEEdqkoPFAHnfjz4f2OtW73xkliniG7zIkBbAHbHNc58PPGFxp+tTeG9SnMsasRaXDnHmqOwzn1r1y5vII0bzXVVA5LHAr56+JNsPDnjTT9SslIidlKOvRSDyue/rz69aAPo5G3qD606sjw5qMeqaNb3URJSRAwJrXoAKKKKACiiigBAc0tFFAFbUI5JLGZIQpkKELuOBXh3wndYvFmtabc7fO8zeFYc5BINe8P8AcOOteFJatofxw3hfLivSJAAf73X9aAPdFjVVACin4pFOQDUN1KYbaWRQSVUsAO/FAEjyIn3iBVG81zTrBS11ewQgcnfIBXzh4h8b+KNf197SK+e0j3lFjU7dpH6nGOtdDYfCaS/ijudR1qeYnDlVUDJ7gk5yKAOz1z41eHNOLw2bvf3A4CRDg/jXnkms+Lfibqf2eO3+yWBYqf3WVVfUk9T0/wDrVn6r4RtPCfj/AEvZt+wTSKhDqXOT65GBzivofTLWCGBPLRQMdhQBB4S0NtA0SCyaUysg5Y1vZAqB50RCSwGBXG+LPGkOjWMsguFj2jO88ge31NAHaS3UMK7nkAHua5/UfHvh3Sw/2jUoA6ZygbJ4ryG2m8U+O939mh7ezJ+a4uMjPsq9xXf+HfhjpOnW0RuIlubnO6SWZAxY49xwPpQBHN8aPD6k+Rb6hcjGf3VuTn/PP5Vp23xS8MzwCSW7kt2xuMc8LowHrjHT36V0UGhWFsoEVvGvrtQDNU9a8JaPrsCRahYwzKhyu5RkcY4PUUAWNK8UaPrW7+z7+CfacNscEj6itOS4jijLs4CgZJJ7V4V4u+HVl4WE2r6Nq8mmyKMxopPJx0zye1cTB428aeLbVNEgnlcr8ssiDLOM9WIHHTtQB1/xj+IOkalZLpVhH9qm35EwyAuCRx69PpXLaJoni/x7NaQXc9zHp6KoYlWRCAPTuceld34P+DjJNb3+uXUk86YYIrEgY6ZJ5/CvZrWyhtYwkaKoA4AFAHlenfAvRIh/pFxcOOcgEKCCc449Oa9A0zwlpOlIgtrSJSi7Q+3LY+vWt2igCAWsS8BAB9KlVAO1OozQAmB6UYHpS0UAJtB6io3toZCC8asR0yKlooA5rUfAuh6lcG4kt2jmJyXicqc4x2rm7v4R2hG+x1S7gnByGZtw/Hpnv3716TSDmgDya/8Ah3rJRxFdLKcD95Kfm4HGMDP+etY2nah4x8JsZbi1urm3UBXjPzIuDjIORj6V7nUFzaQXcLRTxJIjdVYZFAHlA+NsEF6IbuzZEwFJCk/N39gOnevSdI8QWGs6el5aXCSRN3U5xXC+NvhtHqjJLYfut/EgXAI989ef6V5Ott4s8Naw3hjTdQjuTdgB4kcv5fr6Y/OgD3XxP8RNL8PObcCS6u8f6qIcLxkbieBXmVx4x8ceMb1k0ZZLe23gDyU28d8sc812nhr4W6Xa20c+qxte3jANI0zs4yPQE13ltbWtogSNEQKOmMAUAeMWfwc1XUpEutY1yVpicsMb+vXkn+lZPibwXP8ADyS1vrPVbpYDwSqA5YHOCMgdK+hYriCVikUiMy8EA5Irj/im0cfgm6aRcncojwoOGz15B96ANPwTq11rHh6C6u12uw44xx27mukrlfh/A9v4UtY5EVCF4CnII9eAP5V1VABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSc59qAFooooAKKKKACiiigAooooAqahdJZ2cszkBUUkk15R4Mg/4STxdf6424xiQqFKbVyMY4z1/Kui+KmpT23h2W2gKDzxsYnOcHrjHSrPw60ZdI8PQRhQHb53Oc5J96AO0jQIoApxOBmgUY5oAWiiigAopOc0tABRRRQBn63ci00e6mJj+WM4EjbQTj1rxz4W6NJrOv3fiO7WM7mKRbVHH+feu2+Ld4bXwZMBHG+9guHzx9MEc1Z+G+mLp3hKxQRorNGGbb0JPNAHYxoEXAFOxz1paKACiiigDL13U10vTZZ2YDapPNeAya/rHjTxI+n2N09umCfMychRxxj616F8YL2W20CfbIEwuef4vYVz/wAOpdG07w6l9LeReaylmZ35XuR1oA841lfEvgzxFFanVy0sieYpVyARngH8q9J+H3xdm1C6+xawYxtGBIhwD065NeOeO/EUfiTxfNewybrYYSLdkAKPr0qnpDSWt7bnywQScYbryMGgD7bjdZEDKQQRkEVxfxS0WHVvBN6XQGW3QzRt02kVueFJZJvDlm8ow5jGQauavbQXml3NvcIrwyRsrq3QgigDjPhTqp1HwrbBiN0WU4AxgdOhPavQa8I+Dxex1a7sFuEkiDHYglDYXPXivdh0oAWs7WNasdEsZLy/uI4YkBOWOM47D1NaDHAJrwDxdcXPjz4iHSFYrZ2WV2FhgHPLEevTFAGzqPxqvri3E+heG7q5g3bTNIDt/DaP61yPij4keJdX0a50+/0IQRXKmMSbGyT3IB/Hv2r2/RNNstO0+G0hRVjiAAHrir17ptld25SaBHVieCOh9aAPHPhd8QtP063h0S7gkt5VYIHCcEn1A5Fe8RSCRAw7186/EDwQnhvVDrsChLNSoCxMcq3bg/QdK9l8C6s+s+F7K8dSrPGMg9/egDqKyfEeprpGjXF2zbQi5zWtXEfFSC4n8F3KW5+Y4zzjigDxXxDq3inxL52oAyw6cD5aNGTgehIzyCa4bU77VIZDb3k8m1lD7AeGB75966q48ciw8Ox6R9nDRyQiMhSQyMD1+hri9S1D7b5UqhVZE2YBycDj9aAPpv4Oagt34MtEVyxjyrcjr+dek15F8C7Ka28JiWZcedIWXjHHT+leu0AFFFFABRRRQAUUUUAFeR/Fy0bT9V0XXoY8eU5ilcYz1BX3PU165XC/Fuy+2eAbxhnMLLINoyeuP60Adfpl0t5psE6nIdAaluU3wOvPIxxXCfCPWxqvg+3RnJkg/dtnrxXfuMqRQB8eeNLJ9L12+cMFkt7xl256huc4/D9a6ew+J3i06Y89lo6PaQx4eRkbHAPOcit34reFmg8Y22rLBFLaXWEdXYcyZxyD2x6e9Fzf65daFLYWGgW9laeSY3a4k2AAjnAx2H8qAOGtb3xR438T2d1MGlEbJKViPyqoOMgZ69a9g8WeO5PDYs9NtPKlvZgAyOx3L6YA7nPWsb4PNaPplxAGVp4JWViMHjPrXn/xL1WWH4gXE7xIzQN5akkg4HTvigC9rHxB8VaBf+Tc38d15iBpIj/B7AjHvVnwvYaj8Q9fS+1NSunxkFYP4WI9fWvP7O0u9c1t+EaR2BkLHjH+RX058PvD66Vo8AZFD4GcUAdbpelwWFtHHFGEVRjaBWkAAMDigDA4paACuN8beO7XwtaeXGonvnB2RBgNvuf8O9a3inxHb+GdEn1CcFyg+SNfvOx6AV8/WcepeOteuLmOEy3EjL5ssg2rGM5A4OfyoAzb0+IPHOrNLKJ23Z89yfkiXP3QO3Tp717p4A8E2XhnR1ihiJdzuZ2AySfU1c8L+DrHRtNWD7OhJO6Q4J3N68k11kcaRqFVcAdB6UAKqhRgDFOorE8SeKdM8L6c15qM4jQfdXqXPoB60AbLOqAlmAArifEHxO0TR5TbW7PqF7natvajexPpx0ric+KfifetOlzPpWgZxHEpKvMvckg85rvPDnw70Xw+Ee3tVMw5MrElifxNAHOP4w8fajI/9neF47WNV3gXbks49iMAH2rPufEvxVtQssvh+3cAfMIjuz+TZzXsSxIowFFKY1JyQKAPH4vjHdaazReINDurORDgkKSCfyrtfDvxC0LxHEDZ3aeaesTHDj8K6Sawtp1IkhVs9ciuE1X4R6HcM1zpYk029GSk0DkAH/dzigD0BJ436MKkr5+Os+KvAXiu3ttenlnsGJVLnPyOOMZHY/417XomvWetWaT2sySKw6qc0Aa1FFFABRRRQBw/xK8Wjw5oyW9uUa/uzsiRienc8c1mfD7wU+nvLrWpYa/uuTxwg64Gcmum1nwXpuua7Z6peoZHtfuIWO3PqRVnxLcSad4fuGtreaWQLhUhByPy7UAYnirx1baLK1hbI0t1tyzKQREMdSM8/SvLYtR8RatqLz3V5ESzhYvNl2q6/wC7yMnPTPatbw58Mv8AhI5zrWqQzWrSSEm2cnp+hFdNL8JrCKB/sckgZnDAO5wv0oA6Pwnoh02JriY5nlUBjuzgAdM964v4iXuoeIvE9n4c0uPzIIWDXDldwVscZ9MCur8Ua5F4L8IlizNNtEMA5ZmfHFZPww8PtbWMusXiyfb79vMl8zg/l2oA73S7c22nwxMAGVACBxVygDFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFBz2ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKQnAzQAtFFIehoA8j+KMd1qOr2NhDCH3Nkhmxx+dekaDaiz0uCAY+RAP0ryv4nGX/hI9IljRWj8/BwOc5H5V61pf8Ax4xk+goAv0UA5ooAKKKKACiiigAooooA80+MshXw7bKFDbpwMbAx/wDrV2XhtFj0W1RcYEajj6Vz/wAU4oz4RlmktoZjGw2+b/CfUe9X/Ad+L7wxZSblY+WAdvTigDqqKKKACiiigDiviR4VTxPoDQiOR5UPGyQJx3znjFfLeseHLnQbuSO5RpIgzKAHwwIOORX2yRmue1bwXomsySSXVmheT77AAFvxoA+NYrP5opUO5sj92BuOa9P+HPw7v9X1aLVL6F4bYPkApjOOePSvb7P4deHrSbetjG+37gYZ2109vaw2sQjhjVEHQKMCgBbeEQQrGowAMCo9QkSKwnkfOxY2Jx6YqzWJ4s1CHTPDl7czyrGixHk+vpxQB4/8IAlx4o1WaNsRpIwiDDJZSfX8K943BUyTgDqa8b+EFhJFDPeSs3znKq3JAPI5zzVj4g+O7xrkeHdAUy3U+Y5GUZx2IHpj6UAdT4n+I2kaFA4VzcyjK7IumcZxu6flmvCNRuPFUeuN4l0rw/cWkc56rGZC2fX/APUK9e8HfDDTLGwguNRt1ub0/vGaTkKevA/E16JHp9vHEI1jUKOgAoA8d0HxjqMUKi/huBdbctE8YTp/KtmT4iNLbSRxeRDOB0d84+uK7vUPDWmajzPZxOQD1Xr9ao2ngnRreR5P7PtvNcYZljxkUAeE+MvEK6pFLA95LqFzKoAjQYii56jjn617N8NLZrPwjYxSkbxGMjPSqviT4W6LrVqVigS2nUYjkjXla4PRPEOr+AddbStXQGAyEq2f9YpOAw6gHjpkUAe+jpVW/sYtQtWgmUFT2IyKWxu1vLVJl6OMgelWc0AeJeJvgdBfX013ZzkNK5YpkIFznpwe9cLrngay8KaHHDcxxtrN3KURPMDMieoXv6cetfSut6raaNpFzf3kgSGFSSSQM+3NeH+EBdePvHUmuXkSG3hYhI2G7YoztA464Oc5/pQB6x4B0uHTPC1lDDGUXywcHrzya6qo4IlhhVFAAUYAFSUAFFFFABRRRQAUUUUAFQXkC3NnLCyqwdCuCM9qnoPSgDxH4SSHTPE+taQ6vEySbhE+Mr+XFe29q8Q8SN/winxntbyOVxb6gAZVJ4BORxx0yPevbIXEkSsO4oA8++L1oJvCDXAVQ0EgbcewPB/nXD2fhHSbnRLS/wBW165MEZEjxyXAK57g/wAuK9h8W2B1Lw1f2qHDvC2364yK+fvDEOkarbXH9vSMyW2WUtOQBnqCAeuR+vtQBtaTrOk6J8Sha6GEktL1AjJbgAIwHU/lWV8V9GW18QNrE1s09tKgA2gkI3Oc8/SpIry01fxHpx8I6LO0Vq582QAKrDPU/TrzXQ/FuSWDw40bYVnUjGPzoA5H4S6TLqmqG5C/ulfLkqCD7V9IWdqlrH8q4z79K8o+CdtCNBWVRyxORjpzXsDOQvt60AWBTC4+b2FVJL1Ily7AAVzHiXxna6VoF9dLIFkjjbZ0OW+lAHmPjO+vPHPxDbSLFRLY2eEcknCt3OM8/iK9W8LeF7bRLbEMYDNy5AxmvN/g9plxI95rOoFlkvJCyqc4xk817fCFCDGKAJdvHFLQKDQBl+INdtPD2kT6jeNiOIZxnlj2A968S8K6ZqPxJ8Tv4h1ku+mo5EFu5ynXgAZ6Ditzx/d/8Jr40tvCVm5NvaMJLx19f7v4f1r0vw7oVroenpa2sYSNRwPegC/ZWENnGEiRVUDAAGAKt0UhYAckUALR3pokU9CD+NOoAKKKKAMvXdFtNc0qexu4leKVCpBFeCSrq3wo8RKsJa40x3AAkJ+QZ/lX0fXHfELw1Hr2gy/JukjXIGOooA3dD1eDWNNiuYXDB1ycHoa1K8K+E/iSbS9en8N37MFOWgL9cZ6GvdQcjNABRRRQAU1kVxhgCO4NOooAQKFGAAKpatqlpo+ny3t7MsUMalmZjir1cV4z8GXPi+7tYpbxoLGDLbUGSzHjnnH060AeO+Pdd1DxRP8A27H50VhYufsymEFAM4DE55Jx36V6R8MfHttr2nJazMiXsfyug4z7iu007wxp2maSNPgt08kLtKlevrmvD/G/hOX4d+IrTW9FaSOzdyTGgJ2nOSCfQ0AfRQIIyKWud8IeJLbxJosF7A3DLyDjKnuDXQigBaKKKACiiigAooooAKTvS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAYooooAKQ9KWkPQ4oA8p+KER/tLRpASo+0c7VyfWvStN/484sN/CO1edfFaNo7SyuFk2vFPuBLAf8A167DwlNLLpMQlkEhA4YelAHRUUUUAFFFFABRRRQAUUUUAY/ifTV1Xw9eWjRmQtGdqrjJPbGeK86+FWoy2kt5o1yJQ8EmR5iBcZ7cfhXrhGRivF/iNp8nhDxBbeJbESRwyuRP5fOW9/rj6UAe0KdwzS1zXhXxRZ+INOjnt36qCVPUV0uaACiiigAooooAKKKKACvIfjJrjzxWvhuyaRprlszLF1C9uMc+uPavRvEGv2eg6ZNd3UqosakjJxk+lfPmhy6j8QPHf9qyNK0UUoxj5cLngfSgD03RLCbwt4LmuBExuIoSThMlsAgHArifhht1fxlfahcyyyPHlsSnjcTzgHpXtxsEn0uS2dcq6bSD0rwXXNM1X4c+I4NbgSSYSZN4GcFWUkdB2Pt7UAfRUIGwYPGKmrkfDPjjRdesY5LO/hdyoLR7huX2Ircm1uwt0LzXUaIBklmAxQBpUV5re/GzwraX5tRPLIB1mRMoPTmr/h34maPr+9UuYkkUn5d3UevNAHdHGK8I+OTJDrOkSLG5fDBnHCquR37fX2r0HWviRoWlWjyLqNpLKpwUE44+uM/lXhHiHxZH4x8dW15eMDptsAI3RSuR75HqaAPozwk06+H7UXMwlcoDvxjIqzrfiTTNAtPP1C7jgQ8DceW9gO9eLP8AFfV7uX7DoFjHFGija8rZd+3yjpSxeDfEviy7tbrVrgyZOWVmJQDqeM4BwcYAxQBoXWp6j8WNZeyspZ7XQIGwzKoPnng5Ofr79K9Y0DQLXQ7JYLeNQepIUDJ7nApdC0Gz0W0WG1gSNRzhRitigAooooAKKKKACiiigAooooAKKO9FAHlvxksHXTbTVE2f6PKC27OcjpjA+td34avl1HQrS4V1bfGCSp4zjmmeK9P/ALS8OXkIClwm5d0Yfkc9DxXG/CLVml0a402YAS2czIQD2/pQB6POgeNge4r5W8Q6Jp+l/ES5s5jLLbzzbmiVyig57k9e9fVcgJQ7etfPXxU0yWy8YfblTEbqG+Xg479/XNAHsnhnRbDT9NjS0hREK547nrnPeuP+MfhufU/C8lxbAmSD5iAccZGf0zXZ+DLoXvhqynByWiGeMVt3NulzA8UgyrAjFAHlXwckhPhtYhgSox344zzXomr38en24kkYKGOMnoK8sjM/gX4gS27tEumXpBRVwNnYEj6it74ka3pw8Kuk1ygkJDxKG+YkZweo4z9elAHBalquufETxHdWFhcz2WlWhKl4iQ0pzjr+dYOq/C7U4pEgs7uYhz+881sgj6d6m+G/jSw0PWbiDUJVSC7ffHIpyqE9Q3pXvNvLY6msN3a3Mbqw+UqQVagD57jvPGHgFh9te4+z7R5ZiQvEOehz0r2bwD8RrPxPH5DsI7tFBZOua6vULWxlsGW4jjZcfMGAxjvXzppd3aL8TpE0SJo7Vpx+7GUAOec4yMZoA+pVYMOKralcrZ6dcXDttEcbNn6D8afasWgQnrjmuN+LV89n4AvtkojaVkjB9csOP0oA5X4SWH2681PX5iWmu5my2zAIBPSvYRhVznAFcZ8NrJbTwlYoFAPlhjjuTXYzgtA6gZJUjrigDkPE3jqz01Ta2dzA964by1Ykgkdsj34rgb/WPFuo2VvLNJOEkILJaJuXBPdsfpivO/HUs+l+IZ0k8ouHYIyqcsOnOeKl0b4matpOiQqUimCsQc5+YDoPY/SgDes/iNrGl+I/ImnuGskc71kGWUZ6gDBwMdK958Oa9ba9psdzbzCTI54wQfcdq+NdT1mTWNflv58hZHLbOoUGvbvgtq0gPkuVCynjjrxxjigD3WigdKKACmuoZSD0NOpD0oA+cvGbJoXxbsbiByjtKoZuMYPFfQtlL5tpG+c5UV89fGtVXxbBNG2243KoVRnPIINe7eG3Z9GtixO7y1znr0oA2KKKKACiiigAooooAMjOM81l+IdKGs6FeWGdpmiZAwxxkVqUUAfOfw21O68J+Mn0G83QxO7JscgDcDwR65r6JikEkYYHORXhvxk8NvpuoR+JrVz5gYFUCDhgcn3NeleAtbOu+GrW8dBHI6AugOcHvQB1dFFFABRRRQAUYxRRQAUUUUAFFFFABRRRQAUUCigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooPSgDz34rWiXPhp3Eqo8Tq4JXPetDwBdC40K2bdlig3cY/SpfG1mb3wzqETAH92xGcdcVzvwx1JTp8FoxBkQYJ3g5oA9PooFFABRRRQAUUUUAFFFFABVW+sob63aGeNZEbqrDINWqKAPDPEHg/UPAesNrfhoS/ZWy00G75R9FA6V3fhPx/Ya1bJ50ghuMfOjHofr0rsri3juI2R1DAjBB715rr3w1b7c99o5t4ZpOGDIRge2Dj9KAPTEmjkUFHUg+hp+R614kqeN9HeKKGykdR8pZZiRj3pD4+8T2N60U2nSsq5BPPJ/GgD27Io3D1rxVvi7fRK/2jS3DKORG27Jzjr+tRz/FTUZYGFtbOJ84VNnA4/vZ65NAHtM11DAuZJFUe5rmta8d6RpNu8k1wFUA8txkjsPU15ZDf+OPEMa3kQjt/mICzIxJXjkD/APVWh4b+Heo6hqDXviV/tknVA4IVPoM0Ac/qVzqvxL1weTI66ZFINsbKBuP0NeveDPCkOhaeF+zrFK2d5AHzcnmtrTNCsdOQC3t44yBj5VArVAA6UAIq4GKpalpNlq1v5F7bRzx/3XXIq/RQB4d8RfhPpVnpl1rOm28ySRDeYbchRj1HHbFeJw2T3dzaeZcu6TuAElcjd6+o6n9a+2J4lmiZHUMrDBB7188a94Z02w+IX2ax08ukcqsIlB2xs2Dnjtx06UAa/wDwo7RnslkhuLmNzgsd2eO4HpXA6Z8OIta1iaCwvybaNjlzndgHoQQPzr6L1e9XTPCN3ckf6qBjgE56e1ef/DLQsPcagzNIJCdrOoBz36cnt1oA898EeBdP1Dxze6XqMTSxWpIGZB8xDegr3qH4ceHFVR/Z6BRztUkL+Q+tee6BaJZfGO+CMz7pSWIUbVyM4Jx1r3EdKAMu38O6XasGhsoEYcAiMZ9K0kiRBhVAHsKfRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA2RBJGyHowwa8T8Pr/AMIp8Wp9KiMgguwSS4zuPUYPsK9urxT4qRDSPHeg6xDGVZ5AHcHAPIH8sUAe1A5WvMfjHooufDyanFbwyzWjZPmHGV9M5FekWcnm2kb+qg1neKdObVvDOo2MePMmt3VM/wB7HH60AYfw3uUl8KWjJkKV6Z7967M8ivGvg9q/lW8mizNtlgdvkPHfng89TXsg5X8O1AHiHxq1SEPaxR2iG7RxiVlG5Bntn1qh4R+FEeqQW99r1xcXTMAyQPISqDqB71Q8eadLJ8VYoL0vOkrxlW2cFc9DgEHnive9KtkitY1RQAoGMelAHC6z8ItF1VFMUP2V17w/LmuZtvhLr+hyl9I1yVU2kbM4wexH6V7mAKMA0AeFX3gTx3rkE8F/rZFucKqtnLDB5O09efyri/D1g/gDxqLPXrdM+Z+7nIwMHHzAntX1OYwe1ebfGTSLa48I/a3jXzYJkKv3UE46igDv9NuUubNJI2VlIyCD1rz742XGzwhHGIg+Zw5J52gd8fjU3wtuZf7GMDRukKN+6Ehydp5pnxasp7rw+xjRpFQEkHbtHB5we/T/AD1AOp8Hbf8AhHbLAH+pX7vTpXQ9RXBfC+/e88I2O+QSSKoVmxjOOK76gDwn4z+BNS1C/wD7YsLT7UDGI9qhiynvwOPxNeFXlpqFq4tbiylt2iXDqUIPPc190socYYZrkPEXw28P+JJZJbu02zOMNJGxUn0Jx1/GgD4/sd32sKkIdmGMNX0L8F9AniWfUJ7fy0ZsRluWbGcn9T9a6DTfgr4b02YyJHM2eu+TOB6V6FY6fb6fbpBbxLHGgwFUYAoAtUUUUAFNY4Uk9BTqp6rdLZaZcXDZwiEnFAHzv46Da38ULK0jZiZJgeuRtB9vpX0LpUPk2iLjGFFeBeCI/wDhIfifdXjqGSzVsOpyCxP696+hbWPy4VBOeO9AE9FFFABRRRQAUUUUAFFFFAGbrulwaxo9zZTxq6yIQAw4Bxwa8n+Et3Jo2saj4duE2SRyGRDn7w6GvajXjnjWOPwp8SNN1wQsLe7BSVk3Yz79qAPYgcilqvZXEdzaxzRsCjqCCKsUAFFFFABRRRQAUUUUAFFFFABRRjmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKAc0UAFFFFABRRRQAUUUUAcx4sndNKu0RAT5ZIz9K4D4SyedFI8gj84SnJCkMfrmu88WuV066ZRkqmQM15b8KGuBrF5OwJSSXGc5GcmgD3sdKWmocoKdQAUUUUAFFFFABRRRQAUUUUAFIQDS0UAMaFGHKiqs2m28v3olJHTirtFAGM/h2xfrbx/lSxeHbCI5W3jUn0UVsUUAU4tPhhUBUAx6VZWJVPAFPooAKKKKACiiigAPIrznxR4Y1xtdbVdIKyFlz5TSEAMBxxnmvRefWloA8c1HRPiHqtjLY3L2ogniIfaq8HGNvuD17Yz36V1vgTwpc+GdDW1uZVkk+8SOxPOPf0zXa4FB6GgDxfQ4tnxg1ElSZGkJbKbdoxkYPft+dezqflFeR6TcxH4wasvlksBjzDn0HHP0x+FeozajbWluZbiZIkXqzsAP1oAu0Vwd98W/C1nM0S3pnK/eaFCyjr3/AA7VLpfxQ8N6kqEXqxF32Kso2kn6envQB29FRQzx3EayRMGVhkEd6loAKKKKACiiigAooooAKKKKACiiigArhfirpMeoeDri68oPPZ4mjwuWHrjiu6qjrMJuNHu4lfYzRNhtu7Bx6d6AMPwBria54XtZ1I3qgR19GFdSwypFeO/BLUvk1TS9+5YLgsp6ZyT2r2OgD5+80+F/i41nPvWOW5d48NwRJyM/nXvVs/mQqeua8V+MsX9k+KdI1yEojqRvZhuztPpj0NeuaFex3+mwzxtuR1DA4xQB5z8ZPDN/eJY65pURe6siS2xdzYHIxx65/OpPBfxW0i+05ItUuobO9iXbMkp2jI4PWvU5YlmjZHAKkcg14l8TfBnhzRbKTU4NPUXkz/KsZKj1JwCKAPUbfxloFyF8jVrNy3ACzKea2UuYpACrr+deC+HPhbZa/wCGob3dLZ3cy71YMWHXIJB/lWN4hk8W/DzW9OWPWptQixvMOSflGAcg5wDQB9M7ga4P4u7T4CuuMv5ke0Zxk7x/9eubsPjno4IivbO9t5ApPMYIJHbg1znijxZffEkxWWlWcyafG4Ylg2ZmHbjpjNAHoPw2i8rRYFdt8pHzHIPP4V1+tWEd/p0sL5wQQcHFZfg3SptM0WCC4ULIi845/nXTlQRzQB4n4N1mXwj4sl8O6gsiwTyM1rLK2c+2e9e1RyK6ggjpXCeOvCY1e03wuyXEZ3xupxyO2fWuV8K/ES/0WV9O8UAgRfKk4jPzdOD70Ae0UVU0/UbbUrVLi2lWSNxkMpyDVugAopCM0tABRRSE4oAUnAryj4weK/7P0mSxglKyMMHGO4+tdf4x8TR6FYHZMFuCCQNueB36182XKXnxB8ZQ21mHZHbEsyg4x3PPTjtQB6Z8DtFZdMudSYbDdPkADoBXtqABQB0FYXhXQY9A0iGziHyIoUZrfoAKKKKACiiigAooooAKKKKACuJ+KOhLrfg25VYEkmhxJGWbG3HU5+ldtVTU0Mmm3KL1aNgMru7enegDmfhxqX2/wnZklS0a+W23kZHHBrsa8h+D+puZ9V0x2/497liq7duAT6dBXrw6UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFHagDjPGd7b2VvN9oLbTExwBngCuV+E2mo9hJd+WVEkxZM9evemfFnV2hBsxcbDKMKofBb1GB1rpPhjaiDwzbsHlfeN2ZVw3PtQB3YGBiloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApG+6aWo5shGIOAAc0AfOOp+KtQT4j6ymgQxzTSSbfMyxxjjGDx1Hb1rck8BeKvE0cEuqamXz8xV84U56AduKvfD2ztLzxbq99GdrySsGRmD55PINexxxIqqQOgoA87034V2NuwNzcTzKQCRuI55z0NaGr/DnRL2waKO2W2mVT5c8Q2lD1z+YrtyQv4V5/8AETx9YeH9JubSC6zqcqFIkVd2Ce59KAM34TeIL+8ju9JvJjP9icxiQgAnkjGB2GOteqDkV5Z8HdDmsdBN1OiLLO5c7VwfxOa9ToAKMc5oooAKZLKsMLyucKilifQCn1U1S3+16XdW5yRLCyEDGTkY70AeeW+seI/FM017pmoJZWyTFBCUB3KDwTnkEg/qPStPwJ4rutRnudI1Vw+p2rsJCq4BGeORwa8fk13xH4f0290dUS2MUuZZwuGUFh0PTjpxXs3gXw8ml28l48rTXN2RLJISeTj0J4zQB2tFFBGRigAooooAKbIu6Mr6inUUAeDac0nhT4zzWjs6W1zgICMBs9PXgYx2r3dG3ICO9eI/G2xmsNV03XreFgUdFeXOBkNwP0r13QL4ahotrdA58yNW/MUAcZ8YNNW48NR3oCbreTBZlzhW4P8ASovhRrq32jtYkYktTtJHQ57j05zxXa+JrBdS8PXtsVDFoiVBz94cjp7gV4t8K7oWXjK5s8ALPCHyWJJYHB+v1oA9+rxT4pw/2v4007THIEbKE+YE4JOSwHA/nXtanIFch488H/8ACT6Uy2xhgv05juWTLL7Aj2zQBo6JbQ2OlwW8WAsahcAdhXkfxLunm+I+l28UgHlhGGxcuGycjA9RWLr2s/EH4cQRW1xdxXNs7FY53G4sfTk5o8Faf4k8TeMYtZ1GJ8CQOZJIAOMEYHHFAHuNnoNjd2ym4tIZCy4O+MHI961LPRrGwjKWttFEpOdqIFH6VZtYjHCqnqBU9ACAAAAcYpaKKAGuiyLtYZFcH4x8FpqKm6tYF+0KwORxkZHX8BXfUhAIwRQB4Jpeq+IPA3nCGNbuwLFhb5IeP1Ht616J4e+Juh615MRuFguHH+rkYAhvT610up6Bp2rWr293axyI/XI5/OuGv/g5otzG4iaeMliwxKeCRjP8vyoA9GiuYpV3I4I9ql3DPWvJLX4eeK9IumbT/EDeSVCiOZmbA46e/v8A/rqvLoPxLt2VYtRRw2QX8zJXPc54/SgD1i61Ozs1Zri4jjCjJ3MBgV5t4s+N2haKWttNzqN2QQPJ5RT2ye/4Vhv8G9X1b5tT1uUO77ppASzP7e3Wuw8N/CTw54fWORLJJ7pP+W03zHPr6D8KAPII/D/jT4jX732pJ9jtZ2DYZcHb7D6ete4+C/BVj4X0yOCCEBhyWPJJrpYLGKDkLk9s9qs4oAUcCiiigAooooAKKKKACiiigAooooAKa4yhHqKdQelAHi/g+wm0v4parGXQBwSETAGM8ZUV7OvQV5neutj8YkYqpNzagZL9Me2P8a9LQ5UUAOooooABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRXEohgZ2OAB1qWsXxBqMVlYyuzj5FLMO+PpQB8+/Ee+m1nxzBbQXhCq4Ux7yVUjuR75r3rwegXQLXoT5Y5AwK8K8NxR+LfG89+ke1FmAJKYORkjBGR0HevoywhEFskargAUAW6KKKACiiigAooo5zQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+JrlrXw3qEyffWB9v1xxWtXM+P7lbXwbqEjBDiPgPjGe1AHAeAtX0vRdIlubyVYWkmI+Zskk8nqa6a/+Keg6fa+c0xePgIUIO7Iz2PT/AANea2Pw21XxLbrNHqMVvaS/MFQu2MgBhjOOfr9K7rSPgxodl5TTB5nQ7yWxy2APTgcZAoAwNV+K+sa0VsfDekss0vy+dMwZR16bT/XrS+APh1dPqq63rayPcEhiLhdzbiOTkn1/GvWLLw9p1gQ0FqiMBjcBzWmqKvQAUAR29vHboEjUKo6AVNRRQAUUUUAFI33T9KWkb7poA+cPGEMraz4ykjjZo28tUkAxuIIyOTzjmvb/AAazP4Y09mXDG3QkZ9hXifiuCWzbxRbzxiMS3UKKAdy7C+QRgcen+Fe8eH0SLR7dEwVWNQD68UAatFFFABRRRQAUUUUAcZ8T/DreIfBd3DCm64iHmRD1I/GqHwi1t9U8JxQSxlJbQ+S2RgnHqPWu+miWaF43UMrKQQe9eRfD5Z/D3j7V9HuI/JincyQoBwQD19qAPX3UMpU9D1r5w15JfCvxHdIo2iQTboiicBCc4yMDnPT2r6Rrx740aPmG21OPeGJ8pynrzg4HXr+lAHqWk3QurKOQc7lBq8RkV518MvEBvtBt1mYCRV2uD6ivQxKpXduGPWgDxP49QJONGhOR87tuzx2HSvU/DNpHBpFsq84jHP4V5P8AF51uvHWi2zIzxqq7xztwzH0H9a9l0iNYrCJEXChQAKAL9FFFABRRRQAUUUUAFFFFABijAoooAMUUUUAFB5FFFABRRRQAUUUUAFFFFAARRRRQAUUUUAFIaCM0UAeS/EEyWPxF8P3/AJR8tj5YbHGSeefyr1W2bdAp9q82+LANvcaDftGWihuwHIXkA4744r0TT3WWyidehUEUAW6KKKACiigUAFGaKTNAC0Ug6UtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIehrx34u6ndadpDWtvLB5l2+0/OAwHtmvYZGCoSTgYrwTxVKviz4nW1la2rSfZAUmcqQAPfIoA7D4W+HZNM0GFrhU8xgG+UDH4Yr0tRgYqjpVqtrZxxqOFUAVfFAC0UUUAFFFFABRRRQAUUUUAFFFFABRR0ooAKKKKACiiigAooooAKKKKACiiigAooooAK87+LFwjaRaae0TOLqbBYcBcDucEc9K9EryT4izw3viuztJ3k8qBA21T/GTx9e3pQB3nhawhstHgiiXamMgFcda36oaTG0dhErkltozmr9ABRRRQAUUUUAFFFFABTX4U/SlJAqveXMdtaSzOQFRCxP0FAHy34/vp08ba9pzOssVxKnlNjJQqwOOO/WvobwHK83hPT2kYM4hUMcY5AxXzx4ysZpdM/t6VAJJ9T52gjIK5GD+Fe+fDtfs/hSyRpPMLRhg315oA7KikDBuhpaACiiigAooooAK8Y8asnhr4r6bqqytEt4mJMKADjjk17PXnXxa0eO50SPU87ZLPJyIt5YHBxntyKAO+s51ubSKZTkOoIrm/H2mPqnhXUYY3ZHWEspUZPA549xkVP4Eu/tvhGwm3ht0QOcVu3MQlhdD0ZSDQB8s+CtAl1m8vI7TVrvT7qKT5WhkbH1xxkV3cWseOPAFwh1tjrWiD5WniXMiL6kdfrnP1rD0W1Xwv8V3sVkDxyllyOMt1/OveYkjuYFDKCD3xQB4B4h8YaT4w8YaPdWhkMcYVZdyYMZ3cZzwB+NfRGmEfYo8HIwK8G+JXh+10zxto88EUEUNwwEgWPbvweSccGvd9KwLGLGMbRjFAF6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDy/41hf8AhHrNyrELcrkqM12/hh1l0K0kXODEvXr0rkfjDZJdeF0d5lj8qdW+aIuPTnHT61v+CJkn8LWRhlVh5YG4A4P580AdRRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGD4w1VdH8N3l2WAKRkj59pP0ODzXCfDTS/PuLzVyXzdsG2tL5hHfn0PNZ/xW8RzX2rWvh7T5kZmfM2wZKgds9sntXpfhexNppMCuPn2DcffFAG4q4UCnUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFIWAGScCgMCODQAd6WiigAooooAZK4jjZ2OABkmvEReLrnje8v1dvIEnlcKGBGQP7xwcdx6V6d441X+yPCl7cq4SXYVjJGfmPt3rzbwDYzTamnKMuVllbaoPfGBjI6/5yaAPZrZdsCD2qamoMKBTqACiiigAooprOqKWYgAckmgBxOK5XxV40s/D1odrxSXLYEaM2FznHJ/zmuf8eePpbLy9K0SJLu6ugyK6PwhHY8fXj2rD0H4d3WuSi+8UlZHkXm3jyoB9yMUAVL34rX11dNBEyhAwQfZ87z7gdSMc8VkeIPEHjjWorqx0y3vXgKhWcw7fMUqR8vPAJ59a9osfCOj2USJDp9uoTG392CfzrZW0iXogoA+Y20rxdqnh86I2g3SpuWRDIAoRsk5yQOPb3rV/wCEm+IPha0gtLrSPLjwAjRJuA7fw5/Kvoj7NED9wUPaxOPmUH60AeB+G/i3rUd2sOqxMdkgSTfGYwR7ZGN3fBx1r3DSdZtNXtFuLaZHUgE7WBxkZ7VW1fwxpms6fJZ3dsjpJycDBB9QfWvKrvTPEPwvupb6zke+0IFfMiyWdBnBOPp7gUAe4UVheGfE1h4l05buylDqeozyp9DW7QAUUUUAFZ+tWLajot3aJKY3ljKq4AJU9jg1oUHpQB5X8I9Suo47/RrwtvtJiqZXAx6CvVOoryHxYsvhT4g6ZqsTWdtZ3L+VIRlWfd1yBwcHv9K9YgmE0IZTnIoA+e/jLZ3WkeL7TULGUxzSMHiOM4PQ9vWtLw98UtX0iFF8VaZJDakYjvIIiUY+/wCFb/xwtF/sbTtRa28429wcrkdxnnjkce1bHg2yttX8JWRuoIZAUBKFQVBx6HNAHm/jLxRZeLdU0W50y5ZofOZH38BSMYO0ivetIBGnwgtuIUDPrXinxM0Sw03XNMjsLS2t8/OdgVcYOc4yD29+le06Kc6ZAc9UBoA0aKKKACiiigAooooAKKKKAADFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUfSiigDzz4xO0fgtyqb8zIGG7Ax6k1Z+F8jP4TtQzqzKCp2n/OayvjRGZtBs4hgbp8klsdB9ak+D6NH4bKFw+2VuQc96APS6KKKACik5zxS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFVdRuls7CadzhUQsTkD+dWq5/xlfJp/hi9ncxhQhB8w4Bz2oA8k8F2yeKvHWpalcbpVgm/d73BK/gBg/WvdbdAkSgDHFeQ/BeGWTT7i7eCOKOR8LsGA2O+MV7Eq4AoAdRRRQAUUUUAFFFFABRRRQAUUUjEKpJoAWiqkWo20t09ssqGZBlk3cgVJdXUdpbSTyECONSzEnGBQBPRXO6N4y0vXBKbSUERyGMnPUj09RW4J49mSwxQAT3MNsm+aRUUdSxwBXOap4/0DS7d5pb+JwvQRtuLH0HrXnfxJ8RKPEKadNqTQ25AdlESkBcY69T+Vc79r8JCxVhO1yrEny/s+GJ5HpwPpQB2v8AwuqzlvUWK1YwyPsUscHHqeMAV6NZ6zb3VolwsiFGGQQeK+avtr6lo9zb6d4ftlaAlppiuxVAPB4Pp710vgPw5eeIdPQ399J9mic7YY5flP4D3z3oA9suPE2k2wbzb6AMoyy+YMj61x918TJZbsw6ZpjXSbgBIGJyCOuAOnar1j4C0+2uHmkkml34JRn+U857dR7Gt9LSzsYRHBDGgHACqABQBwe7xv4gs5J7i7XTLdSWCRIVkwB7/wBa1Pht4ludV01oL6ZpbiJuWbOWUnjtWxrniHR9BsWe+vYow3CpnczE+gHJrgPhc8S6/fwwF9hYn51AJGeD7fjQB7SORS0i/dFLQAUUUjHapJ7UAeV/GG+YwWenoVy5LEOpwc8demeTwa0vhzpX2O3MmYzvUNhMHb14Jx/n2rj9fnbXvHM91JDG8MJEEK/aVUuOTnrkfQjnPWvXdAtVttLgVYwmEAxnP60Aa1FFFACEgDJqJbiJujg/jVbWdP8A7U0m4sxK0RlQqHUnKn8K8O07w/dW+t3WjT6xe2OoRHfFJDMQrrnjIxgmgD3ozoELkgKOa8l8T+NtT8Q6tN4e8MxB40Pl3VySRgcggEdOnXNc54u1LxHoiJpdvrD6ks6hWikwJFP+8uDg4713/wAP9Bj0/Q4M2yQzOoeXGTljyeTzQBB4S8AQaXOLy8PnXjc7j0Ukc4H9a9EhhWNQAB60yJFUnjBqyuMUAKBgYFFFFABRRRQAVFNbxzxtHIoZWGCD3FS0UAeSa1pl18O/EA13TC/9iXMoF9arjERI4dc9s4GK9L07U4L+zS5jkVkdQwINS6jYwahZS21xEkkcilWVhkEV8/SXmveEtYuPC+nXiRoZMQGXn5W6YGM/5NAH0Bc6la2ah7ieOJMgbnYKOenWn2t/bXoY28ySBTg7TnBrw7VtBvpNLfUPEWtXE8MKgvChChm7AfnW18GrGa2tby7cSJHcy5RWYkY9RkUAewUUDpRQB5/8WvD8Gs+FWnaKdp7RvMiaDll9eO44q98PNdj1vwvbTAneqhXzwcjrXVX1nDf2ctrcRrJFIu1kYcEV5J4KR/CPjXU/D0sEkcUrmW3kLYUr6AE/XpQBv/GOVY/A8j7CZPNCoAMnkEVZ+GULR+DrFGCg7OgBGD+Nch8YNWGpXWn6BbqZn3ec6xjcQ38PGc9M/nXpfhayNrotspi8tigLITyDQB5f8bLVxf6RMArLlh8wBxzz29xXqnhaWOXQrVoirL5ajKnjgVwPxwQf2HZOygospzxk9Mjt/hXXfD9ETwpZLGyFfLH3elAHV0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUmKAPNPjMsT+G7fdnzFmDIApPI9x0pnwfR00B1K7V85sEfxCofjXPGmj2IberCYkOvbirvwgj2+E4yQd29ixLZyc9aAPR6WkxS0AFFFFABQaKKAAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXm/wAWlZtDcpH5jKjfKS2PrxxXo5615l8YHm/sZUhWVmPVVk2oR/tY5NAFv4Tqi+DrLbt+6f516EK80+EOf+ERt8ED5jwAeOenNelgcUALRRRQAUUUUAFFFFABRRmomuIk3bnA28nJoAlqOZgIzzWBf+NNIs96JP58qruKRAnA9Sewrkrz4g3+t2EQ8PabPLLOxUuVIWMDuSwAIP8AWgDP0W6ki+MupxeYTGYQcE59Oa9N1VPP0e6Qoj5jI2vjB4714Jol/feHviy8OrzJJJd91YkDPTrz+Fe/b1msmBPDLz9KAPmbTfFcvhbV7y1SwWacy71WBvl/QH07V2tm3jfxnEgmzp1ky5ASQo2fw5I9jXOaBollB8T763uIZfLVmMPnemete2WWraRaQiM3tshTjBkAx+tAHhPjbwTNot3DLPPJco4DMztkgjPrk11HwxsdPf7VaTWcBuYHJWYrkspJ55q38S9d0rXLGW10lDeX0Q+eWGLcI17/ADdK4nwbe6ydQaPTGVJLpELO7AcLwcZB54oA9O0yytbXxXrWmiNAtyqzLhcDBG0/qKx9G1vSvCGuXkN/qJhP/PGViR16qCO/tWYbPxNp/jHTNT1W9iaGV/s+Y1yQDkgE4Gc/StDWdN0qXx5BLewLJI7BQZMkYwMYAXHX1JoA3n+I91qkgi8OaNdagp+UXGNkO76+lT2/g/xHrMjSa7r8qwSEs1paDywB/d3dcf410YutM0PT/MnmgtoVzjOFHr0rJk+KvhqEER3M0zBchYoGO76cUAaGn+APD+kuJrXT4VkXkOwLEfQnOK5HQVTTfipq1qN7ediRSx+6MZ49smr8nxM1G+UnR/C+pXK54dwEUj15rl77UbmHx9puoahbyw3EqKWgXDFeSPT0x0PagD3RDlRTqhtn8yBT7VNQAVm67qEel6Ld3chQCOMkb3CAnsMngVpV5j8VNf8AIW10qEh2d1aZNxUhe3Qjg4OaAOQ8FRDUPEELgPsLmVcOGKduuD2K9MV7zAgSJVHQCuD8BaZDFEZgT8p2IrDhAOwJFd+OnFAC0UUUAFcV468M/wBq2RvrQtFqNspaF0bGT1wfUZArtazddkEGi3kpO0JCzZ9MCgDxPwhZyax4imk1W3mN1j995uDHnjgD8K9cvb2PQtFuLxkysETPtHHQZrz74YWNu9qdSgYv57YzwMY7bQOPzNdj41uFg8GalJJvCLAc7CAfzNAHG2fxusJ0klu9Kv4Ykk2NJGnmJn/eFdBp3xc8L3UzwNf+QV53XCGNT9Ca4X4UGCw8Jahf6gFW2EzOWYZOBjr610X/AAn/AIFv3CSXds2cDEsOPzyKAOoHxQ8JZCnXLMN6b/fHWrI+IvhYrIw1uy2oQCfOGMkZ4PfofyrFtrTwXc22YrfSWik9FjIPf/Cnf2J4JtY5J/selRqWy5KIBkcf5+tAFuf4seD7eTy21q3d/wDpmC4/MAiptG+JOha7q406xlleRh8r+SwU98Zxx+NRWemeH95WwgsVdeqxIufxxXC6dMy/Fq6tYGMO2UElTlXGwcY7d/zoA9xByKKZEcoM0+gAI4rxT40aS9vPZ6xbrl9wUgJkgqcjB9TyK9rrhfilaNdeFHERAmWRSjZxjsee3BNAHnD67/wnc1jpNlvWBU33RIHJIIA/D1Br2Dw9pkWnWMUEYCrGoVceleH/AA2ntLTxhc2yyjM8e9ADu7/MCfXJPbtX0HYY8v1IoAvDpRRRQAVx3jTwPF4pNvcLcSW11bEmORDz/OuxooA838IfC+HSJTfavMb/AFElSJpDu2hegGf516MqBFwo4p1FAHnvxYtPtXhyFt23y51xlAQSeOc9B/jVX4Q30s2jTQNtaOGUqhXAAHoAO1dL4/sxeeD75TH5m1d4X6enofeuE+DUuXvI4mYwrtABHT29PyoA9iooooAKKKKACiiobm6hs7d553EcSDLMe1AE1FVbLULbUIRLbSrIh6EHNOvbyDT7SW7upVigiUs7t0AFAFiiqWnarZatAJrG5jnjPdDmrtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUdqAPF/jleNBJpcaumCWZk4J+uDXbfDe0a28JWYdcOyBiMdM1wHxlVo/ENjcu0fleSUwRk59eOccivTPA0bx+FrFXOWES8jPp780AdLRRRQAhApaMZooATvS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVwfxMtJrnSAVV/JXPmOjhSo+pI/ka7snArnvF9rb3+gzxT7igG7Cru6e2DQBw3wauBJpt1EpxGkxCLvLEfia9aByOteEfCDUxbaxqGmSSEYkJVPTBxjNe6xnKA+tAD6KKTGKAFooqOdmSF2RC7AZCjvQBX1DU7TTLdprqZI0UZJJrgr74waZHOLbTrC7vrgttCRgc/1/SvOtUE3iTxrfQeIdRksbVGJjV2UfLnkZ6dq7Gz8R+DfDQW3h8vzM8vDHuJx3LAUAS3XiXx5qzltL0ZrOM/dNwVXH1ByT+n40yPwn4kvZmk1zxISjAhooolGR25I/pU4+IjXpcaVpF/cKoBSQQfKx9Ac+9Z6aB4z8SytJqN4dMtpD/q4SPM2+nGf50AXDpHgnwlHvu3i8wNuPnSF2Lf7vr+FWU8ZtdkQeH9Du7xFUfP5flIue3zY/StPSPhrotjJHcTxPeXQOfOuWLnP0PArso7WKJcKgH0FAHz9438NavJbp4iurGODU42DmKIl1I4611nhb4paPcaSYr68WG4iUKVY5LHHbjn0xivRNYtoprZw2MY/CvMtW8GeFJ2FzfS28Euc4QhS/Hp1oA4Oy0uXx18QdRvIr27istxCSAkNj0Gegr17RfhpoFpaos1kty3UtcZck+vNYGjap4X8N7IrF5WL5YADG4/jj2rbuPFfiC4AbR9CeSFhlXmO3I+mRQBa8Z6Tb2vgy9t7CBIBswPLVVCjue1eN+DtThXxDYCOVwI2MZQnqCOpI4659K9HvdI8Z+IbVk1G+t7GM4HlRKSGGDnPPvXjd9oKaL4mls4L5N1uPMGS3BHJBwP5UAel+O/GWku1rp9tOkk9tcI7gAEdcYBPf6VY8c21w8NtqFsVRyiv5knKoQR6DI/Ouc8vwld+C57lvsS6iyNIN8g37/bJyPapdQ+IGlXPgizgku5ftS7VkRODx9QQelAHaeGfh/a6hHb6prN5c6lcyKr4mc+Wp68L/jXodro1jZoFhtoox/sIBXl+h/FPRLDS7azg+23lwsagKkeWbnHU4FS3XxcvJJ0j07QLiXcQBubJ6c8KCOPrQB6p5ESJwuBjHSvJvigbaz1/RJ0cPcyEoITHv3DI5HzDHWhfEXxC1qW3gg08WAlJ3zGHIC4HPJODz6c1b0T4Uyyat/aviTUJdRuQcxrIxIQ/Xj9AKAPTdLZmsIS3UoM4GO1XajhiWGJY14CjAqSgCG6uI7W1lnlYJHGpZmPYCvn24vT4o8Xz6izE/vSIIyu0FQMDkjn1/HivQ/in4ol0bS4rS0lCz3DEMuAcpg5HPTPSs/4aWAKyu8SiMgMnyjofw9jQB2vhvTG0+wijdmb5QTuYsQfxroBTEUKoA6U+gAoopkjlFyBn6UAPrnPHM8UPg/UvOdkR4ShZU3EZ46d+tb/AJq4PPSuE+Kt3Evg6VXmMcZkUO69QM9vf8qAIvh1ZPbeGrUSPIzkE5k4JGfTtxXQ+JNF/t/QrnTS4jM67QxBO0+vas/wxIkGj2sfm7isa8k9eK6MXETqPn/I0AeM51r4cyHT59Pn1XSHBc3EKEsgx90j/PWqXhqLTPGfjiW7+wwrZRw+WiPb435554xkf4V2/wASfEAsdJjtLcxtdX7+Qis3OD1PHPt269RWx4A0KDSNGijVVL9SwAyc80ARx/DPw6hEn9nQjb91RkAV538QtK8G6DIJZdPieeQlvLDN859AAe9e63MyQwMzEAAc14qLW28X+OzfyBHsrFikasvV88k888jrQBwnh3ULXTddj1WTZpflg7bS1gZ3de4Zj9K7vwDBdav48v8AXZrWWNJC3lF4tuFyMDkdce9ekRaZpRbcbaAnGCSgrRtmtYeECLjgYxQBrJ90U6qa3kQHLjripPtcIGd4x9aALFZet2y3ljJASV3DIYHkEcg1NLqlumR5i7h2z0rC1fXI442+Yb8AqM9KAPm3SZF0bxcrAqlzbam0ZPHKscdvx7mvqzSpBJao4OcqDXybPJ9o+JUplYbZLzzPlXgnqBX1P4dk/wBAjz/dFAG5RRRQAUUUUAFFFFAFe9hFxaSwkAh1K4PuK8Z+HuoDRvGGoaTcmPJk2qQ+45Hp6D+Ve2kDrXgviBTp/wARr2Wa4hzHIjxiRMMwPIUEKc9x+VAHvSnKg0tVdOuVvNPgnT7roGFWqACiiigArm/HNy9t4XuDHEZTIQhQMQxB9Md66SuR+Icbv4ZZgsZCSqx8xsDrjrketAFD4d232fTW2zq5X5CgUKBj6d/xNVfi7qjWvgt7UqfMvJFjAABHBzznp0rU8A2wTSFm2Ro0h+ZYzlVxxgHJ44rj/jFdS3GpaXpUUe5TmThsHOcD69KANf4R6fdW+kNc3U4kebAwFAwBx1HWvTK5jwNAYfDlqpQKQg4H+TXT0AFBFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSH1oA8T+MqouvaazJbFShDF8l+vtz+NereHih0e2ZM7TGvX6V5h8aIpFvtLnSKN1ZthLqeOfyr0zw1ltDtsjB8sdPpQBtUd+lNA29B1p1ABRRSUALRRRnjmgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgurqG0geaeVY41GWZiABU5rwj4wa/dXepR6PbyuIN6q8aKQWPc5yOPwNAGx4w+LWyb+z/DLRXE4JEs+Cwj6dB3znr0rhxrHjHUUkZ9Yvyzj7hhUJg+5AH4Cuv8LfDwS20LXcKRQjDBAoDk+7D/APXXp1jotlp9qIoYlUfnzigD5z8Gi80j4g2y3VxuLyfMzIVLkj3HT3r6ftW3QKfUV478VtLj06+0vXreGMGCZRK5YcDPYGvU9DvY7vTYJUZWDoDwfagDWooooAD0pMcYpaKAPEviz4Yij1O11QFdpkBcSMcdeevQV1nhbwzoMUYubWygDSLnzMbiQeSMmuj8VaFb67pEtvNgHGQ3oa8e8JX+tJd3ujaZfW5WGQj5uGUZwSvUUAe3w21rBHtVEA9B2qG81Ww0+ESXFzBEvq7gVwI8NavNI0d5rdw8EmAYwSQVyCRmtGHwVolr5kl2RMjYOJmGF9/8aALl18QLfyS2mWNzf9iyKVXPpkiqwv8Axlq1xsSG3021I5dxvk/AZon8WeF9AgaCKWMmM48m3TJz2GBxzXN3vxWuZ9W+waFost0+4AOc4YevA4Ge5oA3JPB+oXasuoa5cyK3UKzLx6dcUyDwPoNpGBM7yhQBiaclfrgnHWsWO0+IfiC5lF2ttYWrjG0sSR7jac5+pp9l8Ir1rZ4b7XLl0LDITIBwc85JoA2pNY8IaBCR9otcx5+VDvbjHHH1H51i3fxStrlGh0Cwe6udp2qyt17cAHP510Fh8JPDtoYzJbvcFOnnyFuevTpXV6f4d03TVAtbOGED+4gFAHjsl18UdaAEFrHZxbeRLhCx7+4rgvEXgXVrDVVn1u9jfdhpJizMOegG4V9ZeSn90Vk6x4ds9XUCaJMgbd20Eken0oA+XbbRPDlvbD7Zfme5Afb5KjYcDjr7j8aqaUthBZXcd1pU0jg5glVScg8AcYyPx719KWnw50KCOVJLOOTzl2yZUDcPoOKcPhv4eimgkgsUi8kggISAR6Edx/hQBx3wz8K29zZPd3+mQFyf3TPGNwU846dK9UttKtLVQsVvGgHQKoAqa3tYrZQkMaogGAFHAqxQBGIY1OQuKdwCB3pxooAKraheR6fYy3UxIjiUs2Bk4FWa8o+K3ifJTQLRgZWIknBYqCvOBke4z+FAHD3d+njLxnLqcgmMcbKsCgj5QM8EZ/XNe7aHYR29mjrGFZlG49z9TXC+BvDENvOlylq8cW3I3OOp9ABwK9QjQKuO1ADhwKWiigBCcDNee+MPiMvh/Uo7GK0M0kgIyX2gcZ/pXoTfdNeJ6pa/2z8UDHgPHbgvknIDdP8AOaAMK+17x8JprmVZhbyDMaoGPr2U8dR37Vy+qXvjjWbGa0ZmmhdvnUfxcdOeR34r6YttIgeGNpY1JxyDUg0W1D/LDGM+goA+aLN/H9jbpFGs4xEMblx5ft78fWtiLXfH0VwjCCd45F2urqMocHnPf2r6EOmW5/5ZLgjrikGmwbcbF46cUAfKF3qPiTU/FVvDfmZ7mIkxgpjHuBX0x4ZhuodKgEoIYICQTzXAzWUP/C6yko+VLQFBt4J+ufrxXrsEYEahQABQByPj7Urmx8MXssDhJFjPNeK6NofjR9EtpNNMcSF/Mz0J69a9S+Msktt4OlaEZy6hsHB69v0q/wDDvbdeFLORkIJXJDdc0Aed/wBjfEt7YPJdRZcD5QOR9SPp+tUy/wARLOZYzpd1LKON6sChHQd/xr6ISCPGAoxT/s0eANo4oA8Js7/4lNEY5fD0JZl4LSbdv15q5DefEWKMJNpER7ZWQADj0z/WvbFgRf4RTvLT+6PyoA8JudW8c2r7W0BpQevlycZzXP694s1l4pIbzQbyKQowRmhbHTnJHBr6UaCNhyi/lWVqenwPA++IMu0kj2oA+SrQ30fiG01K3hKOyCQlssuemDnp0r2fw58Tkt4xBqto1s69XU71PuMVS8Gx6drV3qcEcI8gTYVJFBPI5FdXd/DjRbiPzFs0VwSQUJXn14oA67TPENnqFss0NwjoTjIP+cVso4dcg5ryWXwheaPbtJpt1KSSDsOOfqa7nwnqMt3pyLcLiZRhqAOjooooAKKKKAAjNeUfFvSHMdpqkEKtNG2xpCGJA4I6ds16vXI/Ea2a58I3Zjj3vEBIFyB0PuMH6UAWPAmof2j4Ws5eM7AOPaumry34RaqG02TTnJ82JskFcbQexHY+1epUAFFFFABXPeNI5ZfDF2I7eOf5clHJHA7jHJP4iuhqte2iXtpJbuAVcEHIzigDkvh/qIuvDsLi3MK5ICBiQADgYzziuL+I3max44sbWCN3+yBASgY7SxyT6DitGK08X+Ebqa3srAajZs+UkMxyoJ9McU3w14O1O71+bVNbt385nbLeeQp5zwuM45xgntQB6RoVkLHSoIB0VABWnTI02IFHQCn0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABQelFFAHjvxwQQw6ZdFJXIkIAV/l455Fd74Ju1u/DVnMq4DRg4Ncn8cNPmufCUV1Ark28uWKdlI5P+fWr3wm1JL7wjbAbgYhsO45PHrQB6HSZ5xQKWgAoopMc0AKfakIBHPNLRQAUUUUAFFFGaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK828beBr3VdSj1TTzB58TBgZFyQB1AFek0UAeOx+PtbsporOXRXEiD96VGR+h4/GqsnjfxRqTuLeMWq7tuBAzsOevQ/yr2GXTLKWTzHtozIP4tozQmnW0WPLhRfooFAHher+G9f8bRyo9zOIkXhrkEbj6hVwMj3rY+E3iGaC4m8O33Fxa/KuZd+QOPWvYvs8YHCgV4j440O98HeMIfEGjx3LQ3JJuBFGGVfrigD3FG3AEU6ua8I+JIfEOkx3MeVb7ro3BVvSuloAKKKKAGsoYEEZB6ivHPEGg6loPi+XVdF04NCRl1xhMHk7RnrmvZaaUU9QDQB4TcQfEbX7mGSFBaQN95CxRQPww3b9a1D8KdY1VE/tPXHAXHyxK5Hb+8x9K9iEarjCgYpcAUAcBYfCTw1atulshcNxkynIOPbpXXWOh6fp0ax2tpDCijAEaAVpUYoAYI0AwBin4oooAO1FFFABRRRQAho60tFABRRRQAUUVXu7uKzt3mmcIiDJJoApeINZh0PR7m/l5ESZC56nsPzrxjQ9Hu/GHi+bVL5JGCnzFkU4UHsFIzkD19qb4g1m58fa3JFbS7LS2YJsGSeTxwOpPH0r1bwl4fGkWYLyySSOASXxx7dPrQBuWVosECKFwQMVcoooAKMUUUAMmbZCzHoBmvIPCPl3fxB1KdVfjJwWyFye49eK9P8AEF/Fpui3VxNIqKqHlumfSvIPhFP9p1jVZWDbnl3FuMHnnpwKAPcEA28UtIn3RSlgo5NABikbgU0zJn7wp2QQDQB4/wDEMTaF4/0TXEJMMw+zPnO1ee/1DcdOler2T74FPqAa474q2P2nwXPOhZZbR1nR1AJGOp59q3PCuppqOg2VxGxdZIVO4jGeOtAHP/Fm2abwXeSAHbFsY7Dhh84yQas/Di0S38K2UaoUCoDtLbsZ56961vGNi+o+EtVt42KyPbvtI6ggZ/pWd8NmR/B9g6xGMGPBB7kcZ/HrQB2KjApaKKACikyKWgAqlqcRlsJkUgMyMBn6Vdqrftts5W9EJ/SgDwT4TK0eu6gjAgo5UhjXvEaAQ7cdq8O+Dn+k6jqlwY8K8xwce9e7oMR4oA5vxX+48NXswk8po49wcdiKh8B3Au9DgmLByRyao/E+/ay8FagVYAsmOe+fSmfCuPyfCdqVZiGG7a2cjPbmgD0KigdKKACiiigAqvfWyXdnNA6grIhUg98irFB6UAfPvhidvDHjiS0mkliHnmJlcEKeeAOTzXv8T74w2eteI/FfSYNH1qHWVlECS8gsxI8z2UeuBz+NeieANei1zwzaXCS+YdgVj/tDrQB1tFFFABRRRQAhUN1FAUDpS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAc546sH1HwfqVvGxVjEWyD6c4/SvMPgtqRNxeWRLbVwwDBvpxkmva7uPzrWWPOCylcjtXz54EaXR/iTcW01wCzyOjKAASc5BNAH0SvSlpkZyo9MU+gAooooAKQjNLRmgAooooAOlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+I9Gg13Q7mwuE3pKhGM457VrUY4oA+c/BfiGXwF4hvNH1RrnyUIGWT7p+p7V9A2N7Fe20c0TBkdQQR3Fcj478BW3iW1ee1SKHUgPknaMNnHIB9q5Hwb4svdG19PDusTOZvuqHQjn2JPT/ADxQB7PRUcUqyJkGpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqte3sFhbSXFxKscUalmZjgAUASXFxHbQvLKwVEGWJPQV4H418Xaj4u8Q22l6Y8kdirMroCVYtnHzDg+nFL45+INx4kv4NM0iO5k04uVmaIOhJz6gdOD+ddd8N/Cr2gnuriMxrI2FgOcLjvzzQBpfD/wAGR6FYh5Ubz5Tufcc5x0/Cu/CgDApEUKoAGMU6gAooooAKKKKAMPxcJD4avPKkEbbPvHtXl3wbtDDPqEhlEpaYkkZwDk5xXo3jiWQ+Gr6CKJpJHhYqB3IHFcJ8G45Psl28vMhmJcbQMN34FAHrk0yW1s8shwiKWJz2FePajrmveLfGFzpukai1rZRxDLREOOfUjoecjB7V69eQtPZTRKcMyFQcZ7V4n4R1a28I+JtTstbZbWW4lBjkdcKevBP+cfhQAzW9D8VeEbVNSk8TXVxaRuoKc888Z56Z6+tet+GtTOqaHa3LSpI0iAlkOQT7VU1q/wBPfw7dSyTKYREzblIPAGeOtcp8HWnOhzNuU2jTsYAo4A/T+VAHomrWq3ul3Ns4VlkjZSGGRyMVwPwnuh/Yk9gH3LaTNEDjjHbsOPwr0lhlTXlfhaVLD4k6/pkXl+S7B1WM8KRwRjHB5HQmgD1G5iW4tniblXUgj1BrjPhur2Wm3WlzzCR7S5kRcEcLuOOB0rtVwYwfavOI86N8WpY12+VfweZtwAdw6njrQB6ZWdrOtWWh2LXd7JsjX8Savo25Qa4D4qC8/sMPDFGYF5llOMoM9skdf6d6AKFt4/1nWLm4bTNN821jDeW6xs24joMkgc/pir+k/EbfeW1hrGn3VldTyGNd8TBCeoGff8a2vCsNmuhWgtFUReWMAdq534ovbLosKji6SUSwlACysvOee3r9aAPRUkEi5HSsjxXP9l8K6rP/AM87SVumeimn+HbmS90O0uJV2vJErMPQkVS8cyNF4N1hlOCLSTB9PlNAHl/wMgB0+5kKEO0uc8jPHpXuJ+Vc15D8F4VGhM4i2lnI3HOWAr1xs+TnvQB5p8X5RH4QuEL4yR1HXmtP4YMW8J2I5BEYBB7Vz/xjmK+HBGzEb3AI7n6cGun+HSGLw7aoChQINpXjjFAHbY4paKKACiiigAooooA4/wCIegnWfDzNDEJLm2y8SEAgnvwa85+EesSWmtX2jysE+YyKm3b7HA7c/Wvc5oxLEyH+IYr5/wDFulXHgnxqNZtgxUsgLbc71P3iTwBQB9AowZQQadWXoWpQ6ppkN1A4aORQwI961KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAQjIxXh2qA2fxnhR7ss7Hcq7AAqkdM17lXzt8X0u0+I+n/2WwW7mVVU4OQ2cfyoA99W9giiDPIqjHc4qW3u4LoboZUcf7JzXjWn/DDVNaTz/Emv3s5PIhjkKoo9KVtJf4Y+I9ObTr6eXT76TypbeZ87T6g496APa6KjhbfEr+ozUlAAeKTrS0Y5oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKO3FAAfeuC8f+Ax4jNtqVjItvqVo25JMZ3L1wa7wccUYoA8h8H+OtU0/Vjo/ih4I2ztjn+4GPHBzXrFtdw3MSvFIrqehU5Fc34u8Ead4lspA9tD9q6q7L3968tutY8SfC55be5MU+mn5rchcKvP3R/nvQB77RXO+EfESeI9Dt79MjzFGQRjBroqACiiigAooooAKKKKACijtSbh3oAWioZbqKEZdgB6k1mX3ifSNORnu9QtoQoyQ8gBoA2aY8qRjLMAK8t1T406YJJodGs7nUnjBLPGu1B+J5x+FcVrV34x8YQXb3V+2m28OcWseUJOM4zxu498UAer+KPiToPhlCs9yJrn+GCH5nP19PxrxzXfFeqeOb+Czu9Ri0+ynkA+xrLhth/vY5yfetT4baDp955iTwv52AxaVQTID33YJro/HfgJ5bSPUdGRUuoCp8uMY3gf4A0AbfhHwdBpUcJR1EaA4RR97Pqe9d/DEsaAKBj2rzH4a+LZdVR7a9lthMpwsaONwA7Yr1FDkAjFADqKKKACiiigAooooA434kSLF4Q1Bvl3NCUGWCjJ9zXM/ByPy9FIDpJ8331B5+tbHxZvUsvCFw7xrIGO3axIz+VUfhKmNJY+V5cZclFB4UegoA9MByOKy9Y8OaVrtv5Oo2UNwm4Nh1zyK1Fp1AHk198FbW5u2Carcx2Mjl2tx0HOcL2A7dOleiaHodroWmQ2Nom2KJQoHetXFGKAGkcGvI4oxZ/HC+KBV+0W6ltxJJOByOMdvXtXrrdK8lvrdrr40F2KqsFuuMMAxyPzI5oA9WiOYwDivKvH7f2d8SvCt4MJ5pkhZy2MjI4/8eNeqQ/6sD2rx34zSKPEXhbEsYeOd2AJIOcpj8OKAPYbVt8Kn2pmoWEGpWMtpcorxSrtZSAR+tRaS5axi3HLbRk1foA8v03wz4r8JXd0unNb32nytujikfZ5XHOB2zz+NUJtG8X+KdWifVbOOysiSrxq4J25POcZz36d69fIB6ik2gHOKAK9larZ2scCKAkahQB2Fc18Rbz7F4H1SVwOYtg43ZyQOnfrXXVwPxbVpPA1zGhjDeYmC/Tr+v0oApfCazW28LWxXb8/zHb78/hXo7DKHPFcf4BhWLw7ZqoAUIDjGO1di/Kc9PegDxn4zNGBYpIygFuVZsA+h/Miu38CxsuhwK2wsqgZQmuA+NLLLqOj242lmf7uRzyBXpnhCLZo8A8sIdgyBQB0g6UtIOlLQAUUhz2pec+1ABRRRQAVynj7Rf7X8N3KRopl24BKk/wAufeurpCoIwQDQB4x8NNcudA1Q+GNVZExnysuCc9x1r2dWDDINebfEnwxFcaadTsmhtLq2PmCQ7UyRyDk8DmsvwL8VrW8MelatOF1FTtYqMo2O+RxQB69RUUM6TKGRgRjqKloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAIbqdLa2kmc4VFJJzXzlpl7F4s+M0l4VHkwkugycjHHOa734y+OLPRtCm0eOUtfXIGYwP4M85PavFPBcXiW51C4k8MWu15WAaZ8N5Y9MmgD6Y1zxHpvhnRjc3soGOEjU5Zz6Ad64nQNC1fxtrUXiPXyYbeM/6LZquMLnILe/frSaR8Jrm/u11DxVqc1/OGDJHvIVPYV6vZ2sdpbrFGMKowPpQBNGuyNVxjAp9JgdaWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAry341yxx+F4oXQN50wUg+nWvUq8h+M80qTaOgO1GlIzvZf1H+FAG98MbSK38LW8cb7geT8wPX3FbHifVNW0SIXdlbC7g6OnAMY9c9xWL8Mk8rS5sNuXzTgiXzM/jWp8RtSOm+C9RnRdzmPYBkjrx2oA8+0T4620kc66tbvFMpwPJXcP51pQ/GzTmUM8ZXPCocFjjrnB47cYrK+FHh6C7spZLq1Rmb74kGck8967+T4Y+FZpzO+kQGQnJwCB+WcUAYH/C5tMMiFIS8JxudW5XIzyKuWvxa0ie9MTB1jwT5nYfX0rQk+FnhKRNraNBz/dyP1Bqm/wc8JPgNYSFR0H2mTj/AMeoA1U+IegSSpGL2MblLAswA49zWRd/GTwpatsF20jdD5abgD25HFKnwd8J7gWsGIUbQDO/TrzzzWhH8MfCqQpF/ZMJCnOSSTn65oA5K4+NaXhMOiaRc3UxOEMmEX3z9BWKviz4laope1isokcEqNvvwOfwr2K38NaXbBRFZxLtORhRWgtnCmNsYGKAPnibTfHHiC4SHVr6+kgYgukEe1VyPwz2/OrVp8I52mEksPnBehdmBP1BBFfQC20S9EFPEarnAHNAHnnhv4bWWnWXlXSCYMPmRhx34x0xya6q78P2s+mTWQhQRyJtxt46Vt4ooA+f7ayv/h54x23Twva3IBZlkKKuSBkKele1WlxFeQKyOrqwBBByDWF8QPCMXiTSHeO2SS+hQ+ST/Lr/ADryTwz421HwhdXFprZvQI2IdJEDZ5xweMfmRxQB03i7Rm8I+J4vENjAxtZJAZ9spyGOc4XGMHjnNeo+H9TTVdLguowQsqBgG61414y+JVj4h05dJ0lLuSaV1DMEwAM8jGcn6e1ereDNPGmeHrW3UMAEHBBGD347fSgDpqKQHNLQAUUUA5oAKKKDQB5d8Y7/AMnw9Cik4kl2/KMk8HpyK0fhlaNb+HomfdlxnkYrA+M8wj061QjAably5G0Y6iup+HWz/hHbfYxZcZzQB2oGBS0dqKACiiigBkjhUYnoBXlPhvfrPxC1rVD5bRRyG3RkOfukY/ka0vij4wj0jTRpVo4bUrzCJGOwJxnpVr4feHl0HRokKf6RKA8zddzkcnNAHbJhYyelfP3xkvTfeNrWGEyuljbgyBOiszDHfnqO1e5avqcOkaXc39y+2GCMyMfYV8vHWJNY183kqP5moXZnYIfuop+XPtn3/hoA+oPDrbtJtzz/AKscEYxxWvWR4dDrpNuJCC4QZwcjpWvQAUUUUAITgZNeZ/GuZk8AzbGKt50eGHY5r0xvunNeX/GCUzeG5LXA2E5x7gUAbvw7Yy+FtPdydzQLuBHtXYv9yuW8CR+V4asVCbP3K8fhXTynCE+1AHiXxMFvJ450pZIpGKgAYbAOTzXrmgxLHYRqoKgDjNeJeNbqaf4tWtuJFEaou7Jwe5H64r3LSc/Yoic/dFAGjRRRQAUUd6KACiiigApCcUtch8QPGEPhTQmmLETyHbHhd2PqMigDzn4veJ5bu4bSYWk+zJwUQ43sM9+T1H04rm9J+E92fDaarMkjXTjzDAnDBcduDz3xit74eeGJfF2sy+J9ZQsqvi2jI2huepXJ9u9e2kRWtuxYqscY5zxigDwDQPGXiDwXGyXEcuoaYkm1ssd8Ptz/APq+le4eHfFOn+IrBLqzmDA8FTwVPoRXj3jIHxZrc8dhGbaEfKJEPzSkd9vcVRvPA3iHwcbS+0m+mUkbpnjjdgTjqyjIP40AfRYIPQ0teM+D/i23nrp3iQrDcY4nwArfUDocV6xY6raajCkttMkqOMhkbINAF6ikDA9DS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTXYKhJPSlJwK8u+KfxHttAsm0ewIuNTuVKbEbmMHucd/SgDyr4k3/8AwlvxHWxstr7XEOPLAz65IPP6V9AeD/DltoWi29tHEqbUGcDqa88+Dvglra0fWtRgYXU5yokXBUV7QiBVAHSgBcYpaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArjviJ4YbxFoX+jxB7y3YSRYA3HHUAnpmuxooA+eND8eXPhO5ayudNlhjMzNNHIeUJ64PcDHpS+MfGzeOHh03T4m+wo4Msjgjce46jGPfrXvU+l2VyzNNbRSFhglkByKz4PCml2lx51tbrAS+91iG1XPuKAMrwH4dTRNIQDfuf5jubOPTHtXY01VCDCjAp1ABRRRQAUUUUAFFFBoAKKKKACiiigAPNc5rvgrQtfmSfULBJpU4BJI49ODXR0UAcBZfDHQbS8S7FnskVy6qJDgZ46fStDW/GWleG0iSVy5ZtuF7Duam8Z+JrXQdJmMlwYZ2Q+XhC3NYPhjwlHeJHquqg3E0igpHIvES9cAeueaAJ5viro8chjEdwTtVlYptU7unJ6fjU1l8S9LuGYTn7NGrbPMdxgn/PrWjrGmaVZ6a8k9rG0cI3AFecgYGMflXlCeCG8bu18IRp0AI8oqN24eu3oO2KAPQ5Piz4WilMX9oKxDFdwBxkenHP1HFVZfizpS2UV1HBcywyMRuRRgY9zXIX3wk02x01pjfuJflJluDnBAxwBjnFVPDmh6Ba3cfm6nLcsrMzI6bUZyeoBGfwFAHrmkeM9I1oL9luQWPRDwa6IMHFePax4ORAt/ody0LwfOYwzNk9eBng11/gnxC+q2EgmlSSSFyhZQQD+fegDkPjikv8AZVvsTcsjEOTjaBj+db3wpYDwrZxhydsYPPoaPipGlx4ZmXIDhSVwMnPtWH4H8XaVYaPZW8lyiyrEqsAp/oKAPYRS1zdt4y0eV2j+2orL1D5X+f1rQj8QabMf3d7A30cUAalQXcy29s8rttVFLEnsKpXeu2NpEZJbmNUHcsK8q8R+L73xfI+m6QG+ylgC4I2svct/QUAVbCJPGHj+81h1ka0tyogDD5D23Zz7V6vZuxiUqCFA4I71ieGNEWy0uO3djlQATk5JrS1zWLLw9pE17dyCOC3jLE9z6CgDhvjF4oistC/sSNt15qLKgjU8hN3JP16fjXlngfSxdaxOfJaSRR5UAldcjtk/TAxVVdWPibxnc6zeFwS+63i3btpH3RjqQOOldt4DtHXX7uzeQSSo6uXKksOmevA6e9AHuOhWv2PTLe3yT5cYXJPtWpVS1KpEoyM4q0CCKAFooooARuleSfGKbZpcMO1h50oUMDjBz1r1osOfavI/ivcR3Os6Dp6fO5nMjgdAg9fx/lQB3XhbbHpUEa5+RAP0rXvZlW2ZmOB+Vcbpuvw21gXWWMckBc8gjrXM+MfiPb2VqUiuYmlbIEQyxb8ulAHLeIJI7740wIJjtUIQFUnkf5/WvoHTwFtkyOa+dfA2kalrfi19beF4lZg+5c4bkdz9OlfRtpGy26buDjmgC1RRRQAUUUUAFFFFACE4rwD4i6nPc+Njpk1yfKlmSNleAYVOcYznPJ64/SvoCvOPiB4GbVLuPW7Qb7uEjcrn+Edlz0oA6vRba203SoooEVUVflCgD8q4jx74whknk0eC8SKEIfPkjAkYt3QDt/n3rL1P4h6lp+k3FsmmtFdJGNrO2RzxkAc+ntWL4F8EarrZS71gSC0di5jYjD85zggn+VAHcfDvTYNjzwRbISdwzbmMnPPf+lejeUhXaVBHvUNjZQ2NskEKBUUYAA6VZoA5TxF8P9E8Rw+XdWwQ7t2+L5Tnvn1rzK+8F+LPAU8l74ene6t2bHlld5Cj2xx+Fe8UhUHrQB45oHxheAC28SafNZXAbaG28MR14PSvRdH8W6RrKqbO9jkLDcFDcge47VJrfhTSNetmgvrKKQMMZ2jI+hry3xD8HpbGeS+8O3LxOoBjiiAVwe/Pf6cUAe2BgRkHNLXzraeNvG/hW98vVy91bg874vmB9OAK9E0P4vaBqUaC5uBay45WXgfnQB6NRWXp+v6ZqW4Wd7BPtxny3BxWmGU9CKAFooooAKKKCcUAFFJketGR60ALRSZFMeeNBlnUD60ASUhIHWuV1j4ieGNGjka61e13IM7EkDM3sAO9eX6h8QvFHjbWF0Xw3ANOtpAS0zEO+z1P936daANv4pfEG7sLiLRPDt4BqEjYl2JuaMUzwF8MJYr/APt7xBJ9qv3+Zc8qufb1rX8DfDGLQ5Dfam4u9QZtxlOT/OvSkQIgUDAFADIYEhUKigKO1S0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRzmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopCcUtABRRRQAU122oW9BmnVBeRvLZzRxuUdkIDDqDQB5lp8Fx4p8X315c3E62dpN5aW8i4DEE/pz0r0y3iWJMKAMdK8j8L6zd+FtVudO1oBFlmLrOzg4JOMHvj0r1iC9ilQMrqQQORQBxXjm4N/qlhoUYyJn3z8sMIPp9O9dZZWkdvaoiIqoqjAAxgCuN8Y3KaX4o03VH2+WcxyPgZAJAHcevvXa2lzHPbIVYEEfnQB5l4quJ9cuL3yrhktrBirwKSBIVIJJJHH1FcBJcajd+Rc2cX/EvjGwOriVl9eSK9A8TB9A8STNc29t/Z2qN5X7r72ccEr375PTj8+O3aj4aWa0gtTc2Vw37uZSXVQcBQF3dvY+lAHT/DvV5r+7u7OZxIygPvyvzA9OAOOK2NGt5dL8cXlksyCCZTOkWQOvXAznrnnHeoPh5ol3psM1zfCLfJ90LGFIX0J71Jb36ah8SJ/LlXybWFRuCg7jzkZ9OaAOm1/w8uuaVcWc6qyyqeT2rx+7+D9ylwxhu2hBPygZIB+mc174L2FU5kX865PxH448P6KB9puPNm7RxJuJ59enb17UAeZD4deKEDbLq0kj6BZEznHrnr0qhrGna1oVm8+oQWqLtz8km3OOcAd+nSusm8da3rl39h0S1jhLtt84kOV5644GMZp+l+AtZ1TWTe65M2ApUIspcN055zgcdPegDymLRvEPie6DWlvKsIPzHc3AP8J/Lt717D4K8HS6HGjTA+a2N/J5Nd3pui2mlRiGKJIlJ4CjqT1NWb26ttPTzZpUjTbuJY4GB1NAFa7voNKtWnuZUijQZZ3OAPqa+ePHnje88YasttbRFtMtpOEjyzSEH7/A6f5711/jHV9T+IGoDw9oihLIMHmmZseYAcg4646H8RXUeD/hpFpGJ70pPcFt2SgO04xwev8A+vpQB4pothrVpfw3jaTclQWIl8snGe9dRb6xq2k3dxc/ZngncAnMf3+ccYPJ5r6CTTIEIXy12g56U+TSLWfiSFGGeMigDxS2+JOpQuqTz26sUVtsgZTk9QePpXS2XxNYRRNLJBLuXLbGHHX361383hrTbhcS2sLfVBWXP8PPDc+7fpVsdxyfkHNAGMfihZQSBbhkXI6hhjP1qRPirocinZcKSOvP6fyp1x8IPCk5UnTVUr02Ow/rUSfB3w0kBiWKZFJz8spz+dAEsnxM8PvF/wAhCJWY4wxwRXifjnxLHdeL4ryxnW8hVSqKhO7cc55/pXqOpfBHTJgDaXM0XB+V8MD9as+HfhLpmjNHLOi3EyfKrMv3aAPJNB0rxV4kLQ2pNnCW+Z5Mg47gc16f4d+EFhZqsl9/pM27cSxOM/jXpdppNtaALFGigdgK0FUUAZunaNbadGqQxKgxwAK1BwMUYpaACiiigAooooAKKKKACggEYIyKKKAKUukafNMJntIWlAxuKDNWY4UiGEUAe1SUUAFFFFABRRRQAUhANLRQBTu9Ms70AXFvHJg5G5Qa8z8SfCKzup3udPjjA2sPKcexxhuufrXrFFAHy5N4Q1TR1WSGa806dDiRmf5XGOMMMYPPT/Ctm21vx3pKCdNRW4BbcUl4IBOOjV9A3Vha3sLRXECSxt1V1yDWO/gzQ5GJOn2/IwcoORQB5tb/ABY1vTmA1fTbdo1GZHhlGV6Dkc+tS6h8c9Oj025VLaVbwDCRv0I9c12E3w10Sa5LNAPJP/LIcDPrx35rB8QfC3Sk069ubaFDKsDBN8QbHH0yTQB1PgTxHL4l8O29/NEEdx0Gfz5rqeK88+E11NN4St/O270Jj4GOAcV6GfXvQB498UfGGo+GfFFj9gDuSikxjJDDOMdcD69ax5PjN4jjuWtx4fiSULkBpi3b2wP1qv8AFbF58RrO1QkOYFQEHBGSeR713Wk/CzQjpQW4tS00q5kkLksTj1PNAHn83xT8Y3SsVOn2cT5UMQSQfz61yl/qeu6nEkl34kv5mlXKW0CuN2Tj1xg+tfQ1j8PdAsYfLSwhcFs5dQT9PpWrH4Z0iOUSrYQBwRg7BxigDwnwz8HL7U5o7jUkSGA4bY65Yggcdua9t8P+ENJ8Ow7LCyihz95lHJ+prfSNUGFAAp1ACAADApaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSY4xS0UAc5r3hHTdaBea3UuevbPvx3rirjwjr2hzJLpupXrwg8Q53BQBxnJ79+K9YprIGUgjOaAPDNb1PxBf6fd2OqaNHdIn3HZgjZ52nGeO361m+FPibPokq2OqWF3FZLgJK53CMHoM+le8XOl21yuJoUfnPIrndf+Hmia/DHHc2igocq68Ef4/jQBFff2X4y0MqsqTwyqMNG344yOledXmkeJ/D8cQsXV4FYhvNcuuOMfTv0FbFx8OdV8O2bHw9qV6SPuw71C+vPT6cVjw6x8QLOTypdLS7jTAPnL5bN+vP4CgCOLxX4xuLVo30nZBICPOtkZic5HHPHY5pdC+H+orElxcRsWn3NNH9oZX5IIPoCKlPjrxDbMRP4aZIwCQAG3NgjoMe/61YPxTvYYVkOjqrM5QI7spJGAQRt96AEl+G+pSyKqXcqxA5xLKSxXGNucfr798c7enfC/To5TJetLO4AVNzk7FByFHtmqB+LhjSLzdDuE81tm8uMA8jnj2NSN8Vbsp5MHh27e8JIKg/JtHG4NjkcelAHotlpNvbRqqRKu3oQKvuYYEyzBVAySeAK8oHjrxjeSE2egpFEEDATElm57Y+uaqQ6H4v8asH166uLKzddptY22fXp1/H1oA6rxF8R9HsyyadINQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "YtQ/og5wv6H9siUQ0cBg0g==" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC9266392\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "69212004-801e-0040-7127-3e7d3a000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "8236b430f82ccafc", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "38430" ], "Content-Md5": [ "YtQ/og5wv6H9siUQ0cBg0g==" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Etag": [ "\"0x8D80C3EC9266392\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "6921201e-801e-0040-0327-3e7d3a000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" } }, { "ID": "123c5b0410750c63", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "69212035-801e-0040-1627-3e7d3a000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite/a_small_text_file.replay000066400000000000000000000134461367004507500317520ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPTD83E+/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "489b097a2bdd8abe", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "20" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "VGhpcyBpcyBhIHRleHQgZmlsZS4=" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "PzMJMSzDJkoTibLSY97OjQ==" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC9062B73\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "a4d4f90e-501e-00ca-2b27-3ec719000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "58203e83bf275222", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "20" ], "Content-Md5": [ "PzMJMSzDJkoTibLSY97OjQ==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC9062B73\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:47 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "a4d4f91e-501e-00ca-3527-3ec719000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "VGhpcyBpcyBhIHRleHQgZmlsZS4=" } }, { "ID": "cd548f5bb3d8e83e", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "a4d4f929-501e-00ca-3e27-3ec719000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite/invalid_ContentType_fails.replay000066400000000000000000000043561367004507500334370ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPSLCwFIv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "dda579edd7523215", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "BlobNotFound" ], "X-Ms-Request-Id": [ "e48a3057-801e-0004-4d27-3ea156000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+QmxvYk5vdEZvdW5kPC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQgYmxvYiBkb2VzIG5vdCBleGlzdC4KUmVxdWVzdElkOmU0OGEzMDU3LTgwMWUtMDAwNC00ZDI3LTNlYTE1NjAwMDAwMApUaW1lOjIwMjAtMDYtMDlUMDY6MzE6NDYuNzg0MjMyN1o8L01lc3NhZ2U+PC9FcnJvcj4=" } } ] }no_write_then_close_results_in_empty_blob,_blob_existed.replay000066400000000000000000000133541367004507500415310ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPSJza7Ev5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "1742cba4ade38581", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "1B2M2Y8AsgTpgAmY7PhCfg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC8AAB427\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "c0849d43-e01e-0014-2527-3e97b0000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "4a84f3e142afb480", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "0" ], "Content-Md5": [ "1B2M2Y8AsgTpgAmY7PhCfg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC8AAB427\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "c0849d46-e01e-0014-2727-3e97b0000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "5bdecd5969eb8ace", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "c0849d4e-e01e-0014-2d27-3e97b0000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }no_write_then_close_results_in_empty_blob.replay000066400000000000000000000133541367004507500367320ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPSISgwqv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "47b21bbe973718bb", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "1B2M2Y8AsgTpgAmY7PhCfg==" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC89A848D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "e55f4256-301e-001d-5627-3e8d3e000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "37bdfc7c9a535fb7", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "0" ], "Content-Md5": [ "1B2M2Y8AsgTpgAmY7PhCfg==" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Etag": [ "\"0x8D80C3EC89A848D\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "e55f4264-301e-001d-6127-3e8d3e000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "b7b36fa8e6b8e103", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "e55f426d-301e-001d-6827-3e8d3e000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite/write_to_empty_key_fails.replay000066400000000000000000000105141367004507500333700ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPSHhBpuv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "3701cd47ee000339", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Type": [ "text/plain; charset=utf-8" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "text/plain", "BodyParts": [ "" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "325" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "InvalidUri" ], "X-Ms-Request-Id": [ "19ad8076-701e-00dd-4127-3e077a000000" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+SW52YWxpZFVyaTwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdGVkIFVSSSBkb2VzIG5vdCByZXByZXNlbnQgYW55IHJlc291cmNlIG9uIHRoZSBzZXJ2ZXIuClJlcXVlc3RJZDoxOWFkODA3Ni03MDFlLTAwZGQtNDEyNy0zZTA3N2EwMDAwMDAKVGltZToyMDIwLTA2LTA5VDA2OjMxOjQ2LjU0MTk2ODVaPC9NZXNzYWdlPjxVcmlQYXRoPmh0dHBzOi8vZ29jbG91ZGJsb2J0ZXN0cy5ibG9iLmNvcmUud2luZG93cy5uZXQvZ28tY2xvdWQtYnVja2V0LzwvVXJpUGF0aD48L0Vycm9yPg==" } }, { "ID": "d5afbbe95e8f3a95", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "325" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:45 GMT" ], "Server": [ "Microsoft-HTTPAPI/2.0" ], "X-Ms-Error-Code": [ "InvalidUri" ], "X-Ms-Request-Id": [ "19ad8082-701e-00dd-4727-3e077a000000" ] }, "Body": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48RXJyb3I+PENvZGU+SW52YWxpZFVyaTwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdGVkIFVSSSBkb2VzIG5vdCByZXByZXNlbnQgYW55IHJlc291cmNlIG9uIHRoZSBzZXJ2ZXIuClJlcXVlc3RJZDoxOWFkODA4Mi03MDFlLTAwZGQtNDcyNy0zZTA3N2EwMDAwMDAKVGltZToyMDIwLTA2LTA5VDA2OjMxOjQ2LjU0ODk3MzlaPC9NZXNzYWdlPjxVcmlQYXRoPmh0dHBzOi8vZ29jbG91ZGJsb2J0ZXN0cy5ibG9iLmNvcmUud2luZG93cy5uZXQvZ28tY2xvdWQtYnVja2V0LzwvVXJpUGF0aD48L0Vycm9yPg==" } } ] }write_with_explicit_ContentType_overrides_discovery.replay000066400000000000000000000544261367004507500410160ustar00rootroot00000000000000go-cloud-0.20.0/blob/azureblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPSNMJv1P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "603b8484f0022428", "Request": { "Method": "PUT", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "6354" ], "User-Agent": [ "CLEARED" ], "X-Ms-Blob-Cache-Control": [ "" ], "X-Ms-Blob-Content-Disposition": [ "" ], "X-Ms-Blob-Content-Encoding": [ "" ], "X-Ms-Blob-Content-Language": [ "" ], "X-Ms-Blob-Content-Type": [ "application/json" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "application/json", "BodyParts": [ "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" ] }, "Response": { "StatusCode": 201, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Content-Md5": [ "D2p8n/PT13C49/oZwq4Z0A==" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC8CCC15C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Request-Id": [ "5efe9cc4-901e-011f-0527-3ec991000000" ], "X-Ms-Request-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } }, { "ID": "68f6f643d10bbffe", "Request": { "Method": "GET", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Disposition": [ "" ], "Content-Length": [ "6354" ], "Content-Md5": [ "D2p8n/PT13C49/oZwq4Z0A==" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Etag": [ "\"0x8D80C3EC8CCC15C\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Blob-Type": [ "BlockBlob" ], "X-Ms-Creation-Time": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "X-Ms-Lease-State": [ "available" ], "X-Ms-Lease-Status": [ "unlocked" ], "X-Ms-Request-Id": [ "5efe9cce-901e-011f-0d27-3ec991000000" ], "X-Ms-Server-Encrypted": [ "true" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" } }, { "ID": "c6dc50dfea845be4", "Request": { "Method": "DELETE", "URL": "https://gocloudblobtests.blob.core.windows.net/go-cloud-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Ms-Date": [ "CLEARED" ], "X-Ms-Delete-Snapshots": [ "include" ], "X-Ms-Version": [ "2018-11-09" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 202, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:46 GMT" ], "Server": [ "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" ], "X-Ms-Delete-Type-Permanent": [ "true" ], "X-Ms-Request-Id": [ "5efe9cd6-901e-011f-1427-3ec991000000" ], "X-Ms-Version": [ "2018-11-09" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/blob.go000066400000000000000000001200461367004507500154770ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package blob provides an easy and portable way to interact with blobs // within a storage location. Subpackages contain driver implementations of // blob for supported services. // // See https://gocloud.dev/howto/blob/ for a detailed how-to guide. // // // Errors // // The errors returned from this package can be inspected in several ways: // // The Code function from gocloud.dev/gcerrors will return an error code, also // defined in that package, when invoked on an error. // // The Bucket.ErrorAs method can retrieve the driver error underlying the returned // error. // // // OpenCensus Integration // // OpenCensus supports tracing and metric collection for multiple languages and // backend providers. See https://opencensus.io. // // This API collects OpenCensus traces and metrics for the following methods: // - Attributes // - Copy // - Delete // - NewRangeReader, from creation until the call to Close. (NewReader and ReadAll // are included because they call NewRangeReader.) // - NewWriter, from creation until the call to Close. // All trace and metric names begin with the package import path. // The traces add the method name. // For example, "gocloud.dev/blob/Attributes". // The metrics are "completed_calls", a count of completed method calls by driver, // method and status (error code); and "latency", a distribution of method latency // by driver and method. // For example, "gocloud.dev/blob/latency". // // It also collects the following metrics: // - gocloud.dev/blob/bytes_read: the total number of bytes read, by driver. // - gocloud.dev/blob/bytes_written: the total number of bytes written, by driver. // // To enable trace collection in your application, see "Configure Exporter" at // https://opencensus.io/quickstart/go/tracing. // To enable metric collection in your application, see "Exporting stats" at // https://opencensus.io/quickstart/go/metrics. package blob // import "gocloud.dev/blob" import ( "bytes" "context" "crypto/md5" "fmt" "hash" "io" "io/ioutil" "log" "mime" "net/http" "net/url" "runtime" "strings" "sync" "time" "unicode/utf8" "go.opencensus.io/stats" "go.opencensus.io/stats/view" "go.opencensus.io/tag" "gocloud.dev/blob/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/oc" "gocloud.dev/internal/openurl" ) // Reader reads bytes from a blob. // It implements io.ReadCloser, and must be closed after // reads are finished. type Reader struct { b driver.Bucket r driver.Reader key string end func(error) // called at Close to finish trace and metric collection // for metric collection; statsTagMutators []tag.Mutator bytesRead int closed bool } // Read implements io.Reader (https://golang.org/pkg/io/#Reader). func (r *Reader) Read(p []byte) (int, error) { n, err := r.r.Read(p) r.bytesRead += n return n, wrapError(r.b, err, r.key) } // Close implements io.Closer (https://golang.org/pkg/io/#Closer). func (r *Reader) Close() error { r.closed = true err := wrapError(r.b, r.r.Close(), r.key) r.end(err) // Emit only on close to avoid an allocation on each call to Read(). stats.RecordWithTags( context.Background(), r.statsTagMutators, bytesReadMeasure.M(int64(r.bytesRead))) return err } // ContentType returns the MIME type of the blob. func (r *Reader) ContentType() string { return r.r.Attributes().ContentType } // ModTime returns the time the blob was last modified. func (r *Reader) ModTime() time.Time { return r.r.Attributes().ModTime } // Size returns the size of the blob content in bytes. func (r *Reader) Size() int64 { return r.r.Attributes().Size } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (r *Reader) As(i interface{}) bool { return r.r.As(i) } // WriteTo reads from r and writes to w until there's no more data or // an error occurs. // The return value is the number of bytes written to w. // // It implements the io.WriterTo interface. func (r *Reader) WriteTo(w io.Writer) (int64, error) { _, nw, err := readFromWriteTo(r, w) return nw, err } // readFromWriteTo is a helper for ReadFrom and WriteTo. // It reads data from r and writes to w, until EOF or a read/write error. // It returns the number of bytes read from r and the number of bytes // written to w. func readFromWriteTo(r io.Reader, w io.Writer) (int64, int64, error) { buf := make([]byte, 1024) var totalRead, totalWritten int64 for { numRead, rerr := r.Read(buf) if numRead > 0 { totalRead += int64(numRead) numWritten, werr := w.Write(buf[0:numRead]) totalWritten += int64(numWritten) if werr != nil { return totalRead, totalWritten, werr } } if rerr == io.EOF { // Done! return totalRead, totalWritten, nil } if rerr != nil { return totalRead, totalWritten, rerr } } } // Attributes contains attributes about a blob. type Attributes struct { // CacheControl specifies caching attributes that services may use // when serving the blob. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control CacheControl string // ContentDisposition specifies whether the blob content is expected to be // displayed inline or as an attachment. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition ContentDisposition string // ContentEncoding specifies the encoding used for the blob's content, if any. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding ContentEncoding string // ContentLanguage specifies the language used in the blob's content, if any. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language ContentLanguage string // ContentType is the MIME type of the blob. It will not be empty. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type ContentType string // Metadata holds key/value pairs associated with the blob. // Keys are guaranteed to be in lowercase, even if the backend service // has case-sensitive keys (although note that Metadata written via // this package will always be lowercased). If there are duplicate // case-insensitive keys (e.g., "foo" and "FOO"), only one value // will be kept, and it is undefined which one. Metadata map[string]string // ModTime is the time the blob was last modified. ModTime time.Time // Size is the size of the blob's content in bytes. Size int64 // MD5 is an MD5 hash of the blob contents or nil if not available. MD5 []byte asFunc func(interface{}) bool } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (a *Attributes) As(i interface{}) bool { if a.asFunc == nil { return false } return a.asFunc(i) } // Writer writes bytes to a blob. // // It implements io.WriteCloser (https://golang.org/pkg/io/#Closer), and must be // closed after all writes are done. type Writer struct { b driver.Bucket w driver.Writer key string end func(error) // called at Close to finish trace and metric collection cancel func() // cancels the ctx provided to NewTypedWriter if contentMD5 verification fails contentMD5 []byte md5hash hash.Hash statsTagMutators []tag.Mutator // for metric collection bytesWritten int closed bool // These fields are non-zero values only when w is nil (not yet created). // // A ctx is stored in the Writer since we need to pass it into NewTypedWriter // when we finish detecting the content type of the blob and create the // underlying driver.Writer. This step happens inside Write or Close and // neither of them take a context.Context as an argument. // // All 3 fields are only initialized when we create the Writer without // setting the w field, and are reset to zero values after w is created. ctx context.Context opts *driver.WriterOptions buf *bytes.Buffer } // sniffLen is the byte size of Writer.buf used to detect content-type. const sniffLen = 512 // Write implements the io.Writer interface (https://golang.org/pkg/io/#Writer). // // Writes may happen asynchronously, so the returned error can be nil // even if the actual write eventually fails. The write is only guaranteed to // have succeeded if Close returns no error. func (w *Writer) Write(p []byte) (int, error) { if len(w.contentMD5) > 0 { if _, err := w.md5hash.Write(p); err != nil { return 0, err } } if w.w != nil { return w.write(p) } // If w is not yet created due to no content-type being passed in, try to sniff // the MIME type based on at most 512 bytes of the blob content of p. // Detect the content-type directly if the first chunk is at least 512 bytes. if w.buf.Len() == 0 && len(p) >= sniffLen { return w.open(p) } // Store p in w.buf and detect the content-type when the size of content in // w.buf is at least 512 bytes. n, err := w.buf.Write(p) if err != nil { return 0, err } if w.buf.Len() >= sniffLen { // Note that w.open will return the full length of the buffer; we don't want // to return that as the length of this write since some of them were written in // previous writes. Instead, we return the n from this write, above. _, err := w.open(w.buf.Bytes()) return n, err } return n, nil } // Close closes the blob writer. The write operation is not guaranteed to have succeeded until // Close returns with no error. // Close may return an error if the context provided to create the Writer is // canceled or reaches its deadline. func (w *Writer) Close() (err error) { w.closed = true defer func() { w.end(err) // Emit only on close to avoid an allocation on each call to Write(). stats.RecordWithTags( context.Background(), w.statsTagMutators, bytesWrittenMeasure.M(int64(w.bytesWritten))) }() if len(w.contentMD5) > 0 { // Verify the MD5 hash of what was written matches the ContentMD5 provided // by the user. md5sum := w.md5hash.Sum(nil) if !bytes.Equal(md5sum, w.contentMD5) { // No match! Return an error, but first cancel the context and call the // driver's Close function to ensure the write is aborted. w.cancel() if w.w != nil { _ = w.w.Close() } return gcerr.Newf(gcerr.FailedPrecondition, nil, "blob: the WriterOptions.ContentMD5 you specified (%X) did not match what was written (%X)", w.contentMD5, md5sum) } } defer w.cancel() if w.w != nil { return wrapError(w.b, w.w.Close(), w.key) } if _, err := w.open(w.buf.Bytes()); err != nil { return err } return wrapError(w.b, w.w.Close(), w.key) } // open tries to detect the MIME type of p and write it to the blob. // The error it returns is wrapped. func (w *Writer) open(p []byte) (int, error) { ct := http.DetectContentType(p) var err error if w.w, err = w.b.NewTypedWriter(w.ctx, w.key, ct, w.opts); err != nil { return 0, wrapError(w.b, err, w.key) } // Set the 3 fields needed for lazy NewTypedWriter back to zero values // (see the comment on Writer). w.buf = nil w.ctx = nil w.opts = nil return w.write(p) } func (w *Writer) write(p []byte) (int, error) { n, err := w.w.Write(p) w.bytesWritten += n return n, wrapError(w.b, err, w.key) } // ReadFrom reads from r and writes to w until EOF or error. // The return value is the number of bytes read from r. // // It implements the io.ReaderFrom interface. func (w *Writer) ReadFrom(r io.Reader) (int64, error) { nr, _, err := readFromWriteTo(r, w) return nr, err } // ListOptions sets options for listing blobs via Bucket.List. type ListOptions struct { // Prefix indicates that only blobs with a key starting with this prefix // should be returned. Prefix string // Delimiter sets the delimiter used to define a hierarchical namespace, // like a filesystem with "directories". It is highly recommended that you // use "" or "/" as the Delimiter. Other values should work through this API, // but service UIs generally assume "/". // // An empty delimiter means that the bucket is treated as a single flat // namespace. // // A non-empty delimiter means that any result with the delimiter in its key // after Prefix is stripped will be returned with ListObject.IsDir = true, // ListObject.Key truncated after the delimiter, and zero values for other // ListObject fields. These results represent "directories". Multiple results // in a "directory" are returned as a single result. Delimiter string // BeforeList is a callback that will be called before each call to the // the underlying service's list functionality. // asFunc converts its argument to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. BeforeList func(asFunc func(interface{}) bool) error } // ListIterator iterates over List results. type ListIterator struct { b *Bucket opts *driver.ListOptions page *driver.ListPage nextIdx int } // Next returns a *ListObject for the next blob. It returns (nil, io.EOF) if // there are no more. func (i *ListIterator) Next(ctx context.Context) (*ListObject, error) { if i.page != nil { // We've already got a page of results. if i.nextIdx < len(i.page.Objects) { // Next object is in the page; return it. dobj := i.page.Objects[i.nextIdx] i.nextIdx++ return &ListObject{ Key: dobj.Key, ModTime: dobj.ModTime, Size: dobj.Size, MD5: dobj.MD5, IsDir: dobj.IsDir, asFunc: dobj.AsFunc, }, nil } if len(i.page.NextPageToken) == 0 { // Done with current page, and there are no more; return io.EOF. return nil, io.EOF } // We need to load the next page. i.opts.PageToken = i.page.NextPageToken } i.b.mu.RLock() defer i.b.mu.RUnlock() if i.b.closed { return nil, errClosed } // Loading a new page. p, err := i.b.b.ListPaged(ctx, i.opts) if err != nil { return nil, wrapError(i.b.b, err, "") } i.page = p i.nextIdx = 0 return i.Next(ctx) } // ListObject represents a single blob returned from List. type ListObject struct { // Key is the key for this blob. Key string // ModTime is the time the blob was last modified. ModTime time.Time // Size is the size of the blob's content in bytes. Size int64 // MD5 is an MD5 hash of the blob contents or nil if not available. MD5 []byte // IsDir indicates that this result represents a "directory" in the // hierarchical namespace, ending in ListOptions.Delimiter. Key can be // passed as ListOptions.Prefix to list items in the "directory". // Fields other than Key and IsDir will not be set if IsDir is true. IsDir bool asFunc func(interface{}) bool } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (o *ListObject) As(i interface{}) bool { if o.asFunc == nil { return false } return o.asFunc(i) } // Bucket provides an easy and portable way to interact with blobs // within a "bucket", including read, write, and list operations. // To create a Bucket, use constructors found in driver subpackages. type Bucket struct { b driver.Bucket tracer *oc.Tracer // mu protects the closed variable. // Read locks are kept to allow holding a read lock for long-running calls, // and thereby prevent closing until a call finishes. mu sync.RWMutex closed bool } const pkgName = "gocloud.dev/blob" var ( latencyMeasure = oc.LatencyMeasure(pkgName) bytesReadMeasure = stats.Int64(pkgName+"/bytes_read", "Total bytes read", stats.UnitBytes) bytesWrittenMeasure = stats.Int64(pkgName+"/bytes_written", "Total bytes written", stats.UnitBytes) // OpenCensusViews are predefined views for OpenCensus metrics. // The views include counts and latency distributions for API method calls, // and total bytes read and written. // See the example at https://godoc.org/go.opencensus.io/stats/view for usage. OpenCensusViews = append( oc.Views(pkgName, latencyMeasure), &view.View{ Name: pkgName + "/bytes_read", Measure: bytesReadMeasure, Description: "Sum of bytes read from the service.", TagKeys: []tag.Key{oc.ProviderKey}, Aggregation: view.Sum(), }, &view.View{ Name: pkgName + "/bytes_written", Measure: bytesWrittenMeasure, Description: "Sum of bytes written to the service.", TagKeys: []tag.Key{oc.ProviderKey}, Aggregation: view.Sum(), }) ) // NewBucket is intended for use by drivers only. Do not use in application code. var NewBucket = newBucket // newBucket creates a new *Bucket based on a specific driver implementation. // End users should use subpackages to construct a *Bucket instead of this // function; see the package documentation for details. func newBucket(b driver.Bucket) *Bucket { return &Bucket{ b: b, tracer: &oc.Tracer{ Package: pkgName, Provider: oc.ProviderName(b), LatencyMeasure: latencyMeasure, }, } } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (b *Bucket) As(i interface{}) bool { if i == nil { return false } return b.b.As(i) } // ErrorAs converts err to driver-specific types. // ErrorAs panics if i is nil or not a pointer. // ErrorAs returns false if err == nil. // See https://gocloud.dev/concepts/as/ for background information. func (b *Bucket) ErrorAs(err error, i interface{}) bool { return gcerr.ErrorAs(err, i, b.b.ErrorAs) } // ReadAll is a shortcut for creating a Reader via NewReader with nil // ReaderOptions, and reading the entire blob. func (b *Bucket) ReadAll(ctx context.Context, key string) (_ []byte, err error) { b.mu.RLock() defer b.mu.RUnlock() if b.closed { return nil, errClosed } r, err := b.NewReader(ctx, key, nil) if err != nil { return nil, err } defer r.Close() return ioutil.ReadAll(r) } // List returns a ListIterator that can be used to iterate over blobs in a // bucket, in lexicographical order of UTF-8 encoded keys. The underlying // implementation fetches results in pages. // // A nil ListOptions is treated the same as the zero value. // // List is not guaranteed to include all recently-written blobs; // some services are only eventually consistent. func (b *Bucket) List(opts *ListOptions) *ListIterator { if opts == nil { opts = &ListOptions{} } dopts := &driver.ListOptions{ Prefix: opts.Prefix, Delimiter: opts.Delimiter, BeforeList: opts.BeforeList, } return &ListIterator{b: b, opts: dopts} } // Exists returns true if a blob exists at key, false if it does not exist, or // an error. // It is a shortcut for calling Attributes and checking if it returns an error // with code gcerrors.NotFound. func (b *Bucket) Exists(ctx context.Context, key string) (bool, error) { _, err := b.Attributes(ctx, key) if err == nil { return true, nil } if gcerrors.Code(err) == gcerrors.NotFound { return false, nil } return false, err } // Attributes returns attributes for the blob stored at key. // // If the blob does not exist, Attributes returns an error for which // gcerrors.Code will return gcerrors.NotFound. func (b *Bucket) Attributes(ctx context.Context, key string) (_ *Attributes, err error) { if !utf8.ValidString(key) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: Attributes key must be a valid UTF-8 string: %q", key) } b.mu.RLock() defer b.mu.RUnlock() if b.closed { return nil, errClosed } ctx = b.tracer.Start(ctx, "Attributes") defer func() { b.tracer.End(ctx, err) }() a, err := b.b.Attributes(ctx, key) if err != nil { return nil, wrapError(b.b, err, key) } var md map[string]string if len(a.Metadata) > 0 { // Services are inconsistent, but at least some treat keys // as case-insensitive. To make the behavior consistent, we // force-lowercase them when writing and reading. md = make(map[string]string, len(a.Metadata)) for k, v := range a.Metadata { md[strings.ToLower(k)] = v } } return &Attributes{ CacheControl: a.CacheControl, ContentDisposition: a.ContentDisposition, ContentEncoding: a.ContentEncoding, ContentLanguage: a.ContentLanguage, ContentType: a.ContentType, Metadata: md, ModTime: a.ModTime, Size: a.Size, MD5: a.MD5, asFunc: a.AsFunc, }, nil } // NewReader is a shortcut for NewRangeReader with offset=0 and length=-1. func (b *Bucket) NewReader(ctx context.Context, key string, opts *ReaderOptions) (*Reader, error) { return b.newRangeReader(ctx, key, 0, -1, opts) } // NewRangeReader returns a Reader to read content from the blob stored at key. // It reads at most length bytes starting at offset (>= 0). // If length is negative, it will read till the end of the blob. // // If the blob does not exist, NewRangeReader returns an error for which // gcerrors.Code will return gcerrors.NotFound. Exists is a lighter-weight way // to check for existence. // // A nil ReaderOptions is treated the same as the zero value. // // The caller must call Close on the returned Reader when done reading. func (b *Bucket) NewRangeReader(ctx context.Context, key string, offset, length int64, opts *ReaderOptions) (_ *Reader, err error) { return b.newRangeReader(ctx, key, offset, length, opts) } func (b *Bucket) newRangeReader(ctx context.Context, key string, offset, length int64, opts *ReaderOptions) (_ *Reader, err error) { b.mu.RLock() defer b.mu.RUnlock() if b.closed { return nil, errClosed } if offset < 0 { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: NewRangeReader offset must be non-negative (%d)", offset) } if !utf8.ValidString(key) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: NewRangeReader key must be a valid UTF-8 string: %q", key) } if opts == nil { opts = &ReaderOptions{} } dopts := &driver.ReaderOptions{ BeforeRead: opts.BeforeRead, } tctx := b.tracer.Start(ctx, "NewRangeReader") defer func() { // If err == nil, we handed the end closure off to the returned *Writer; it // will be called when the Writer is Closed. if err != nil { b.tracer.End(tctx, err) } }() dr, err := b.b.NewRangeReader(ctx, key, offset, length, dopts) if err != nil { return nil, wrapError(b.b, err, key) } end := func(err error) { b.tracer.End(tctx, err) } r := &Reader{ b: b.b, r: dr, key: key, end: end, statsTagMutators: []tag.Mutator{tag.Upsert(oc.ProviderKey, b.tracer.Provider)}, } _, file, lineno, ok := runtime.Caller(2) runtime.SetFinalizer(r, func(r *Reader) { if !r.closed { var caller string if ok { caller = fmt.Sprintf(" (%s:%d)", file, lineno) } log.Printf("A blob.Reader reading from %q was never closed%s", key, caller) } }) return r, nil } // WriteAll is a shortcut for creating a Writer via NewWriter and writing p. // // If opts.ContentMD5 is not set, WriteAll will compute the MD5 of p and use it // as the ContentMD5 option for the Writer it creates. func (b *Bucket) WriteAll(ctx context.Context, key string, p []byte, opts *WriterOptions) (err error) { realOpts := new(WriterOptions) if opts != nil { *realOpts = *opts } if len(realOpts.ContentMD5) == 0 { sum := md5.Sum(p) realOpts.ContentMD5 = sum[:] } w, err := b.NewWriter(ctx, key, realOpts) if err != nil { return err } if _, err := w.Write(p); err != nil { _ = w.Close() return err } return w.Close() } // NewWriter returns a Writer that writes to the blob stored at key. // A nil WriterOptions is treated the same as the zero value. // // If a blob with this key already exists, it will be replaced. // The blob being written is not guaranteed to be readable until Close // has been called; until then, any previous blob will still be readable. // Even after Close is called, newly written blobs are not guaranteed to be // returned from List; some services are only eventually consistent. // // The returned Writer will store ctx for later use in Write and/or Close. // To abort a write, cancel ctx; otherwise, it must remain open until // Close is called. // // The caller must call Close on the returned Writer, even if the write is // aborted. func (b *Bucket) NewWriter(ctx context.Context, key string, opts *WriterOptions) (_ *Writer, err error) { if !utf8.ValidString(key) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: NewWriter key must be a valid UTF-8 string: %q", key) } if opts == nil { opts = &WriterOptions{} } dopts := &driver.WriterOptions{ CacheControl: opts.CacheControl, ContentDisposition: opts.ContentDisposition, ContentEncoding: opts.ContentEncoding, ContentLanguage: opts.ContentLanguage, ContentMD5: opts.ContentMD5, BufferSize: opts.BufferSize, BeforeWrite: opts.BeforeWrite, } if len(opts.Metadata) > 0 { // Services are inconsistent, but at least some treat keys // as case-insensitive. To make the behavior consistent, we // force-lowercase them when writing and reading. md := make(map[string]string, len(opts.Metadata)) for k, v := range opts.Metadata { if k == "" { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: WriterOptions.Metadata keys may not be empty strings") } if !utf8.ValidString(k) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: WriterOptions.Metadata keys must be valid UTF-8 strings: %q", k) } if !utf8.ValidString(v) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: WriterOptions.Metadata values must be valid UTF-8 strings: %q", v) } lowerK := strings.ToLower(k) if _, found := md[lowerK]; found { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "blob: WriterOptions.Metadata has a duplicate case-insensitive metadata key: %q", lowerK) } md[lowerK] = v } dopts.Metadata = md } b.mu.RLock() defer b.mu.RUnlock() if b.closed { return nil, errClosed } ctx, cancel := context.WithCancel(ctx) tctx := b.tracer.Start(ctx, "NewWriter") end := func(err error) { b.tracer.End(tctx, err) } defer func() { if err != nil { end(err) } }() w := &Writer{ b: b.b, end: end, cancel: cancel, key: key, contentMD5: opts.ContentMD5, md5hash: md5.New(), statsTagMutators: []tag.Mutator{tag.Upsert(oc.ProviderKey, b.tracer.Provider)}, } if opts.ContentType != "" { t, p, err := mime.ParseMediaType(opts.ContentType) if err != nil { cancel() return nil, err } ct := mime.FormatMediaType(t, p) dw, err := b.b.NewTypedWriter(ctx, key, ct, dopts) if err != nil { cancel() return nil, wrapError(b.b, err, key) } w.w = dw } else { // Save the fields needed to called NewTypedWriter later, once we've gotten // sniffLen bytes; see the comment on Writer. w.ctx = ctx w.opts = dopts w.buf = bytes.NewBuffer([]byte{}) } _, file, lineno, ok := runtime.Caller(1) runtime.SetFinalizer(w, func(w *Writer) { if !w.closed { var caller string if ok { caller = fmt.Sprintf(" (%s:%d)", file, lineno) } log.Printf("A blob.Writer writing to %q was never closed%s", key, caller) } }) return w, nil } // Copy the blob stored at srcKey to dstKey. // A nil CopyOptions is treated the same as the zero value. // // If the source blob does not exist, Copy returns an error for which // gcerrors.Code will return gcerrors.NotFound. // // If the destination blob already exists, it is overwritten. func (b *Bucket) Copy(ctx context.Context, dstKey, srcKey string, opts *CopyOptions) (err error) { if !utf8.ValidString(srcKey) { return gcerr.Newf(gcerr.InvalidArgument, nil, "blob: Copy srcKey must be a valid UTF-8 string: %q", srcKey) } if !utf8.ValidString(dstKey) { return gcerr.Newf(gcerr.InvalidArgument, nil, "blob: Copy dstKey must be a valid UTF-8 string: %q", dstKey) } if opts == nil { opts = &CopyOptions{} } dopts := &driver.CopyOptions{ BeforeCopy: opts.BeforeCopy, } b.mu.RLock() defer b.mu.RUnlock() if b.closed { return errClosed } ctx = b.tracer.Start(ctx, "Copy") defer func() { b.tracer.End(ctx, err) }() return wrapError(b.b, b.b.Copy(ctx, dstKey, srcKey, dopts), fmt.Sprintf("%s -> %s", srcKey, dstKey)) } // Delete deletes the blob stored at key. // // If the blob does not exist, Delete returns an error for which // gcerrors.Code will return gcerrors.NotFound. func (b *Bucket) Delete(ctx context.Context, key string) (err error) { if !utf8.ValidString(key) { return gcerr.Newf(gcerr.InvalidArgument, nil, "blob: Delete key must be a valid UTF-8 string: %q", key) } b.mu.RLock() defer b.mu.RUnlock() if b.closed { return errClosed } ctx = b.tracer.Start(ctx, "Delete") defer func() { b.tracer.End(ctx, err) }() return wrapError(b.b, b.b.Delete(ctx, key), key) } // SignedURL returns a URL that can be used to GET the blob for the duration // specified in opts.Expiry. // // A nil SignedURLOptions is treated the same as the zero value. // // It is valid to call SignedURL for a key that does not exist. // // If the driver does not support this functionality, SignedURL // will return an error for which gcerrors.Code will return gcerrors.Unimplemented. func (b *Bucket) SignedURL(ctx context.Context, key string, opts *SignedURLOptions) (string, error) { if !utf8.ValidString(key) { return "", gcerr.Newf(gcerr.InvalidArgument, nil, "blob: SignedURL key must be a valid UTF-8 string: %q", key) } dopts := new(driver.SignedURLOptions) if opts == nil { opts = new(SignedURLOptions) } switch { case opts.Expiry < 0: return "", gcerr.Newf(gcerr.InvalidArgument, nil, "blob: SignedURLOptions.Expiry must be >= 0 (%v)", opts.Expiry) case opts.Expiry == 0: dopts.Expiry = DefaultSignedURLExpiry default: dopts.Expiry = opts.Expiry } switch opts.Method { case "": dopts.Method = http.MethodGet case http.MethodGet, http.MethodPut, http.MethodDelete: dopts.Method = opts.Method default: return "", fmt.Errorf("blob: unsupported SignedURLOptions.Method %q", opts.Method) } if opts.ContentType != "" && opts.Method != http.MethodPut { return "", fmt.Errorf("blob: SignedURLOptions.ContentType must be empty for signing a %s URL", opts.Method) } if opts.EnforceAbsentContentType && opts.Method != http.MethodPut { return "", fmt.Errorf("blob: SignedURLOptions.EnforceAbsentContentType must be false for signing a %s URL", opts.Method) } dopts.ContentType = opts.ContentType dopts.EnforceAbsentContentType = opts.EnforceAbsentContentType b.mu.RLock() defer b.mu.RUnlock() if b.closed { return "", errClosed } url, err := b.b.SignedURL(ctx, key, dopts) return url, wrapError(b.b, err, key) } // Close releases any resources used for the bucket. func (b *Bucket) Close() error { b.mu.Lock() prev := b.closed b.closed = true b.mu.Unlock() if prev { return errClosed } return wrapError(b.b, b.b.Close(), "") } // DefaultSignedURLExpiry is the default duration for SignedURLOptions.Expiry. const DefaultSignedURLExpiry = 1 * time.Hour // SignedURLOptions sets options for SignedURL. type SignedURLOptions struct { // Expiry sets how long the returned URL is valid for. // Defaults to DefaultSignedURLExpiry. Expiry time.Duration // Method is the HTTP method that can be used on the URL; one of "GET", "PUT", // or "DELETE". Defaults to "GET". Method string // ContentType specifies the Content-Type HTTP header the user agent is // permitted to use in the PUT request. It must match exactly. See // EnforceAbsentContentType for behavior when ContentType is the empty string. // If a bucket does not implement this verification, then it returns an // Unimplemented error. // // Must be empty for non-PUT requests. ContentType string // If EnforceAbsentContentType is true and ContentType is the empty string, // then PUTing to the signed URL will fail if the Content-Type header is // present. Not all buckets support this: ones that do not will return an // Unimplemented error. // // If EnforceAbsentContentType is false and ContentType is the empty string, // then PUTing without a Content-Type header will succeed, but it is // implementation-specific whether providing a Content-Type header will fail. // // Must be false for non-PUT requests. EnforceAbsentContentType bool } // ReaderOptions sets options for NewReader and NewRangeReader. type ReaderOptions struct { // BeforeRead is a callback that will be called exactly once, before // any data is read (unless NewReader returns an error before then, in which // case it may not be called at all). // // asFunc converts its argument to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. BeforeRead func(asFunc func(interface{}) bool) error } // WriterOptions sets options for NewWriter. type WriterOptions struct { // BufferSize changes the default size in bytes of the chunks that // Writer will upload in a single request; larger blobs will be split into // multiple requests. // // This option may be ignored by some drivers. // // If 0, the driver will choose a reasonable default. // // If the Writer is used to do many small writes concurrently, using a // smaller BufferSize may reduce memory usage. BufferSize int // CacheControl specifies caching attributes that services may use // when serving the blob. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control CacheControl string // ContentDisposition specifies whether the blob content is expected to be // displayed inline or as an attachment. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition ContentDisposition string // ContentEncoding specifies the encoding used for the blob's content, if any. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding ContentEncoding string // ContentLanguage specifies the language used in the blob's content, if any. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language ContentLanguage string // ContentType specifies the MIME type of the blob being written. If not set, // it will be inferred from the content using the algorithm described at // http://mimesniff.spec.whatwg.org/. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type ContentType string // ContentMD5 is used as a message integrity check. // If len(ContentMD5) > 0, the MD5 hash of the bytes written must match // ContentMD5, or Close will return an error without completing the write. // https://tools.ietf.org/html/rfc1864 ContentMD5 []byte // Metadata holds key/value strings to be associated with the blob, or nil. // Keys may not be empty, and are lowercased before being written. // Duplicate case-insensitive keys (e.g., "foo" and "FOO") will result in // an error. Metadata map[string]string // BeforeWrite is a callback that will be called exactly once, before // any data is written (unless NewWriter returns an error, in which case // it will not be called at all). Note that this is not necessarily during // or after the first Write call, as drivers may buffer bytes before // sending an upload request. // // asFunc converts its argument to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. BeforeWrite func(asFunc func(interface{}) bool) error } // CopyOptions sets options for Copy. type CopyOptions struct { // BeforeCopy is a callback that will be called before the copy is // initiated. // // asFunc converts its argument to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. BeforeCopy func(asFunc func(interface{}) bool) error } // BucketURLOpener represents types that can open buckets based on a URL. // The opener must not modify the URL argument. OpenBucketURL must be safe to // call from multiple goroutines. // // This interface is generally implemented by types in driver packages. type BucketURLOpener interface { OpenBucketURL(ctx context.Context, u *url.URL) (*Bucket, error) } // URLMux is a URL opener multiplexer. It matches the scheme of the URLs // against a set of registered schemes and calls the opener that matches the // URL's scheme. // See https://gocloud.dev/concepts/urls/ for more information. // // The zero value is a multiplexer with no registered schemes. type URLMux struct { schemes openurl.SchemeMap } // BucketSchemes returns a sorted slice of the registered Bucket schemes. func (mux *URLMux) BucketSchemes() []string { return mux.schemes.Schemes() } // ValidBucketScheme returns true iff scheme has been registered for Buckets. func (mux *URLMux) ValidBucketScheme(scheme string) bool { return mux.schemes.ValidScheme(scheme) } // RegisterBucket registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterBucket panics. func (mux *URLMux) RegisterBucket(scheme string, opener BucketURLOpener) { mux.schemes.Register("blob", "Bucket", scheme, opener) } // OpenBucket calls OpenBucketURL with the URL parsed from urlstr. // OpenBucket is safe to call from multiple goroutines. func (mux *URLMux) OpenBucket(ctx context.Context, urlstr string) (*Bucket, error) { opener, u, err := mux.schemes.FromString("Bucket", urlstr) if err != nil { return nil, err } return applyPrefixParam(ctx, opener.(BucketURLOpener), u) } // OpenBucketURL dispatches the URL to the opener that is registered with the // URL's scheme. OpenBucketURL is safe to call from multiple goroutines. func (mux *URLMux) OpenBucketURL(ctx context.Context, u *url.URL) (*Bucket, error) { opener, err := mux.schemes.FromURL("Bucket", u) if err != nil { return nil, err } return applyPrefixParam(ctx, opener.(BucketURLOpener), u) } func applyPrefixParam(ctx context.Context, opener BucketURLOpener, u *url.URL) (*Bucket, error) { prefix := u.Query().Get("prefix") if prefix != "" { // Make a copy of u with the "prefix" parameter removed. urlCopy := *u q := urlCopy.Query() q.Del("prefix") urlCopy.RawQuery = q.Encode() u = &urlCopy } bucket, err := opener.OpenBucketURL(ctx, u) if err != nil { return nil, err } if prefix != "" { bucket = PrefixedBucket(bucket, prefix) } return bucket, nil } var defaultURLMux = new(URLMux) // DefaultURLMux returns the URLMux used by OpenBucket. // // Driver packages can use this to register their BucketURLOpener on the mux. func DefaultURLMux() *URLMux { return defaultURLMux } // OpenBucket opens the bucket identified by the URL given. // // See the URLOpener documentation in driver subpackages for // details on supported URL formats, and https://gocloud.dev/concepts/urls/ // for more information. // // In addition to driver-specific query parameters, OpenBucket supports // the following query parameters: // // - prefix: wraps the resulting Bucket using PrefixedBucket with the // given prefix. func OpenBucket(ctx context.Context, urlstr string) (*Bucket, error) { return defaultURLMux.OpenBucket(ctx, urlstr) } func wrapError(b driver.Bucket, err error, key string) error { if err == nil { return nil } if gcerr.DoNotWrap(err) { return err } msg := "blob" if key != "" { msg += fmt.Sprintf(" (key %q)", key) } return gcerr.New(b.ErrorCode(err), err, 2, msg) } var errClosed = gcerr.Newf(gcerr.FailedPrecondition, nil, "blob: Bucket has been closed") // PrefixedBucket returns a *Bucket based on b with all keys modified to have // prefix, which will usually end with a "/" to target a subdirectory in the // bucket. // // bucket will be closed and no longer usable after this function returns. func PrefixedBucket(bucket *Bucket, prefix string) *Bucket { bucket.mu.Lock() defer bucket.mu.Unlock() bucket.closed = true return NewBucket(driver.NewPrefixedBucket(bucket.b, prefix)) } go-cloud-0.20.0/blob/blob_test.go000066400000000000000000000264121367004507500165400ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package blob import ( "bytes" "context" "errors" "io" "net/url" "strings" "sync" "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/blob/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" ) var ( errFake = errors.New("fake") errNotFound = errors.New("fake not found") ) func TestExists(t *testing.T) { tests := []struct { Description string Err error Want bool WantErr bool }{ { Description: "no error -> exists", Err: nil, Want: true, WantErr: false, }, { Description: "notfound error -> !exists", Err: errNotFound, Want: false, WantErr: false, }, { Description: "other error -> error", Err: errFake, Want: false, WantErr: true, }, } for _, test := range tests { t.Run(test.Description, func(t *testing.T) { drv := &fakeAttributes{attributesErr: test.Err} b := NewBucket(drv) defer b.Close() got, gotErr := b.Exists(context.Background(), "key") if got != test.Want { t.Errorf("got %v want %v", got, test.Want) } if (gotErr != nil) != test.WantErr { t.Errorf("got err %v want %v", gotErr, test.WantErr) } }) } } // fakeAttributes implements driver.Bucket. Only Attributes is implemented, // returning a zero Attributes struct and attributesErr. type fakeAttributes struct { driver.Bucket attributesErr error } func (b *fakeAttributes) Attributes(ctx context.Context, key string) (*driver.Attributes, error) { if b.attributesErr != nil { return nil, b.attributesErr } return &driver.Attributes{}, nil } func (b *fakeAttributes) ErrorCode(err error) gcerrors.ErrorCode { if err == errNotFound { return gcerrors.NotFound } return gcerrors.Unknown } func (b *fakeAttributes) Close() error { return nil } // Verify that ListIterator works even if driver.ListPaged returns empty pages. func TestListIterator(t *testing.T) { ctx := context.Background() want := []string{"a", "b", "c"} db := &fakeLister{pages: [][]string{ {"a"}, {}, {}, {"b", "c"}, {}, {}, }} b := NewBucket(db) defer b.Close() iter := b.List(nil) var got []string for { obj, err := iter.Next(ctx) if err == io.EOF { break } if err != nil { t.Fatal(err) } got = append(got, obj.Key) } if !cmp.Equal(got, want) { t.Errorf("got %v, want %v", got, want) } } // fakeLister implements driver.Bucket. Only ListPaged is implemented, // returning static data from pages. type fakeLister struct { driver.Bucket pages [][]string } func (b *fakeLister) ListPaged(ctx context.Context, opts *driver.ListOptions) (*driver.ListPage, error) { if len(b.pages) == 0 { return &driver.ListPage{}, nil } page := b.pages[0] b.pages = b.pages[1:] var objs []*driver.ListObject for _, key := range page { objs = append(objs, &driver.ListObject{Key: key}) } return &driver.ListPage{Objects: objs, NextPageToken: []byte{1}}, nil } func (b *fakeLister) Close() error { return nil } // erroringBucket implements driver.Bucket. All interface methods that return // errors are implemented, and return errFake. // In addition, when passed the key "work", NewRangeReader and NewTypedWriter // will return a Reader/Writer respectively, that always return errFake // from Read/Write and Close. type erroringBucket struct { driver.Bucket } type erroringReader struct { driver.Reader } func (r *erroringReader) Read(p []byte) (int, error) { return 0, errFake } func (r *erroringReader) Close() error { return errFake } type erroringWriter struct { driver.Writer } func (r *erroringWriter) Write(p []byte) (int, error) { return 0, errFake } func (r *erroringWriter) Close() error { return errFake } func (b *erroringBucket) Attributes(ctx context.Context, key string) (*driver.Attributes, error) { return nil, errFake } func (b *erroringBucket) ListPaged(ctx context.Context, opts *driver.ListOptions) (*driver.ListPage, error) { return nil, errFake } func (b *erroringBucket) NewRangeReader(ctx context.Context, key string, offset, length int64, opts *driver.ReaderOptions) (driver.Reader, error) { if key == "work" { return &erroringReader{}, nil } return nil, errFake } func (b *erroringBucket) NewTypedWriter(ctx context.Context, key string, contentType string, opts *driver.WriterOptions) (driver.Writer, error) { if key == "work" { return &erroringWriter{}, nil } return nil, errFake } func (b *erroringBucket) Copy(ctx context.Context, dstKey, srcKey string, opts *driver.CopyOptions) error { return errFake } func (b *erroringBucket) Delete(ctx context.Context, key string) error { return errFake } func (b *erroringBucket) SignedURL(ctx context.Context, key string, opts *driver.SignedURLOptions) (string, error) { return "", errFake } func (b *erroringBucket) Close() error { return errFake } func (b *erroringBucket) ErrorCode(err error) gcerrors.ErrorCode { return gcerrors.Unknown } // TestErrorsAreWrapped tests that all errors returned from the driver are // wrapped exactly once by the portable type. func TestErrorsAreWrapped(t *testing.T) { ctx := context.Background() buf := bytes.Repeat([]byte{'A'}, sniffLen) b := NewBucket(&erroringBucket{}) // verifyWrap ensures that err is wrapped exactly once. verifyWrap := func(description string, err error) { if err == nil { t.Errorf("%s: got nil error, wanted non-nil", description) return } if _, ok := err.(*gcerr.Error); !ok { t.Errorf("%s: not wrapped: %v", description, err) } if s := err.Error(); !strings.HasPrefix(s, "blob ") { t.Logf("short form of error: %v", err) t.Logf("with details: %+v", err) t.Errorf("%s: Error() for wrapped error doesn't start with blob: prefix: %s", description, s) } } _, err := b.Attributes(ctx, "") verifyWrap("Attributes", err) iter := b.List(nil) _, err = iter.Next(ctx) verifyWrap("ListIterator.Next", err) _, err = b.NewRangeReader(ctx, "", 0, 1, nil) verifyWrap("NewRangeReader", err) _, err = b.ReadAll(ctx, "") verifyWrap("ReadAll", err) // Providing ContentType means driver.NewTypedWriter is called right away. _, err = b.NewWriter(ctx, "", &WriterOptions{ContentType: "foo"}) verifyWrap("NewWriter", err) err = b.WriteAll(ctx, "", buf, &WriterOptions{ContentType: "foo"}) verifyWrap("WriteAll", err) // Not providing ContentType means driver.NewTypedWriter is only called // after writing sniffLen bytes. w, _ := b.NewWriter(ctx, "", nil) _, err = w.Write(buf) verifyWrap("NewWriter (no ContentType)", err) w.Close() err = b.WriteAll(ctx, "", buf, nil) verifyWrap("WriteAll (no ContentType)", err) r, _ := b.NewRangeReader(ctx, "work", 0, 1, nil) _, err = r.Read(buf) verifyWrap("Reader.Read", err) err = r.Close() verifyWrap("Reader.Close", err) w, _ = b.NewWriter(ctx, "work", &WriterOptions{ContentType: "foo"}) _, err = w.Write(buf) verifyWrap("Writer.Write", err) err = w.Close() verifyWrap("Writer.Close", err) err = b.Copy(ctx, "", "", nil) verifyWrap("Copy", err) err = b.Delete(ctx, "") verifyWrap("Delete", err) _, err = b.SignedURL(ctx, "", nil) verifyWrap("SignedURL", err) err = b.Close() verifyWrap("Close", err) } var ( testOpenOnce sync.Once testOpenGot *url.URL ) // TestBucketIsClosed verifies that all Bucket functions return an error // if the Bucket is closed. func TestBucketIsClosed(t *testing.T) { ctx := context.Background() buf := bytes.Repeat([]byte{'A'}, sniffLen) bucket := NewBucket(&erroringBucket{}) bucket.Close() if _, err := bucket.Attributes(ctx, ""); err != errClosed { t.Error(err) } iter := bucket.List(nil) if _, err := iter.Next(ctx); err != errClosed { t.Error(err) } if _, err := bucket.NewRangeReader(ctx, "", 0, 1, nil); err != errClosed { t.Error(err) } if _, err := bucket.ReadAll(ctx, ""); err != errClosed { t.Error(err) } if _, err := bucket.NewWriter(ctx, "", nil); err != errClosed { t.Error(err) } if err := bucket.WriteAll(ctx, "", buf, nil); err != errClosed { t.Error(err) } if _, err := bucket.NewRangeReader(ctx, "work", 0, 1, nil); err != errClosed { t.Error(err) } if err := bucket.Copy(ctx, "", "", nil); err != errClosed { t.Error(err) } if err := bucket.Delete(ctx, ""); err != errClosed { t.Error(err) } if _, err := bucket.SignedURL(ctx, "", nil); err != errClosed { t.Error(err) } if err := bucket.Close(); err != errClosed { t.Error(err) } } func TestURLMux(t *testing.T) { ctx := context.Background() mux := new(URLMux) fake := &fakeOpener{} mux.RegisterBucket("foo", fake) mux.RegisterBucket("err", fake) if diff := cmp.Diff(mux.BucketSchemes(), []string{"err", "foo"}); diff != "" { t.Errorf("Schemes: %s", diff) } if !mux.ValidBucketScheme("foo") || !mux.ValidBucketScheme("err") { t.Errorf("ValidBucketScheme didn't return true for valid scheme") } if mux.ValidBucketScheme("foo2") || mux.ValidBucketScheme("http") { t.Errorf("ValidBucketScheme didn't return false for invalid scheme") } for _, tc := range []struct { name string url string wantErr bool }{ { name: "empty URL", wantErr: true, }, { name: "invalid URL", url: ":foo", wantErr: true, }, { name: "invalid URL no scheme", url: "foo", wantErr: true, }, { name: "unregistered scheme", url: "bar://mybucket", wantErr: true, }, { name: "func returns error", url: "err://mybucket", wantErr: true, }, { name: "no query options", url: "foo://mybucket", }, { name: "empty query options", url: "foo://mybucket?", }, { name: "query options", url: "foo://mybucket?aAa=bBb&cCc=dDd", }, { name: "multiple query options", url: "foo://mybucket?x=a&x=b&x=c", }, { name: "fancy bucket name", url: "foo:///foo/bar/baz", }, { name: "using api scheme prefix", url: "blob+foo:///foo/bar/baz", }, { name: "using api+type scheme prefix", url: "blob+bucket+foo:///foo/bar/baz", }, } { t.Run(tc.name, func(t *testing.T) { _, gotErr := mux.OpenBucket(ctx, tc.url) if (gotErr != nil) != tc.wantErr { t.Fatalf("got err %v, want error %v", gotErr, tc.wantErr) } if gotErr != nil { return } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } // Repeat with OpenBucketURL. parsed, err := url.Parse(tc.url) if err != nil { t.Fatal(err) } _, gotErr = mux.OpenBucketURL(ctx, parsed) if gotErr != nil { t.Fatalf("got err %v want nil", gotErr) } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } }) } } type fakeOpener struct { u *url.URL // last url passed to OpenBucketURL } func (o *fakeOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*Bucket, error) { if u.Scheme == "err" { return nil, errors.New("fail") } o.u = u return nil, nil } go-cloud-0.20.0/blob/blob_writer_test.go000066400000000000000000000100131367004507500201220ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package blob_test import ( "bytes" "context" "crypto/rand" "fmt" "io" "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/blob" "gocloud.dev/blob/memblob" ) // TestWriteReturnValues verifies that blob.Writer returns the correct n // even when it is doing content sniffing. func TestWriteReturnValues(t *testing.T) { ctx := context.Background() for _, withContentType := range []bool{true, false} { t.Run(fmt.Sprintf("withContentType %v", withContentType), func(t *testing.T) { bucket := memblob.OpenBucket(nil) defer bucket.Close() var opts *blob.WriterOptions if withContentType { opts = &blob.WriterOptions{ContentType: "application/octet-stream"} } w, err := bucket.NewWriter(ctx, "testkey", opts) if err != nil { t.Fatalf("couldn't create writer with options: %v", err) } defer func() { if err := w.Close(); err != nil { t.Errorf("failed to close writer: %v", err) } }() n, err := io.CopyN(w, rand.Reader, 182) if err != nil || n != 182 { t.Fatalf("CopyN(182) got %d, want 182: %v", n, err) } n, err = io.CopyN(w, rand.Reader, 1812) if err != nil || n != 1812 { t.Fatalf("CopyN(1812) got %d, want 1812: %v", n, err) } }) } } func randomData(nBytes int64) ([]byte, error) { var buf bytes.Buffer n, err := io.CopyN(&buf, rand.Reader, nBytes) if err != nil || n != nBytes { return nil, fmt.Errorf("failed to get random data (%d want %d): %v", n, nBytes, err) } return buf.Bytes(), nil } func TestReadFrom(t *testing.T) { const dstKey = "dstkey" // Get some random data, of a large enough size to require multiple // reads/writes given our buffer size of 1024. data, err := randomData(1024*10 + 10) bucket := memblob.OpenBucket(nil) defer bucket.Close() // Create a blob.Writer and write to it using ReadFrom given a buffer // holding the random data. ctx := context.Background() w, err := bucket.NewWriter(ctx, dstKey, nil) if err != nil { t.Fatal(err) } n, err := w.ReadFrom(bytes.NewBuffer(data)) if err != nil || n != int64(len(data)) { t.Fatalf("failed to ReadFrom (%d want %d): %v", n, len(data), err) } if err := w.Close(); err != nil { t.Fatal(err) } // Verify the data was copied correctly. got, err := bucket.ReadAll(ctx, dstKey) if err != nil { t.Fatal(err) } if !cmp.Equal(got, data) { t.Errorf("got %v, want %v", got, data) } } // Ensure that blob.Reader implements io.WriterTo. var _ io.WriterTo = &blob.Reader{} // Ensure that blob.Writer implements io.ReaderFrom. var _ io.ReaderFrom = &blob.Writer{} func TestWriteTo(t *testing.T) { const srcKey = "srckey" // Get some random data, of a large enough size to require multiple // reads/writes given our buffer size of 1024. data, err := randomData(1024*10 + 10) bucket := memblob.OpenBucket(nil) defer bucket.Close() // Write the data to a key. ctx := context.Background() if err := bucket.WriteAll(ctx, srcKey, data, nil); err != nil { t.Fatal(err) } // Create a blob.Reader for that key and read from it, writing to a buffer. r, err := bucket.NewReader(ctx, srcKey, nil) if err != nil { t.Fatal(err) } var buf bytes.Buffer n, err := r.WriteTo(&buf) if err != nil || n != int64(len(data)) { t.Fatalf("failed to WriteTo (%d want %d): %v", n, len(data), err) } if err := r.Close(); err != nil { t.Fatal(err) } // Verify the data was copied correctly. got := buf.Bytes() if !cmp.Equal(got, data) { t.Errorf("got %v, want %v", got, data) } } go-cloud-0.20.0/blob/driver/000077500000000000000000000000001367004507500155225ustar00rootroot00000000000000go-cloud-0.20.0/blob/driver/driver.go000066400000000000000000000403571367004507500173550ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package driver defines interfaces to be implemented by blob drivers, which // will be used by the blob package to interact with the underlying services. // Application code should use package blob. package driver // import "gocloud.dev/blob/driver" import ( "context" "errors" "io" "strings" "time" "gocloud.dev/gcerrors" ) // ReaderOptions controls Reader behaviors. type ReaderOptions struct { // BeforeRead is a callback that must be called exactly once before // any data is read, unless NewRangeReader returns an error before then, in // which case it should not be called at all. // asFunc allows drivers to expose driver-specific types; // see Bucket.As for more details. BeforeRead func(asFunc func(interface{}) bool) error } // Reader reads an object from the blob. type Reader interface { io.ReadCloser // Attributes returns a subset of attributes about the blob. // The portable type will not modify the returned ReaderAttributes. Attributes() *ReaderAttributes // As allows drivers to expose driver-specific types; // see Bucket.As for more details. As(interface{}) bool } // Writer writes an object to the blob. type Writer interface { io.WriteCloser } // WriterOptions controls behaviors of Writer. type WriterOptions struct { // BufferSize changes the default size in byte of the maximum part Writer can // write in a single request, if supported. Larger objects will be split into // multiple requests. BufferSize int // CacheControl specifies caching attributes that services may use // when serving the blob. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control CacheControl string // ContentDisposition specifies whether the blob content is expected to be // displayed inline or as an attachment. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition ContentDisposition string // ContentEncoding specifies the encoding used for the blob's content, if any. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding ContentEncoding string // ContentLanguage specifies the language used in the blob's content, if any. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language ContentLanguage string // ContentMD5 is used as a message integrity check. // The portable type checks that the MD5 hash of the bytes written matches // ContentMD5. // If len(ContentMD5) > 0, driver implementations may pass it to their // underlying network service to guarantee the integrity of the bytes in // transit. ContentMD5 []byte // Metadata holds key/value strings to be associated with the blob. // Keys are guaranteed to be non-empty and lowercased. Metadata map[string]string // BeforeWrite is a callback that must be called exactly once before // any data is written, unless NewTypedWriter returns an error, in // which case it should not be called. // asFunc allows drivers to expose driver-specific types; // see Bucket.As for more details. BeforeWrite func(asFunc func(interface{}) bool) error } // CopyOptions controls options for Copy. type CopyOptions struct { // BeforeCopy is a callback that must be called before initiating the Copy. // asFunc allows drivers to expose driver-specific types; // see Bucket.As for more details. BeforeCopy func(asFunc func(interface{}) bool) error } // ReaderAttributes contains a subset of attributes about a blob that are // accessible from Reader. type ReaderAttributes struct { // ContentType is the MIME type of the blob object. It must not be empty. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type ContentType string // ModTime is the time the blob object was last modified. ModTime time.Time // Size is the size of the object in bytes. Size int64 } // Attributes contains attributes about a blob. type Attributes struct { // CacheControl specifies caching attributes that services may use // when serving the blob. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control CacheControl string // ContentDisposition specifies whether the blob content is expected to be // displayed inline or as an attachment. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition ContentDisposition string // ContentEncoding specifies the encoding used for the blob's content, if any. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding ContentEncoding string // ContentLanguage specifies the language used in the blob's content, if any. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language ContentLanguage string // ContentType is the MIME type of the blob object. It must not be empty. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type ContentType string // Metadata holds key/value pairs associated with the blob. // Keys will be lowercased by the portable type before being returned // to the user. If there are duplicate case-insensitive keys (e.g., // "foo" and "FOO"), only one value will be kept, and it is undefined // which one. Metadata map[string]string // ModTime is the time the blob object was last modified. ModTime time.Time // Size is the size of the object in bytes. Size int64 // MD5 is an MD5 hash of the blob contents or nil if not available. MD5 []byte // AsFunc allows drivers to expose driver-specific types; // see Bucket.As for more details. // If not set, no driver-specific types are supported. AsFunc func(interface{}) bool } // ListOptions sets options for listing objects in the bucket. type ListOptions struct { // Prefix indicates that only results with the given prefix should be // returned. Prefix string // Delimiter sets the delimiter used to define a hierarchical namespace, // like a filesystem with "directories". // // An empty delimiter means that the bucket is treated as a single flat // namespace. // // A non-empty delimiter means that any result with the delimiter in its key // after Prefix is stripped will be returned with ListObject.IsDir = true, // ListObject.Key truncated after the delimiter, and zero values for other // ListObject fields. These results represent "directories". Multiple results // in a "directory" are returned as a single result. Delimiter string // PageSize sets the maximum number of objects to be returned. // 0 means no maximum; driver implementations should choose a reasonable // max. It is guaranteed to be >= 0. PageSize int // PageToken may be filled in with the NextPageToken from a previous // ListPaged call. PageToken []byte // BeforeList is a callback that must be called exactly once during ListPaged, // before the underlying service's list is executed. // asFunc allows drivers to expose driver-specific types; // see Bucket.As for more details. BeforeList func(asFunc func(interface{}) bool) error } // ListObject represents a specific blob object returned from ListPaged. type ListObject struct { // Key is the key for this blob. Key string // ModTime is the time the blob object was last modified. ModTime time.Time // Size is the size of the object in bytes. Size int64 // MD5 is an MD5 hash of the blob contents or nil if not available. MD5 []byte // IsDir indicates that this result represents a "directory" in the // hierarchical namespace, ending in ListOptions.Delimiter. Key can be // passed as ListOptions.Prefix to list items in the "directory". // Fields other than Key and IsDir will not be set if IsDir is true. IsDir bool // AsFunc allows drivers to expose driver-specific types; // see Bucket.As for more details. // If not set, no driver-specific types are supported. AsFunc func(interface{}) bool } // ListPage represents a page of results return from ListPaged. type ListPage struct { // Objects is the slice of objects found. If ListOptions.PageSize > 0, // it should have at most ListOptions.PageSize entries. // // Objects should be returned in lexicographical order of UTF-8 encoded keys, // including across pages. I.e., all objects returned from a ListPage request // made using a PageToken from a previous ListPage request's NextPageToken // should have Key >= the Key for all objects from the previous request. Objects []*ListObject // NextPageToken should be left empty unless there are more objects // to return. The value may be returned as ListOptions.PageToken on a // subsequent ListPaged call, to fetch the next page of results. // It can be an arbitrary []byte; it need not be a valid key. NextPageToken []byte } // Bucket provides read, write and delete operations on objects within it on the // blob service. type Bucket interface { // ErrorCode should return a code that describes the error, which was returned by // one of the other methods in this interface. ErrorCode(error) gcerrors.ErrorCode // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. As(i interface{}) bool // ErrorAs allows drivers to expose driver-specific types for returned // errors. // See https://gocloud.dev/concepts/as/ for background information. ErrorAs(error, interface{}) bool // Attributes returns attributes for the blob. If the specified object does // not exist, Attributes must return an error for which ErrorCode returns // gcerrors.NotFound. // The portable type will not modify the returned Attributes. Attributes(ctx context.Context, key string) (*Attributes, error) // ListPaged lists objects in the bucket, in lexicographical order by // UTF-8-encoded key, returning pages of objects at a time. // Services are only required to be eventually consistent with respect // to recently written or deleted objects. That is to say, there is no // guarantee that an object that's been written will immediately be returned // from ListPaged. // opts is guaranteed to be non-nil. ListPaged(ctx context.Context, opts *ListOptions) (*ListPage, error) // NewRangeReader returns a Reader that reads part of an object, reading at // most length bytes starting at the given offset. If length is negative, it // will read until the end of the object. If the specified object does not // exist, NewRangeReader must return an error for which ErrorCode returns // gcerrors.NotFound. // opts is guaranteed to be non-nil. NewRangeReader(ctx context.Context, key string, offset, length int64, opts *ReaderOptions) (Reader, error) // NewTypedWriter returns Writer that writes to an object associated with key. // // A new object will be created unless an object with this key already exists. // Otherwise any previous object with the same key will be replaced. // The object may not be available (and any previous object will remain) // until Close has been called. // // contentType sets the MIME type of the object to be written. It must not be // empty. opts is guaranteed to be non-nil. // // The caller must call Close on the returned Writer when done writing. // // Implementations should abort an ongoing write if ctx is later canceled, // and do any necessary cleanup in Close. Close should then return ctx.Err(). NewTypedWriter(ctx context.Context, key, contentType string, opts *WriterOptions) (Writer, error) // Copy copies the object associated with srcKey to dstKey. // // If the source object does not exist, Copy must return an error for which // ErrorCode returns gcerrors.NotFound. // // If the destination object already exists, it should be overwritten. // // opts is guaranteed to be non-nil. Copy(ctx context.Context, dstKey, srcKey string, opts *CopyOptions) error // Delete deletes the object associated with key. If the specified object does // not exist, Delete must return an error for which ErrorCode returns // gcerrors.NotFound. Delete(ctx context.Context, key string) error // SignedURL returns a URL that can be used to GET the blob for the duration // specified in opts.Expiry. opts is guaranteed to be non-nil. // If not supported, return an error for which ErrorCode returns // gcerrors.Unimplemented. SignedURL(ctx context.Context, key string, opts *SignedURLOptions) (string, error) // Close cleans up any resources used by the Bucket. Once Close is called, // there will be no method calls to the Bucket other than As, ErrorAs, and // ErrorCode. There may be open readers or writers that will receive calls. // It is up to the driver as to how these will be handled. Close() error } // SignedURLOptions sets options for SignedURL. type SignedURLOptions struct { // Expiry sets how long the returned URL is valid for. It is guaranteed to be > 0. Expiry time.Duration // Method is the HTTP method that can be used on the URL; one of "GET", "PUT", // or "DELETE". Drivers must implement all 3. Method string // ContentType specifies the Content-Type HTTP header the user agent is // permitted to use in the PUT request. It must match exactly. See // EnforceAbsentContentType for behavior when ContentType is the empty string. // If this field is not empty and the bucket cannot enforce the Content-Type // header, it must return an Unimplemented error. // // This field will not be set for any non-PUT requests. ContentType string // If EnforceAbsentContentType is true and ContentType is the empty string, // then PUTing to the signed URL must fail if the Content-Type header is // present or the implementation must return an error if it cannot enforce // this. If EnforceAbsentContentType is false and ContentType is the empty // string, implementations should validate the Content-Type header if possible. // If EnforceAbsentContentType is true and the bucket cannot enforce the // Content-Type header, it must return an Unimplemented error. // // This field will always be false for non-PUT requests. EnforceAbsentContentType bool } // prefixedBucket implements Bucket by prepending prefix to all keys. type prefixedBucket struct { base Bucket prefix string } // NewPrefixedBucket returns a Bucket based on b with all keys modified to have // prefix. func NewPrefixedBucket(b Bucket, prefix string) Bucket { return &prefixedBucket{base: b, prefix: prefix} } func (b *prefixedBucket) ErrorCode(err error) gcerrors.ErrorCode { return b.base.ErrorCode(err) } func (b *prefixedBucket) As(i interface{}) bool { return b.base.As(i) } func (b *prefixedBucket) ErrorAs(err error, i interface{}) bool { return b.base.ErrorAs(err, i) } func (b *prefixedBucket) Attributes(ctx context.Context, key string) (*Attributes, error) { return b.base.Attributes(ctx, b.prefix+key) } func (b *prefixedBucket) ListPaged(ctx context.Context, opts *ListOptions) (*ListPage, error) { var myopts ListOptions if opts != nil { myopts = *opts } myopts.Prefix = b.prefix + myopts.Prefix page, err := b.base.ListPaged(ctx, &myopts) if err != nil { return nil, err } for _, p := range page.Objects { p.Key = strings.TrimPrefix(p.Key, b.prefix) } return page, nil } func (b *prefixedBucket) NewRangeReader(ctx context.Context, key string, offset, length int64, opts *ReaderOptions) (Reader, error) { return b.base.NewRangeReader(ctx, b.prefix+key, offset, length, opts) } func (b *prefixedBucket) NewTypedWriter(ctx context.Context, key, contentType string, opts *WriterOptions) (Writer, error) { if key == "" { return nil, errors.New("invalid key (empty string)") } return b.base.NewTypedWriter(ctx, b.prefix+key, contentType, opts) } func (b *prefixedBucket) Copy(ctx context.Context, dstKey, srcKey string, opts *CopyOptions) error { return b.base.Copy(ctx, b.prefix+dstKey, b.prefix+srcKey, opts) } func (b *prefixedBucket) Delete(ctx context.Context, key string) error { return b.base.Delete(ctx, b.prefix+key) } func (b *prefixedBucket) SignedURL(ctx context.Context, key string, opts *SignedURLOptions) (string, error) { return b.base.SignedURL(ctx, b.prefix+key, opts) } func (b *prefixedBucket) Close() error { return b.base.Close() } go-cloud-0.20.0/blob/drivertest/000077500000000000000000000000001367004507500164225ustar00rootroot00000000000000go-cloud-0.20.0/blob/drivertest/bindata.go000066400000000000000000004337661367004507500203760ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // This file was auto-generated using go-bindata (https://github.com/jteeuwen/go-bindata). package drivertest import ( "bytes" "compress/gzip" "fmt" "io" "strings" ) func bindataRead(data []byte, name string) ([]byte, error) { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err != nil { return nil, fmt.Errorf("Read %q: %v", name, err) } var buf bytes.Buffer _, err = io.Copy(&buf, gz) gz.Close() if err != nil { return nil, fmt.Errorf("Read %q: %v", name, err) } return buf.Bytes(), nil } var _testLargeJpg = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xfc\x65\x54\x9b\xd1\xba\x2e\x0c\x3f\xc1\x82\x07\x2f\x0e\x45\x0a\x05\x4a\x8b\x16\x97\xb6\x78\xd1\x16\xd7\x22\xc5\xdd\x82\x07\x77\x2f\xd0\xa2\xc1\x9d\x40\x71\x77\x2f\x4e\xa1\x40\xd1\x40\xf1\x42\xd0\x94\x52\xf8\xc6\x5a\x67\x9d\xfd\xae\xbd\xf6\xda\xdf\x58\xfb\x1d\x7b\x9f\xf7\xcf\x99\x63\x5c\xff\x92\x99\x5c\x79\xe6\x3d\x6f\xbd\x72\xff\xed\x7e\x03\x20\x51\x96\x57\x92\x07\x40\x18\x00\x00\x02\x40\x00\x70\xbf\x02\xbc\x04\x70\x71\x70\xc0\x38\xd8\xb8\x60\x30\x18\x0f\x0f\x17\x9f\x90\x82\x88\x90\x80\x80\x90\x86\x8c\x1c\x42\xc1\x40\xcb\xc4\xc8\x40\x4b\x4f\xcf\xcc\xc6\xcb\xc1\xcc\xc2\xc3\x4a\x4f\xcf\xf9\xfc\x31\xcf\x33\x3e\x41\x41\x41\x26\x0e\x51\x49\x11\x7e\x09\x5e\x01\x41\xfe\xbf\x6c\x02\xc2\xc3\xc3\x23\x24\x20\xa4\x26\x22\xa2\xe6\x7f\x48\xff\x90\xff\xbf\xbc\xee\x7b\x00\x52\x5c\xd0\x05\xe6\x1e\x26\x88\x05\xc0\x20\x05\x61\x92\x82\xee\x07\x00\x26\x00\x00\x61\x83\xfe\xba\x80\xbf\x2d\x10\x06\x26\x16\x36\x0e\x18\x17\x0f\x9f\xe0\x7e\x00\x68\x24\x01\x30\x40\x98\x98\x18\x58\x98\xd8\xd8\x58\x58\x00\x00\x0a\x00\x61\x60\x02\x58\xa4\xd8\x64\x0f\xf9\x64\x71\xc8\x35\xdf\x81\x59\x5c\x29\xf8\x83\x93\xf3\x71\x59\x5f\xd4\xf5\x52\x6a\xcd\x9c\xb2\x09\x98\xbb\x85\xe0\xe1\x53\x3d\xa0\xa6\xa1\x65\x7f\xc4\xc1\xf9\x98\x4b\x50\x48\xf8\xb9\x88\xa8\xd8\xcb\x57\x72\xf2\x0a\x8a\x4a\xca\x6f\xde\x6a\xeb\xe8\xea\xe9\x1b\x58\x58\x5a\xbd\xb7\xb6\xb1\xb5\x73\xf7\xf0\xf4\xf2\x86\xfa\xf8\x86\x86\x85\x47\x44\x46\x45\xc7\xa4\xa4\x7e\x48\x4b\xcf\xf8\xf8\x29\xb3\xa0\xb0\xa8\xb8\xa4\xb4\xac\xbc\xe2\x73\x7d\x43\x63\x53\x73\x4b\x6b\x5b\x5f\xff\xc0\xe0\xd0\xf0\xc8\xe8\xd8\xec\xdc\xfc\xd7\x85\xc5\x6f\x4b\xcb\x9b\x5b\xc8\xed\x9d\x1f\xbb\x7b\xfb\x07\xa8\xb3\xf3\x8b\xcb\xab\x6b\xf4\xaf\x9b\xbf\xf0\x02\x01\x98\xa0\xff\xbd\xfe\x29\x2f\x52\x00\x03\x84\x81\x85\x85\x89\x05\xfe\x0b\x2f\x10\x86\xf7\x5f\x5e\x40\x8a\x85\xfd\x90\x0f\x87\x4c\x56\x13\xfc\xce\x95\x9c\x85\x3f\x18\x97\xe2\x45\x72\x7e\x5d\x2f\x1e\xab\x80\xd6\x29\xa5\xb9\xdb\x0c\x3e\x15\x9b\xe0\x26\x3b\xea\x2f\xd4\xfe\xca\xec\x5f\x23\x16\xf2\xff\x8a\xd9\xbf\x11\xfb\x7f\x78\x2d\x03\x84\x98\x20\x00\x83\x14\x93\x14\x90\x06\xae\x6f\x38\x0b\x60\xf8\xff\x01\x82\xee\x32\xd8\x14\x9a\xff\x17\xff\x17\xff\x22\xde\xb0\x25\xb3\x68\xfd\xec\x7d\xeb\xc9\x36\x8d\xb9\x57\x71\x0f\x38\x46\xba\x1a\x1f\x66\x5b\xd3\x94\xa7\x7d\x8d\x90\x1d\x81\x83\x35\xe5\x28\x80\xff\x09\x80\x82\xe5\x28\x34\x40\xff\xdf\x62\xd1\x53\x46\x85\x04\x38\x50\x05\xc4\x62\xfa\x3a\x51\x11\xe1\x66\xbf\x79\x85\xc4\x6d\x56\x12\x08\x43\xbb\x95\x33\x94\x50\x52\xc9\xd5\xf9\x01\x52\x37\x34\x3d\xe2\x6a\x0b\xdb\x4c\xc5\x80\x83\xa6\x22\xae\x24\xd1\x13\x80\x42\x53\x0e\xa0\xd0\x4c\x96\x03\x28\xb4\xde\xa7\xba\x5c\xc2\xc1\x9a\xaa\x6b\x92\x72\x8f\xcd\xc4\x63\x00\x9a\x90\x72\x0e\x38\x02\x8c\x8e\x46\xea\x37\xaa\x5a\x5d\xc4\x82\x3b\xfa\x9a\x06\x13\x30\xe3\x8f\x20\x81\x92\x9d\xf7\x00\xfe\x65\x10\xcd\xa1\xeb\x5e\x20\x55\x67\xb7\xe3\xb0\x25\x94\xce\x8f\xbc\x47\xe8\xc7\x3a\x5e\x87\x28\x56\x93\x9b\x7d\x86\x9c\x75\x5b\x4b\x72\x8e\x71\x2f\x3b\x8e\xaf\xbb\x0c\xb5\xf0\x3a\xe4\xd6\x5a\xa8\xee\xab\xae\xa6\x9f\x3d\xfc\xe5\xa0\x1d\xbb\x04\xe4\xc5\x5a\xe3\x37\x28\xe6\xb0\x6f\xf5\x5d\xb5\x70\x78\x95\x4c\xb9\x8f\xd3\x27\x73\x10\x76\xeb\x4f\x71\x2f\xc4\x6b\xbd\x69\xb9\x38\x62\x6c\xe8\x91\xdb\x80\x94\xf8\xea\xaf\xd7\x4b\x7c\xd8\x66\x22\x34\xcb\x62\x48\x04\x63\x03\xe8\x38\xb9\x69\x1b\x27\x4f\x53\xf6\xae\x2a\x80\xcb\x00\xe0\x2c\x88\xf9\x97\x20\x30\xf1\xd7\x03\xa2\x45\x06\x7e\x23\x43\x20\xf7\xdc\xf7\x26\xc6\x4b\x16\x8e\x11\xc3\xf9\x37\x3c\xe6\x04\xd9\xfc\xc3\x3b\x1e\x0b\x4c\x3c\xf9\x9f\x39\x2d\xff\x15\xc4\xb9\x14\xdd\xe8\x46\xf8\x6b\xa1\xe6\x9b\x79\x6f\x84\x73\xf5\x0d\x03\x09\xb2\x6b\x14\x8f\xa7\xe8\x6f\x16\x1b\xed\x1e\x60\x2c\xf7\xd9\x46\xf7\xbc\x7a\xd4\x15\x74\x5a\xa5\x93\x79\x0f\x0c\x1c\x66\x45\x3f\x5c\xa9\x8b\x66\xba\x98\x4e\xb8\x00\x35\x6e\x4c\x85\x35\x5d\xa7\xd7\x1e\x88\xed\xd9\x16\xa7\xf0\xfd\x4e\x67\xb3\xc8\x3e\x0f\x9d\x70\xb2\x33\xc5\x73\x3c\x96\x9e\xf3\x17\xf0\xe6\xcd\x0a\xfc\xf4\xb8\xf1\x9a\xd5\x75\x7a\x97\xe3\x0c\xf1\x3a\x44\x30\x82\x04\x0c\xe0\x47\xac\xbc\x6d\x68\xf3\x52\x2c\x91\xb7\x14\x31\x83\x28\x03\xe7\x89\xc4\xfe\x0a\x2d\xf5\xf3\x6f\x5e\xa0\x5e\x99\x2f\xbe\x39\xc7\xc7\x19\xa2\x1c\x36\x97\x4c\x54\xbe\x40\x3b\x91\x59\x12\xc6\xe1\xb2\x0a\xfd\x90\xa6\x96\xe0\x6d\x6b\x8a\xfd\x53\x6a\x33\xce\x70\xf9\x91\x87\xae\x64\xfb\x27\x3f\x77\xcc\x6c\x17\xef\xea\x12\xda\xd3\xbc\xa9\xf9\xfc\x84\xf4\x45\x3d\xfd\xf1\x9b\xb9\x43\x19\xa6\x97\x82\x31\x85\x6c\x31\x85\x7e\xd5\x7a\x7a\x2f\x2c\x5b\xdb\x62\x28\xe9\x53\x7e\x02\x18\x1d\x4e\xeb\x86\xa8\xee\xa8\x5d\x43\xad\x54\x43\x70\x24\xa1\x46\xe0\x09\x47\xce\x0a\x6c\x4a\x6d\xe9\xd0\x90\xcf\xff\xd9\xfc\xcf\x63\x2d\x95\x55\x27\xaf\x8f\x67\x07\x7b\x55\xad\x97\x34\xf4\x4c\x43\x30\xb1\x95\x6e\x46\x5b\xaf\x99\x86\xd1\xe7\xcb\xac\xa6\x5d\x33\x84\x61\xfb\x8b\xe7\x94\x89\xf7\x00\x81\xbd\x02\xd5\x79\xd7\x4a\x44\x0a\xbf\x2b\x59\x89\x8a\x7b\x70\x88\xc8\xee\xa1\xd6\xd2\xed\xe3\x19\xf3\x20\x7e\xe4\x44\x0b\xdb\x76\x34\x5d\x68\xee\x37\x86\xca\xc2\x86\xd3\xc0\x68\x6b\x96\x71\xec\x30\x3c\x96\x38\x27\x5c\x81\x18\xe0\xfc\xf7\x3d\x10\xa7\x6c\x49\xf2\xcd\xf6\xbc\x5b\xf5\xa8\xa7\xdc\x84\x1f\xca\xda\xbc\x50\x7f\x7c\x6b\x85\x94\x54\xcd\x54\x95\x56\x6b\xa1\x9b\xff\x38\x3e\xd8\x2a\x15\x29\x82\xd9\xcc\x2a\x74\x44\x50\xa8\xc7\xb5\x61\xd0\x87\xe3\x0e\x0b\xad\xd6\x4f\x58\x16\xe9\xc1\x8f\x01\xf6\x83\x65\x18\x5f\x5d\x9b\x92\x6d\x85\x4d\x4e\xaf\x6c\x60\x7e\xe0\xd2\xcb\x85\x32\x13\xe7\x7d\x2a\x6e\x6e\x41\x7f\x70\x88\x86\x6a\x4c\x3d\xd6\xfa\xc4\xba\x6d\x74\x9e\xe7\xcf\x34\xdb\x19\x6a\x8e\xa4\xa6\xc0\xd2\xfc\xa6\x01\x8e\x53\x29\x80\xde\x03\xda\x73\x8c\xe2\xfb\xef\x52\xbf\x0c\xad\xf8\x68\xcb\x68\x89\x6d\x27\xde\x75\x2a\x58\xbf\x43\x11\x28\xe9\x6d\xc4\xd0\x41\xf3\xe5\x36\x9f\x20\x55\x5b\xa7\x56\x77\xe7\x19\x5b\x8e\x4d\x16\x6b\x7d\x35\x34\x18\xe7\x41\xdb\x1c\x6f\xd0\x29\x4d\xc5\xdb\x8d\xcd\x60\xaf\xe9\x2e\x93\x1f\x1c\x8b\xa1\x73\xb5\xfb\x27\x46\x6a\x39\x5b\x74\x39\x4f\x87\x9b\x9f\x2f\x77\x65\x4f\x1b\xf9\x97\xbb\x39\xfe\x02\x25\x88\x8a\x1e\x27\x2a\xdf\x68\x0c\x15\x79\x50\xbe\xfc\xcd\x38\x3e\x95\xf2\xce\x99\x3a\xe5\x65\x86\x63\xe8\x93\x4b\x38\xb1\xee\x4b\x74\x1a\xfc\xc0\x06\x63\xf2\xb4\xe9\xb8\x74\xea\x05\x9c\xfe\x82\x87\x5f\x00\xbd\x68\x8b\x3d\xff\xa6\x64\xdb\xf3\xdd\x01\xb1\x7d\x02\x0a\xd2\xaf\xca\x6d\xa0\x63\xf3\xe9\x68\x69\xc5\x2f\xd6\x05\xa3\xdd\x0c\x36\xe0\x7b\xbe\x78\xcb\x1d\xa9\x8e\x8b\x3e\xe9\x33\x80\x39\x32\x9e\x19\xcb\x8f\xea\x51\x46\x8d\x51\x7a\x9d\x27\xbd\xf4\xbe\xa6\x00\x1d\xff\xa2\x68\xfc\x61\x20\x3d\xc8\x99\xdf\xf6\xfb\x41\xd4\xf1\x50\x16\x3f\x92\x7d\x74\x28\xe0\x4c\x64\x4a\x68\xaf\x29\x63\xe1\x7a\xba\x68\x61\xb6\x2a\xb9\x76\xec\x73\x76\xa8\x0c\xd5\xbf\x62\xcd\x8f\xf1\x00\xf7\x97\xcf\xb4\xd9\x16\x13\x6f\x95\xd1\x45\xcb\x2a\x5d\x89\x45\xc2\xce\xa3\xdf\x06\xac\xb9\xd4\x4b\xc4\xa7\xc1\xba\x48\xe9\xa8\x1b\xd3\xb0\x19\xf3\xf7\xe4\x6b\x52\x2f\x5e\x44\x8a\x48\xa1\xf7\x4d\xcc\x6f\xae\x07\x82\xe8\x46\x66\x6d\x47\x3c\x0e\x3d\xcd\xc4\x4b\x7c\x8e\x73\x55\xed\xa1\xe4\x9b\xab\x6b\xa5\xae\x54\xf5\x5b\x8e\x73\xea\x39\xfb\x74\xd9\xc8\xec\xed\x7b\x20\xdc\x8f\x47\xf8\x59\x5f\x4c\x19\x0c\xfb\x2f\x4f\x93\xc0\x67\x33\x31\x6a\xd9\xb8\x74\x79\x45\x37\x73\xd7\x96\x70\x94\xa2\xca\xd0\x86\xfe\xcc\x75\xdf\x50\x8a\x00\x9d\x5a\x26\xe7\xed\x6c\x55\xf5\x85\x9d\xfc\xe7\x0a\x2b\x2f\x7e\x9a\xc8\x30\xcd\x54\xb5\x9f\x68\xbc\xf2\x06\x4c\xce\xa7\x7b\x00\x02\x36\x94\xcb\xff\x7e\xb0\xfc\x56\xd3\x70\x6d\x59\xb4\xe3\x49\x02\x7d\x82\xa1\xf7\xa6\x0c\x63\x32\x45\x88\xe2\xd7\xf9\x6d\xd2\xcc\x00\x77\x46\xdc\x45\x9c\xe6\xcd\x15\xf1\x82\x11\x63\x24\x76\x08\x3d\xcc\x6f\x51\xfd\xbf\xe8\xf4\xf0\x39\x81\x82\x98\xff\x63\xc0\xcc\x42\xf5\xb4\xdf\x03\x61\xe6\x87\x47\xd9\x5d\xeb\x9f\x5e\xa4\x8f\x5d\xef\x9b\x60\x6f\x1a\xab\xff\xe6\x1e\xae\x1b\x4b\x6c\xe3\x48\xaa\x3c\xc1\xa2\x27\x3f\x31\x55\x57\x0e\x79\xc5\xd9\xcf\x1c\x47\x7b\x8a\x88\xbe\x03\xa7\xaa\xb5\x19\x3b\xab\xc0\x3e\xb2\x88\x97\xbc\x35\x0b\x07\xbb\x67\x02\x57\x68\x36\x72\x43\xcc\x79\x52\x93\x07\x5b\xab\x2a\x1a\xa7\xde\xb1\x12\x68\xb6\xe4\xfc\xcc\x17\x83\x31\x9b\x0a\x75\x97\x08\xc5\xd3\xa0\xe8\x77\x5f\x25\xa4\x9d\xf9\x47\xf0\x96\x29\x42\x7a\x2e\x36\xe6\x03\xd9\x4f\xc3\x11\x51\xf9\x01\x33\xac\x23\xb2\x8f\x5b\x72\x4a\xa5\x5a\xe0\xb8\x12\xe2\x5b\xf6\xd2\x0f\x6c\xc7\x0e\x36\x92\xfb\x0b\x89\xef\x01\xe5\xf3\x2c\x15\x1b\x09\x26\x94\xf2\xae\x7a\xee\x7c\x96\xaa\x4c\x64\x64\x70\x5c\x8a\xb8\x1f\xed\x9e\xc4\xe3\x0d\x06\xeb\xbe\x35\xae\x75\x90\x0f\x0f\xbd\xff\x4e\xb6\x59\x80\xa4\xfa\xa6\x49\x64\x0d\x54\xfa\x35\x0a\xb2\x54\xd4\x19\xde\xf1\xdb\x6b\x9d\x70\xa6\x4e\xf7\xe5\x91\x1c\x60\xb7\x64\x38\x54\xf7\x58\x0e\xb0\x88\xc3\x6f\xc3\x56\x70\xc4\x0d\xc1\x8a\x23\x7b\x01\xe3\xf7\xcd\x4c\xff\x27\x51\x6a\x01\x0c\x5f\xb5\x20\x3d\x06\xf8\x21\xa1\xbf\xc9\x2d\x19\x38\x18\xfd\x39\xc4\xbe\x88\xa9\xfd\x5c\x1e\x74\xc5\x31\xdb\xd1\xb6\xea\xaf\x7d\xda\xd3\x38\xfa\x39\xe5\x44\xf1\xe9\x27\x8b\x18\xd5\x71\xdc\x29\x6d\x86\x20\xb1\xeb\x98\x04\x3d\x2d\x4b\xce\x03\xfc\x5c\x5c\x41\x50\xf4\x26\x82\x72\xbf\x8b\x63\xce\xa2\xb3\xb6\x45\x9f\xb2\xc5\x6a\x6f\xcc\x2f\x44\x9c\x76\xfd\xd0\xc4\x6a\x8b\x29\x72\xd1\xd7\x71\x3e\x73\x37\xf4\xfd\x6f\x22\xb4\x78\x51\xa3\xe6\xef\x4f\x7f\xa2\xf6\x20\x9d\xd2\x7d\xf7\x00\x05\xbc\xb3\x5d\x4c\xad\xd5\xc1\xa3\xd3\x80\xa5\x9c\x8d\x3f\x39\x82\xcd\xb5\x61\x1a\x5c\xac\xa9\x39\xcc\x35\x52\x21\x3b\x29\xa7\xf4\xff\xe7\xd4\x68\xdb\xff\x62\x14\xa7\x59\xe6\xb5\x22\xad\x93\xcd\xb6\x44\x26\xd8\x60\x4e\x04\xf2\x40\x6f\x6d\x7c\xdd\xf7\x7d\x3d\xc6\x9c\x77\x7f\xf1\x47\xb2\x83\x0e\x2f\x84\x26\x6e\x45\xd1\x7e\xdb\xab\xbc\x75\x55\x22\x99\x5b\x72\x63\x0f\xb1\xc2\xa7\x44\x45\x4f\x4c\xcc\x3d\xcb\x1c\x3b\xde\x48\xfe\x6c\xb5\x12\x9a\xe8\x53\xfc\x16\x2b\xde\xe5\xbf\xdb\x5a\xad\x72\x0f\x44\xdd\xb1\x7d\x75\x4e\x71\x7c\xf8\xa8\x31\x82\x84\x4a\xf0\x4d\x1a\x78\xfe\x4a\x3a\x1e\x08\x50\x75\x98\x51\xa0\xd6\x66\x0d\x7e\xf3\xab\x42\x0d\x84\xf8\x24\x18\x8b\x88\x5e\xfe\x52\x2f\xd9\x79\x3c\xa0\x45\xff\x4e\x39\xfc\x35\xe9\xa2\x50\x5d\xd0\x3b\x14\x47\xbf\xf0\x44\x8d\xc9\xe1\x10\xb4\xa0\x5f\x85\x8c\x8f\x99\xf0\xc6\x8c\xd0\x5d\x86\xe9\x45\xf9\x84\x9c\x8f\x23\xe5\x6a\xf6\xc2\x39\xef\x5e\xf1\x8b\x84\xd2\x16\x56\x2c\x1d\xf5\xb0\xcb\xe2\x45\x7f\x69\xfb\x80\xbc\xcc\x57\xbf\xba\x3a\x0f\x1d\xbb\xf6\xe1\x10\x06\xb4\xc6\x68\xd1\xe1\x4d\x57\x9c\xf6\xcc\xd6\xa7\x2e\xa3\x90\x16\x42\x05\x30\x42\x46\x6c\xf1\xb3\x6e\xb8\xbe\x91\x64\xc6\xd0\x1f\xa5\x87\xa1\xbe\x02\x6e\x5f\x26\xce\x70\x80\x6d\xe2\xec\xd4\x1b\xdd\x16\x39\x66\x0f\x2c\x8f\x41\x40\xe5\x1f\x23\x2a\xa5\x4e\xf7\xb8\xb8\x45\x1a\xe4\x3a\xbd\xdc\xa6\xfd\x43\x2c\xea\x54\x8d\x6c\x73\xce\x5e\x1a\x9a\x0d\x7a\x4f\x89\x2b\xc4\xa3\xdc\xdd\xa1\xeb\xa7\x8f\x4a\xd9\xc4\x62\xa8\xb4\x53\xbf\xbc\x95\x78\xfa\x26\xce\x4d\xe4\x38\x78\x16\x26\x15\x3f\x22\xa8\x1b\x0d\xf5\xde\x8a\x5f\xfb\xe4\x4d\xd9\x55\x2f\xa1\xeb\xa5\x25\x35\xd0\x1e\xdf\x2a\xdb\xf3\x2b\x42\x20\x0e\x95\x6a\x32\x6a\x15\xe4\x1c\xe4\x4c\x7f\x75\x56\x95\xdc\xf2\xbd\x58\xcd\x8d\x13\x63\xe2\xef\x1f\x0d\xa6\xc8\x8f\x7f\x33\x37\xbe\xff\xa3\x01\x34\xee\x30\xbe\xaa\xcf\xd3\xc1\x20\x7a\xa9\x2c\xa6\x2b\xf6\xf8\xba\xdc\x83\x2d\x81\x6c\xd8\x4a\xd0\x86\x88\x68\x4d\xf7\x50\xa0\x40\xd3\x69\x53\xee\x2c\xc5\xf9\x4f\xba\xb0\x70\x23\x1c\xd1\x93\x09\x9f\x93\xfe\x13\xc2\xef\xd0\x50\xe3\x36\x94\x5a\x1d\x7d\xdc\x6c\xf7\x8d\xc8\xc7\xed\xe3\xcb\x21\x69\x1e\x0d\x30\x11\xbc\x34\xba\x83\x49\xb2\x7e\x8a\x00\xd7\x5a\x0a\x4a\xd4\x97\xd0\x6a\xe4\x85\x80\xdf\x8a\xd6\xac\xd8\x5d\x91\xa8\xd3\x80\x56\x5f\x3a\x7c\xc7\x63\x32\x7a\x1b\xc8\x79\x1a\xdf\x1c\x75\x21\xea\xc0\x64\xe9\xa4\xf0\xb3\xf8\x71\x2a\x9d\x6f\xcc\x8f\x5b\x86\xd3\x1f\xe7\xfd\xfc\x75\xcf\x6d\x1f\x7e\xef\x16\xc1\xa2\xd2\xf0\xa5\x9f\x06\x17\x95\x31\xb8\xf6\x96\xce\x72\xf6\x60\xfc\x9d\x15\xda\x0b\xcf\x4c\xc8\xba\xfb\x10\x35\x38\x9c\x89\x80\x64\x85\xb6\xef\x1e\xa1\xb3\xfd\x97\x78\x2e\x3e\x75\xcd\x79\xd0\x61\x50\xe7\x9b\x4f\x84\x4e\x42\xd4\xcf\xd1\x1a\xe0\xaa\x09\x1f\xa2\xb6\x07\xe9\x72\x1a\x38\x6e\x6a\xdc\x2c\x27\x83\xbe\x56\xf0\x97\xec\x5f\x2c\x5c\x87\xd7\xa9\xe9\xad\x33\xcf\x0a\x0b\xa0\xd7\x03\x3f\xa3\x56\x04\x2b\xe5\x59\x1f\x16\x3f\x7d\x24\x3d\x35\xdb\xc6\xcd\x14\x2a\xa6\xdc\x9a\x7e\x77\xf0\xf3\x32\x47\x26\x49\x95\x03\xeb\x26\xce\x8d\x13\x13\x9e\xb5\xa5\x1e\xb1\xc9\x45\xf7\x26\xd4\x9e\x1e\xa3\x3a\x6f\xe7\xa2\xda\xef\x29\x85\xed\xf3\xe9\x68\xb3\xae\x88\xb7\x92\x5f\x2b\x73\xa5\xf1\x3a\xb8\xdc\xef\x01\xb2\x81\x51\xe3\xd2\x5d\xa7\xdc\x1c\xbb\xf0\xa9\xde\x78\x50\xa1\x47\xbd\x5f\xbb\x6a\x0f\xe1\x20\xdf\xed\xaf\x09\xc0\x1b\x65\xe7\x55\x2f\xfa\xea\x13\xcd\x3c\xc6\x18\x1d\xdb\xfb\x6a\x9e\x98\x55\x5c\x21\x24\x6d\x69\x9f\x29\x89\x2c\x8f\xfb\xbe\x14\x67\xfb\xda\x47\x0d\xab\xe4\x60\xbc\x84\x4f\xf4\x4c\x63\xf5\x8e\x12\x16\x5b\xf7\x00\xa0\x4e\x2f\xc5\x19\xb7\xaa\x97\xc1\xbd\x8b\x41\xd3\x43\xd3\x2b\x72\x89\xac\x06\xfc\x56\x29\xc3\xf3\xa1\x79\x6a\x8b\x0e\xc8\xdc\x31\xcf\x64\x3d\xeb\x12\x6e\x17\x12\x5f\x0d\x8c\x19\x39\x0a\x20\x4c\x17\x0f\xb9\x1e\xe9\x65\xc2\xdd\xf4\xfb\x95\xf4\xde\x4d\xb6\xb4\xa0\x40\xfe\x4a\x8a\xf8\xf3\xb2\x9a\xb3\xa4\xb8\x69\xf0\x07\x28\xf9\x90\x77\xed\x01\x3f\xd4\x62\xe0\xd9\x28\x4e\xa9\x13\xd4\x9a\x95\x8c\xf8\x9b\x24\x7a\x57\x68\x3f\xb1\x6c\xf9\x05\x6c\x5c\xc2\x76\xda\xff\x0b\x58\x68\xb7\x9b\xea\xf6\xa9\xab\x4f\x21\x91\xbb\x62\xf2\xe6\xfc\xc5\x99\x15\x11\x93\xae\x86\x28\x78\x8f\x7b\x4a\x8a\x11\x1d\x70\xeb\x6d\xcb\x3e\xf1\xb3\xd9\xeb\x9c\x27\xec\x75\xdc\x40\xf6\xd5\x81\x6b\x62\x1f\x4c\x32\xe4\x70\x4b\x37\xd2\xf1\x7d\x0a\x47\xdb\xfb\xb3\x9b\xcf\xaf\xbe\x74\x7f\xa4\xa4\x5f\x27\xbf\x15\xa5\xa8\xa4\x6e\x49\x7f\xe1\x9a\xc7\xfb\xc8\xb1\xe8\x4a\x84\xc1\xce\x91\x60\xf3\x2e\xbe\xc0\x09\x6a\x6e\x6b\x65\x91\x72\xd6\x84\x9c\xa3\x2c\xf2\x67\x2f\xfc\x64\xe2\x5c\xdb\xc7\xe6\x46\xf0\xcc\x88\x3c\x04\xf7\xee\x05\x8c\x88\x6e\xb0\x4d\xad\x95\xae\x33\x67\xc4\x2c\xee\x6d\x04\xb6\x9a\x82\x09\x91\xc3\xb0\x84\x56\x5c\x61\x39\x78\x7a\x91\xa8\xd2\xff\xc9\x8c\x13\xdc\xeb\x73\xfc\xd1\x4f\x43\x36\x15\x8a\x38\x7e\x75\x84\x24\x77\x5c\xdd\xa9\x77\x82\x04\xc7\x93\xf9\x26\xdf\x2a\x6f\x92\x72\x53\x2e\x32\x95\x07\x98\x4d\x10\x02\x19\xc6\x0d\x4e\x04\xdf\x8c\xd4\xe3\x17\xf5\x72\xef\x6a\x56\xc6\xad\xfc\x2d\xcf\x14\x3d\x7a\xac\x87\x9d\xd4\xc0\xac\xd5\xbe\xaf\x1f\x90\x7e\x97\x67\x14\xc6\x62\xb4\xc1\x30\xf8\xfb\x2b\x3e\x06\x4a\xe6\xc1\x35\x46\x2c\x2f\x5a\x6e\x03\x27\x7e\x76\x2b\x39\xfd\x46\xf7\x79\xf5\x3b\x82\x8e\x4f\xa3\x9e\x44\x53\xc8\xd9\xe6\xe3\x0b\x43\x02\xc5\xab\x97\x8e\x64\x9c\x7b\x94\x32\x94\x6e\x57\x1b\x86\x06\x1d\x45\x96\x9c\x13\x50\xaf\x3a\x54\xaa\x71\x7b\x57\xfa\xb8\xcc\xac\x8e\x12\xe9\xc7\x07\x5c\x5f\x00\xf0\xb4\x39\x4c\xf2\xa3\xc1\x4a\xbf\x87\x32\xb6\xd1\x99\x4c\xcd\x9b\x2d\xf9\x6a\x2b\xeb\x8d\x55\x2d\xe1\x5c\x52\xc1\x24\xfe\x02\x1a\x8c\x74\x8e\x04\x6e\x58\x73\xde\x56\x50\x54\xc3\x75\x78\x8e\xe3\x42\xd0\x87\xd1\x6d\x47\x2e\x62\xf1\xdd\x43\xb5\xc8\x8d\xdc\xf6\xb2\x0a\x06\xfb\x01\xad\x11\x0a\x50\x9d\xca\x73\xa6\x68\x38\xfe\x3d\x40\x70\x1b\xe0\x5c\x0a\xb5\x59\x5e\xfb\x42\xb2\xa2\xf4\xf5\x23\x20\xfb\xa3\xfd\xdb\x1d\x2f\xda\x67\x8e\xf8\xbc\xc4\xbd\x31\x4e\x81\xe8\x62\xd0\xd2\x96\x09\xa3\x21\x56\x64\x6a\xb9\xc4\xe7\x7b\x82\xb8\x79\xdb\x9e\x14\x1d\xda\x89\x5a\x47\xfa\xa8\xdd\x3d\xa1\xd4\x9a\x03\x05\x87\xe4\x7a\xde\x03\x54\xab\xf7\x40\x9f\x77\x50\xf5\x3e\xca\x08\x77\x47\x44\xe3\x3b\x39\xec\x99\xaf\xc7\x15\x42\x0e\x1d\x80\x72\x3a\x3b\x7f\xa3\xca\x31\xa0\x73\x68\xcf\xf3\x91\x54\xf9\x2d\xdc\x62\x4f\xf6\xc4\xa4\x4c\x82\xa3\x90\x93\xba\x2e\x96\x7b\x3a\x6d\xc2\x67\x78\x28\x80\x7f\x76\xbd\xff\x2a\xc3\xb5\x42\xce\x95\xb2\x87\xef\x73\x70\x7b\xfe\x14\xc3\x6f\x0d\x70\xed\xd0\xd6\x2b\xe2\x52\xe6\x8b\x52\x5d\xf1\x8d\x4e\x25\x4f\x69\xc2\x6f\x93\x35\x88\xb6\x87\x63\x17\x23\x1b\x8b\x72\x7f\x77\x07\x69\xf8\x6a\x80\xc3\xa0\x33\x8e\x97\xea\xb1\x99\x0e\xfc\x8a\xfa\x3a\x1a\xb8\x04\x21\xed\x7e\x9e\x97\x8c\x21\x9d\x9f\x97\x97\xf9\x30\x60\x85\xd4\x08\x32\x74\x86\x33\x55\x06\x0a\x63\xec\xc6\x78\x2f\x91\xa5\x25\x89\x59\x5c\x4d\xe1\x65\xde\x64\x67\x0c\x91\xce\x32\x03\x1f\x2f\xfb\x27\x2a\xe6\xac\x58\xf2\x15\x1a\x38\xe1\x84\x7b\x8f\x01\x4e\x4b\xe4\xb1\x8e\x32\x53\x9c\xc4\xab\x42\x42\x6b\xfa\xc4\x72\x04\xfb\x5c\xe3\x84\xca\xa6\x77\x1c\xdb\xec\xa5\x52\x8d\x93\xa0\x8f\xdb\xcc\xc8\xb0\x8b\x1c\x07\x90\x78\x68\x3c\x59\x8c\x2a\xed\x4b\x77\x42\xc5\x46\x5b\x7a\x82\xe9\x58\xa5\xf9\x18\x23\x3a\x22\x87\xba\x84\xef\x81\xb0\x7a\x9d\x7a\x47\xee\xd7\x6d\x9f\x58\x47\x96\x58\xc8\xa6\x72\xbf\x7b\x9d\xc8\x30\xbd\xde\xf7\xed\x2c\xa9\xb6\x62\xf8\x5a\x34\xca\xa3\xc5\xc9\x35\xe6\x86\x5b\xd9\xbe\x28\x32\x32\xe1\xdf\xba\x79\x88\x88\xd2\xf9\x54\x3b\x73\xc4\x5b\x6d\xe1\x30\xa6\xf5\x96\xab\x55\xe2\x74\xf8\x97\xae\x71\xf1\xfe\x3d\x40\x5e\x44\xe4\xee\xf1\xdb\x34\x31\xb9\x98\x46\x7a\x53\x86\x71\x6f\x96\x25\x41\x0f\x52\x5e\xf2\xa7\x84\x1e\x39\xf1\x3a\x77\x25\x1c\x9a\xdd\x45\x8b\xba\x98\xcb\x8a\x5d\x22\xea\x6b\x16\x27\x84\x47\xfd\x81\x31\xf8\x05\x36\x1a\x38\x13\x42\x9b\xe4\xa4\xf7\xac\x52\x45\x08\xdb\x43\x79\x41\x47\xea\xbf\x26\x00\xbf\xee\x2c\x9a\x3b\xa1\xdb\xfd\xde\xe0\x3d\x39\xa8\xde\xac\x84\xbe\xa3\xf0\xaf\x77\x5d\x36\x6f\xcb\x06\xde\x3c\x1b\x56\xcb\x19\x29\xcb\x5f\xf0\x97\x2b\x21\xa5\x58\x34\xa8\xf2\x27\x23\x01\x36\x48\x04\x12\xe4\x83\x08\xaf\xe1\x10\xdf\x82\x0e\xde\xb9\xad\xf4\x0e\x4b\xc5\xf7\xcf\xf0\xf0\x4f\x56\x04\x5f\x67\x29\x74\xb7\xd6\x94\xaa\xa2\xe1\x27\xb5\x26\xb6\x35\xfd\x30\xcb\x26\xe7\x67\x6e\x02\xd9\x16\x82\xa0\x7d\x0f\x5d\xf1\x12\xe8\xe2\xab\xaf\xd4\x0a\x94\x07\x6c\xa5\x77\xfa\xe3\x67\xcf\xb7\xed\x03\xd8\x95\x48\xf8\x45\xac\x24\x71\x05\x81\x1b\xf1\x19\x39\x00\x6b\x2b\xe6\x31\x1e\x66\x27\xf0\x84\x32\xa3\x0c\x1a\xab\x34\x3b\x4e\x30\x8e\x66\xe1\xe2\xef\xcd\xb6\x84\x68\x49\x3e\xf6\xf8\x13\xa4\xf2\x55\x1a\x39\x76\x83\x97\x20\x10\xe6\x02\xbd\x84\x13\x89\x71\x82\x05\xff\x67\x6b\x22\xfa\xbe\x77\xf5\xce\xf9\xb6\xe4\xeb\xdf\x6b\xf1\x68\x77\xb1\x2e\xa5\x42\x1a\x46\x7b\x26\xa0\x88\xc1\x1c\xcf\x46\x63\x83\xc5\xfe\x05\xbf\xed\x7e\x9c\x64\x4d\xa5\x71\x46\xe0\x10\x3d\x8d\xcd\x04\xd9\x7f\x03\x3d\x1f\x3c\xb7\x5b\xce\xfc\xf1\x15\x77\x85\x0e\xd6\x93\xd0\x3f\x97\x58\xec\x17\x90\x93\xed\x95\x54\xe5\x5a\xa6\x0d\x00\xc0\xbe\xd1\x49\x88\xbf\x28\x24\xf2\xc2\x23\xdc\xc7\x5b\x3c\xa7\x2e\x2e\xd5\xd8\x0a\x78\x44\x6c\x6b\xf3\x77\x37\x45\x71\x85\xa9\x42\xa9\xde\xa8\xfb\xa3\xad\x32\x51\xfc\x56\x21\x97\x24\x78\xea\xb4\x6e\xf2\xad\x02\x2a\x60\xf0\xeb\x77\x13\xc6\xe9\x9f\xf5\xae\x6e\x2b\x34\xc8\x7e\xd0\xb7\x10\x5c\xe9\x6d\x0d\x1c\xd5\x7b\x20\xea\xd2\x94\x09\x9a\xae\x4a\x27\x97\x93\x3f\x67\xc1\xd4\x95\x03\xc2\xf2\x98\x62\xb3\x98\xb7\x58\xee\xa4\xeb\xbb\xc3\x99\xbd\x15\x35\x4f\x36\xec\xab\xfa\xf5\x7d\xb6\x2d\xfe\x4b\x80\xbb\xf6\x2d\xf6\x06\x5a\x42\xa0\x18\x37\x98\x5f\x9d\x63\x4a\xb0\x14\x9d\xd9\x2e\xc3\x27\x43\xa4\xf7\x55\x06\x24\x53\x3a\x23\x07\x50\x17\xc4\x44\xa8\x94\xb1\x38\x48\xc4\x94\x4e\x67\x02\x59\x94\x69\xd5\x68\x3f\xb5\xc5\xa3\xe5\x15\x8d\xc6\x04\xe8\xc8\x5e\x7f\x69\x4b\x65\xdd\xda\xca\xd8\xa0\x96\xb6\xb9\xd8\xc6\x2e\xa5\x08\x73\x02\x27\x66\xaf\x90\x73\xa4\x14\xf3\x29\x75\xaa\xf6\x69\xf5\x75\x6e\x99\xde\x47\xc6\xa7\x59\xb6\xd7\x93\xc4\xd2\xf8\x87\x81\x74\xb7\x0a\xce\xa4\x85\x7a\x07\xe5\x94\x5d\xa5\xa4\xfd\xaf\x20\xeb\xd7\x18\x9d\xfc\x8a\x0b\x72\x5c\x3d\x24\x50\xe6\xc5\xd0\x5b\xd9\x99\xed\x53\xd3\xd8\xa3\x0e\x85\x92\x2a\x5b\xc2\x14\x60\x26\x0c\xf3\x00\xac\xd6\x00\x3a\xe1\x5a\x81\x49\x35\x1c\x4c\xcc\x20\x32\x34\xe7\xcc\x5a\x5f\x78\x8d\x04\xc3\x24\x7d\x28\x8b\xff\x6a\xea\x84\x29\x42\xc9\xf8\xb5\x23\x42\x9b\xcf\x4f\x9f\xf7\x3b\x47\xa3\x46\x42\x9d\xd2\x2a\x95\x8d\xf3\x98\x3c\x13\xdc\xba\x3e\x4e\x12\xf9\xf5\x8a\x20\xb8\xd1\xfb\xe6\x8b\x26\xf8\xe4\x03\xf0\x71\x67\xb1\xd1\x9c\x56\x66\x6f\xe6\x2b\x38\x44\xad\x29\xcd\x2a\x9c\x9a\x7e\xfb\x7d\x69\x0d\xeb\x66\x42\xe3\x9f\xfa\x4d\x02\xf1\x88\xa4\x8e\x60\x2f\x01\xc6\xa2\x04\xee\x66\x38\x46\x61\x3a\xe5\x07\x12\x05\xbb\x94\xd0\x41\xc0\x67\x3d\x51\x8a\xe9\xdb\xa1\xce\x89\xbf\x65\xfa\xe3\x2d\xba\x8e\x91\x24\xaa\x1e\x86\xba\x09\xf7\x3c\x88\xc4\x3b\xd7\xd2\xc3\x37\x50\x67\xad\xec\x71\xda\x3a\xaa\x0c\x62\xd7\x1f\x65\x47\x02\x79\x06\x97\xe3\x59\x23\xac\xf2\xe7\xc6\xda\x32\xdb\x75\x3d\x88\xdc\x2e\xb6\x15\x08\x31\x74\x4e\x7d\xbe\xea\x43\x54\xce\x87\x42\x84\x1c\xf3\x59\xeb\xc9\xe1\x14\xc2\x00\xb8\x11\xa5\xf3\x0d\x3d\x54\xab\x4a\x24\xb6\xe3\x3b\xc8\x14\xea\x9c\x7f\xf5\x21\x19\x13\xc3\xde\xe4\xdf\x8e\x01\x09\xfd\xec\x8c\x1c\xa0\x33\xcf\x9a\xa2\x42\x93\x42\x52\xf2\x22\x8c\x17\x19\x6c\xc2\x70\x9a\xb3\xf0\x94\xca\xde\xc0\x71\x72\x5d\xfc\xcb\x1a\x65\xa4\x28\x56\xa8\xc9\xe9\x3d\xe0\x82\xac\x86\x6a\x19\x34\x45\xa2\xfa\xa1\xa6\xbc\xdc\xb3\x6c\x00\xd3\x89\xe7\x1f\x1b\xcc\x55\x2a\x21\x6d\x80\xb3\x74\x2b\x59\x4d\x46\x88\x68\xbe\x84\xce\xd6\x52\x43\x49\x9b\x07\x38\x19\x04\x14\xcf\x58\x02\xb6\xb0\x35\x3b\x16\x05\x0f\xb1\x9f\x78\xfa\x61\x31\xbb\x79\x8f\x60\xfb\x6f\x6e\x31\xd1\xa1\x0b\x4d\x17\xd7\x66\xb9\x77\x1b\x12\x7d\xe4\xe2\xd5\x56\x8b\x02\x4b\xa9\x0f\x8d\x89\x22\xfb\x6c\x9f\x6e\x25\xec\x6a\x2e\x94\x7e\xcc\x16\xd5\xd6\xe0\xf7\x0b\x51\x73\xe3\xc4\xac\x5f\x94\x12\x82\xba\xab\x3d\x25\xca\xea\xfc\xd3\xb3\xc1\xf6\x32\x14\xbd\x98\xab\x54\x85\x6e\xde\x72\x2a\xbd\x82\x1e\xdf\x8d\x9a\xe9\x95\xff\x59\xd0\xd6\x9d\x4f\x9d\xbf\xb8\x07\x0e\x75\x02\x2b\x37\xe9\xd4\xf1\xd0\xf7\x80\xca\x52\xf3\x11\xb9\x62\xd9\xcb\x72\xf7\xd4\xc3\xe4\xe0\x49\xee\xbd\x00\xfe\x05\x5c\x33\xf5\x27\x14\x84\x5e\x14\x20\x70\x58\x83\xf0\xb4\xa0\x22\x4f\xe6\x1b\x6e\xe6\x9d\x78\x67\x4b\xfc\xe0\xdd\x57\x2f\x54\x40\xc1\x46\xce\xb1\x12\xb6\xc4\xf1\x16\x3c\x21\x9b\x16\xcb\x02\x1d\x67\xe0\xe6\xf9\x69\xb0\xed\x93\xf9\x67\x35\xbb\x49\xa0\x9f\xf6\x79\xf3\xfe\x7e\x9b\xab\x3c\xd2\xcb\x42\x9c\x98\x25\x6e\xc1\x9f\xa1\x88\x87\x4d\x59\x83\x52\xe2\xab\x7f\x32\x19\xd7\xbe\xe4\x65\x6e\x21\x59\xa5\xc6\x3a\x07\xbd\xef\x18\xd0\x16\x45\xfb\x0b\x33\x74\x51\xe9\x3f\x76\xc5\x8b\xd2\x2d\x09\xf5\x90\xdf\x5d\xa4\x3e\x80\xe8\xd7\x69\x25\xa4\x8a\x7e\x51\xdd\x84\x8f\x0c\x05\x79\x3a\xa9\x05\x4d\x49\xa7\xd9\xae\xf8\x6b\x9d\x7e\x39\xc5\x63\x6f\x4f\x59\xad\x6b\x19\x96\xe0\x8d\x03\xd7\xf0\xcd\xad\x17\x7b\x68\xd8\xe8\x50\x8d\x61\xe9\xa0\x10\x35\xf3\x98\x42\xea\x06\xa7\xe9\x89\x35\x3d\xc9\x76\x54\xcf\xbe\x94\xb9\xb5\x7f\xb0\x74\x4d\x80\x68\xca\x50\x09\x22\x28\x6c\x6e\x16\x4e\x8e\x7e\xa3\x39\x96\x5d\x56\xe8\xc9\xa4\x0a\x1a\xb6\x5b\x12\x38\xc7\xeb\x61\x70\xcb\x14\x3f\xdd\x70\x68\xfb\xe6\xd7\x8c\xf0\xb0\xe5\xae\xf8\xca\xd1\x92\x91\x42\xbe\x82\xd4\xd1\xe1\xd7\x67\x7e\xba\xe4\xe0\xf8\x0e\xdb\xad\x95\xb7\x33\xcc\xb9\xba\xdc\x67\xe3\x2c\x84\xf5\x71\x97\xe6\x60\x06\x71\x0d\xb0\x29\x2a\x71\x8b\x38\xb9\x5c\x9f\x37\xed\x1d\xd3\x72\xc9\x7a\xf2\xb3\x11\x82\x10\x05\xc6\x4e\xa9\xb4\x71\x9b\x4c\x8e\xd8\x5b\x3f\xa1\xa2\x07\xee\xdf\x87\x4b\x0b\xca\xcc\xb5\x93\x71\x31\xe7\x5a\x87\x8b\xbd\x03\x21\x68\x91\x51\xa1\xce\xbb\x56\x4f\xb6\xf3\x12\x6a\x96\x3a\x66\x8b\x12\xa5\xdd\x53\xc4\xfb\xc6\xcf\x11\x0b\xcf\x92\x0b\xca\x30\x61\xd8\x80\x8f\x49\xce\xe9\xd3\x57\x51\x41\x45\x46\x46\x22\xbb\xcc\x24\xf0\x10\xf7\x04\x49\x51\x84\xcc\x9c\x04\x7b\xd1\xbe\x62\xc8\xf2\x2c\x3b\x67\xfb\xcb\xe3\x71\x8b\xc3\x85\x66\x1b\x38\x2e\x76\x95\x4a\x8f\x0c\x78\xb6\xf8\x2d\x66\xa3\x58\xdc\x34\x86\x99\xaf\x66\xf0\xbe\x8a\x1c\xf0\x68\xda\x37\x26\xfe\x38\x3f\x29\x04\x55\x49\x3a\xc7\x52\x5c\x00\x13\xad\x56\xe8\x69\x63\x2c\x76\x71\x62\x6b\xb6\xf9\xc1\xc1\xbe\xe5\x56\x2a\x32\x6c\xf7\xe3\xe7\x1d\xe9\x32\x69\xd7\xf0\xdb\xf6\x10\x17\x37\x9a\x2c\x97\x5b\x5f\xeb\xee\xc0\xcb\x7d\xc1\xd0\x4c\xe0\xcc\xfe\x1e\x88\xf4\x1d\x55\x20\x35\xe6\x29\xc5\xbc\x4e\xc9\xcb\x0a\x1e\x7a\x26\x70\xe7\xbb\x20\x9c\x53\x06\x1d\xee\x73\xb0\x6a\x69\x6c\x6b\x6d\xd6\xa0\x44\x4a\xf3\xf3\x12\xf3\x13\xcb\x4b\xa5\xfd\xf4\xc4\x9e\x28\x7a\xe0\xd2\xf0\x66\x20\x85\xd5\x53\x87\x86\x02\xb4\x83\x89\x74\x20\x31\x89\x72\x3a\x5a\x22\x07\x29\xe1\xab\x4f\xac\x7f\x23\xce\x39\x9c\xf5\x48\x24\xd1\xb3\x17\xf3\x35\x31\x30\x62\x4b\x7e\xee\x29\x3a\xe8\xd2\x25\x8c\x76\x64\x2c\x1b\x7d\x12\xf9\xb3\x19\xc5\x6c\x84\x21\x79\xbe\x98\xb7\x6f\xa2\xd6\xb4\xc6\x73\xba\x50\xbb\x46\x3d\xe7\x89\xfb\x53\xf5\x1b\x68\x4b\xe1\xe9\xce\xcd\x8d\xc5\x39\x1c\xe2\x89\x92\x1e\x50\x7d\xda\x3f\xe9\xd8\x93\x72\x70\xc2\x74\x50\x40\xff\x94\x86\x2e\x7a\x43\xf7\x93\x11\x74\x78\x98\x91\xaf\xd3\x72\x26\x5d\xc5\xcf\x71\x03\xc2\x2e\x8c\x5a\xe7\x71\x9f\xf0\xca\xa5\x45\x1b\x16\x2f\xaf\x28\x48\x55\xd2\x99\xac\x3d\x23\x62\x7d\x7d\x84\x64\x9d\x26\x37\xde\x69\x6c\xac\x2e\xc0\x8a\x27\xc5\x48\xf8\xd8\x43\x01\x42\x52\x05\x81\x85\x8c\x95\x5f\xb5\x2d\x08\x8d\x1a\x98\xbb\xf5\xd3\xdd\x5c\x6e\xe7\xed\xeb\x4b\x3d\x3a\x35\xba\x07\x20\x6c\x8d\x5d\xf5\x5f\x9d\xd2\x31\x7b\xb9\x60\x3b\xc1\x93\xb8\x23\x0c\xdc\x7b\x7a\x35\xcc\x69\x31\x72\x2c\x02\x4f\xb1\x30\x53\xb8\x13\xd1\x25\x33\xc3\x1b\x59\x25\xc9\x6e\xde\x9c\x89\xf8\xc4\x74\x92\x3e\xe0\x35\x98\xe0\x2d\x79\xa5\xb1\x3d\x23\x63\xc8\xc1\xb1\x57\x3b\xb1\xc8\x30\x43\x7b\xe6\x3e\x77\x1a\x3a\x08\x73\x05\xad\xb5\x20\x4a\xaa\x11\xbe\xf1\x78\x84\x75\x11\x26\x9d\xe6\xf9\xf6\xbf\xb1\xbc\xcc\x21\x7a\x05\xc7\xfe\x87\xfa\x0e\x46\x49\xbe\x47\xba\x97\xdb\x97\x6d\x6c\x39\xb6\x54\x13\xcd\x8d\x11\xe9\x4d\x36\x94\xe7\x5d\xcb\x4a\x9c\xf9\x8b\x7c\x65\x47\xa3\x38\x8b\xb8\xcb\xdb\xca\x02\x74\x79\xb9\xba\xe3\xe6\x92\x23\x9c\x53\x02\x55\x17\x3d\xe9\xe2\x8b\x64\xe0\x9a\xea\xaf\xa6\xf1\x48\x84\xc8\x52\x6b\x30\x74\x79\x8b\x4e\x2a\x5d\xc3\x89\x67\x05\x71\xe1\xf8\xae\x22\x34\x70\xcd\x04\x9b\xff\x55\x61\x2f\xda\x15\x6c\xf8\xcb\xc7\x83\xf2\xaa\xbf\xc7\xaa\x32\x1e\x98\x5b\xfc\xb2\x10\x21\x13\x9e\x56\x93\xb4\x1f\x96\xa2\xda\x9b\xb5\x17\xfb\xb3\x1e\xf5\x73\x41\xa0\x35\x46\xae\x51\x81\x69\x77\xad\xdd\x39\xd6\x3b\x62\xb1\x37\x15\x44\xef\xdc\x19\xb2\x79\x3e\x3c\x87\xe5\xae\x13\x48\xb7\x1f\x5b\x0a\x55\x1e\xc4\xb2\xa9\x9a\x89\x70\xec\xc4\x93\x98\x06\x5b\xd0\x62\x19\x81\xd4\x86\x25\x6d\x6d\xfe\x5a\xd1\x27\xec\xf4\x7e\x63\xfc\x54\x35\xdd\xcb\x4c\xb8\x5c\x62\x11\x36\x8a\x38\x64\x14\x44\xb1\xee\x5f\x3d\x57\x77\xfa\xc8\xf1\x65\x74\x44\x73\x98\xfa\x66\x31\xdf\xdf\xac\x33\x7d\x45\x26\xcf\x21\xf8\x59\xeb\x2e\xba\x33\xdc\xfd\x1e\x20\x2e\x9e\x69\x38\x21\x2e\xbe\x68\x4e\xf6\xa9\x2a\xfe\x94\xf3\xcb\x64\xdb\x13\x0e\x11\x59\xd0\x1d\xe8\x22\x44\x51\xe8\x94\xea\x3e\xe1\x89\xfe\xf1\x58\x97\x99\x34\x17\x74\x5b\x39\x1b\xc8\xe4\x6f\x9c\xa5\xd1\xf6\x9b\xaa\xd6\x82\x4e\x1e\x2b\xca\x05\xa2\xd6\x2a\x84\xcc\x15\x47\x51\x04\xb2\xa1\xfc\x17\x6b\x47\xdb\xbe\xbd\x63\x59\x4d\xc2\x48\x44\x28\x97\x16\x09\xa6\x37\x37\xed\x8e\x63\x91\xb9\x46\x1c\x8e\xf4\xc2\x21\x4d\x48\xcf\x64\xcc\xc7\x58\xa4\x49\x72\xae\x41\x14\x0d\x7a\x9e\xce\x58\x6b\x19\x32\x56\xcd\x2f\x05\x1d\xe7\x6c\x29\x5b\x37\x95\x2c\xb3\xfa\xd3\x9d\x39\xfb\x3f\x0e\xc9\x56\x66\x76\x36\x3c\xc8\x34\x9e\xe8\xec\xe3\xee\x67\x73\xa8\xa9\x9e\x0e\xe1\xc4\x8c\x43\xbf\xa9\xc8\x51\xe8\x6b\xea\x8d\x5a\xa5\x7a\x03\xe3\x0b\x9e\xcb\x97\xac\x9c\xb6\xef\x93\x82\x3c\xa8\xfb\x5a\x73\x44\xb5\xc9\x16\xc5\xf7\x2d\x44\xe3\x9b\xd1\xe5\x56\xe7\x37\x0f\x38\x76\xd5\xb1\x85\x41\xdd\x0c\x8f\x65\x47\x77\x4b\x02\x75\x12\x79\xba\xc8\xa4\x38\xe4\x8d\x01\xa1\x0b\x1e\x02\x40\x79\x0e\x4e\x25\x4a\xb1\x30\x3c\xd4\xab\xce\x49\xd7\x7d\xf7\x0e\xe6\x3e\x4e\x7a\x38\x47\x01\xaa\x2f\xbb\xb5\xeb\x6a\x69\x26\xdf\x33\xa1\x6b\x6b\x0d\xf5\x9a\x13\x84\x1d\xdf\x0a\x27\x1e\x1a\x25\xc6\x48\xb1\x41\x33\x74\x67\x6a\x3c\x7e\xff\xc1\x95\xa5\x1c\xfb\x38\x90\x45\xc7\x76\xcd\xcc\x34\xdc\x6d\x77\xf5\x87\x5c\xf5\xf3\x5c\x03\xda\xf1\xa1\x9c\xde\x16\x00\x3a\x8c\xe9\xf4\x2b\x59\x32\x5e\xf9\x90\x89\xe5\x69\x0e\x65\xcd\xbf\x84\x43\xe8\xd1\xc6\x28\x02\xf5\xb9\xea\xcd\x19\xde\x8d\x94\x35\x6d\xb3\xe0\x3e\x17\xa5\x4b\xcc\x64\x13\x14\x45\xc8\x2b\x42\xf1\xc5\xc9\x6e\x12\x09\x92\x5c\xba\xaf\xc4\xed\x18\x61\xf5\x5a\x70\x9e\xd7\x6e\xd5\x2b\xa1\x17\x0c\xdc\x4b\xfe\x04\x95\x52\xf5\x9b\x7e\xdc\xc3\x5a\x55\xa8\xb8\xd0\xf5\x35\x98\x58\xcc\x28\x8a\xb1\xa4\x4d\x3e\xde\xd5\x6b\xa2\x81\x65\x57\xa8\xda\x48\x61\x50\x91\x97\xe3\xd4\x78\xcc\x30\xef\x23\x52\x02\x19\x03\xa0\x4c\x49\x0e\xd6\x1e\xa3\x9e\xe6\x94\x61\xf2\x88\xb9\x48\x19\x08\x5a\x6e\xf8\x92\x09\x8c\x3c\x6a\x71\x54\xfb\xfd\x36\xe2\xa5\xb3\x8f\x44\x96\xfe\xcb\x23\x70\x04\xb8\x2b\xe0\xb0\xa2\x05\x35\x52\x7b\x7a\xe4\xab\xb0\xd4\xaf\xc0\xc6\xc2\x4f\x91\x34\xd2\x73\x79\x43\xbb\x75\xf9\xe4\xe5\x71\xd7\xdb\x0a\x4a\x7d\xf2\xf7\xa0\xd1\x1e\xe4\x25\x1c\x52\x72\x47\x6c\x47\xe0\xbd\x31\xfe\x4a\x97\xc7\x62\xac\x99\x15\xb1\x6b\x92\x6a\x22\x77\xca\x3b\x66\xef\x8c\x17\xfd\xde\xc8\x67\x96\xca\x84\x6f\x58\x7d\xdf\xa4\xfd\xdf\xd7\x55\x7c\x98\x06\xc7\xe5\xe7\x2e\x8d\x1f\x98\x44\x48\xf8\xa8\x99\xa7\x0d\x09\xcc\x53\x5e\x4b\xaa\xfa\xee\xb8\x74\x53\x1d\x75\x2d\x6d\xd0\x0d\xd1\x7c\xe1\xf9\x4c\x54\xc8\x51\x23\x5d\x0d\x78\xde\x58\xcd\xae\xd9\xd6\xaa\x95\x3e\x9c\xa6\x4d\xdf\x79\xde\x73\x38\xc5\x4a\xaf\x8b\x77\x9a\x68\x48\x8b\x08\x3d\x9e\xc9\xfe\xc4\xfc\x67\xc5\x1a\x41\xb9\xde\x32\x96\x2c\xc3\xc4\x08\x9d\x1d\xbd\xe8\xf4\xfa\xd5\x8f\x9d\xb2\x86\xca\x70\xf2\x8d\xd8\x15\xb9\x95\x36\xd8\x3f\x92\xe2\x80\x36\xec\x27\x4a\xa6\x27\x24\xda\x12\x42\x7d\x68\xe8\xe8\x31\x27\xdd\xb8\xbd\xb7\x9a\xc3\x33\x21\xd4\x2b\x76\xe3\x58\x5a\xcb\xc6\xef\x18\x8c\x23\xf9\xad\xe9\x43\x57\x18\x73\x2f\x8c\xd6\x0f\x33\x0c\x28\x9a\xa8\x68\xb1\x3b\xd3\x4a\x53\x2c\xbc\x5a\x52\xcd\x80\x04\x17\xbe\x6f\x41\x5c\xc0\x66\xb5\xb3\xbf\x26\x32\x88\x7c\x69\xf5\x35\xad\x26\x1d\x5b\xb1\xb9\x34\x57\x99\xc8\x08\xcd\xe1\x42\x67\xe8\x60\xae\x78\x6a\xbf\xf9\x94\x6a\xc3\x59\x71\xe7\x47\x60\xe4\xc8\xfb\x69\x09\xf0\xd3\x7d\xa1\xae\x0b\x22\x54\xb8\x9f\x41\x82\xa3\x93\x8b\xa7\xaf\x17\xc7\x28\x70\x68\x12\x84\x7a\xaa\x9d\xce\x14\xf5\x80\xbc\x43\x71\x02\xd3\xc7\x4e\x89\x79\xc3\xe3\x24\x06\xe8\xac\xf2\x97\x45\xe9\x04\x07\x6d\x7f\x5f\x1f\xf6\xfc\xc1\x6c\xcb\x22\xdd\x7b\x84\x3b\xdc\xa9\x7f\xda\x19\x51\x88\x82\x98\xaa\x1c\xab\x2a\xef\xa3\x92\x74\x20\x9b\xe6\x92\x01\xf6\x53\x47\xc7\xbc\x97\x13\x8e\x68\xf9\xe4\x6f\x34\x04\x8c\x7c\x77\x72\x01\xa2\xa7\xbf\xfb\x0f\x8b\x6d\x4e\x71\xe4\x20\xc1\xd9\x1a\x60\xc3\xe2\x7d\x17\x3d\x43\x05\x7a\xcd\x30\x6d\xea\x65\x6c\x5b\x00\xe8\xd9\x82\x3d\x13\x29\x86\x63\xb4\xac\xd3\x41\x7f\x2e\xf6\x2d\xe4\x1a\xd9\x71\x74\xb9\x78\xbd\xa2\x26\xea\xda\xbd\x15\x5f\x68\x8e\xf1\x57\x70\xde\xcc\x21\x0b\x78\xe1\x62\x04\xff\xc5\x6a\xda\x71\xe4\x0b\x32\x95\xd6\x1f\x2e\x87\x1e\x9a\xb4\xb4\x26\x90\x3f\x19\x88\xeb\x72\xf8\x4c\x54\x49\x3d\x29\xb3\xb1\x7b\x06\x27\x5c\x99\xdb\x82\xd0\x1f\x4c\xf0\x14\x78\xad\xe6\x49\x8e\xfe\x62\x31\xfa\x33\x2d\xee\xb1\x7f\x62\xb2\xbf\x01\xc1\x5a\x82\x5a\x2b\xe8\xe5\x47\x65\xb8\xb7\xe6\xc0\x46\x39\xe6\xbf\x4e\x11\xa0\xc5\x86\xe5\xe7\x74\x20\xf5\xf9\x6c\x3f\x93\x36\x72\x26\x0e\x47\x85\x16\x14\x68\xe5\xf3\xb5\x5d\xc0\xb2\xfb\x32\xf8\x15\x14\x66\x84\x6f\xca\xaa\xd4\xc9\xa0\xa5\xaf\x4f\xbb\xb2\x17\x33\xe3\xb6\x04\x99\x3c\x7d\x33\xa4\x60\xbe\xd3\x38\xe3\x62\x70\xf6\x8f\x00\x77\x34\x0a\x3c\x70\x4c\xae\xf0\x61\xc5\xb0\xfe\xe0\x41\xeb\x72\xd3\x55\xa1\x1f\xf9\xfe\xb0\xf2\x96\xfb\x56\x5e\xf4\x75\xb5\x98\xd1\x54\xb1\x0d\xcd\x80\xeb\x63\xae\xf3\xa7\x6e\x8a\x12\x3f\xda\xa7\x88\xfd\xc5\x67\xfc\xa5\x48\x8f\x8f\xdf\x7e\x11\xe5\xaf\x63\x8f\xbe\x55\x05\xdc\x13\x91\x10\x26\x3b\x7e\xe9\x2b\xef\x70\x64\x63\xbc\x2e\xf4\x81\x93\x8a\xc8\x15\x2b\xc0\x64\x37\xd5\x8a\x7a\x3a\x68\xa8\xf1\x79\x7c\xf3\xb7\x37\xe0\xdf\xc7\xda\x2e\x9d\x6a\x2d\x74\xa4\x42\xc6\xd9\xa3\xa9\x6c\xa1\xe5\x26\x03\x87\x30\xc5\x22\x19\x16\x32\x27\x1e\x44\x09\x8a\x57\x8a\x92\x6c\x24\x15\x85\x04\x71\x1d\xfb\x8b\xa3\x08\x5e\xa0\xe8\x65\x96\x56\x4b\x33\x7d\x07\x86\x89\xa5\xf1\xf7\x1f\xd5\x36\xe5\x28\xa6\x50\x3a\x5c\x8e\xd4\x90\x6b\xa3\x15\xf2\xbf\x0b\x18\xed\x9b\xab\x0a\x5f\x58\x16\x4d\x8b\x02\x4c\xd7\xee\x31\xc0\x05\x56\xee\xf3\xbd\xbe\x22\x44\x5e\x42\xfd\x16\x02\x04\xad\x59\x5b\x31\xc9\xd5\x3f\xa2\x4e\x53\xc9\xbe\x4d\x10\x19\x52\xb0\xb8\x13\x3a\xf6\x7d\xd4\x69\x5d\xad\x5f\x74\x55\xcf\x16\xd3\x5f\x91\x3d\x8d\xd3\xf8\x37\xbb\xa1\x97\x1e\x40\x50\x25\x12\xdb\x8c\x3a\x3b\x69\x22\x7e\x4e\x8e\x24\x47\xef\x7f\x47\x4d\xbc\xf7\x97\x3a\x7d\xb3\x7f\xc2\xdb\x58\xfe\x0e\xf1\xb3\x55\xc2\x25\xb4\x06\xc7\xcd\xbe\x64\xc1\xff\x41\xc9\x61\xe6\x71\x6e\xb9\x6f\x84\x42\xe3\xef\x28\xbd\xe3\xa9\x72\x4a\xeb\x81\x66\x32\xdb\x35\xa6\x16\x7b\x7b\x9f\xe2\x24\x5e\xca\x87\x60\xd6\xb3\x63\x19\xea\x5c\x2e\xd4\xd7\xa6\x58\x6e\x3d\x43\x56\x15\xcf\x66\x9e\x31\x59\x52\x42\x4f\x56\x89\x3f\xdc\xe3\xe6\xf3\xfe\x72\x95\x76\x4f\x25\xbf\x6e\xbf\xaa\x0f\x8f\x9d\xc8\xb0\x6b\xbb\x07\xda\x47\x46\xa7\x5e\x5f\x55\x3b\x13\xfb\xf3\xdf\x03\x61\x09\xee\xd5\x76\x49\x13\x76\xb3\x8a\x4a\x4d\x6e\xbe\x81\x61\xba\xaa\x4f\xfb\xec\x71\xe1\x41\x75\xa3\xcc\xef\x5d\x7a\xc4\xb3\x9f\xce\xc2\xc4\xa4\xf1\xf6\x22\x55\xa3\x6b\x1e\x89\xe6\x6a\x83\x12\x8e\x36\x40\x73\x92\x87\xb1\xe8\x68\xbf\x32\x68\xec\xc0\x55\x20\xfd\x2c\xf2\x9c\x39\x3c\xd4\x48\xd4\xb8\xd7\x90\xde\x7a\x0e\xa3\xad\x9b\xc2\x3e\x19\xfa\xb4\x8f\x3d\x56\x40\xb5\xe1\x25\xb0\xf3\x29\x8f\x5e\x47\xbd\x1f\x02\x69\x6c\x8c\x6b\x1b\xdc\x1a\xbd\xfa\x7d\x75\xce\x7e\x2e\x22\x9d\x61\x07\x9c\x78\xb4\xbb\x3b\x96\xf6\x93\x03\x34\x1a\x18\x60\x4a\x37\x18\x9f\xdc\xdf\x9a\xf6\xff\x00\x0d\xf7\xe5\x7f\xad\x17\xfe\x9f\x23\x29\x9b\x70\x1a\x63\x46\xee\xe1\x9e\x0d\xe6\xc8\x1d\xe7\xb0\x67\xd9\xc1\x95\x30\x49\x1f\x93\xbb\x65\x84\x83\xeb\xaf\xc5\x22\x1b\xe1\x82\x29\x95\x10\x50\x62\x32\xf0\x87\x7b\xec\x8e\x83\x26\x68\x93\x75\x96\x3d\x9e\xb2\xf0\xfc\xd4\x45\x74\x52\x61\xc7\xa4\xb1\xf8\x1e\x18\x8e\xb3\xbc\xc1\x07\xba\xe5\x80\x1f\xff\x7e\xf3\x73\xf5\xb8\xcf\x94\xa7\xc7\x9f\xc3\x89\xda\x5c\xf8\x6a\xf9\xee\x81\x43\x5d\xab\xcd\x06\xbd\x0b\xc3\xb7\x46\x66\xf2\x85\x89\xc5\xee\xf7\x00\xc5\x56\x1c\x5a\x5e\xbf\xa8\x29\xc2\x82\x8e\xa8\xcb\xf9\x34\x4f\xf3\x44\xf7\x16\x1c\xf8\xb4\x83\xcf\xea\xd1\x8e\xc5\x0e\xcc\xeb\x62\x0b\x26\x56\xf1\xb7\xf4\x4a\x04\x11\xcd\x48\xa9\x4e\xbe\x47\x84\x9b\xa0\x90\x06\xa1\x63\xc3\x1b\xf6\xdf\x8d\xd3\x1d\xf7\x1d\x8e\xe4\xf5\xa0\x6b\x65\x6d\x95\x4f\x61\xfe\x02\x07\xf7\x63\x10\x8b\x52\x5e\x8d\xd2\xd4\xf8\xe9\x9c\x9a\x44\x57\x8d\xb2\x65\xe8\xd8\x98\xa8\x77\xf5\x00\x86\x28\x38\x24\xde\xbc\xfe\x57\x41\x1a\xf1\x8f\x91\x3f\xdf\xe8\x12\xec\xe7\xee\xe8\x6f\xc5\xbb\xbf\x5e\xda\x34\xaa\xec\x99\xd0\x99\xfd\x02\x4a\x04\x12\xa0\x17\x08\xe7\x7a\xb4\xe7\xe6\xa1\x52\x73\x75\x9c\x73\xf3\x4f\x1c\x9a\x15\x63\xc9\xce\x2a\xe1\x3a\xdc\xcd\x78\x4d\xb0\x4c\x21\x06\x8c\x6a\x8d\x14\x8b\x9b\x36\x0e\x78\xc6\x25\xf9\xe2\x55\x4c\x9f\x0f\x93\x38\x95\x30\x07\xe3\xc7\x4a\xa1\xe8\xad\x89\x17\x0c\x02\xfd\x19\xcd\x02\x63\x75\x05\x03\x3e\x52\x5d\xd9\x1a\xe0\xc4\x5b\x66\x3c\xd7\xad\x78\x1d\x9b\x15\xd2\xa2\x38\x16\x42\x7e\x7d\xa5\xcb\x5b\xee\xb5\xe7\xd8\xaf\x53\x61\x62\x99\xa8\xee\x30\x2a\x32\x39\xc2\xeb\x94\x7a\xff\x5d\xae\xea\x51\xe0\x4c\x74\x4a\xc8\x62\x0b\x92\x70\x42\xbb\x0d\xf5\x96\x79\xf3\x64\xfe\x57\x82\xbc\x66\xb6\x17\xb3\xaf\xc5\xbe\x0c\x83\x7a\xf4\x1d\xab\x2d\x2d\x05\x31\xe5\xc4\x97\x42\xee\xcf\xbc\x9f\x86\x5c\xdb\x4b\x77\x32\x4f\xe3\xe5\x91\x83\x9a\x87\xf1\x5b\xc6\xdc\xfd\xd7\x54\xc9\x93\xbe\x55\xef\x5f\x2c\x5d\xde\x03\x97\xf8\x97\x27\x60\xff\x67\x73\x3c\x0e\xcc\x2d\xf3\x8e\x0b\x3f\x2e\xee\x50\x99\x6a\x2f\x72\x3b\x20\x03\x8b\x05\x0a\xa5\x2b\xc3\x24\xf1\x16\x1a\x85\x70\x0c\x98\x84\xb7\x2c\x2a\xa1\x90\x82\xeb\xe9\x66\xcb\x03\x43\xb7\x19\x89\x77\x62\x41\x5c\x4b\xa9\x5b\xac\x2a\x8e\x6c\xae\x3e\x24\x93\x60\x05\x7f\xe4\x61\xcc\xcf\x4b\x08\x91\x6d\x66\xa2\xc0\xd2\xc0\x36\xe6\x57\xdf\x3f\x76\xf1\xa5\x21\x1e\xf6\x3e\x8c\xea\x47\xbf\x9d\x85\x86\x68\xd2\x25\x2c\x35\xc0\x61\xe8\xf1\x01\xee\x0a\x39\x1e\x88\x0f\x6f\xbe\x3b\x17\x8c\x55\x36\xaa\x60\xb7\x0c\x99\x57\xed\xf7\xbc\x5f\xe5\x7d\xfd\x69\x7c\x9c\x56\x72\x87\x3c\xbf\xc0\x6c\x05\x3a\x75\xd3\x29\xb6\xda\x20\x2d\x06\xab\x29\x47\x9e\x35\x45\x68\xc7\x3e\x74\x46\xe2\x65\x25\x1a\x6c\xec\xc8\xad\x2b\x63\xc6\x4f\x56\x9d\x77\x19\xa3\x86\x49\x0c\x67\x14\xb3\xd4\x00\x77\x25\xa4\xe9\xdc\x0d\x3d\x79\xf1\x15\xfe\x49\xf6\xcd\xb7\xb8\x18\x43\xba\xc6\x8e\x46\xa5\x8c\xc2\xb8\xe0\x7d\x1d\x77\x19\x46\xf6\x2d\xe7\xe0\x69\x53\x53\x55\x6f\x6b\x51\x22\xee\xf4\xc7\x49\xc1\xee\xb9\xd9\x8c\x97\x7d\x87\xb9\x38\x9f\x4f\x4b\x22\xe9\x9f\xf3\x0d\x2d\x4f\x7c\x2f\x26\x95\xe8\xf9\x12\x7d\xf0\xa0\xbb\x94\xb1\xf1\xa2\xa6\xb9\x62\xd9\x66\x59\x6e\xe2\xcf\x76\xf0\xc3\x70\x25\xb6\x24\x81\xe3\x09\x68\x50\x18\xf6\x62\x62\x87\xe7\xa3\x56\x1f\x32\x3a\xa8\x5e\x58\x7c\xc4\x71\x8c\x40\x03\xb1\xd8\xc6\xae\xe8\xdd\x07\xd0\x21\x23\x68\x76\x73\x4e\xe2\x89\x15\x21\xdf\x07\x53\x1e\x7a\xc6\x8e\x33\xfb\x8a\xb2\x8d\xe8\x77\xe1\x9a\x32\x20\x79\x80\x92\xfd\xdf\xd9\x23\x25\xf6\x36\x81\xbb\x35\x0f\x4f\x45\xef\x74\x0d\xee\x94\x5d\x6e\xe8\x2c\x4c\x42\x61\x93\x2d\xf2\x35\x4a\xaa\xb1\x48\xac\xe3\x75\x8a\x13\xa9\x14\x7f\x77\x06\xe5\x71\x67\xe5\x80\x84\xe2\xfa\x69\x8c\xbf\x75\x63\x47\x82\x2e\xd5\x0d\x0c\x47\x9b\x03\xa6\xa6\x40\xef\x31\x72\x8d\x70\x08\x1f\x48\xe6\x26\xde\x82\x49\xfc\xde\xba\x84\x67\xf5\x11\xb9\x50\xbe\x94\x65\x76\x1c\xae\x95\x60\xda\x35\x92\xcc\x0b\xf3\xc8\xca\x21\x9b\xbd\x07\x74\x16\x6b\x5e\x93\x26\xb3\x0e\xb3\xf7\x70\xe7\x6e\xdc\x03\xbc\xdc\xdf\xfc\x0d\xcd\x3c\x9f\x12\x99\x2e\xe7\xf7\x77\x3c\x69\x3e\x8c\x8b\xf9\xf5\xbb\x9f\x64\x9f\xb6\xba\x71\xf8\xea\x22\x6e\xd4\x31\x5d\x6b\x2e\x09\xc7\x37\x04\x74\x98\x7c\xf3\x5b\x03\x67\x21\xb5\x6a\x5f\x8c\x63\x20\xdf\x3e\x3f\x2c\x65\xf6\x12\x83\xdf\x10\x86\xf1\x8c\x41\x7d\x47\xdf\x94\xf2\xc2\xaa\x11\x85\x69\x4f\x6e\x28\x78\x35\x0b\xc7\xb4\x61\x63\x75\xcf\x3e\xbf\x28\x67\xe9\x68\xf8\x7a\xab\x50\xca\x84\xbb\x57\xdf\xa0\x53\xe3\xbf\x04\xe0\x57\x09\xcc\xff\x11\x3b\x37\x86\x0c\xb6\xb2\x87\xf6\xc7\xd3\xbd\xd3\x9f\x8f\xb3\x38\x87\x13\x2b\x6c\xf2\xa6\xf2\x96\x57\xd0\x25\x75\xb7\xe9\x8e\xa7\xc0\x43\x8f\x4d\x15\xf5\x97\x8b\xab\x82\xb8\x90\x52\x7f\xb8\xc7\xa4\xf0\x56\x5e\x08\x52\xa6\x29\xf0\xa8\xc9\x8b\xb9\x9b\xf4\x4c\xbe\xf8\xed\x3b\x8d\x1d\xfc\x9a\x57\xca\xf9\x9d\x36\x5b\xa7\x62\x06\x6f\x0f\xc8\x68\x38\xda\xdf\xda\xbe\xd8\xe6\xc1\xa2\x0a\xb3\x3e\x6b\x7c\x93\x87\xa8\x73\x31\xe0\x93\x18\x77\x82\x90\x70\x47\x11\x35\xc4\x52\x92\x7d\x5b\xda\xa4\x4f\x71\xa9\xfe\x8e\x94\xb8\x63\xe9\x34\xec\x5b\x7b\xd0\x34\xf3\xa4\x8e\xd0\x4c\xc0\x6d\x9b\xf0\x7d\xc7\xfa\xc6\xd5\x27\x57\xd6\x35\x7b\xb1\x60\xab\x94\xb3\x17\x63\xa5\x22\x43\xea\x42\xc7\xa7\xe1\xb8\x7c\x31\x40\x86\x33\xbd\xd6\x34\xa7\x20\x28\x63\x8b\xc8\x6b\xae\x7f\xf9\xd5\x4d\x3c\xd2\x5c\x24\xc2\x35\x57\xef\x0a\x73\xad\x43\xa5\xaf\xed\x7d\x21\x8a\x63\xe0\x64\x8b\xc1\xb2\x7d\xbf\x6c\x5b\xd6\x69\xf7\xf1\x22\x0c\xc7\x97\x98\xdb\x7d\xf8\x3a\xe8\x34\x13\x3d\xbb\xd2\xa7\xe3\xa4\xda\x59\x88\xf7\x94\x21\x20\xa8\x1d\x1d\x64\x70\xd1\x4d\xbc\xa7\xd3\xc6\x98\x9b\xde\x54\x17\x16\xaf\x80\xb9\x06\x7b\xba\xa4\xf7\xd2\x9a\x5a\x31\x59\x5b\xa6\x07\x30\xc3\x6f\x96\x7b\x68\x06\x66\xd3\xc0\x98\x59\xcb\x64\x7b\x33\x1d\x8a\x9e\x2b\xfb\x6b\x23\xfd\xa9\xf1\x8c\xa3\xd0\x04\x97\x1f\x5d\x4b\xda\x56\x1a\x7e\x92\x1c\x94\xad\xb2\xd2\x9f\x13\x45\x56\xc5\x5e\x23\x38\xec\x02\x24\xe5\x25\x59\xff\xd2\x9d\xb9\x1c\xf6\x7f\x71\x3a\xef\x7b\x15\xfa\x74\xb4\x4d\x71\x91\xd9\xa2\x0c\x4e\xb4\x0a\xd1\x0d\xd5\x9b\x33\x6f\x0d\xef\x07\x1b\x65\x33\x46\x34\x72\xf7\x75\x91\xa3\x53\x1c\x9f\x9a\xe4\xf5\x7b\x1f\xf5\xaa\x19\x60\xfc\x71\xcd\x8d\xe8\x9c\xa7\x8f\x9b\xfe\x6b\x19\x54\xd5\x52\x97\xda\x0c\xf7\x27\x91\x58\x0c\x20\x93\x2f\x0f\x60\x94\xdb\x2d\x17\x97\x24\x96\x8e\xfb\xf9\xf1\x0f\x12\xda\xe9\x7f\x4a\xe0\xba\x74\x35\x11\x38\xb5\x9a\x8a\xfd\x79\x6c\x9e\x8e\x82\xd7\x85\x3e\x69\xc4\x51\xe1\x43\xe6\xba\x5e\x1c\xca\x30\x8a\x23\x57\xbd\x35\x50\xaf\xee\x81\x95\xba\x5f\x33\x7a\x7a\xad\xbf\xf9\x3f\xca\xca\x08\xc0\x06\x76\x53\x5c\xd7\x8b\x7d\x15\xfa\x99\x18\x57\xec\x97\xdd\x0c\xbe\x8c\x64\xd4\xdd\xd6\x84\xc6\xfd\x8e\x39\x16\x3c\x21\xb4\x5d\x7e\x9f\x22\x88\x7e\x32\x37\x4a\xd0\x50\x6e\xd2\xd5\x8a\x80\xa0\xba\xc3\x76\xd0\xde\x5b\xdc\xaa\xce\x72\xb6\xac\xf5\xde\x6c\x43\xb0\x9c\x52\x51\xe6\xbc\x97\x32\x4c\x72\x18\xb8\x23\xc5\x35\xde\x7d\x8c\x6c\x4d\xa8\x47\xb1\xd8\x47\x44\xfd\x4f\x99\x91\x5c\x7e\xa1\xc6\xb8\xff\x3e\x35\x2d\x3a\x51\xf9\x4f\xfc\xde\x7f\x11\xd4\x7f\xdd\x4d\xf2\xb1\x2d\xe4\x65\x0c\x70\x96\x17\x43\xca\x74\xfc\x84\x56\x46\x39\xb1\xc1\xbd\xd1\x2d\xc0\x7e\xb6\x61\x1d\x7d\x1e\x4b\x74\xcb\xda\xe8\xb3\x38\x68\xb3\x2c\xae\xc2\x1d\x9e\x6a\x3f\x28\xb5\xa1\x02\xba\x07\x16\x6b\xfa\xfb\xde\xa8\xf0\xa6\x92\xa4\xcb\x3e\xc4\x8c\x60\xfc\x00\x9a\xf9\x87\x94\x1a\x94\xb8\x15\x20\xe4\x69\x0a\x31\x31\x10\x7c\xff\x62\x26\xa7\xa2\x65\x54\xb2\x2e\x97\x7b\xb2\x8b\xd2\x8e\x7f\x59\xc5\xa7\xd0\x28\xfa\x65\xef\x23\x85\x8f\xc1\xae\xb9\xdf\x03\x29\x0f\xc3\x2c\xcd\x3b\x4c\xb7\x84\xf3\x38\xc2\x24\x64\x1d\xb7\x0c\x49\xd9\x5c\xc6\xb6\xd5\x77\xce\xd3\xaf\x6f\x90\xfb\x32\x8c\xd3\xa5\x2e\x13\x4f\xdc\x4d\x28\x51\x72\x79\x51\x82\x7b\xbb\xcd\x81\x15\x78\x6f\xe6\x75\x55\x32\xff\x9d\x4f\xe5\x1e\x09\xe4\xb7\x4f\x94\xd0\xe9\xa2\xfb\x6c\x4b\x6b\x9f\xfe\x65\xfc\x81\x46\x67\xcb\xb0\x54\xcb\x15\x42\x1e\x85\xd3\x6d\x0d\xdf\x4f\x35\x5e\x55\x2e\xab\x2b\x67\xe5\xa0\x91\x4a\x3b\xff\x11\xc9\x5b\x88\xc2\x1c\x0e\x5a\xfe\x2c\x58\x4d\xa1\x15\x67\xb1\xd3\xb7\x1b\x7c\x01\x87\xa8\xce\xf0\x3c\x3a\x6d\x0e\xf9\xd1\x42\xca\xd7\x12\x43\xa6\x46\xce\x5e\x8b\x0b\xc6\x68\xc9\x8b\xa0\xf3\x0c\xa2\x31\xb5\x7b\xc0\x3f\xce\x3a\x9c\x3e\x50\x1a\x3f\x70\x0e\xf3\xd5\x6d\xa6\xc3\xca\x53\x49\x59\x5a\xe4\xda\x6f\x08\x9d\xed\x78\x60\x34\x27\x64\x1a\x29\xc5\x1a\x6a\x18\xcc\xf6\x51\x29\x15\x4a\xd3\xab\xa3\xa5\x20\xfb\xed\xb7\x9f\x06\x78\x46\x23\xb8\xd6\x0c\x15\x93\xd9\xca\x44\x88\x46\xca\x2d\x56\x59\xa4\x4c\xde\x3d\x70\x83\x37\xf8\x45\xec\x5c\xb1\x34\x3f\x5a\x38\x7a\x32\xdd\xb1\xa8\x59\x00\x4a\xd1\x87\x0d\x02\xb6\x9a\x26\xf6\x7e\xa8\xfa\xbe\xa6\x8c\x1f\xf3\xea\x3c\x30\xcf\x4f\xe4\x9c\x92\xa2\x95\x77\x0c\xe8\x4f\x85\x87\xbf\xbf\xf2\x9a\x2b\x51\xe4\x65\x78\x6b\x1e\x4e\x00\xde\x0a\xd4\x08\x5c\xf4\xf6\x28\x71\x7d\x91\x62\x5d\xab\xff\x33\x6b\x7a\xae\x1a\x85\xc0\x75\x53\xbb\x0b\x06\xfb\x2d\xf9\xf0\x62\x03\x89\xd8\xb2\x65\x15\xae\x6c\x0a\xf2\x04\xa9\x96\xa9\x1d\x13\xd2\x2d\x26\x2a\x05\x24\x13\x83\xa1\x89\xc9\x33\x31\xc7\x5a\x8c\xe7\x72\xdc\xc9\x27\xc9\x07\x36\x98\x7b\x53\x78\x82\x87\x9b\xbf\x35\xdd\x9f\xa5\x8d\x61\x76\x53\x8f\x54\x8a\xad\x47\x0b\x4e\x60\xcc\x4d\xcd\xf3\x22\x83\x21\x98\xae\x3b\x9d\xb0\x13\x13\x9e\x7b\x80\xf2\xd2\xaf\x35\xb0\x1f\xae\x37\x4c\x61\x53\x68\x3f\xb6\xe4\x7d\x7c\x96\xf0\xa1\x0e\xfa\x7c\xa0\x8b\xa7\xbd\xb1\xed\x6b\x0d\xe1\x27\x51\xab\xf7\xec\xc0\x01\x74\x12\xd4\x3b\x04\x0c\x02\x36\xc6\x76\xbe\x89\x83\xf1\x56\x47\x55\xc5\xb9\x8b\x32\xc1\xb5\x5f\x2a\x20\xb9\x50\x51\xd1\x9b\xdf\x17\x08\xbd\x69\x41\x02\x63\xe2\x51\xb3\xe6\x78\xd9\x03\x45\x0d\x7e\xbf\x6c\x7c\x63\x02\xd9\xfa\x19\x47\x2a\x3a\x3d\x32\x21\xfa\x4d\x79\x6e\xf3\x7f\x32\x59\x72\x22\x07\xf8\x38\x0f\xa9\x80\x8d\x85\xe7\xde\xaa\xe6\xed\x9d\x85\xac\xd4\x67\x27\x7c\xec\xb9\x59\xf4\xde\xac\xdc\x99\xf7\xe0\x56\x09\xf7\x74\x44\x85\x28\xe7\x0a\x24\xd8\xe6\x72\xcf\xdd\x03\x0d\x1d\xa2\x3e\xb8\xf8\x46\x8f\x76\x56\xa9\x03\x15\x24\x21\x94\x43\xb7\x2c\x5f\x33\x8d\x69\x91\xaa\x1f\x41\x4f\xb2\xbf\x84\x61\xae\xdc\x68\x80\x0b\x27\x83\x91\x66\x7e\x31\xbf\x0c\x07\xc4\x1e\xe5\x15\xdf\xbe\x6a\xad\xff\x38\xfe\xa4\xe3\xdc\xc9\x26\x6d\x8c\x53\xf4\xa7\xba\xc9\xe5\xa5\x11\xec\x83\xb8\xef\xe2\x94\x29\xa5\xe0\xa8\x43\xc7\xbb\xab\x9d\xd7\xf2\x07\x74\x3b\x1b\xc8\xee\x20\xa3\x69\xf0\x67\xa8\xb5\x5c\xed\xdc\xc5\xb7\xd9\x59\x8a\x57\xdc\xb9\xe2\xb9\xad\x53\xbe\xc8\x3b\x3e\xb4\x53\x80\x7a\xdf\x99\x91\x21\x86\x65\xe8\x0f\x66\x7a\xd7\xe4\xbc\x39\xa1\x25\x34\xff\x9e\x09\xda\x6e\xcc\xc5\xcd\xe0\x61\x2e\x9f\xa1\xb7\xf0\xbe\x3b\xe6\x20\xf3\x58\x2d\x2b\x05\x68\xc7\x14\xcc\x16\x86\x76\x34\xa7\x26\x2b\x64\x40\x23\x25\x16\x0b\xec\xae\x51\xfb\x57\x5b\x4a\xd4\x9c\x16\x71\xb9\x21\x1d\x9f\x05\xa4\x83\x03\x99\x55\x9c\x8e\xc9\xf6\x33\x8a\x28\xb4\x7b\x96\xbe\x91\x49\x15\x34\x77\xb1\xd9\xfb\xba\x9c\x56\x16\x2d\x72\xb2\xb1\x49\x28\xd3\xfd\x60\xb3\x06\x97\x21\xa5\x4d\x3e\x80\x7a\xed\x0c\x6a\x5a\x51\xe4\x03\xde\x3a\x54\x0f\x04\x96\x6c\x75\xc2\xca\xa1\xd1\x44\x8f\x27\xc5\xee\x3c\x43\x2b\x6e\x79\xe7\xb7\x92\x99\xeb\xdb\x3f\x46\x4a\x77\x9c\x1b\x32\x27\x96\xfa\x66\x6d\x76\xc7\xf3\x08\x4a\xbe\xdf\x22\x7a\xa1\xad\xc8\xbb\xee\xef\xf6\x78\x2c\x5f\xf2\xa5\xaf\x6e\xc7\xca\xb8\x45\x79\xd5\x73\xaf\x66\xbe\xb6\xda\x5f\xca\x49\xda\x65\x98\xbb\x2d\x27\x12\xef\x36\xa8\x98\x1c\xfd\x12\xeb\x8f\x19\xf5\xa3\x09\x06\x44\xf7\xdc\x67\x3b\xb3\x7a\xa4\x49\xab\x6e\xd5\x99\x92\x8e\x58\xdb\xe5\xb0\x53\x6b\xec\x2b\xe7\x9f\x38\x58\xd5\x5a\xb5\x24\x08\x1b\xf9\xf7\xc2\x86\xc4\x17\x27\x33\x8d\x57\x0b\x6e\xd5\x92\x05\x15\x33\xc5\x75\xb2\x03\x8f\xac\x00\xd1\x5d\x91\x91\x21\x1b\xcc\x03\x6d\xb3\xfe\x98\xea\x72\xa3\xea\xdc\x1c\x57\x97\xe3\x06\x05\x3a\xe1\xc0\x50\x54\xe9\x72\x9d\x0d\x49\x6e\xcb\x8f\x96\xf5\x58\xdd\x29\xeb\x0d\x82\xe3\x94\xa8\x65\x1d\xc5\xde\xcb\x71\x62\x69\x65\x60\x27\x90\x4c\x2f\xa0\xed\xfc\xcd\xe2\x0f\xf6\x92\xf6\x4f\x9f\x57\x9e\xe1\x62\x5d\x20\xde\x51\x6b\x4f\xba\x60\xbb\xe6\x11\x55\xa5\xcf\xf5\xe9\x70\x52\x60\xee\x44\x88\xfc\x54\xf5\x12\x08\x99\x16\x0b\x4e\x79\x9b\xd0\x02\x27\x7e\x39\xb0\x26\x56\x3f\xf7\x76\x79\xe9\x7b\xcf\x75\x0d\xdd\xb8\x0e\x5b\x88\x82\x43\x62\x20\x77\x70\xf7\x82\x84\x61\xd9\x92\xe1\xb8\x60\x6a\x58\x52\xc8\xa8\x4d\x56\x06\xd6\xb5\x43\xe0\x47\x84\x38\x6a\xbe\x7e\x3f\xf0\x61\x0e\xdb\x59\x6c\xa4\x59\x5c\x85\x5b\x7f\xa9\xe8\x56\xf1\x4c\xd7\x23\xbb\x65\xb5\x68\xfc\x0f\x31\x66\x55\xb2\x93\x81\x66\x62\x10\x8b\x0b\x38\xd1\xa1\x74\xd4\xf2\x50\xc6\x96\x34\x8b\xed\x4f\xda\x51\xfa\x13\x7d\x1c\x7d\x79\x5f\xd8\x33\x17\xbe\xd9\xce\xdd\xfe\xcc\xcb\xa6\xce\x92\x61\x77\xe7\x67\xa9\xac\xb9\xcf\x64\xaf\x19\x2a\x91\xc6\xea\xfa\xa9\x7a\x8b\x3b\xdd\x79\x0f\x2d\xdd\x56\xc4\xc2\x71\x3a\xdb\x37\x9a\xaa\x99\xa5\x54\xd2\x08\x1e\x23\x13\x3a\x5c\x13\x38\x31\x57\x6d\xe0\x1e\x05\x30\x7c\xfb\x32\x2b\xe6\x0b\xc1\x83\x97\xb3\x30\x29\x37\x54\xd6\xa3\x70\x94\xd3\xd0\x16\x98\xf3\x98\x2b\xc2\x89\x2f\x74\x30\x80\xc0\xea\x69\x96\x2d\xdd\xae\xa8\xa6\xa9\xa4\xbf\xbd\xb6\x29\x55\xaf\xa0\x63\x13\xd2\xad\x4c\x9b\x66\x8a\x39\xd4\xe4\x78\xb3\xd9\x7a\xa6\x3a\x96\xbc\x7d\xdc\x68\x17\xa1\x0c\x7c\xfb\x7b\x97\x31\x32\x29\x30\x61\x85\x8e\x54\xa6\x9d\x0c\xf7\x79\x97\x53\x62\xf3\x09\x93\xd0\x35\xd9\xe0\x83\x06\x78\x32\x88\xa8\x51\x1c\x81\x87\x1e\xbd\xa0\x9b\x98\x1e\xf8\x39\x5a\x37\x82\xe9\x22\x41\x7a\x98\x79\xf3\xe8\x31\x56\x72\x04\x58\x94\x72\xb3\x9b\x46\x42\xf8\xc6\x29\x9f\x29\xba\xda\xe8\x57\x70\xf0\x5b\x5c\x11\x33\xb7\x80\x09\x5f\x5d\x58\x63\x7d\x0d\xda\x6e\x01\x35\xad\xc0\x0a\xe7\x85\xed\x82\x3b\x01\x4f\x8f\xff\xed\x5a\x2c\xfe\xfb\x07\xf3\x20\xca\xc0\xf9\x7a\xcc\x42\xb4\xfb\x66\xa9\x2b\x57\xe1\xc0\xc1\x46\xda\x94\xef\xf4\x29\xf6\x74\xcb\x74\x75\x96\x97\x1e\x7c\x75\x48\x5a\x39\x63\x68\xe1\xfd\x75\xbf\x58\xd8\x6b\xd0\x9f\x15\xd2\x6c\xcf\x41\xf7\x6e\x42\x4f\x76\x31\x7f\xaa\x38\xd9\x64\x1c\xbc\x35\x62\x1b\xcc\xb9\x3d\xf8\x3f\x7c\x2f\xed\xae\xcf\x11\x37\xab\xf9\xb9\x42\xc9\x74\x15\xb5\x23\x42\x76\x31\xc0\xe9\x14\x09\x54\x5a\xe3\x94\xb1\x76\x79\x3d\x22\xac\xdb\xca\xa1\x61\xda\xe9\x97\xc2\x8c\xcc\xbe\xf1\x7a\xd8\x6d\xd0\xbb\x6a\x43\x8e\x1c\xe6\x08\x24\x93\x18\xdf\x5e\x60\x27\xf7\xe7\x96\xe6\x84\x2d\x61\x05\x8d\x9e\x38\x12\xbf\xc5\xcc\xc3\x75\x22\xc3\xe3\xa9\x80\xc2\x2c\xe8\xfb\xd4\x08\xc2\x30\x33\x3f\x33\xe4\x05\x1c\xf2\x5a\xa9\x30\x59\x56\x41\x0b\x92\x5f\xba\xed\xbb\x18\xcd\x05\x5d\x57\x80\x16\x44\x8c\x29\x68\x9e\xa5\xeb\x47\x53\x5f\x17\x49\x49\xa1\x24\xe3\x0f\xe5\x84\x73\xb8\xb9\xb6\xc9\xa7\x38\x50\x70\x88\xd3\x48\xa1\xcb\x25\x82\xd2\x39\xb6\x79\x86\xfb\x4f\xa1\x8a\xcb\x98\x28\x69\xd3\x51\x36\x12\x71\xa8\x39\x85\x7a\xa3\x99\x8e\x43\xb5\x30\xc9\x31\x49\x29\xec\x22\x72\x77\xe5\xbb\x3d\x0d\x6e\x98\xf0\x24\x24\xf8\xc4\xa6\xcd\xf8\xa3\xb5\xda\x7e\xd8\x57\x3e\xd5\xe9\x4c\xd5\x85\x52\x46\xa2\x99\x86\xb5\xf6\x52\x68\x27\x69\x1d\x8d\x1c\xe0\xab\xde\x7e\x21\x1e\xf4\x11\x56\xcf\x4a\xa6\x9b\x20\x73\x0f\x5c\xea\x44\x46\xdc\x31\x1c\x88\x45\xc0\x17\xbb\xd8\x83\x9a\x94\xbe\x62\x86\x50\x4a\x85\x0a\x82\xa6\x0e\x74\xc5\x10\x03\x9d\x2e\x3e\xfc\x62\xfb\xc9\x8a\xc2\x43\x63\x38\xc8\x0b\xa1\xc3\x35\xc2\xd3\x22\x31\xaa\xdc\x07\x47\x87\x14\xd5\x39\xdb\xa0\x73\x37\x9f\xea\x6a\x81\x17\x75\x73\x49\x04\x7e\x50\x24\xb3\xc5\x8e\x06\xf7\x5b\x40\x4c\x03\x83\x6b\xc3\xbc\xdc\xce\x40\x35\xbd\xda\x79\xdb\x64\x45\x41\x22\x68\xd5\x73\xa4\xf2\x42\x03\x1c\xe9\x2f\x87\x56\x2f\xd6\xdf\xcf\x30\x98\xcc\x72\xe6\x57\x22\x59\x7b\xd7\xfc\x50\x5e\x52\x81\xa1\xce\x84\x83\x28\x75\xf5\xfb\xb2\x4f\x06\xef\xbe\x38\x8c\x4c\x97\xd5\x1b\x51\x76\x10\x64\xf0\xdb\x1c\x9a\x6e\xf3\x89\xe1\x25\x37\x21\x89\xdf\xe2\x14\xed\x75\x84\xc7\x0a\x24\xca\xf4\x7d\xdd\xdc\x78\x91\x5b\x25\xee\x07\x86\xba\x7a\xb3\xdd\x84\xef\x1e\xfb\x32\xb4\xf7\xc0\x69\x61\x83\xf5\x67\xfd\x87\x2d\xad\xf1\x93\x04\x0c\x4b\xc8\x16\xc6\xb4\x9e\xfd\x3c\x62\x96\x85\xc6\x68\x78\x6d\xf7\xa3\x65\x61\x51\xf7\x9c\x6f\xe0\x7c\x2c\xc8\x64\x57\xec\xd7\x13\xdd\xd7\xa7\xf1\xab\xa3\x4c\x07\x70\x0b\x98\x9a\xaf\x9f\x6e\xde\x2d\xff\x74\xed\x35\x6d\xa8\x80\x22\x1b\x87\xbd\x18\xcc\x7d\xbd\x94\xa3\xd9\x00\x38\x5f\xc7\x82\x3e\x50\x9f\x97\x70\xf7\x2b\x3e\xe0\x13\xac\x33\x48\xc1\xb1\x64\xe2\x23\xda\xe3\x5e\xcb\x47\xbb\x6e\x0e\x6a\x33\x2d\xed\x51\xb8\x37\x2a\x11\xfc\x82\x54\xfb\xfc\x0c\xb6\x49\x37\xa5\x3e\x09\x11\x90\xda\x57\x32\xa7\x70\x34\x8a\xdb\xc8\xf6\x44\xb8\x32\x70\x62\xf2\xae\xf7\xb7\x19\x57\xe2\x44\x8c\x61\xbd\xeb\x61\xe1\xcb\x53\x9e\x55\x4c\xc6\xa1\x94\x61\xec\xcb\xfb\xcf\xc3\x30\xe1\x57\x64\xf2\x23\xbe\xcf\x7a\x11\xe4\xa7\x37\xf7\x40\xdf\x63\x94\x5d\x00\x17\x2b\x73\xc8\x11\x99\x4a\xdc\x4f\x49\x79\x48\x2d\xc2\x09\x41\x81\x2e\x27\x99\x95\xf0\x86\x1f\x92\x0c\x69\xe7\xca\x30\xf4\xf6\x48\x04\xdf\xd6\xc9\x30\xce\x13\xeb\x74\x0c\x23\x19\x63\x78\xfd\x25\x32\xb3\x75\x4e\xc7\x85\x0a\x2d\x7f\x45\xd2\x98\xbe\xde\xd6\x2d\xd2\x1f\xfd\xb1\x2c\x7f\x57\x41\x64\x0d\x2d\x55\x73\x34\xec\x17\x8b\x8f\x83\x9e\x3f\x6a\xf6\x7c\x7d\x0f\xf8\xd1\x07\x36\x80\x22\x4f\xd7\x76\xd8\x4f\x8b\x0b\x1f\xbd\x48\xdb\xcf\xfd\x73\x58\x2f\x11\x83\x42\x84\x2e\x77\xa7\x39\x3f\x8a\x15\x70\x4c\x07\x3b\x27\xa1\xd6\x73\x21\x92\xaa\x7e\xcc\x3b\x41\xc4\xf3\xa0\x2d\x26\xda\x46\xc5\x97\xcb\x83\x0c\x05\x74\x0d\xae\xd1\xfa\xf2\xdb\x34\xc7\x79\x06\xf9\x9b\x4c\xe1\xa4\x07\x49\x86\xeb\xf6\x8b\x0f\x1e\xbc\xee\xe1\x97\x39\x23\x2b\x13\x0b\x3e\x79\x2b\xe1\x53\xaa\xc2\x31\xa8\x07\xef\x7c\x2a\xa6\x8c\x4a\x73\xcc\xa6\x9c\x7a\x09\x93\xdd\x8d\xb9\xee\xe4\x5a\x62\x69\x8c\xd7\x94\xc1\xc7\xe1\xdb\x97\xa1\xe7\xad\x3f\x8d\x95\xfb\xaa\xf9\x5a\xe3\x4f\xda\x62\x87\x34\xaf\xfd\xa7\x26\xb4\x0a\x62\xcf\x2d\x63\x56\x68\x54\x5b\x38\xb9\x5e\xa4\xf7\x48\x61\xdf\xe4\x07\x50\x08\x4c\x83\xc3\x4d\xa1\xe4\xc3\xbe\xdb\xe4\xbd\x41\xd5\xc9\x4e\x2e\x15\xd5\xd9\xb5\xbd\xdb\xc7\x92\x3e\xb7\x95\xb1\xa7\x97\xa1\x68\xcc\xa1\x82\x29\x93\xe6\xd7\xbf\xf2\xda\xb3\xe3\x08\xe9\xfd\x7b\x72\xbf\x5e\x8a\xc6\x31\x7e\xfd\xb1\x4e\x23\x18\x6b\x9f\x88\xfb\xa7\x1a\x69\x2a\x8c\x97\x54\x79\xad\xa1\x26\x16\x03\x9c\x5c\xac\x7c\x68\xad\x57\x62\xb5\xb2\x62\x65\x0e\x5d\xe8\xf8\x8d\xb4\x1a\x9a\xc2\x55\xa0\x8e\x92\xb2\x26\x56\xda\xb5\x61\x40\xa1\xe7\xd7\x09\x9c\xac\xee\x86\x9e\x09\x3a\x25\x15\x06\xee\x29\xba\x79\xe5\xda\xe6\x51\x55\x95\xb6\x9d\xfe\xa6\x9e\x29\x7a\x8b\x95\xe4\x75\x4c\xcf\xe8\xe2\x77\x71\x0f\x48\xca\x88\xe5\x81\x1d\xef\x81\x30\xaf\x71\x20\xa8\xdc\xb4\x7d\xae\xd8\x43\x52\xce\xc5\x94\xe0\x64\xed\xbc\x4f\x58\x7c\x9b\x4c\xb1\x82\x32\x8b\x7a\x52\xa4\xe6\x06\x26\xc1\x81\x94\x0e\x16\x7a\xf2\xe2\x1e\xf8\x6d\xde\x37\x77\x2c\x33\xc4\xba\x9c\x1f\xfb\xf8\xa4\x07\x89\x12\xda\xd4\x4d\xcf\x0c\xaf\x8c\x35\x8c\x7d\xec\xb8\xcc\xde\x5f\xfe\x02\x22\x39\x11\x30\x3b\x46\xff\x2e\xc2\x3e\x09\xf5\xa0\xdf\x19\x82\x4e\xd1\x67\x6f\x6f\x58\x11\x88\x13\x4c\xae\xd3\x0a\xc0\x1b\x36\x1d\x82\x49\x49\xd7\xad\x5e\xd5\x96\xe3\x7a\xbd\x8b\x13\x0a\x20\x38\x35\x95\xc9\x65\xcf\xd3\xc8\x5d\x1f\x97\x77\x90\x37\x4c\x77\xb0\xe6\xb8\x94\x36\xd8\x13\x5c\x0f\xe9\xa2\x9b\x7b\xcf\xcf\xe6\x2e\xec\x7b\x92\x2a\xc2\x98\xb6\xa7\x23\x16\xd0\x95\xe7\x94\x64\x38\x50\x37\x14\x0a\x7a\x6b\x86\x0f\x34\xfe\x35\x1d\xb2\x08\x67\xbb\xa0\x38\x28\xad\x58\x7d\x92\xfe\xc9\xd5\x65\xa9\xef\x21\x07\x05\xe8\xbc\x3b\x21\xd4\x3e\x88\x82\xa7\x9a\xf5\xfd\x23\xa5\xe0\xc3\xe4\x06\x26\xe7\xe2\x00\x82\xe2\x97\xdb\xcb\x2c\x48\x6a\x4d\x13\xec\x8d\xa8\x7b\x60\xf3\x21\x3a\xcf\x13\x7a\x40\xc3\xf3\xb5\xf6\xc0\x8d\x80\xfc\xe6\x1a\x91\xef\x68\x71\xb6\xa9\xa1\x06\x3d\x91\x21\x9f\xf9\x87\x4c\x20\xab\x66\xdf\xc5\x9e\x56\x72\xe2\x03\xaa\xb2\x2a\x4a\x86\x50\x04\x4c\x4f\x7b\x16\x14\xd6\xec\x66\xb3\x3c\x54\xb8\xb9\x12\xb6\xc4\xe6\x46\x43\xb2\x7b\x42\x1c\xd1\x59\xb6\x98\x00\x5d\x10\xb9\x7d\x8c\x62\x55\x5d\xc4\xe2\x79\xf2\xb3\x57\x49\xff\xb9\x85\xd4\x9f\x32\xcc\x6f\xc1\x23\xc5\x15\x57\xba\xa4\xdf\x97\x87\x05\x1d\xf0\xc5\x42\x70\x2b\xff\x49\x0b\x4f\x5e\xf4\x9f\xe9\xe6\xfe\x15\xfc\xc3\xf0\x0d\x98\x6f\x6b\x74\x55\xb0\xb2\xe1\x15\xd6\x2f\xcb\xb8\x3f\xdc\x30\xb4\x0a\x47\x0e\x45\x22\x73\xe2\x24\x59\x76\x52\x11\xdf\xcd\x8f\xf6\x29\xaa\x56\x63\xb1\xfd\x0f\x96\x15\x96\x84\x8b\xe9\xb7\x9c\xf6\xc1\x55\x26\x6a\x3d\x1f\x52\x8c\xac\x45\x69\x46\xe1\x10\x3f\x86\xc7\xb6\x65\x6e\x21\x39\xff\x71\xac\xf4\x21\x30\x3b\x23\x43\x68\xa3\x19\xc9\xc5\x55\xb5\xec\xd8\xd1\xed\xcb\xce\xe6\xb1\x55\x33\x23\x43\x3d\xb5\xb9\xf2\xe0\xd0\x99\x69\x47\xe5\x41\xa4\x03\x8b\xa8\x21\x74\x3e\x4f\x8e\xb2\x4e\x0e\x78\x13\xab\x1e\x41\x09\xd2\x20\xf4\xd5\x4e\x8b\x7e\x7b\x8a\x2d\xf5\xff\x64\x3b\x10\x96\x8e\xdd\x41\x46\xea\x45\x3a\x63\x47\x5d\x45\xee\x87\x56\x53\x1f\x66\x49\x30\x41\xc3\x34\x3f\x3a\x1f\xe4\x19\x18\x00\xa8\x09\x85\x57\xe8\xc8\x8a\x6f\xe3\x16\x6e\x57\x05\x78\x5b\x0f\xaf\x2a\x4e\x5d\xe3\xbb\x36\x2e\x8f\xe3\xae\xf7\x8d\x9d\x83\x25\x1e\xbb\x6f\xe6\x10\x39\x3a\x59\xe9\xb3\xfd\x1e\x48\x18\x38\x4f\x0c\x7a\xbd\x68\x1f\x2c\xbb\x67\x83\x39\x78\x21\xd2\xe4\x6f\x36\xaf\xa4\x65\x69\x8b\xe7\x50\xb2\x5a\x48\x43\x2d\xf9\x3b\xd0\xf3\xe8\x20\x50\xd3\x44\xa1\xe8\xfb\x40\xe0\x33\xbb\xf1\x9d\x94\x1e\x8b\x2f\xa2\x17\xf4\xee\x17\xc3\x9b\x26\x85\xc2\x85\x8e\xb6\x4e\x56\x2d\x9f\x58\xe4\x0e\x26\x7b\x20\x0b\x30\xde\x19\x23\x86\xeb\xc1\x6e\x02\xfd\x2f\x33\x4f\xf6\xb3\x11\x6b\x36\x1a\x9f\x13\x3a\xef\x01\xe2\xaf\xbc\x19\xa8\x97\xfd\xbe\x29\xf9\x0f\x2a\x49\xbd\xbf\x55\x72\x2e\x2b\xdd\xf8\xfa\x4d\x83\x9d\xe5\xe4\x08\x51\xdf\xe5\x3f\xbf\xea\x4d\x8b\x90\x65\x38\xf8\xe7\x1a\x26\xee\x70\x74\x65\xd1\x70\x19\x54\x6c\xeb\x70\x0c\x22\x99\xfb\x28\x91\x20\x9d\xb1\x65\xab\xbd\xa2\xb0\xaa\xcf\x49\xd0\xaf\x25\xed\x4a\xe0\xd5\x37\xc7\xf6\x5a\xd7\xfd\x35\xd8\xb3\x5b\x50\xcd\xa3\xd6\x4d\x3f\xfd\xf9\xf8\x83\x60\x86\x00\x6a\x5d\xad\x7e\x2e\x39\xe8\x49\xef\x13\x95\xed\xaf\x82\x9d\xbf\xd3\x09\x42\xc6\x7c\xad\xd9\xae\x10\x16\x70\x48\x5e\xc7\xdc\x66\x50\x6c\xbc\xb5\xd4\x65\x82\x61\x06\xf4\xf4\x3b\x29\x07\xab\x74\x8e\xdf\xd7\xfa\x5f\x49\xe5\x87\x99\x28\xd3\xb8\xba\x20\x4b\x74\xa9\xe2\xe2\x43\xce\x84\x22\xe7\xf7\x74\xf5\x0d\x37\x16\xd3\x8b\x35\x36\xba\x75\xeb\xfb\xb5\x53\x74\x4e\x0a\x1a\x3d\x48\x0a\xd0\xae\x34\x8d\x84\x40\x10\x34\x5d\xec\x47\x1a\xa9\x5f\x25\x8b\x8a\x83\xf1\x44\xf0\xc8\x30\x63\xeb\xed\x81\x3a\xf6\xad\xce\xec\xd3\x86\xed\xd8\xb7\x6d\x11\x93\x57\xec\x2b\xfc\xca\x5e\x71\x09\x10\x83\x4b\x51\x73\xfd\x42\x4b\x17\xfc\xe4\x11\xa1\x2d\x53\x72\x7f\x9a\xcd\x09\xaa\x31\x55\x35\x22\x49\xb9\xed\xa9\xb3\x2a\xcb\xb2\x4b\x0e\x20\x06\xb8\xa4\x0b\xa2\xb1\x79\xf0\xd0\x3f\xde\x60\x62\xdc\x05\xe3\x4b\x69\xe6\x92\xca\xc7\x22\xa0\x12\xb1\x6b\x42\xb0\x39\x15\xde\x64\x70\x0f\x44\xe4\x77\xae\x3e\xc9\xf9\x3e\xde\xa9\xc7\xf7\x6e\x91\x39\x29\x28\xcd\x02\x1a\xa1\x4e\x75\x2b\xb1\x70\xb1\x93\x68\x90\xa5\x11\x4b\xf7\x45\x94\x63\x87\x1a\xcc\xbc\x0b\x4c\x83\xe7\xc4\x83\x6b\x20\x5b\x3f\xe7\x36\xb8\x6b\xf8\xef\x2c\xfd\xe4\x5d\x53\x3b\x82\x2e\x0f\xb3\x6a\xd1\xbb\x85\x21\x2c\x9d\xf5\x9d\xcd\x49\x8f\x25\x86\x70\xd9\xbc\x36\x16\x45\xb7\x12\xa9\x4c\xfd\x95\xf8\xf4\x6d\x75\xdc\x1f\xe5\xd1\x45\xb0\x87\xbe\x7f\xcf\xd0\xb2\x1f\x37\x0d\x86\xdf\x0a\xc7\x8e\xcd\x98\xe9\x3a\x9e\x25\x9f\xd3\x87\x4e\x6d\x1a\x07\x36\xbe\x63\xb8\xcb\xe1\x79\x9a\x4d\x22\xdb\x3b\x68\x85\x7e\xae\x9c\xf5\x7a\xc6\x2c\x64\xf3\xc5\x48\xec\xa4\xe8\x9d\xe7\x5c\x1a\x96\xbb\x0c\x23\xc7\xc6\xea\x7b\x53\x5c\xf4\x67\x53\xe2\x03\x02\x96\x5e\x89\xb8\x85\xcf\x63\x4b\x53\x4d\x7e\x8b\x8d\x0a\x2c\x6d\x21\xb8\xfb\x46\x1c\x09\x1d\x8f\x84\xfc\x54\x4f\xdb\xd9\x07\xac\xfd\x9d\x4a\xe9\x13\x96\x2e\x6b\x74\xfb\xba\x49\x9f\x5e\xe8\x9b\xaa\xa1\x64\x98\xe5\xce\x8a\xb6\x04\xce\x3d\x36\x7e\x4f\x83\x1b\x34\xb5\x05\xff\xc8\xaf\x68\x35\xaa\xc4\xda\xea\x28\x7e\xb7\xe4\xcf\x0e\xd5\xd9\x03\x0a\x92\xe2\x66\xa7\x41\x72\x14\x61\x5b\x30\x8a\x6c\xfc\xb3\xc4\x38\x46\xee\xbb\xa9\x59\xcb\xba\x10\xad\xcf\xcf\x7a\x87\xc4\x13\xab\x3d\xef\xf8\x50\x82\xbe\x94\xc1\x4b\xcf\x0c\x43\xf0\x30\x9d\xa0\x0c\x37\x8b\x13\x19\x8f\x7d\x50\xe0\x21\x8d\x15\xfd\x48\x4b\xaf\x81\x7a\x4e\x91\x61\xf7\x29\x35\x71\x0d\x70\x89\x3f\xf1\x8c\xbe\xc7\x78\x8e\x52\x44\xbf\xc7\x2f\x80\x18\xa6\xdb\x04\x07\xc9\x30\x60\xbf\x83\xea\xca\x26\xca\xcc\x3e\xac\x8f\xf2\x8f\xca\x97\xb7\x0f\xfc\x8f\x77\xc7\x56\x20\xe7\x9e\x4a\x35\x5a\x78\x47\x07\x2b\xc5\xc6\x95\xcd\x2a\x8b\xce\x75\x7e\x77\xdf\xb8\xf1\xed\xfc\xf4\x68\xc9\xf7\x82\x4b\x9b\x6f\x84\x35\x3f\xd7\x72\xf6\x30\x3f\xa1\x5d\xcb\x03\xba\xfb\xbc\x2c\xd3\x9e\xd0\xfe\x72\x6c\x4e\x4e\x1e\xc6\x69\xa7\x3d\x63\x0a\xbd\xc9\xfa\x74\x69\xcc\xb7\x72\x27\xf9\x53\xaf\xe2\x78\x05\xa6\x5e\x2a\x6b\xd2\x21\xf6\x3f\x35\x07\xe8\x05\x27\x16\x18\xf2\x6e\xba\xd2\x39\x0f\x80\x37\xcd\x91\xd3\x83\x72\x81\x1a\xdd\x4d\xe1\xcc\xc4\x77\xec\xeb\xe9\x6f\x95\xf8\x2c\xa7\x4c\x3a\xf7\xf3\xa8\x3c\xbd\xc2\xe8\xf8\x5c\x6b\xc7\x9e\x55\x30\x61\x77\xca\x83\x0d\xf6\xa5\xa8\x97\xa3\x24\x04\x9c\x7a\x77\x02\x90\x5e\x56\x46\xcf\xa5\xe6\x41\xab\xc1\xc1\x31\x06\x9c\x7f\xa7\x1a\xfc\x17\x90\xdc\xb5\x5f\x5c\xf6\x63\x44\x9e\x79\x03\x70\x97\x61\x12\x39\x08\xe4\x9a\x27\xdf\x92\xfa\x9c\x89\xc5\x37\x21\x98\xe2\x78\xce\x3f\x4c\x8d\xa4\x96\xf0\x64\xe8\xb4\x77\x53\x07\x41\x2b\x07\x66\x7a\x79\xcb\xcb\x33\xa6\xbe\x68\x9f\x87\x8b\xee\x81\x9d\xb8\xae\xfb\x57\xc4\x55\xa6\xa8\x0e\xae\x67\x72\x10\x6c\x55\x34\x34\xa1\xbb\xa9\x23\x42\x47\xae\x03\x31\x15\x32\x7b\x9c\x98\x93\x17\xeb\xe1\x5e\xc2\x47\x44\x13\x03\xe7\x8f\x81\xe4\x96\x04\x9f\xa9\x97\x06\xb4\xdd\xfd\x39\x64\x57\xbd\x05\x09\x4b\x8e\x25\xda\x52\x46\x28\xa2\x62\x88\xd1\x9d\x79\xbb\xdb\x8b\x3b\xca\xdd\x7b\x80\x54\x22\xe0\xdd\xe6\x9f\x47\x3f\x66\x09\xaa\x0e\xdc\xf2\x15\x93\x75\xbd\xf0\x7e\x06\x70\x62\x3e\xdf\x7c\x1e\xf5\xf4\x84\xb5\x7d\xd6\xf9\x91\xc0\x9f\xe8\x2f\xe6\x2f\x00\x8e\x14\xbe\xe0\x6f\x16\xd5\xbe\xf0\x6d\xdd\x74\x7f\x86\xe9\x1f\x75\xd3\xaa\xf3\x7b\xb1\x3c\x3f\x8d\x8e\x8d\x98\x06\x7e\x74\xaa\xc1\xf0\xf9\x26\x6d\x0a\x60\xf8\x96\x9f\xab\x9e\x75\xd4\xb8\x94\x15\x47\x5f\x60\xe4\x69\x0b\xa9\x04\x35\xee\x7b\xeb\xec\xb2\xa9\x10\x3c\xc4\xa4\x11\xa5\x3e\x91\x61\xf4\x71\xae\x82\x26\x0e\x0a\xa8\xfa\x95\xd8\xe1\x59\x39\xa4\x52\x90\x7c\x00\xbb\x85\xf6\x8a\x6e\x93\x41\x0e\x24\xb9\xd5\x7b\x72\xb9\xdb\xe6\xad\x5b\x67\x85\x74\x21\xe5\xcb\xed\x78\xf8\x35\x20\x1a\x64\x72\x2f\x82\x29\xd5\x18\xc5\x14\x79\xb1\xb2\xca\xa0\xf9\x24\x4e\xeb\x87\x7e\xdf\xe6\x07\x2a\x06\x88\x9a\x98\xab\xc9\xc4\x86\x29\xe4\x51\x86\x33\x3b\x72\x6c\xce\x68\x35\x99\x27\x85\xcc\x47\xe4\x82\x23\x6e\x1a\x6c\x2f\x47\x41\x9a\xfc\x37\x71\xd8\x67\xde\xbd\xb1\x9b\x18\x4f\x0a\xd0\xc6\xb2\xbb\xd2\xa6\x7a\xdc\xb9\x81\xb8\x98\xa1\xd1\x06\x33\x2b\xa8\x7e\x6e\x31\x38\xce\x0b\xe1\x2d\xff\x1d\x96\x70\xb9\x25\x4d\xe7\xf0\xbe\xf6\xab\xc7\xaa\xef\x1a\x15\x36\x03\xe5\xce\x24\xce\x4b\x17\x69\xe5\xcb\x55\x0c\xb4\x1d\xed\x93\xea\x69\xd1\x73\x56\x9d\xdb\x41\xc0\x35\x8f\x5a\xf0\x6b\xcb\xe9\xbc\x37\xfc\xd1\xa1\xcf\x33\xfd\x0c\x11\x9d\x8d\x7b\x40\x39\x76\x53\xbe\xad\x79\x59\x5c\x2f\x39\xfa\x89\xda\xac\xc2\xcb\x5c\xe4\x5c\x36\xca\x18\x11\x5d\xf5\x40\xeb\xf4\xf2\xb8\x4e\x63\xb0\x80\x5d\x76\x6a\x8d\x3e\x21\x77\x43\x37\xd6\x9f\xbb\x8d\xca\x84\xbf\xb5\xbe\x87\x40\xe2\xe1\x99\x5e\x8a\x1e\x3d\x13\x62\x01\x26\x79\xd3\xf1\x66\x2b\x5b\x7a\xf9\x4e\x70\xae\x61\x98\x59\x7e\x8c\xfc\x07\xd6\x46\x6a\x4a\x8f\x8b\x74\x8e\x9f\x41\x76\xb0\x51\x64\xa2\x04\xd3\x3d\x80\x27\xf5\x61\xdc\xe1\x5d\xc8\x1f\xd1\x84\x9d\x54\x9e\xae\x9e\x44\x87\x69\x9c\x84\x68\x47\xa2\x84\x0c\xec\x0e\x3d\x02\xda\xf0\x1e\x86\x70\x1f\xa6\x81\xf6\xd2\xac\x2d\xa9\x0c\x67\x0a\x98\xcf\x3b\x6a\x07\xa3\x16\x87\xec\x38\x88\xa6\x5e\xdb\x55\x3d\x0a\xbc\x39\x40\x6a\x68\x64\x3c\xe8\xee\x70\xa4\x23\xfa\xdd\x89\x27\x40\x54\xb4\xb0\xd7\x20\x28\x5a\x42\x15\x49\xdd\x98\x23\xcf\xd1\x93\x24\x9a\xa2\x08\x20\xb1\xcc\x5c\x07\x01\xbf\xf8\xdc\x50\x0b\x6f\x87\x92\xad\x59\x1a\x02\x5e\x62\x74\xef\xc8\x75\xb5\x8a\x24\xed\x50\x1f\x7f\x7a\xd3\xcc\xab\xa2\x5d\x3b\x66\xcd\x1b\xed\x2c\xbd\x38\x97\x8a\x5c\xf8\xdb\x0b\x00\x06\x00\xf4\xe6\xe9\x31\x9c\xa0\x9a\x58\x96\xe3\x77\xc9\x46\x4c\x71\xfe\x54\x99\x31\x59\x95\x7a\x0f\x8e\xf1\x7b\xb6\x5d\x93\x93\x17\x4f\x29\xd7\xb5\x48\x70\x7b\x29\x40\x1b\x99\x26\x95\x5b\x10\x4c\x9f\x3e\xea\x85\x9f\x3d\x75\xef\x9c\x53\x18\xa5\x35\x8f\x0f\x4d\xa2\x37\x4f\xa2\xdb\x18\x1b\xb7\x07\x9c\xa8\x08\x22\x99\x0e\xb6\xcd\x70\x9d\xd5\xab\x3d\xda\x72\x83\x4b\xed\x16\x10\xce\xde\xf6\xf4\x51\x7f\xdc\x44\x6f\x0f\x23\xba\xd1\xa2\x05\xdf\x87\xb6\x1e\xe5\xf2\xeb\xd5\x0e\x94\x86\xc8\x0b\xdc\x76\x73\x01\x17\x36\x35\xe6\x69\xde\xac\x21\x92\x15\xc6\xfd\x92\xf6\xa3\x4f\x02\x19\xa1\x08\xc5\xb6\xf7\x73\xb7\x32\x6b\x4a\x1a\x05\xa2\x9f\xb2\x30\x13\x72\xef\xee\x81\xbb\x36\x04\x6f\x28\x8a\x77\x35\xcd\x7c\x5e\xb3\xdf\xf2\xc1\x39\xbf\xae\xe4\x24\xf4\x0f\x27\xe6\x02\x6f\xa3\xb8\xb8\xd0\xfb\x96\x96\x84\x67\x85\x1c\xee\xa0\x60\x13\xc7\xad\xa9\xf8\x65\xaa\x18\x83\x15\xd5\xc9\x42\x2f\x59\xcc\xd1\x1d\x8a\xab\xd1\x13\xb4\x0e\xdd\x2d\xdd\xd7\x4b\xe7\xac\x37\x0b\x3b\xc4\x27\x6d\xb6\x20\x9e\xa9\xe3\xe3\x85\x76\x08\xd1\x2d\xdb\xe9\x6e\xe4\x82\x28\xd9\x28\x47\x9b\xfa\x2f\xc7\xe7\x5f\xdc\x0f\xf7\xa4\xf1\x81\x33\xdc\x5b\x69\xa4\x7a\xd4\xe2\x49\x40\x39\xc7\xb7\x63\x6b\xb3\x6f\x56\xbd\x2b\x47\x52\xb9\x8d\x3f\xa5\x08\x4e\xb5\x13\xc3\x2f\x46\x36\x42\x48\xa8\xdd\xf4\xce\x94\x6a\xd2\x09\xa8\xe1\xdb\xbc\xea\x0e\x57\x95\x22\x70\x6c\xfa\x7f\x1a\x9b\xd9\xc7\xe5\x33\x16\xe4\xc8\xee\xcb\x30\x3e\xdd\xf8\x8d\xd7\xd0\x1d\x63\x50\x65\x35\x0d\xc6\x0a\x7b\x0d\x8a\x43\xa5\x51\x1e\x1d\x4e\xeb\x7e\x5a\x6b\xfb\x76\x6b\x2e\xcf\x55\xf4\x7d\x39\x38\xe5\x0f\xdf\x71\x22\x0a\xa1\xf2\x32\x8d\x02\x38\xe0\x2c\x80\xfd\xb7\x5f\xa1\x9a\x46\xca\x0f\x83\x73\x12\x00\x06\x3b\x83\x41\x14\x4e\x21\x65\x5a\x5c\xcd\xa4\x94\x1c\x4f\x7f\x97\xd4\x07\xd0\xf9\xc9\x80\xdf\x7e\x63\x1e\x7d\xaf\x23\xf6\x26\x7e\x0d\xc5\x70\x47\x9a\x96\x78\xf2\x49\xe6\x35\x02\x0c\x37\xc6\x58\xcc\x97\xd2\xdb\x26\xc4\x3f\x45\x10\x0d\x32\xc5\xfa\x3b\x4b\xde\x28\x34\x52\x99\xe1\x3d\x0e\x4d\x4e\x79\x26\xaf\x20\xbb\xd6\x15\x57\x1b\x26\xeb\x90\x5c\xb1\x01\x92\xa1\xda\xfb\xb7\xd0\x27\xe1\x5f\xfc\xcf\x07\x4b\x74\xe6\x4e\xb5\xff\xf3\xb2\xd7\x79\x01\x66\x01\xdd\x46\xae\x06\x5f\xbf\xa0\xef\x76\x1c\xfd\xe9\xca\x14\x7b\x89\x59\x37\xa4\xf8\x72\xe7\x41\x3d\x50\x02\xdd\xd9\x0b\x63\x16\xc3\xac\x51\x1d\xaa\x14\x73\xa9\xf7\xa3\x6c\x67\xbe\x99\xfb\x88\xbb\xc7\x7b\x62\x01\x88\xec\xb9\x07\x89\xb0\x70\x5c\xf1\xcf\x02\xdf\x2e\xee\x01\x4c\x13\x7b\x8b\xd3\x15\x6d\xd4\x93\xb6\x09\xc6\x42\xca\xce\xa2\xee\x67\x6f\x79\xbf\x8d\x80\x22\x04\x12\x02\xbb\x95\x7f\x36\x24\x86\xd2\x32\x64\x7c\x98\x03\x7f\x9a\x3e\x61\xaf\x1b\x37\x83\xa8\x81\x69\x30\x60\xcf\x84\x4c\x63\x6e\x86\x1a\x74\x86\xfb\x7d\x55\x78\x66\x6f\xbb\x3c\xbe\xd0\x28\x98\x64\xa9\x5f\x1e\xaa\x6c\x40\x22\x75\xd5\x2b\x6a\x9a\xab\xab\x12\x5d\x14\xcd\x79\x1f\xb8\x3b\xb1\xa6\xa6\x04\x04\xd1\x5e\xc6\x3e\x85\xd8\x2e\x60\x09\x52\x95\xc5\xe1\x3c\x07\x4d\xd8\x56\x70\x5d\x00\x1a\x58\x5e\x57\xa8\x15\xb8\xe2\x3c\x57\x02\xec\xed\xfc\xdf\xe8\xb1\x06\xcc\x5d\x14\x17\x39\xb7\xd9\x60\xee\x42\xa8\x5f\x72\xdb\x4b\xf1\xa7\x88\x2c\x15\x3a\x3f\xd1\x92\xe1\x6b\x09\xe1\x17\x95\x40\x66\x5e\xdd\x03\x38\xf5\xd2\x11\x82\x57\x56\xfd\x74\x1e\x6c\xd6\xdf\x74\xa3\xd1\x35\x78\x0e\x2b\x83\x54\xe7\x43\xac\x64\xab\x2f\x62\x40\xdf\xdb\x09\xb6\x49\x83\x87\x4b\xd1\xba\x1d\xd0\x00\xb2\x27\x8c\xab\xe4\xd8\x3a\x42\xc0\x0d\x4a\x86\xb6\xe1\xef\xf2\x70\xd7\x3c\xf2\x5b\xb1\xb5\x87\xa7\xc6\xdf\x9f\x95\x1c\x46\x45\x7e\x22\xb9\x64\x45\x55\x30\xe1\x36\x36\x7f\x95\xe0\xa0\x20\x1b\xd2\x32\x7c\xb9\xdd\x24\x8f\x37\x5c\x76\x59\x73\x63\x93\x6e\x63\xf2\x5c\x63\x6c\x4c\x16\xdc\xe9\xf3\xa0\x7f\x27\xaf\x7f\x4d\xea\xeb\x85\x5f\xd4\xed\xc7\x52\x77\x36\x4e\x30\x16\xe6\xe2\x32\x4c\x32\x60\x9e\x3f\x4d\x12\x62\xf0\xab\xdf\x44\xc9\x9f\x1b\xc5\x30\xcb\xb9\xcc\x46\xee\x14\x55\xe0\x42\x92\x8d\x64\xc5\xcc\xbe\xb8\x42\x14\xd9\x0f\x77\x09\xda\xfc\x8a\x58\x79\x93\x08\x35\xf7\x2f\x7d\x7c\x38\x49\x0c\x36\xe9\x2e\x06\x7c\xd3\x53\x3d\x78\xab\x0a\x93\xdc\x5b\x65\x2b\x07\x2c\x75\x73\xfc\xf9\x51\xa0\xae\x69\xc7\x85\xf7\x18\x72\xc6\x35\x90\x32\xc4\x4b\xb2\x72\xe3\x95\x08\x49\x1b\xcc\x81\x3b\x49\x99\xd4\x78\x5a\xf2\xe4\xf3\x76\xa7\x29\x86\x48\xe5\x4b\x69\xc2\x65\x05\x9c\x64\x87\xca\x49\x56\xfa\x3b\xca\xed\x7b\xe0\x41\x8e\x53\x87\x67\xc1\x0a\xbf\xc0\x50\x45\xfb\xb0\xb8\xcb\x97\x00\xf0\x25\xc2\x6a\x96\x55\xaf\x8a\xe5\x95\x11\xa7\x06\x00\x27\xb8\xf8\xc7\x8e\x50\x21\x46\x0c\x27\x30\xf8\x97\x9f\x1d\x9c\xfc\x0f\x19\x16\xe9\xff\xb6\x02\x45\x1b\x56\x41\x0d\x70\xca\xad\x2c\xbf\xde\xad\xdc\xe9\x9f\x7b\xe0\x83\x7f\x93\x94\x9e\x83\x6b\x8a\xcf\xee\x19\x42\xbb\xc9\x71\xfa\xf1\x15\x42\x18\x5d\x4b\xd4\x39\x14\x1a\x38\x93\x1e\x43\x57\x4b\x1f\xbe\x8d\x99\x80\xde\xea\x24\x57\xf7\x4c\x1f\xe3\x30\x09\x97\xa5\x00\x39\xfd\xaf\xa8\x80\x02\xd0\xcc\x7c\x2c\x20\x43\x20\xc7\xbc\xaf\xf2\xdf\xa3\xdb\xf3\xa5\x45\xad\xc7\xb6\xe5\x2c\xe4\x14\x09\x55\x77\xd4\xfa\x64\x38\x37\xdc\x6e\x3c\x63\x5c\x42\xbc\x4b\x0e\xc9\x67\xdb\x30\xef\x20\x1f\xd4\x42\xc4\x4a\x71\x18\xea\x1b\x2c\x37\xe4\x59\x62\x3f\x72\x2b\x02\x24\xcf\x38\x31\x6b\xd1\x86\x9b\x4b\x82\x13\x38\x54\x2d\x6f\xcf\xa9\x71\x7e\xc9\x0c\x6f\xc6\x5c\x34\x52\x53\x57\x88\x69\x57\x2c\x2f\x0d\xd3\x26\x50\xca\x50\xfa\xff\x2f\x21\xd9\x7f\x48\x3c\x15\x94\xff\xf3\xc2\x25\x42\x1c\x5d\xe7\x12\x5f\x64\x60\x7b\x4c\x2e\xd2\x96\x85\x1d\x09\x72\x11\xcf\x26\x9d\x52\xbe\x50\x3e\x53\x8f\xaa\xef\xf7\xdb\x6a\x17\x57\x5a\x53\xe7\xc2\x22\x6a\x54\x47\xa5\x0e\x2f\x36\x17\x03\xde\xb9\x54\xb5\x11\xe3\x0a\x21\x9c\x19\x76\x16\xcc\x94\xc3\x06\xeb\x15\xb4\xaf\x1d\x19\xc2\x94\xb7\xd3\x97\x05\x32\xbb\xff\x3d\x5d\x21\xf4\x9b\x8b\x62\x36\x7c\x84\x8f\x3b\x43\x63\x51\xbd\x28\x48\x93\x80\xfc\x82\x02\x74\xb6\x9e\x78\x52\xaa\x4e\x67\xbf\xec\x2e\x36\x4e\x39\x50\xbe\x23\xcc\xaf\x51\x89\x99\x20\x7e\x89\xc8\xef\x00\x73\x4f\x6c\x4a\x4a\x16\x99\x4d\x3e\xd4\x18\xa6\xde\x26\xd4\x9d\x62\xe4\xaf\xcb\x34\x16\xf8\xed\xfb\x16\x43\xe9\x52\xca\x2b\x84\x1f\x7f\xdb\xec\x8e\xf2\x24\x8f\x78\xf1\xe8\x8e\xe2\xb3\x7c\xea\x97\x27\xd4\x66\xeb\x26\x36\x98\x9f\x0b\x92\x9e\x39\x45\xfc\x9d\xd4\x10\x95\x48\xfb\x19\x6a\xbf\xd5\x95\x55\x51\x55\x4d\xb6\xf6\x88\xad\x0f\x46\x2c\xb2\xbd\x58\xbf\x98\xe3\x6f\x30\x83\x6c\x9d\x61\x9d\x3f\x6f\x52\x91\xc8\x8e\x6a\x4e\x07\x83\x69\x8e\x47\xe0\xc4\x37\x93\x9e\xad\x0d\x31\x56\xa2\xc4\xf0\x98\x1f\xb7\x01\x25\x52\xe5\x9b\xc6\xf2\xd4\xab\xc9\x0b\x64\x63\x6f\x2d\x4f\x45\x91\xdf\x2d\xdf\xde\x61\xb5\xff\x76\x0e\x73\x78\xb4\x46\xe7\x21\xb3\x4b\xd9\xee\x4e\x92\xfe\xe0\xe5\xcc\x87\x50\x19\x26\x1e\x34\xb7\x4c\x86\x7e\x47\x47\xc2\x9c\x4e\xfb\xdc\xcf\x82\xd4\x1d\x1b\x4b\x87\x00\xd7\x21\x39\x6f\x57\x7b\x46\x91\x53\xec\x3e\x06\xc7\x84\xc6\x02\x48\x5a\x69\xb4\x3b\xcb\xd3\x72\x86\xc0\xd6\xa9\x85\xda\x0b\x43\xed\xd3\xee\x41\xef\x3a\x7d\xcc\xe1\xc7\x56\x23\xc8\x27\x8b\xe7\x08\x9f\x68\xd6\xd6\xe0\x97\x9c\xcc\xd7\x83\x00\x14\x1c\xe5\xff\xae\x08\xdd\x3f\x44\x2b\xf9\x35\x3f\x69\x98\x5a\x3b\xc3\xcd\x6c\xc8\xdb\x35\xfb\x14\x8c\x34\x7d\x65\x1b\x16\x10\x23\x41\x1f\x87\x7f\xea\x1c\x6d\xc2\xd4\x38\x27\xe1\x58\x38\x85\xa5\x21\x47\xd4\x0f\x62\xd6\xbb\x3a\xe9\xdd\xce\x76\xb1\x5f\xbd\xa8\x22\xa0\xae\x8b\x73\xa4\x1e\x04\x4c\xfe\xdf\x68\xc6\xc7\xef\x84\xc2\xef\x81\x30\xdf\x89\xb1\x3a\x02\xb7\x56\x2e\x01\xe3\xee\x08\x06\xab\xe9\x6a\x36\xa3\x8d\x81\x4e\xdf\x8b\x1a\x05\x24\x51\x8a\x31\xd4\x98\xe1\x87\xde\x6d\xf9\xd7\x2e\x9b\xd8\x44\x35\xd7\xb9\x43\xc3\x3b\xdc\x4f\x1c\xa7\x8d\xc9\x11\xda\xef\x76\x82\x5b\x30\x43\x7f\x9d\xcb\x30\xc8\xfd\x0f\x88\x5e\xa9\xa5\x9e\x7d\xd5\x55\x38\x5d\xdd\x59\x32\xc3\x97\x57\xfc\x75\x95\x7a\x21\x22\xb1\x88\x77\x3a\xa7\x72\xfe\xf3\xa9\x90\x9b\xe9\x73\x07\x3a\x7b\x95\x1f\xa4\xeb\x79\x2f\x27\xac\x6f\x75\x50\xf4\x8b\xcb\x8d\x88\xc8\x86\x5f\xc9\x9f\xf2\x04\x1c\x68\xb8\xc0\x0e\x57\xa3\xc7\x26\x19\x9b\x7e\xe4\xb6\x45\x3d\x35\x52\x01\xa1\xae\xd7\x83\x80\x13\xd7\xa6\x4c\xe9\xbf\xda\x91\xd6\xa2\x02\x2c\xb3\xf1\x31\x31\x44\x04\x01\xef\xe2\xbf\x79\x41\xcb\x1a\xd6\xf8\x9c\x04\x80\xe6\x51\xc7\x2b\x13\xde\x56\xa4\xdf\xf8\xa5\xd7\x19\x56\xae\x2e\x3e\x35\x69\x92\x74\x87\x8b\xeb\x77\x5f\xdd\x52\x28\x52\xfb\x6e\xe4\xb4\xf8\x78\xac\x45\xc9\x8b\x32\x2e\x39\xef\xe3\x6f\x6f\x84\xf0\x29\x51\xdc\x9c\x9d\xed\x18\xff\x8e\x55\x5a\x53\x99\x24\x2a\x38\x2e\xa1\x7b\xf7\x11\x4c\x32\x73\xc9\xab\x27\x74\xb9\xe4\xff\x47\xdd\x5f\x7f\xc5\xf9\xef\x59\xa2\xf8\x03\x05\x14\x6e\x81\xe0\x16\x20\x78\xf0\xe0\x50\x24\xc1\x42\x08\x84\xe0\x16\x08\x0e\xc1\xad\x70\x0b\xee\x10\x20\xb8\x5b\xb0\x40\x70\x77\x87\xc2\x49\x70\x28\x9c\x40\xaa\xd0\xc2\xbf\xab\xcf\xe9\xd3\x73\xa6\xbf\x33\xdd\xd3\xd3\x9f\x7b\xd7\xba\x3f\xec\x3f\xe0\x59\xcf\x7b\xbd\x7c\xef\x5d\x9c\xdb\x13\xf8\xf6\x1f\x7a\x27\x15\x07\x91\xba\xe1\x80\xb3\x52\x2e\xf8\x51\xe4\xb6\x8f\x26\x5c\x59\x86\x48\x8f\xae\x9a\x2c\x95\x27\x90\x5a\xd0\xc4\x25\xd3\xd9\x7f\xc2\x36\x07\xb9\x1b\x57\x54\x7b\x72\x56\x49\xca\xd2\xda\xd2\x82\x1f\xb9\x77\xcb\x44\x17\xc7\x60\x24\x55\x4e\x24\x8b\xf2\x70\xab\x7a\xcd\xdb\xa6\xae\xa5\x90\xe0\xd9\x18\xc7\x89\x76\xc9\x4c\x86\xa6\x7e\xb9\x59\x7f\x3e\x37\x23\xfb\x88\x1d\xd2\x0d\xfe\x75\xda\x76\x13\x38\x1b\xed\xd2\x6f\x06\x0d\xee\xa3\x17\x9d\xcf\x6f\xa9\x99\xe1\xf9\x63\x84\x9e\xa7\x3b\x26\xe1\xd3\xcf\xa9\x30\x0a\x03\xb2\x7d\x6d\x17\xb9\x7d\x98\x0b\x7e\xbd\x8a\x20\xcc\xb1\xcf\xe3\x6f\xbc\x34\xce\x99\x68\xd0\x9a\x66\xdd\x0b\x0a\x90\x36\xb5\xe3\xea\x5f\x2c\x09\x9b\x08\x5f\x24\x98\x2e\xde\x4e\xc0\x0f\x60\x97\x1f\x16\x1b\x06\xc5\x39\x78\xcd\x3d\x00\x9f\x33\x36\x89\x42\x2a\x19\xeb\x5a\xa6\x25\x9b\x10\xe8\x42\x4a\x4d\x84\x6b\xbd\x39\x23\x1d\xe1\x37\x42\x90\xbb\xee\x97\x8b\x7d\xf0\x1d\x35\xbf\x3a\xb4\x75\x3f\x1a\x54\x63\xa5\x82\xfb\xf7\x83\x1a\xfe\x5f\x8c\x4a\x22\x03\xa6\x18\xde\x66\xa6\x1e\x3e\xb4\x6e\xd5\x8e\xd3\x6e\x19\x2a\x46\x53\xf6\x3c\xc5\x0a\xea\x68\x12\x3a\xb4\x66\x96\xf5\x5a\x73\xb7\xfc\xc5\xb6\xe2\x3e\x29\x1e\xee\x43\xfb\x6c\x6c\x20\x0c\x06\x35\x5f\xdb\x91\xaa\x33\x18\xf1\x2d\x6f\x4b\xca\xf5\x84\x42\xc7\x64\xe0\x07\x01\xee\x14\x57\xaa\x6e\xd1\x6b\xef\x40\x08\xfd\x86\x9c\x09\xd4\xb2\x6f\x9e\x9e\x75\x26\xe5\x78\x44\xed\xc0\x2b\xfa\xa4\x64\x72\xfe\xe8\xef\x97\x3f\x39\x95\x3a\x0d\x05\xf9\x2b\x8b\x2c\xc5\x22\x29\x02\xdf\xd6\xd1\x35\x2e\x44\x85\xf3\xfe\xa5\x9e\xd3\x46\xc4\xa9\xb7\xc4\x4a\xdc\x51\x23\x1a\x6e\x94\x22\x8b\xb5\x41\xf4\x41\xed\xef\x4b\xab\x99\x90\x1f\x47\x37\x54\xc3\xc5\x2d\xca\x1f\xe9\x2e\xe9\x2e\x77\x26\x33\x51\x69\xf9\xae\x38\x83\xc1\xe0\xce\xe9\xf6\x8f\x38\x9f\x27\x43\xdf\x67\x46\x02\x57\x7f\xe0\x3c\x59\xf3\x09\x9b\x37\x2a\x2f\x06\xde\xd3\x4e\xf3\x41\x63\x05\x83\x27\x2f\xce\x2b\x79\x89\x7c\xd4\xe7\xce\xc2\xdf\xf9\x68\x16\x2b\x11\x94\x51\xc6\x9e\x60\x47\xc8\x4b\x3f\x00\x21\x0e\xb7\x8e\x75\x1f\x7e\xdb\x49\xbc\xb3\x75\x10\x5d\x5a\xa6\xad\x52\x70\xca\x86\x6e\x39\x1d\xe9\xd3\x13\xd4\x36\xcc\xdd\xb2\x9a\xd9\xe7\x86\x42\xd4\x48\x43\x64\xd5\x9c\xf6\x5c\x20\xf4\x0e\x70\x5e\x32\x5d\x68\xa3\xc6\x94\xbd\xeb\x68\x8a\x95\xcf\x8e\xc2\x5a\x97\x3a\x7f\x70\x5d\xe4\x65\x25\x23\x49\x49\x0f\x9e\x3d\x13\x04\x56\x09\x2d\xe9\x1b\x27\xed\x55\x59\x10\x1a\xfa\xcd\xc3\x53\x79\x7a\x9a\x15\xa8\x4d\x29\x36\x21\x40\xe4\xe0\x97\x7c\x24\xce\x31\x91\x86\x06\xd3\xc0\x0a\x10\xfa\xf7\x42\x3a\x7f\xcf\xac\xff\x11\x18\x5e\xb3\xe7\x12\x49\xa2\xfa\x8e\x18\x82\x96\xbf\x39\x8c\x0d\x51\xda\x77\x0d\x96\x09\x5b\x6e\xf8\x44\xdf\x3f\xaa\xc7\x3f\x18\xcb\x2d\x5b\xf4\x9f\xb0\xe5\x82\xbf\xb2\xb0\xc3\x9a\x60\x0a\x6c\xf1\x49\xd4\xa7\x03\xcf\x17\xa2\xa4\x63\x18\x42\x47\x28\x88\x1a\xb4\xb6\x68\x2f\x73\x89\x94\xff\x16\x6d\x92\x32\x91\x7f\x4d\x52\xfd\xfb\xae\x6c\xd6\x3e\x65\xa2\xc7\x7a\x79\xe3\x1d\xde\xa3\x78\x99\x2c\xbd\x2a\xff\x01\xed\xe1\x12\xd4\xc7\x0b\x0f\xfe\x10\x6c\xd9\x53\x42\x34\x98\x0d\x70\xa2\x8a\xb9\xc4\x16\xd9\xe6\x56\x66\xa3\x4d\x53\xa4\xf3\xf4\x6e\xf5\x12\xa3\x7a\x1d\x8b\x68\xbe\x7d\x7e\x05\xfd\x55\x2e\xbe\x93\xd1\x4b\x84\x11\x95\xd9\xcc\xf1\xb3\x55\xec\xcd\x58\x85\x9e\xdf\x94\x04\xb1\xa8\x7e\x6f\xd2\x2a\xe0\x7f\xa5\x47\xc5\x4c\xfc\x4d\x29\x17\x33\xff\x9b\x5c\xe9\x92\xb2\xeb\xc5\x28\x27\x55\xbc\x79\x92\x07\xa3\x46\xaa\xf6\xbb\x45\x7d\x25\xc9\xcf\xd8\x70\xf5\x31\xa5\x01\x4c\x40\x55\xce\xa5\x45\x24\xba\xae\xdd\xf1\xb5\x1d\x2b\x86\x02\x53\x74\xe6\x39\xf3\xcc\xac\xd6\x7a\xb6\x54\x1a\x37\x3f\x04\xe3\x92\x6f\xe9\xe9\x55\xa1\xc6\xbb\xd9\x9a\x2e\xf2\x09\x9b\x6c\x99\x49\xa1\x56\x8f\x74\x7d\x54\x26\xaf\x2c\x8d\x3d\xb7\x2f\xb8\xd2\x73\xad\x2f\x87\x84\x1d\x89\x6b\x3d\x63\xa3\x42\xd0\x8c\xf6\xeb\xd5\x6b\x88\x81\x69\xf5\xfb\x2b\x6d\x89\x8b\x4e\x1c\x3c\x72\x13\x09\x83\x72\x52\x9f\xce\x1f\x1b\x11\x5b\x5e\x8e\xd2\x5f\xd0\x16\x1f\x80\x9e\x83\x1f\x29\xe7\x8f\xb9\xb4\xf8\x86\x6e\xc8\x6a\xba\x07\xcb\xe0\x80\x76\x81\xee\xe1\xf3\x4b\xad\x08\xc7\x5a\x26\x79\x2a\x0c\x7a\xae\x9d\xea\x86\x8e\xa2\x82\xe5\xa5\xfd\x55\x86\x06\xad\x80\x94\xf4\x8f\xad\xe4\x10\x49\x7a\xa2\x92\x76\xd7\x0e\x10\x62\x7b\x37\xdc\xf5\x4c\xe4\x72\xda\x37\x9d\x4d\xc2\x24\xf6\xc3\x97\x7b\xd0\x9a\xd4\x1e\x68\xe9\x99\xa4\x4a\xe1\x12\xd6\xa9\x43\x2e\x7e\x01\x77\x87\xf1\xd0\xf5\x02\x83\x1b\x52\x40\xd7\x7e\x4c\xdc\xe2\xeb\x82\x52\x13\x1a\xe3\x47\x67\xec\xc3\x00\x71\xf7\xf2\x79\x69\xf4\x99\xa3\x2a\x7a\x6b\x96\x74\x43\x14\x2b\xd5\xfd\xfb\x09\x6f\x37\xfa\x81\xc6\xe9\xe9\x89\x01\x12\x5a\xe2\x81\x00\x47\xf4\x52\x40\x0d\x0c\x6e\x1d\xb8\x67\xfc\x91\xe8\x1d\x55\x3f\xc3\x33\x9b\x82\x43\x4a\x9e\x04\x78\x3f\x00\x7a\xb3\x28\xbb\x4d\xfd\x2c\x6d\x15\x2b\xde\x62\x6b\xfb\x27\xf6\xba\x3f\x52\xd4\xa1\x47\xfa\xd4\xbb\xe1\xae\xbe\x58\xfd\xd9\xd7\x17\xec\xbd\x8e\x65\x59\x63\x7d\xd7\x68\xc3\x55\xa0\x0d\x97\xbe\x96\xbb\x5b\x3e\x8a\x9f\x3a\x39\x59\x10\x16\xcb\xe0\x23\xd4\x24\xb8\x2e\x56\x8e\xe7\xc9\xdd\xd4\xbf\xbc\x29\x75\xfe\xc5\xc2\xec\x59\xb4\x6d\x7f\x4a\x87\xaf\xdd\x96\x25\x79\x06\xcd\xdc\x2f\xcb\xba\x61\x74\x5e\x96\x49\xdd\x95\xbc\x61\xe2\xda\x3f\x8f\xc6\xd2\xa2\xff\xa8\xfd\x7c\x43\xd7\x0e\x65\x63\xd8\x5d\x6c\xba\xf3\x73\x5f\x68\x73\x91\x9a\x8d\x1f\x40\xf4\xbc\x22\xae\x5e\xd4\x54\x8e\x7d\xeb\xb5\xe5\x8b\xbd\x2b\x65\xbb\xe0\x8a\xa7\xd9\x30\xbd\xae\x19\xfd\x94\x18\xdf\x52\xa6\x12\xb0\xfd\x97\xff\xff\x39\x40\xc0\x86\xb5\x29\xa2\x45\x54\x26\x46\x6b\xde\xf5\x01\x38\x52\x79\xba\x39\xf6\x7a\x8a\x4a\xad\xd4\x8d\x8d\xd3\x1f\x17\x71\x24\xd1\x7b\xa9\x75\xbd\x32\x1f\x23\x5d\xe3\x6d\x5a\xfa\xca\xa3\x9f\x45\x90\xb8\xaa\x19\xce\x4c\xf9\x34\x40\x6a\x6f\x22\x10\x2f\x11\x3d\xd6\x76\xd8\x47\x15\x6e\xa7\xda\x27\x5e\xb7\x4a\x8f\x18\x93\x85\xbf\xdc\x5e\x31\x48\x94\x07\x33\x06\x28\xbc\xcd\x72\x31\xd8\x8d\xaa\xe7\x25\xd9\x0b\x4f\x37\xec\xf8\x7e\x9d\x38\x91\xa7\xc7\xc1\xc7\xf2\xfe\xfe\x64\x7d\x1d\xde\xee\xf1\x00\x10\x9d\x51\x9e\xdd\x11\xe2\x2f\xb1\x08\x8a\x87\xa5\x52\x89\x99\x0e\x6f\x9d\x42\x88\xa1\xca\x5d\xc4\xd6\x2e\x51\xa3\xbd\xbb\x46\x22\x12\x71\x72\x2c\x2e\x81\x77\xb6\x53\x4c\x21\xa6\x6a\x00\x7d\xdd\x50\x82\x46\x36\x9f\xcd\x08\x9c\x0c\xc8\x35\x36\xfe\xc7\x1b\xd6\x78\xaf\x3f\x28\x69\x47\x1b\x49\xa5\x63\x1c\xbc\xac\x51\xa7\x06\x4e\xb4\xd5\x33\x5f\xe8\xed\x24\x26\xf0\x78\xc3\x7b\x17\xe1\xc2\x4e\x31\x5f\x1e\xfd\x4a\x71\x63\x41\xea\x47\x60\xe4\x59\xbb\xc4\xfb\xa0\xfb\xf1\x67\xa6\x09\xba\x74\x2f\xd1\x09\x94\x4b\x7f\x76\x97\xea\x2a\xdb\x39\x91\x2a\xd1\x46\x6a\x26\x87\xca\x92\x9f\x9e\xa5\xa6\x5f\x7e\xae\x8f\x8a\xc3\xdb\x5f\x88\xa0\xa6\xe2\x47\x4b\xcd\x49\x6e\x31\x36\x95\xd9\x9a\x04\x4f\x52\x88\x27\x57\xa6\x87\x35\x65\x8b\x26\x31\xda\xbb\xe3\x8a\xed\xcf\xe7\xd8\xfa\xdb\x79\x51\x2e\x8d\x25\x62\x8a\x4a\xbc\x75\xb4\xed\xad\xb7\xc3\xba\x56\xe1\x39\x27\x22\xb1\xd5\x7e\xd4\x8b\x1b\x84\xc8\xc3\xa5\x6a\x45\xbb\x9a\x5f\xe8\x2e\xa7\xaa\xac\x74\x78\xb6\xac\x98\xb0\x3c\xfa\x45\xeb\xa3\xbc\x94\xbc\x1c\xe0\x8d\x49\x46\xf8\x45\x0d\x9c\x73\xab\x87\xb8\xa5\x86\x85\xe8\xb9\x47\xba\x67\x4f\xb5\x0d\xa5\x13\xea\xfa\x42\x8f\x45\xcb\xd7\x88\x84\x7f\x9e\x77\xe2\x2d\xbd\xc1\x59\xfd\x46\x7e\xda\x3d\x74\x68\xa8\x79\x9e\x29\x72\xe1\xbc\xb8\x2c\x5f\x2b\xf7\xe4\xc8\xcc\xa4\x9b\x7c\x2b\x1b\x57\x01\x11\x17\xe3\x26\x43\xa4\x8c\x91\xd0\xcf\x95\x66\xb7\xc5\x13\xc2\xb5\x87\x26\x63\xf4\x05\xad\x13\x19\xab\x19\xd7\x75\x22\xdd\x63\x76\xfa\x22\x17\xc4\x16\x2f\xa7\x8b\x32\xc7\x53\x58\x3f\x24\x33\xce\xfd\xbd\x87\x46\x29\x13\xe3\xcc\x40\x29\x6c\x52\x66\x68\x7d\x8d\xd9\x92\x96\xe3\x91\x79\x48\xb9\xfc\xd2\x9f\x88\x0a\xf6\xe6\xde\x6d\xdf\xef\x71\xed\xf3\x16\x9e\xda\xaf\x6d\x0d\xec\x78\x4c\x92\xc1\x10\xfa\x0f\xc8\xda\xb9\xfe\xfb\x04\x3e\xdc\xd1\x14\x06\x3e\x30\xed\xe9\xd2\xb2\xf6\x37\xa8\x9e\xce\xf6\x64\xa5\xde\x93\x8a\x0e\xbd\xe8\x32\x78\xa0\x01\xd1\x20\x06\xc3\x4f\xf7\xb7\x23\xb8\xdc\x25\x92\x66\x67\x43\x47\xf7\xe4\x0b\x3e\x32\xaf\x54\x71\x75\xb9\x3f\x85\xf8\xd4\x5c\x7a\xa9\x81\xb5\xff\xeb\xa3\x80\xaf\xb9\x44\x42\xa8\xb1\x1a\x99\xd0\xa3\x4b\xcb\x31\xdd\x60\x46\x5c\x55\xe6\x65\xd7\x62\x1f\x06\x05\x15\xb4\xd9\xaa\xb9\xd3\x0c\x0c\x7f\xe2\x52\x3f\x61\x18\xb5\xd5\x05\x53\x63\x39\x4e\x04\x61\x7b\x53\x79\x27\x36\xf3\xd2\x86\xe8\x30\xd8\xfd\x82\x5b\xd9\x92\x4d\xca\x0a\x34\xb5\x6f\xcd\xff\xaf\xf1\x19\x2b\x92\xfd\x2f\x39\xe8\x23\xdf\x79\x00\x1e\x27\x67\xbc\x74\x4e\xb8\x8a\x2e\x5d\xe3\xe0\x89\xab\xa6\xd5\x2e\xc8\xae\xdf\xf9\x40\x49\xef\xf0\xdb\x5c\x51\x4b\xcb\x74\x4e\x4b\xa5\x54\xe1\x46\x67\x6b\x12\xb3\xf3\xf3\x41\xd4\xfa\x21\x4f\xab\xdf\xfe\xbd\xdb\xde\x8b\xb6\x99\x0d\x42\xff\x0d\x92\xc6\x6e\xd0\x8e\x24\x00\xdd\x2d\x11\xde\x37\x76\x82\xe0\xfd\x4f\x1f\x4d\x55\x9a\xbe\xc9\xb2\xd2\xdc\xb5\x34\x3c\x9c\x8b\x63\x23\xf6\x15\x1b\x26\x1c\xe8\x0f\x57\x79\x02\xf3\x62\xb9\xf7\xf9\xd6\x1a\xf9\x0a\xa7\xeb\x9c\xed\x7b\xd5\xeb\xd3\x4d\x82\xfb\x46\x13\x62\xc4\x45\x86\x64\xed\x44\xbf\x72\x32\x93\x29\xa8\x99\x1b\x60\x7c\x00\xf4\x00\xd8\x94\x7d\x61\x14\xfc\x59\x09\xc5\xd7\x37\x16\xc4\x8e\x6f\x7d\xc5\xaa\x55\xe6\xde\xc3\xa6\x8e\xe3\xf3\xa5\x4d\x99\x6d\xe1\xe0\xd8\xf3\xf5\x74\xd6\xbb\xcb\xb0\x0e\xee\x36\xf1\xb6\x61\x96\x54\xdf\xb9\x08\x90\x94\xf8\x29\x4a\xbb\xd3\x41\xb7\xe2\xeb\xa3\x5e\x5e\x99\xd7\xc0\x55\x86\x0a\xd2\xa0\xe3\xf1\xdc\x1f\x1e\xf5\x6e\x8b\xcc\xd1\x76\x2d\xac\x2b\x7f\x88\xaf\x84\xb6\xad\xc5\xaa\x08\x32\x53\xf1\xe9\x44\x96\xd9\x68\x3c\xe9\x8b\x98\x9c\xde\x44\xa9\x18\x97\x74\xac\x08\x73\x70\xdf\xcd\xa1\x77\xb8\xf9\xc9\xdc\xd7\xde\x5d\x2f\xcb\x4a\x6f\xf3\x94\xca\x42\xbd\x17\xcc\x22\x0d\x43\xef\xa3\xa9\x80\xc1\x43\x08\xfd\x23\xb8\x03\xc6\x78\xfe\x4a\x2f\xf7\xe9\xb0\x73\x2c\x48\x50\xc2\x2c\x48\xf0\x30\xc9\x50\xa1\x97\x86\x4e\xea\x7e\xce\x5a\x38\x13\x6b\x07\xcc\x6a\xc1\x95\x38\xa2\xb4\x9b\xde\x88\xe4\x35\x9c\xae\x1f\xa5\xb2\x73\xfd\x22\x92\x3a\x45\x94\xad\xf3\x71\x99\xd9\xe8\x01\x10\x79\xbd\xe9\x43\xe3\x5d\x91\x25\x5b\x30\x43\xa5\xae\x5c\xf8\x62\xe2\x37\x18\xaf\x7b\x40\x76\x37\x12\x38\x3b\x12\x18\x99\x5f\xe8\xf7\x9a\x4f\x67\x86\x34\x72\xfe\x78\x46\x01\xc2\xb0\x93\x29\xad\xf0\xa5\xd1\x9f\x6e\x63\xaa\x32\x7a\xe9\x5f\xfa\x55\xf5\x16\x99\x1c\x41\xe7\x55\xca\xdc\x59\x6f\x41\x23\xf3\xc8\xfa\x9e\x7f\x46\x58\x4a\xeb\xe2\x69\xa8\xf6\x8d\xb4\xa9\x41\x3c\xa1\x22\xc6\xba\xa5\xcc\xeb\xc9\x79\xd7\x15\xce\x0f\xf4\xb2\x3c\xbf\xf1\x58\x62\xbb\x65\x93\x58\x4c\x41\x94\x68\x4e\x0b\xb3\xe9\xc0\xaa\x7f\xf8\xa5\x5e\x61\x10\x2f\xa1\xd5\x82\x5e\x50\xce\x17\x03\x53\x33\x89\x8e\x8e\x64\xa9\xce\xe0\x5b\x85\x8a\xa1\x69\xdb\x96\xdb\x72\x8c\xcf\x3f\xf4\xf4\x88\xb8\xd1\xee\x56\x56\x9c\xee\x85\xa7\xa2\x2a\x05\x5f\xce\xdc\x0e\xef\x04\x2d\x92\x4f\x08\x86\xd0\xb7\x73\x3d\x55\x8d\xec\xa0\xfe\x4c\x42\x37\x36\xc3\x67\x10\x12\x89\x25\xd1\x91\xa9\x86\x15\x9a\xb3\x4e\x44\xb4\xff\xec\x69\xfd\xcc\x86\x2e\x45\xfc\x6f\x3c\x92\x33\x36\xd1\x2a\x05\x59\x8d\x19\x3f\x4e\x9b\xf9\x02\x6f\xcf\x9f\x09\xca\x0c\x2d\xfc\xd9\x52\xb5\x36\xb7\x39\x8f\x84\x69\xb6\xd9\x14\x10\x1d\x45\xce\xcd\x1b\xcb\x18\xea\x52\x9e\x55\x46\x37\xef\x9a\xc3\x06\x17\xed\xf3\x4a\xf5\x47\x09\xfa\x4a\x8b\x72\x0d\xf8\x8d\x14\xcf\xce\x06\x5f\x2e\x06\x48\x4d\x11\x6a\xbc\xff\x46\x63\x79\xca\xf8\xfe\xe8\xbd\x1a\x9a\x6e\xcb\x71\x1e\x7d\x6a\xfe\xca\xca\x90\x1a\x36\x9c\xc5\xc1\x31\x20\xbb\x97\x2d\x50\x4f\x73\x47\x86\x5c\xf8\x01\x60\xb2\x73\x2d\x55\x74\xf7\xd0\x4a\x13\x21\x67\xf2\x76\x65\x0e\x0e\x4e\x07\xb6\x24\xc9\x89\x67\x25\x65\xf1\x02\x6e\xf0\xd2\xb4\x09\x29\x4b\xec\x9b\xa4\x22\xcf\xfa\xbd\xc7\xb0\x49\x59\xdf\x4d\xe2\xae\xdf\x62\x16\xbf\x24\x93\x37\x56\x1d\x71\x7f\xf2\x7d\x03\xf8\x8d\x43\xbe\x16\x9b\xf9\xf7\xce\x5d\x9b\x1c\x5e\x8d\xff\x00\xd8\xfc\xa2\x39\x7c\x31\x65\xf3\x7c\x44\x8f\x42\x7e\x40\xd5\x80\xe1\x5d\x3c\x57\x7d\xc5\x8a\xbb\x2c\x56\x94\x27\x87\xc4\x8b\x17\xe3\x39\x6f\x70\x01\xa4\x0c\xb6\xee\x70\x05\x34\xd2\x5a\x58\xdf\x33\x66\x5e\xc6\x77\x67\x7d\x30\x5b\x14\x84\xa8\x36\x68\x6f\x8f\x7b\x31\x65\xcf\x4b\x25\xf0\xfd\x15\xac\xce\x69\xd2\xa2\xed\x66\x23\x24\xa6\x75\x31\xeb\x35\x16\xef\x6e\x83\x60\xd7\x80\x84\x1d\x28\x6e\x6c\xc1\x14\xae\x1f\x12\xdc\x9d\xfe\x25\xd1\x01\xfb\x3b\xed\x6f\x46\x86\xb1\x49\x30\x8d\x25\xb2\xa5\xc7\x35\x51\xbf\x9d\xf3\x9e\x32\x51\x25\x86\xc5\x7a\xe7\xa9\xff\x2a\xf9\xa4\xf5\x1a\x85\x24\xaf\x9b\x60\xd7\xc2\xbd\xac\x91\x87\x01\x53\x8c\xea\x64\xfa\x86\x1f\x19\x25\xb7\x24\x6b\xe9\x87\x03\x34\xad\x9f\x6f\x26\x74\x43\xdf\x62\x89\x5f\x2f\xc8\x3d\x00\x38\x0f\x40\xa0\xc3\x32\x4b\xaa\xfb\x78\x26\xbe\x32\xa1\x8c\x64\x24\x70\x00\xee\x27\xc2\x31\xe3\x58\xe0\xee\xf5\x72\xb8\x1c\xd4\xab\x95\x7e\x82\xd2\xa9\x88\x16\x6e\xe5\x29\x85\xb0\x4d\x50\x0e\x53\xad\x5f\xee\xf9\x73\xf6\x37\xd4\x21\x0c\xc7\x1b\x3e\x36\x4e\xeb\x71\x48\x3d\x16\x20\xf2\x47\x94\xf8\x7f\x84\x3e\x9d\x17\x63\xbb\xa1\x4f\xa6\x4e\x19\x4d\x0c\xc7\x52\x60\xd8\x3d\x84\x3c\xde\x45\xd5\xac\xdf\x78\x4a\x36\xcc\x57\xae\x3c\x00\xfb\x5f\x9f\xc9\xf0\x61\x97\xd5\x39\x44\x88\x3f\x6e\x2d\x8f\x11\x1f\xd0\x35\x92\x67\xe0\xba\xe2\x26\xbb\x1c\x70\x1a\x84\xbf\xd3\xdd\xcf\x66\x58\xd5\xea\xc1\x23\x77\x3b\xa8\x79\xb2\x8b\xec\x77\x6c\x71\x1d\xeb\x7c\x5c\x55\x69\x6c\x4a\xf8\x4b\x96\xf5\xad\xe6\x40\xf7\x80\x84\xc7\xed\x1e\x68\x59\x76\x28\x3f\x8d\x64\x04\x7f\x66\x0f\x60\x8e\x44\xaa\xc6\x50\x2b\x2f\xc1\x2c\x2b\xf4\xab\x3e\x38\xaa\xa3\x9b\x05\x95\x30\x83\x67\x4f\xb8\x16\x0f\x43\x50\x45\x56\x0b\x46\x64\x4e\x24\xe8\xe6\x09\xaf\x9f\x3b\xc5\x0e\x66\x2f\x3f\x82\xd0\x3b\x5e\xff\xb9\x65\x73\xd1\xd9\x7f\xae\x3f\x8f\xa9\x72\xf9\x2a\x70\x98\x31\x40\x86\x48\xcd\xf6\xa7\xa4\x54\xb1\x5c\x89\x4e\x3f\x86\x31\xe7\x40\x9e\x36\x7d\xf2\xc6\x03\x40\x50\x52\x57\x87\x0c\x19\xaf\x1d\x11\x94\xf4\x9e\x04\xb5\x76\x8e\xe1\x9c\x0f\x4b\xb5\x6a\x4f\xba\x53\x9e\xdc\x29\xe6\xe2\xf5\x16\xfd\x4b\x90\x75\x5a\x15\x42\x48\x1a\x71\x3c\xbf\xc4\x73\x62\xad\x9f\xab\x79\x2a\x46\x7c\x7a\x7b\x58\x93\x1f\x20\xb9\xd6\xc3\x80\xb7\x31\xcd\x2a\xb2\xd8\x36\xf0\x00\xbc\x63\x55\x4c\x7f\xd9\x6a\x65\x14\x60\x79\xb5\x50\xc0\x89\x61\xc0\xbe\x99\x25\x07\x78\xfe\xe9\x8f\x52\xad\x87\x3a\x3f\x5e\x69\x1c\xcd\x72\xfa\x82\x41\x0a\xdd\x95\x02\xa3\xe6\x3e\x7c\x16\x99\x1e\x2f\x50\x01\xd9\x59\x6d\x7c\xf9\x46\xde\x05\x78\x01\x12\xda\xca\xf0\x1b\x7e\xcf\xf5\x9b\x6d\xfe\xab\x0c\x6d\xe8\x87\x92\x92\xbc\xcb\xaa\x47\xeb\xb3\xcd\xde\x43\x9b\x16\x7c\x55\x93\x68\x74\x52\xed\x32\x9c\xc0\x05\xe7\xbf\x0d\xb9\x4b\xed\xed\xf3\x7e\x34\x7a\xee\x3a\xd1\x2a\x0a\x8c\x79\xab\x61\xcc\x6a\xea\xf3\xbc\x58\x52\xfb\xac\x6c\xc7\x39\x14\x96\x07\x16\x3a\x5c\x1a\x12\xba\x51\xb2\x3f\x2e\xd2\xc9\x8d\x50\x96\x68\x84\x60\x02\x3a\xf9\x65\xd6\x8b\x95\x29\x95\x40\xfa\xc0\x8e\x18\x5c\x6a\x72\xa7\x6a\xf2\x3f\xdd\xfb\x11\x51\xa0\xb6\xa1\x93\x4a\x45\x03\x55\x5f\x59\xd3\x92\x82\xfc\x9a\x84\x97\x7c\x44\xea\x6c\x1d\x70\x74\xc3\x0c\x24\x18\x3f\xf2\xcf\x08\x77\xf9\x98\x6b\xc5\xf5\x3d\x17\x79\x36\x75\x65\xa4\xf4\x86\x24\x29\xc7\x48\x6c\xf0\x49\xbb\x60\xd7\x54\x9b\xdf\xe3\x1a\x6d\x31\x13\xd2\x13\xc1\xfd\x3f\xe3\x80\x6b\xdd\x3b\x39\x80\x09\x3d\x25\xda\x22\x12\x78\x7b\x56\xf7\x17\xf5\x16\x8e\xfe\x8f\x78\x9e\x36\x4f\xa3\x69\xfa\xb3\xba\xec\x88\x8b\xaa\x17\x1c\x28\xde\xcb\xb7\xd6\x3a\x72\x65\x23\x7d\x2b\xdb\xef\x83\x25\xdf\x1f\xb3\x63\xfd\xe6\x3c\xde\x3f\x0a\x86\xd0\x8a\x74\x97\x07\x3e\xcd\x70\x23\xcd\x94\x4f\x22\x8e\x6a\xab\x61\x88\xa8\xd6\x03\x33\x57\x42\x15\x7a\x08\xde\xe8\xdb\x52\x87\xa6\xb1\x7c\xfe\xf8\x42\x53\x8a\xcf\x29\x7a\xa1\x65\xc0\x39\xe0\x7a\x12\xb4\x97\x9f\x44\x99\x8b\x99\x1f\x19\xeb\x6e\x16\xf2\x8b\xb8\x15\x2d\xbe\xa0\x1d\xd0\x9e\x15\x96\x50\x11\x58\x29\x6e\x49\x63\x96\xa3\x62\x49\x5f\xaf\xee\xe0\xb3\x4e\x98\xe0\xa9\x3b\xc4\x6b\x3d\x0c\x5a\x7a\x21\x0f\x96\x59\x38\xab\x16\x9f\xc3\x58\x65\x41\x56\x9e\xd1\x33\xcd\x9a\xd5\xd4\xcb\x3f\x15\x76\x7f\x77\xb2\x9b\x90\x9d\x55\x5e\xf3\x03\xc9\x10\xec\x23\xf4\x78\x95\x81\x77\x0c\xc6\x8b\xef\x1d\x31\xe8\xdc\xa5\x86\xd1\x68\xc4\x8a\xdc\xa9\xd8\xae\x6b\xa7\xaa\x80\xcb\xb8\x2e\x93\x1b\xf8\xca\x0e\xcb\x94\xc0\xdf\xc4\xf5\xf8\xb1\xb4\xa7\x15\x2e\x48\x2a\xbe\xe6\x63\xca\x8f\x64\xa5\xa2\x6b\x66\xbe\xd6\x80\x6f\x32\x1b\xa5\x52\x6b\x25\xf8\x3b\x7e\x43\x53\xc2\x60\xe0\x62\x80\xb8\xfc\xd1\xdd\xcf\x85\xc2\xfa\x6a\xeb\xd2\x63\x36\x66\x78\x0a\x65\x0e\x36\x98\xc7\x96\xf6\x07\xfc\xb3\x00\x03\x71\x85\x20\x1f\x56\xfa\x9b\xc6\xa8\x31\x82\xa6\xab\x69\x8a\x8f\x6b\xc7\xd7\xf7\xe4\xe6\x92\x16\x0b\x66\xb2\x1b\x77\x84\xc7\x48\x72\x05\xd8\xf6\x95\x62\xf3\xd1\xa9\xe9\x59\xa5\x14\xf3\x46\x55\x94\x29\x8b\xc7\xa3\xbe\xcb\x54\xc8\xee\x44\xf3\xc7\x5d\x99\x97\x5d\x55\x23\x12\x3a\xf9\x06\x9c\x68\x67\x64\x68\xa7\x97\x31\xb7\xc2\xe5\xc3\xf6\xd9\x4f\x5a\x6a\x62\x09\xde\x3e\x27\xfc\x18\x9e\xaa\x2e\x7a\x68\x68\x19\xd2\xc1\x61\x75\x49\xad\x14\x79\x8d\x34\x69\x8a\x78\x91\x6c\x9a\x38\x48\xd7\xb4\x3b\x43\x59\xfd\x6a\x9e\x27\x3f\xfd\x57\xaf\x29\xe5\x2d\xd7\x58\xbd\x03\x16\x54\xdd\x9d\x42\x64\x7a\xa9\xfb\x99\xcb\x67\x26\x65\xe4\xfe\x7c\x80\xa8\x04\xcf\xb3\x0f\x74\x3e\xb2\xb3\x0e\x4f\xda\x5b\x23\x47\x9d\x70\x18\x59\x9e\x4b\x61\x79\xe1\x9e\x1f\x51\x6c\x14\x07\x5a\xdb\x44\x09\x27\x2e\x37\xaa\x2f\x50\x39\xab\x56\x0b\x07\x16\xd8\x64\x53\x20\x56\x87\x2a\x8c\xb4\x78\x53\x00\x7c\x7b\x99\x58\xa9\x72\x7b\x78\xbf\x1f\x63\x13\x5a\x9d\x2f\xce\x56\x48\xa8\xe6\x8e\x84\xb3\x74\x1a\x19\x9a\xed\x80\x97\x4a\x7b\x75\x30\xaf\xdd\x6f\x46\x45\xac\x31\x22\x1e\xcd\x17\xb1\xbb\xf5\xd0\xb5\xe0\x7a\x51\xed\xbe\xe7\xe8\x62\x06\xd8\x3f\x07\xd4\xb2\x73\x63\x0b\x63\xc5\x77\xa7\xdb\xe9\x2f\x15\x91\x39\xe1\x76\xba\xc2\x34\x87\xde\x94\x13\xe0\x64\xd2\x44\x4a\xe3\x5d\xc9\x9b\x85\x98\x35\x2b\x8e\x7c\x54\xba\xbe\x28\x6f\x92\x5b\xd3\x29\x96\xb2\xa3\x02\x0b\x2d\xd1\x36\x84\x3e\x15\xde\x49\x65\xfd\x6c\xbe\xc5\xb7\x6e\x9f\xe5\x62\x01\xfb\x18\xc0\x70\x1b\x40\x93\xba\x4f\x36\x1d\x7c\xbe\x40\x44\xd0\x90\xf7\x49\x93\x36\xbf\x33\x8d\x8d\xf3\x33\xc9\x9e\x80\x8c\xf8\xae\x64\x27\x8e\x21\xea\x99\x77\xca\x0d\xe9\x01\x77\x0c\xe3\x1a\xe3\x5a\xe7\x12\x1b\xf3\x62\xd1\xac\x34\xa3\xb5\xb6\x34\xf6\x8f\x20\xe5\x66\xbf\xd9\x56\xad\x57\x6f\x89\x18\xd4\x64\xf7\x21\x74\x25\xa1\x7e\x0c\x8b\x07\x24\x4b\x07\xe9\xe3\xdb\x13\x45\x2e\x4f\xca\x37\x2d\xa5\xf5\xb2\xdb\x78\x51\x0b\x79\x8b\x7b\xf3\xcf\xad\x1e\xd3\x58\x15\x30\xfc\x66\x24\xdf\xbe\x66\xe8\x97\x22\xed\x55\x6e\xf8\x11\x7c\xd4\x98\x8a\x47\x1d\x50\x46\xaf\xdb\x3c\xf8\x3e\x50\x7d\xc5\xc7\xa0\x2d\xd1\x35\xee\xed\xe4\x33\xd6\x65\x08\x4d\x06\x5b\x89\x24\x3b\x73\x5c\x25\xe0\x55\x92\x40\xca\x86\x17\x18\xed\x5a\xfd\x14\x95\x6b\x57\x71\x7e\x47\xea\xea\x78\x29\x40\x1a\xf4\x88\xfe\xae\x97\x39\xe1\x14\xdf\x2d\xcf\x47\x0e\x89\xa7\x97\xb2\x8a\x2d\x84\x34\x66\x65\xf3\x19\xa0\x0d\x68\xa2\x3d\x79\x4b\x24\x9d\x39\xd7\xfe\x68\xe3\x4d\xad\xcd\xda\x62\x07\xcb\x2c\xeb\xac\xbd\xec\x98\x2d\x33\x29\xf1\x1d\xf4\x0e\xc8\x25\x52\x99\xfe\x95\xde\x43\xba\xf2\x1a\x7f\xdd\xb4\xde\xb0\x74\x23\xc2\x24\xc2\xd4\x08\x3d\x1a\x37\x31\x80\xa9\xa5\x29\x76\x7e\x5e\x77\xdb\x38\x61\xa0\x28\x2d\xce\x98\x6b\x77\x29\x6a\x66\x33\x8e\x02\x56\xfa\xe3\xd1\xcd\x34\x63\x74\xd5\xa4\x06\x3e\xa1\xe2\xee\x02\x72\xb3\x9d\x68\x33\x27\x92\x75\xaa\xae\xa9\x92\x87\x15\x4f\xaa\x97\x78\x34\xc0\xf9\xab\x18\xed\x19\xec\x35\x0c\x65\x6d\x8c\x3b\xf2\x87\x34\x7c\x08\x3f\x87\x7d\xcf\x9f\xc8\x14\x42\x57\x1d\x7a\x36\x30\xf3\xfb\x49\xcc\xaf\x8c\x6d\x8c\xe3\x8f\x7d\x0c\x03\x2d\x68\x6f\xe4\x70\x73\x09\xbf\x5c\x03\xec\xf9\x69\xcc\x5f\x0c\x02\x73\x8a\x00\xe9\x66\x18\x2d\x8c\x4c\x9a\x68\xb6\x6d\xd7\x4c\xe1\x73\x9e\xb9\x4a\x9f\x65\x6c\xd6\xf5\xfc\x03\x90\xde\x24\x79\x56\xf5\x68\xb3\x72\x59\x79\x7d\x5f\x73\x87\x7f\xc0\x4c\xed\xb8\x1d\x02\x73\xf0\x1f\x09\x78\x82\x72\x33\xbb\x58\xa5\xae\x27\x95\x8c\xde\x7a\x94\x26\xca\x62\x39\xd3\x48\x3e\x89\x4a\x92\xbb\x5f\x9b\xac\x72\x9d\xde\x14\x14\x3f\xc2\x97\x95\x50\xad\xb6\x81\x21\xfa\x22\xb0\xe2\x6c\x19\x32\x9a\x2a\x6c\x87\xa5\xa0\x55\xd1\x06\xaf\x0e\xa4\xfd\x87\x26\xc1\xd1\xbb\x7a\x28\x17\xa6\x99\xdd\x99\xdd\x39\xd7\x30\xcc\xf1\x3e\x76\x65\xc6\xc1\x15\xe6\xdb\xf3\x6f\x46\xd4\x51\x6f\x90\x39\xb1\xac\xad\x37\xf8\x5c\xe6\xb4\xd2\x7a\xcc\x4b\x70\x3f\xcf\xdd\x68\x33\xff\x10\xf7\x07\x80\xd4\x07\xc2\xed\xfa\xf5\x88\x67\xcc\xce\xcd\xef\xfe\x05\x97\x88\xa8\x94\x2a\xed\x8d\xfb\xe1\xac\xd6\x60\x80\x10\xbb\x50\x0c\x35\xfb\x9c\x46\xa7\x7a\x17\x7e\xe6\x29\x84\x64\x10\x01\xeb\x2d\x7d\x95\xf3\x6b\x32\xa6\xd3\x4d\x1e\x42\xbe\xeb\x4f\x5c\x57\x8d\xb5\x27\x80\x63\x3e\xb3\xe9\xb9\xc5\xda\xf6\x7d\xfc\x34\x07\x82\xf6\xc7\xe8\xd0\x45\xe0\x25\x48\x90\x18\xa0\x5d\x88\x8c\xd2\x77\xa0\x40\xfd\x5e\x1b\x22\xf9\x5d\xa1\x53\x68\x33\x3a\x77\x3a\x2c\x79\x3a\x74\x08\xa1\x65\x0b\x73\xc3\x33\x14\x31\x8c\xd3\x4c\xb2\x48\xdd\x0e\x6e\x98\x9e\xc7\xf2\x70\x3b\xa6\x8a\x9b\x6e\xed\x04\xba\xdd\xca\x51\x27\x0f\x80\x61\xfa\xbc\xce\xf4\x8b\xd5\x77\xd0\x86\x0d\x67\x3e\x31\x3a\xa7\x3f\x46\x09\x8f\xd3\x8a\x1e\x2f\xdb\xe5\xb2\x51\xb2\xe4\x56\xd2\x58\xd4\x87\x7d\xc6\x6e\x5a\x37\x25\x43\xab\xc8\x71\x7d\xff\x2d\x7d\xf5\x15\xf8\x99\xf8\x66\xe1\x8d\x01\xa3\x25\x74\x70\x3e\x80\x5b\xcb\xa8\xf1\x53\x63\x8a\x00\x44\xc9\xb0\x97\x29\x70\x8b\x64\x48\x58\xa8\xa5\xa8\xc5\xcc\x33\xaa\xc9\x1d\xf6\xba\x67\xee\x7c\x08\x1e\xd3\x61\xd2\x09\x94\xc2\x5e\x03\x57\x8d\x4a\x09\xae\x0e\x14\x5c\xe8\x65\x2e\x76\x65\x75\x66\xc8\x91\x9a\x41\x87\xc1\xe6\xea\x72\xa1\x32\x8c\x94\xd2\xf5\x5d\x4e\x02\x9f\x0c\xc9\x1c\x2b\x54\x32\x47\x72\xe8\x2f\x5e\x49\x58\x32\x94\xad\x94\xfc\x5c\x26\xcc\xec\x01\x80\xc4\xc9\xac\x90\xa1\x35\xff\x53\xa6\xc2\xf4\xfe\x29\xd7\x5f\xf8\x3d\x1e\xdb\x8d\x2b\xf8\x98\x6b\xc0\x8f\xfe\x00\x24\x8f\x0c\xcd\x2b\x5c\xfe\x7a\x62\xb6\x58\x28\x0d\x4f\xd8\xdf\x93\x49\xf6\xb6\x06\x55\x42\x79\xc3\xc9\xf6\x1f\x00\x92\x6a\xf3\xf4\x4d\xda\xc1\x27\x92\x1f\x5f\xf5\xf2\x49\x86\x60\x70\xc0\x9c\xae\xd4\xc0\xed\x1c\x23\xc1\xca\x9a\xae\x87\xc9\x6d\x33\xeb\x59\xd2\x87\xb9\x26\x5a\x7f\xe3\x98\x01\x55\x0e\x83\x22\xbc\x76\x1b\xde\xc1\xb4\xf2\xef\x99\xb0\xd5\xf8\xf1\x65\xcf\x06\xbd\xf6\xb9\x12\x50\x61\x34\x9d\xa1\xba\x41\x03\x2f\x5e\x57\xf8\x0c\x74\x1d\xc6\x36\xd3\xd7\xa1\xbd\xdc\x58\x69\xfc\x75\x36\xbf\x24\xde\xfc\x21\x3e\x57\x2d\xd7\x74\x7f\x0d\x29\xac\xbd\x79\x5c\x3a\xdf\x81\xe7\xad\x5e\x32\xd6\x96\x60\x0a\x00\x0a\x60\xc9\xdd\x92\xd7\xb3\x08\x82\xef\x2a\x4c\x16\xbf\xa8\x85\xc2\x76\x74\x26\x34\x9d\x06\xd0\x86\xe1\x91\xf0\x7b\x7e\x43\x65\xa7\x32\x6b\x2f\x8d\x77\xc7\xef\xd3\x44\x3f\xd1\xee\x82\x0e\xa7\x03\x84\xef\x49\xf6\x2f\xb5\xae\x5f\x1a\xac\xbc\x65\xf1\xfc\xce\x47\x86\x8f\x36\xf8\x6e\xbe\x5d\xa0\x39\x0e\x04\x31\x41\x6c\x7f\xfb\x82\xfb\x82\x10\x7c\x25\x3c\x33\x89\x26\xfb\x1f\xa6\x4b\x75\x06\x3d\x00\x29\x13\xfd\x2d\xaa\xda\xba\x62\xf8\x93\x46\x1e\xfe\x07\xd6\xeb\x1b\x17\xd4\x42\x39\x14\x9a\x37\x75\x94\x26\x58\x37\xd0\xee\x97\xbc\xc3\x40\xfd\x24\xc1\xa1\xae\x79\x9a\x7d\x45\xb7\x81\xf4\x00\xba\x7b\x52\xfd\x06\x31\xaf\xff\xb2\x61\xa8\xfb\x64\x50\xb5\x08\xb0\x7b\xb7\x56\x24\x44\xd0\x0e\xd6\x73\x03\xc8\xde\x29\xfd\x4b\xa3\x67\x19\x6b\xf5\xdf\xd6\xc4\x2d\x7d\x56\x95\x57\x17\xb8\x93\xad\x19\x2b\x4c\x65\xf1\x11\x20\x17\xab\xc6\x46\x75\x57\xaf\x18\x1e\xbc\xdb\xbb\x38\x69\x0a\xf6\x2a\x1f\x88\x94\x35\x5d\xde\x65\x8e\xeb\x9a\xc4\x1a\x8c\x96\xe6\xf9\x94\x71\x23\xd3\xcb\x43\xde\xb7\x9e\xc0\x8d\xe2\x66\xde\x9f\xf4\x98\xf0\x3a\xab\xa2\xb5\xa5\xe7\x9f\x55\x97\xf7\xfd\x78\xfb\x23\xae\xc9\x44\xed\xab\xf4\x16\x1a\x0a\xf7\xf0\x96\x07\x81\x50\xb6\xc3\x33\xec\x49\x78\xc1\xd7\x8d\x1e\xb0\x75\xf3\xfd\x01\x38\x5f\x28\xd1\xd9\x6b\xd0\xf3\x2d\x8d\xa4\x4c\x56\xd8\x9d\x60\x07\xed\xca\x60\x45\x8d\x33\x6f\x12\xd4\xae\x18\xd8\xf3\xb2\x8d\x8d\x85\x28\x27\x4a\x0d\xaa\x7a\x5d\xfb\xcd\x35\x42\x4a\x66\xb5\x63\x6f\xb5\xa6\xe1\x33\xd5\x75\xed\x5e\xab\x94\xdd\x41\xe6\xa4\xcd\x26\x5d\x30\x63\xdb\xd9\x33\x89\x9f\xc7\x67\x3f\x59\xe5\xb5\x08\x03\x10\xbe\xa5\x20\xbd\x48\xf6\x5c\xe0\xac\x70\x90\xb2\x28\x3f\x40\x52\x79\x13\x16\xfa\x24\xee\x7d\xfd\x1c\x9a\x61\x31\xc4\x40\x71\x90\xce\xf3\x70\x52\x5b\x77\xc3\x01\x7f\x8f\x5f\xfe\x99\xdd\xa7\x5c\x82\x27\xbb\x63\x03\x9b\xb2\x5b\xd1\xe9\x7b\xb7\x9a\x79\xfa\x87\x2d\xaf\x1a\x4e\x8d\x69\xcd\x44\xf2\xaa\xe9\x11\xc9\xf7\x75\xa9\x1e\x2d\xcf\xd3\x7c\xed\xb5\xa8\xb0\xaf\x9a\xcc\xa9\xba\xb9\x66\xd5\xc0\x8d\xbd\x76\xb6\x18\xde\x9a\xc4\x44\xb2\x8b\x79\x6d\x73\x9f\x84\x50\xaf\x52\x29\xf8\x5e\x75\x54\xad\x6b\xa3\x4b\x0a\x97\x8f\x33\x2b\x78\x56\x2e\x4b\x92\x1a\x53\x76\xb3\x90\x0f\xb1\x58\xd4\x99\x20\xb4\x22\x6c\x77\x94\xdc\x5f\x0d\xfd\x14\x4d\x0b\xa5\x58\xbb\xb5\x42\xdf\x5e\xe8\xc3\xf3\x67\x69\x48\x33\x75\xf1\xff\x59\xcb\xa1\x09\x2b\x56\xfc\xd6\xf3\x00\x0c\xe8\xd5\x0f\xf4\x85\xae\xa9\xd4\x33\xa7\x3a\x75\xa8\x76\x59\x44\xdc\xea\x6e\xf8\xa2\x63\x05\x71\x98\x3e\x15\x8c\x7b\xba\x22\xe0\xf2\xd3\xd8\x69\xdc\xc5\xa3\x93\xbc\xca\x72\xae\xa3\x3b\xcf\xaa\x76\x45\x7a\x1d\x94\xb9\x11\x56\x0d\x0a\xcc\xde\x09\x10\x61\x41\xf8\xe5\xb9\x57\xb4\x84\x36\xbb\x3c\x69\x54\xab\x18\x1d\x2c\x31\x78\xcf\x88\x90\x0e\xb6\xa6\x7c\x24\x31\x42\x86\x16\x51\xc2\xea\xd7\xc4\x46\x67\xfb\x58\x42\x35\xdc\x8f\xb1\xf9\x8b\x61\x65\x7d\x48\x79\xb4\x1d\xb7\x12\x3d\xdc\x7a\xc2\xaf\x38\xc7\x1c\x11\x79\x5e\x99\x4d\x73\xe4\xbc\x3d\xf9\x7d\xe8\x4d\x80\xa3\xcb\x84\x52\x2e\x41\x99\x70\x1c\xb6\x15\x71\xc2\x45\x94\xc1\x60\x4e\x32\xe1\x05\x9c\xd6\xe9\x9c\x21\xeb\xe3\xca\xad\x7a\x43\xb3\x7c\x18\xe4\xbb\x77\x79\x56\x89\x4d\x6d\xa3\xd1\x32\xe0\x72\xb5\x20\x6b\x82\x48\xea\x6d\x08\x15\x64\x6d\x5d\x26\xdb\xdf\x1d\xd2\xcf\x6e\x17\xd7\xd6\x2e\x41\x79\xa8\xcc\x68\xe0\xe9\x8b\x9a\x80\x6e\xc2\x31\x01\xe8\xef\xd4\x0f\x64\x6e\xb9\x18\x8f\x6b\x7e\xf5\x37\x26\x3c\x23\xae\xf9\x73\xcc\x15\x84\xa4\x08\x74\xb3\x25\xd0\xb4\x9c\xff\x63\xea\xfb\xd3\xfa\x29\xf7\x98\xd8\x1e\xd6\xc6\x07\x5d\x4f\x8e\xbb\x29\x5d\xf1\xc1\xb0\x4f\xe7\x6e\xe8\x56\x49\x8c\x76\x2b\x75\xa4\x0a\x25\xd3\x01\xd2\x86\x0d\x53\x92\x62\x0e\x9f\xa4\x7f\xf9\x59\x36\xa3\x5d\x5c\x71\x3e\xa7\x25\x14\xbf\x89\x1b\xf8\x66\xad\x6c\x82\x99\xbc\xec\xa1\xa7\x31\x2d\x2a\x16\xa4\xa9\xee\x4c\x04\x38\x45\xc7\x0d\xb6\xfb\x72\x58\x23\x76\x5f\x04\x89\xa9\x2b\x8b\x6e\x9d\xa6\x7e\x4a\x53\x13\x21\xca\xdd\xcc\x94\xa6\x41\x79\x71\xe4\x26\xe2\x91\x45\x0d\x33\x06\x7c\x0e\x50\xc8\xa3\x1b\x44\xa9\x81\xe9\x10\xb0\x9e\x86\xcb\xe7\xaa\x1e\xfe\xc5\x10\x83\x9c\x15\xc1\x01\x11\x4c\x49\x78\xc9\xeb\x73\x65\x3b\xce\xe9\xb9\x17\xfd\x0e\xd4\x68\x93\x9c\x01\x9c\xb6\xde\x3a\x95\x5f\x58\xf8\xbf\x31\x52\xa2\x29\xa0\x57\xa8\x61\x7c\xa4\x9c\xdd\x7a\xc6\xb1\x8c\x0e\xf6\x72\xca\x0f\xc0\xad\x2c\x35\x52\x28\xf9\x39\xea\xc6\xff\x44\xf4\xcb\x0f\x63\xb3\x75\xcd\xf4\x93\xb8\xc8\x55\xb6\x61\x15\xf4\xa9\xc0\xe4\xf0\x44\x47\x9d\x52\xae\x09\x2c\x85\x26\xd8\x06\x84\x56\x6a\xe5\x1a\x3a\x3a\xe0\x7c\xe0\x8c\x13\xed\x54\x5b\x81\x8b\x7d\x05\x81\x61\x58\x9e\x8f\x7b\x37\x84\x99\xd0\xb5\xa7\x8b\x0f\x90\xa7\xc9\xc3\x97\xef\x54\x1c\x3b\xb0\x10\x7d\xcf\x4f\x8b\x46\xf4\xda\x9c\xec\x86\x96\xe1\x65\x67\x80\x23\xd7\x2c\x33\xa4\x3c\x76\x16\xd8\xe8\x2a\xca\x8f\x04\x5e\x38\x0a\x1a\x79\xc3\x89\xc2\x47\x37\xee\x5e\x4b\x50\x56\xe2\x4f\x2b\x62\x0f\xfb\xe6\x3a\xe5\xec\x1b\x7d\x5e\x73\x5d\x88\x38\x48\xe9\x5c\x92\x21\xc3\x87\x12\xd1\x35\xf1\x26\x3a\x83\x5c\x1f\x00\xb1\x5c\x7c\xae\x23\xef\xc1\x1e\xeb\x2a\x73\xdd\x90\xb6\x60\xfe\x6f\x58\xd2\xed\x5f\x90\xb3\x1e\x47\x06\x1d\x65\xde\xf0\x18\x8b\x01\x5b\x79\x8b\x74\x0a\x87\x2c\x05\xa4\xd3\x4c\xb6\x82\x1f\xd7\x7e\x94\xdd\x13\x70\xe8\xf3\x14\x61\x36\xda\x60\x75\x82\xc7\xb3\x32\xa3\xf8\xa6\xd2\x41\x01\xd2\x56\x3f\xfc\x19\x7e\x2e\x15\xbe\xab\x80\x93\xe0\xdb\x1b\x78\xfa\xad\xde\xfa\xda\x7e\xe4\xf1\x18\x9c\x32\x60\xc6\x66\x83\x6e\x19\x56\x55\x15\xb0\x3b\x7a\xc2\xfc\x6d\xae\x89\xf7\x53\x76\xef\x75\x9f\x61\x1f\x46\xca\x16\x77\x37\xd2\x50\xc4\x66\xaa\x81\x47\x28\xbc\xe2\x22\x84\x65\xc8\xf5\x7b\xfd\x2c\xbc\xbf\x46\xf0\x07\x7d\x1d\x6c\x22\x3f\x1b\x0c\x35\x69\x09\x7b\x1d\xf0\x1a\xdb\x38\x20\x5e\x55\xb8\x6b\xdc\x9c\xe8\xf6\x59\x6d\x62\x5c\x32\x0f\x9a\x6c\x63\x90\x5f\xf3\x35\xd2\xa8\x15\xc3\x58\x3e\x0f\x02\xa8\x81\x99\xe1\x47\xaf\x77\x06\x7b\x29\x6a\xbb\x36\x58\x74\x60\xc2\x9b\x2d\xcf\xc3\xe0\x0a\x53\x3c\x85\x33\x6f\x9c\x98\xfc\x05\xa5\x70\x0e\xe7\xdb\x95\xe1\xdc\x89\x4b\x50\x71\xad\xcf\x96\xcf\xf2\xbe\x3b\x7a\x5d\xdc\x71\x3e\x00\xbd\xed\x8d\x46\x64\x3f\x12\xe2\x83\xb4\x59\x44\x0c\x26\xc1\x59\x0f\x80\xa9\x8f\xb2\xb7\xf1\x89\xa1\x5c\x2a\x68\x1b\x94\x70\xce\xbc\x7f\x3d\x27\xf0\x00\x90\x70\xef\xe8\x4c\xa4\xba\x71\x17\xc4\x1c\x74\xe5\xd1\x81\xfd\x07\x3a\xc2\x15\x99\x07\xd0\xa3\xdf\xdf\x8f\xd3\x03\x8b\xa2\xb9\x44\x38\x3f\x3a\x51\x5f\xa6\x28\xb7\x11\x67\xac\x69\x50\x9e\xa7\x2b\x9d\x46\x36\x5b\x22\x39\x24\x1f\xa3\x59\x16\x5f\x29\x34\x68\x41\x00\xf8\x8c\xcc\x7c\x7b\x8d\xb1\xdc\x3d\xc9\xdb\x93\x99\x9b\x82\x93\x5c\x22\x9c\xe6\xb9\x36\x17\x9b\x1b\x7d\x88\xb5\xec\xe1\xf6\xf0\x80\x8b\xc1\x7d\xfb\xe6\xb8\xf9\x66\x22\xcd\x38\xd6\x09\x07\x2e\x9f\xbc\x95\x3e\x9d\xd8\x30\x2d\xf5\xf5\xbb\xdc\x98\x30\xf6\xce\x64\x73\x1b\x2f\x1f\x22\xd0\x9f\x70\x81\x23\x96\x38\x1b\xe0\x8a\x73\x72\x4d\x61\x93\x46\xe5\xf5\x2a\x69\xec\x10\x0b\x6b\xed\x68\xf6\x57\xb1\xfd\xe9\xf6\x9c\xde\x9c\x47\x89\xab\xfc\x58\xe5\x56\xf3\x13\xed\x86\x6f\xcf\xa5\xe1\xe4\xca\xdd\x35\xfb\x8b\x73\xab\x25\x18\x8e\x71\x8c\x2a\x21\x4a\x64\x8f\x86\xb6\xb4\xb5\x3d\x10\x70\xb9\xa6\xb8\x31\x7d\x21\x6d\x8c\x78\xb5\xe4\xdd\x85\x48\xe0\xb0\x0e\x46\xfc\xeb\xe0\xf1\xa8\x90\x08\xf6\xde\x5b\x01\xa2\xab\xfe\x4f\x05\x61\x06\xc1\xe9\x27\xba\x3e\x4c\x9e\x05\x4b\x75\xe9\x76\xb3\x85\x89\x84\xbd\xb1\x7e\xc5\xad\x39\x38\x07\x02\x2b\xfb\x43\x8d\x78\x11\x5f\x4c\x4a\x41\x05\xff\xc8\x16\xcc\xc2\xdb\x0c\x8f\xcf\xc2\xf8\x17\x6d\xe2\x5f\x54\x0a\xd9\xd5\x14\x32\x45\x80\x82\xc4\xdd\xc7\xbd\xda\x9d\x65\x48\x2a\xd3\x77\x7b\x44\x2c\x44\x2f\xdb\x20\x8a\x14\x8c\xae\xd2\x70\xf0\x3e\xe4\xb1\x24\x4e\xa9\xbf\x15\x4a\x6f\xc2\x48\xf0\x3b\xa1\x54\x79\x71\x35\x0f\x4a\xee\x5b\xe8\x8c\xd9\x4c\x66\xce\xf3\xa7\xc3\x98\x4e\x75\xf4\x7d\xee\xd2\x73\x07\x7f\x57\x05\xd3\x96\x82\x2b\x6e\xa7\xf6\x52\x7c\x94\x80\xee\x5e\x39\xbf\x1b\xa6\x25\x84\xd3\x26\xa1\x22\xf7\x6c\xea\x8f\xf2\x8d\x16\x95\xec\xd7\xc9\x1d\x65\x87\x26\xd8\x41\x89\x28\xff\xd2\xa8\x6a\xc2\x9e\xcd\xe5\x9e\x66\x46\xc6\x8f\x10\x60\xdd\x54\x72\xb3\xa9\x33\x7c\xd5\xa2\x06\x1e\x45\xa3\xc3\xec\x71\xc3\x08\x79\x8d\x25\xa1\x4c\x9b\xb4\x27\x5a\x49\x59\x29\xf9\x61\x83\xa6\xac\xf2\x77\x05\x56\x81\x05\xec\x4b\xfc\x98\x73\x6e\xce\x1b\x27\x15\xc4\x42\x70\xbd\x44\xbb\x9f\xdd\x7b\xfd\x46\x7f\xb1\xac\xda\x55\x4f\x5c\x4f\x18\x5e\x34\x3c\xd3\x38\x7b\x16\x6d\x9f\x9a\x3c\xbe\x66\x3a\x37\xc0\x55\x03\xd0\xca\x12\x10\xfa\x19\xa8\x00\xe1\x38\xfb\x0f\xb5\xc8\xd4\xbc\xde\xc9\x01\xd0\x3f\x83\x18\xc4\xbd\xc5\x86\x64\xc9\x43\xf1\x01\xe4\xf7\x46\x62\x5b\xda\xde\xeb\x19\xf5\xad\x88\xb9\xcc\x91\x26\x02\x4a\x51\xe1\xe1\x5b\xc7\x99\x9d\x66\xc4\x17\x6d\x35\xae\x24\x87\x67\x3a\x25\xe6\xcc\x49\xf7\xbe\x36\x97\x3d\x76\x4a\xbc\x6d\xcc\x9f\xb0\xd6\x3f\xd2\x10\xc2\x93\x06\x2b\x01\x2f\xba\xa7\x9e\xfd\x7f\x53\x89\x2e\x1c\x14\x02\x4a\x16\xe3\x03\x14\x24\xa7\xa7\xfe\x51\x4e\xa4\xff\x5f\x0b\xa4\x70\x8d\xb7\xd9\xad\xdb\xae\x68\xab\xc7\x69\xcc\x8c\xd1\xfb\xbc\xa1\xa4\xa2\x60\x41\x9b\x45\x33\x4a\x92\x03\xa0\xbf\xfd\xa4\xe7\x7f\x17\x47\x4e\x18\x92\xf7\x85\xcb\x78\x69\x98\xf9\x85\xc5\x0d\x7c\x1b\x86\xfb\x93\xd9\xbc\xdd\x5c\xe5\xb7\x69\x6d\x58\x87\x4c\xf4\x66\xb7\x13\x9d\x54\x9b\xa4\xbe\xa9\x4d\x51\xe5\x3f\x2a\x10\x20\xda\x5c\x14\x7c\x61\x3d\x3f\x65\x3a\x1a\x42\xb1\x97\xab\x06\x0e\x39\xb8\xa7\x59\xb8\xb5\xa3\x2d\xbd\x14\x0c\x4f\x80\xda\xc6\xcb\xc3\x0f\xc8\x1d\x05\xa4\x0e\x4d\x37\x44\xc2\x2d\x82\x36\x1d\x08\xd7\x9c\x9c\x6c\x4f\xaa\xcc\xd7\xe2\x45\xcf\xab\x3f\xde\x48\x1a\x3b\xe6\x6a\x87\xa3\xe0\x2f\xdb\x11\x1e\xd1\x4c\x48\xac\x38\xba\xd1\x97\xce\x4a\x4d\x24\xf2\x54\xda\x87\x91\xc0\x25\x99\x5d\x17\xc9\xdb\x2a\xdb\x1e\x69\x96\xb0\x3e\xf1\x37\x1e\xfc\xdb\xfa\xc7\x2d\x22\x98\xfa\xd3\x2d\x7f\x67\x1c\xd8\xb2\x1b\xcb\x52\x81\x4b\xab\x69\x91\x58\xc1\x65\x56\xd2\xbc\xa9\x9a\x53\xae\xeb\x93\x09\xa9\x06\x26\x7c\x9e\x12\xf2\x5e\x3b\xed\x29\xe9\xef\x54\xd5\x08\x00\xa8\x4a\x1f\x03\x49\xfd\xcd\x57\xb3\x10\xcc\x42\x82\xcb\xf8\x1a\x39\x10\xa2\xd7\xfd\xce\x56\xed\x96\x63\x5e\x58\x43\xf5\x48\xca\xa9\xcb\xc0\xa7\x86\x2b\x61\xe9\x66\xcc\x97\xeb\xe7\x67\x9b\xa6\x9e\xc0\x48\x03\x34\x08\x2d\x66\x58\x8f\x2a\x81\x5e\xc3\xfe\xa7\x90\x5e\xa7\x24\x8e\x21\xd1\x8b\x7d\x43\xb7\xd8\xb0\x92\xfd\xa9\x0a\xf7\x86\xf8\x9e\x48\x3e\x0c\x2b\x4c\xeb\x77\x91\x80\x71\x0c\xd0\x45\x59\xb2\x19\xc9\x0e\x1c\xfd\x6b\x41\x8c\x4e\x2d\xfe\x6f\xff\x4a\xd3\xbb\xb5\xa9\xe2\x68\xd5\x3a\xf3\x09\xe3\xf0\xd3\x00\x0e\x68\xb0\x6e\xd8\xcb\xa9\x63\x87\xed\xad\x57\x69\x78\xd9\x25\xdf\x6f\x0f\x07\x84\xa4\xe8\xff\x0c\xd0\xf3\x66\x68\x74\x28\x51\x72\x9c\x3e\x96\x13\x55\xf3\xc6\x64\x16\x03\x2d\x2c\x66\x6c\x12\x58\xec\x0e\x2e\x2e\x27\xe8\x2b\xd7\x4e\xff\x0a\xfa\x44\xc5\x96\x34\x08\x2a\x93\xf4\xe5\x9a\x6b\x63\xdd\x40\x16\xea\x06\x9d\x0c\xb3\xc4\xa2\xb1\x22\x07\x1b\x55\x2b\x01\x7b\x5d\x3d\x6e\xe2\x27\x21\xdd\x20\x72\xe7\x48\x76\xa0\x80\xec\x1d\x04\x3f\xad\xe1\xc5\x98\x17\x5a\xfa\x09\x11\xf6\x95\x87\x3f\xb1\x1b\xc7\xdc\x87\xe8\xcc\xc7\x43\x06\xd9\xf0\x85\xc8\xb3\x07\x80\xf8\x43\x7f\xf1\x5e\xa3\xf6\x23\xc5\xd2\x6f\x61\x29\xfb\x39\xaf\x4f\x88\x3e\xbf\xbf\x2b\xd1\x99\x33\x37\x5e\xca\x36\xec\x6f\xea\xde\xcd\xce\xc4\x05\x2e\x31\x40\x0e\x64\x75\x11\x97\x72\x1c\xc6\x05\x49\x10\x2c\x0e\x9a\x40\x15\xc1\xa7\x7e\x88\x12\x33\x62\x02\x00\xfa\x00\xf4\xf1\x3f\x0f\x81\xdf\x3d\x32\x78\xf1\x46\x90\xe8\x87\xb4\x4b\xbd\xe7\x9f\x73\x82\xc1\xb7\xc9\x07\x17\xaa\x1d\x98\xd2\xb9\xd4\xf0\x0e\xce\x9f\x77\x25\xdd\x2e\x13\x21\x29\xfa\x0a\xba\x53\xb3\xe8\xf2\xe2\xd9\xbe\xe5\x2e\x3d\x2d\xe9\x36\xe2\x04\xc9\x7d\x9f\x0c\xcd\x42\xde\x6e\xf2\x67\x8b\x4f\x82\x65\x90\x16\xbf\x8a\x11\x86\x5b\x01\x74\x35\x9f\x4c\xbf\x6f\x84\x4d\x08\xc8\x96\xcb\x10\xf2\x90\xae\xf5\x34\xbc\xfb\x46\x86\x1b\x70\xc4\xd3\x4a\xb5\x5b\xed\x35\x8f\x8c\x89\x3a\x90\x26\x9d\xb3\x83\x7f\xac\x95\x6a\x3d\x62\x2e\x65\xb4\xbc\xd6\xf2\xe8\xb5\x50\x40\xf8\x06\x57\xc8\xf3\x99\x76\x83\x9b\x69\x2d\x91\x87\x10\xba\xc8\x68\xdc\xbf\x9d\xb9\xbf\x89\xd4\x03\x38\x53\x4a\x48\x52\x7a\xcc\xd4\x41\x02\x7c\x54\xd7\x9a\x8b\xe5\x7e\x4b\x9f\xb6\x1d\x5e\xb1\x9d\xe5\x12\x61\xa0\xde\x54\xd2\xb7\x96\x32\xa3\xe3\x8a\xa9\x53\x2e\xb4\xc9\x07\xbc\x6c\xa4\x2b\xef\xed\x20\xf4\x2f\x3c\x10\x2f\xea\x8e\xc3\x3d\xa5\xa5\xf5\x5e\x68\xcd\xed\x83\xe6\x12\x3a\xf4\xfb\x37\x21\xe6\x7e\xf7\xa8\x72\x14\xc4\x39\x3a\xfd\x8c\x0c\xeb\xf2\x40\xff\xf3\x32\xe8\x63\xf7\x30\x6d\x7a\x01\x52\xfa\xae\xa2\x8d\xbc\x94\xdc\x18\xef\xa9\xd8\x9f\x9c\xd7\x96\x3d\x4d\xb7\x39\x38\x8b\xc9\x16\x4c\xa1\x47\x95\x99\xd1\x17\x3b\x01\x52\xb8\x91\xe0\x7f\xbd\x36\xfb\x76\x39\x3f\xec\x61\x29\x44\x98\x5b\x11\xae\x11\xbc\xf6\xa4\x42\xcd\x4b\x0d\x0c\xeb\xa0\xcc\x6a\xe3\x87\x47\xf0\x3c\x4d\xd4\x09\xcb\xfe\x68\xee\xf8\x22\x1b\x0a\x4a\x1a\xf7\xbe\x55\xed\xe0\xfb\x75\x68\xc4\x8c\xfc\xa0\x14\xac\x30\x9f\x37\xaf\xf5\x0e\x5d\x79\x88\xbb\x2f\x4e\xf0\x97\x42\x15\x58\x26\xc6\x8b\x2d\x40\x78\xaf\x1e\x86\xbf\x68\xc0\xd2\x61\xf2\x93\x3c\xee\xe6\x65\x25\xe0\xf6\x8f\xc3\x48\x26\xb5\x15\x39\x34\xc8\xfe\xff\xa1\xe2\x84\x4b\xb6\xf8\x77\x5f\x85\xee\xeb\xe4\xb6\x4f\x9a\xd1\x72\xb5\x44\x25\xa2\x77\x5c\x63\xd2\x78\x36\xaf\x96\x8d\x74\x49\x97\xb4\xf1\x41\x58\xd7\x4e\x89\xb6\x8b\xc7\xf0\xd3\x4a\xf3\x38\x51\xee\x22\x67\x09\x6d\x58\x36\x86\xb5\xab\x7f\x84\xc8\xe3\x19\x03\x74\x18\x73\x01\x3b\x40\xea\x12\xaf\x02\xf8\x92\xb6\x73\x58\x27\x64\x96\x9e\xf5\x4b\xff\x7d\x50\xfa\x42\x50\x59\xfe\xef\x1d\xca\xfe\x5f\x22\x88\x2c\xcd\x3c\x95\xbb\xe0\x2a\x91\x81\xf7\x79\x35\x31\x8f\x72\x42\xec\x48\x6f\xd6\x34\x12\xb8\x82\x75\xfb\x31\xa5\x76\x19\x31\xb5\x4d\x9d\xcb\x37\x9f\xa8\x05\xa6\xa8\xb6\xf8\x95\xd4\xfb\x82\x4c\xbd\xc9\x8f\xea\x5c\x5e\x75\x27\xcc\x12\x2b\x38\x19\xc4\xc5\xde\x62\xda\x6d\xea\x6b\x67\xcf\x3d\x09\x53\x07\x6d\x65\x15\x10\x64\x3a\xa3\x5d\x54\x29\x74\x77\x70\xb7\x4f\xd5\x9f\x21\x8e\x6b\x04\xd3\x3a\x0e\xc2\x5e\x88\x5d\xb0\x9c\x3d\x00\x92\x6a\xe0\x1f\x53\xef\xfa\x39\x87\xd2\xb0\x0a\xff\x13\x9a\x04\x67\xfd\xd1\xef\xc7\x8f\xa7\x0d\x0c\x5e\xd7\xf4\x53\xa7\x58\x98\x06\x60\x02\x4a\x4e\x4e\x74\x75\xbc\xdc\x15\xe4\xc4\xe6\x11\x52\x98\x50\x86\x18\x1f\xc3\x52\x54\x6b\xdf\xf3\x45\xa3\xaf\x27\x0a\x1f\x2b\x46\xf6\x70\xb4\x78\x32\x7d\x7a\x83\xf7\xfb\x79\x63\xfd\x18\x97\xa1\x89\xf7\x04\x82\x8a\xb1\x3b\x2a\xa2\xcd\xba\xe9\x8c\x7b\x4a\xb0\x52\x3a\x51\x99\x2c\xb7\x35\x82\x5b\xce\x8b\x20\xef\xf2\xf0\x31\x5b\x66\x13\x63\xb1\x1e\x78\xa7\xe4\x24\x56\x6a\xef\x03\x80\xa5\x90\xa7\x13\x96\x4c\x03\xfb\x72\xec\x3b\x28\x36\xa8\xda\xd3\x8a\xc8\xc5\xc7\x7d\xa5\xf6\x0d\xa0\xec\x17\xff\xb7\x83\x3f\xbe\x5b\x03\x16\x69\xea\xb6\x93\x42\x92\x06\x58\x9b\xb7\x76\xaa\x0f\x4d\x1d\x1f\xac\x54\xd1\x9c\x34\xe5\x6b\xa2\xbc\x23\xe1\x5b\x27\xa3\x18\x78\x84\x99\x34\x75\x47\x10\x7b\xba\x12\xfd\x63\x4e\xb0\x33\x98\xbc\xc7\x87\x26\x56\xb5\xd6\xb0\xad\x6d\xc8\x82\x75\x60\x92\x6f\x05\x45\x86\x76\x98\xf4\x26\x65\x1e\xc6\x1d\x86\x1d\xa9\x93\x79\x41\x0e\x5f\x8c\x6d\xae\x86\x36\x0e\x50\x88\xdb\x27\x94\xd6\x57\x7e\x71\xc2\xaf\x7b\x25\xba\x3b\x1b\x1b\x96\x19\x4d\x3f\x77\xb8\x10\x5f\x77\xf1\xfe\x55\x09\xfe\x90\x06\xad\x65\x3d\x34\xe7\xb3\x9b\xad\x03\x36\x2a\xe3\x7d\xed\xfc\x2f\x3b\xf3\xa6\x2f\x94\x5b\x6e\x3d\xd9\x6d\x8f\xee\x9d\x50\x6a\x20\xe1\x76\xa2\x7e\x23\x92\x7a\x95\xd7\xaa\x8f\x0c\x0d\xf4\xe4\x0f\x70\x5d\x60\x92\x96\xd9\x69\x87\x87\x46\x8d\x1b\x95\x6f\x0e\xd2\xe9\x2a\x47\x5f\x27\x0a\x85\xe3\x98\x89\x61\xdc\x68\xaa\xd8\x3c\x00\xaa\xfe\x84\x2b\xca\x2c\x23\x26\x24\x82\xf6\xea\x44\x80\x65\x6c\xfd\x88\x0f\x9d\xf5\x44\x98\xa0\xfd\x7b\xab\x99\x9a\x00\xf6\x75\xa2\x99\x2b\x35\x70\xbe\xcd\x7c\xb9\x77\xd1\xf2\x92\xa8\x96\x2e\xb3\x39\x53\xa8\x02\x33\x79\xd7\x2d\x5b\x0b\xc3\xcf\xa4\x9f\xe0\xe5\x86\x24\x21\x08\x3c\xda\xfd\xb7\xe8\x2d\xd7\xb4\x8e\xb9\x8a\xe7\x87\x90\x22\x65\xa2\x08\xf1\xfb\x34\x8a\xd4\xad\x56\xb0\x66\x34\xa2\xd0\x51\x9e\xbf\x7b\xcb\xf5\x69\x80\x94\xfc\x0e\x6b\x53\x03\x34\x23\xd9\x8d\x31\x4e\xcd\x36\x1a\x65\x5f\x6d\x5e\xbc\x62\xed\x32\xc6\xe2\xad\x9c\x46\xe2\xa8\x80\xd7\x04\x0f\x9c\x6e\xd5\xec\x8e\x66\xb0\x39\x0d\x3f\x2d\xf0\xd1\x4b\x11\x5e\xda\xfe\xd0\xbd\x63\xd7\x05\x76\x3c\x80\x1e\x42\xe8\xd3\x74\x17\x27\xea\xcd\xf3\x7e\xd6\xaf\xfc\xce\x60\xfe\xd0\x97\xde\x11\xd3\x2c\x5b\x05\xda\xcc\x6d\xbb\xef\x25\xc2\x7f\xf7\x95\x22\xcd\x5c\x74\x04\xff\x62\x98\xce\xbf\xc4\x0b\xc8\xb3\x83\xdf\x59\xea\x34\x37\xd9\x09\xaa\x9c\xda\x99\x12\x6c\xb7\x0c\x8c\x37\xc5\x06\xb3\x04\xc2\xf6\x23\x3b\x0b\x6f\xe5\xd7\x3c\xed\x4c\x2a\xac\x2f\xb5\xb4\xdf\x0f\x99\x1a\x22\xf9\x5e\x78\x05\xe6\xf8\x0f\x34\xb4\x71\x11\xa4\xef\x69\x05\x4d\x69\xc8\x6d\x47\xa3\x2d\x36\xaf\x45\xf2\x7e\x6a\xe1\xe6\x14\x6d\x51\x7a\xf5\xfd\x0b\x50\x5b\x7b\x9a\xed\xed\x75\x67\x05\x9a\x52\x97\x7d\xb2\xe5\x5a\x11\x47\x0e\xbb\xf8\x80\x7b\xf0\xe3\x01\x80\x49\x28\xe9\x17\x7b\x71\x94\xa0\xdc\x77\x94\x57\x08\xa7\x37\x35\x17\x4f\x5e\x55\xf4\x4e\x26\x68\xb4\xb9\x30\xcb\xad\xaf\x98\x7c\x59\x8f\x52\xe2\xf3\x95\x7e\x0f\xa1\xff\x80\x10\x00\x5c\x6f\xd2\x70\x89\x8f\x9e\xb9\x0c\xc1\xe8\x93\x8f\xd9\xb6\x0d\x16\xe2\x6f\x29\x42\xe4\x3f\x4f\x3c\x59\xd4\x1d\x5a\x76\x49\x41\x6f\x77\xfa\xb1\xb5\xdb\x0e\x78\x96\xf4\x5f\xbd\xf2\x23\x6e\x7a\x81\x1a\xa6\x53\x30\xb2\x55\xdd\x08\x7e\x8c\xc8\x0a\xdf\x22\xa1\xc4\xa0\x9f\x83\xdd\x9a\x7e\xad\x0e\xc3\xf8\xd4\xe7\xe0\x88\x7d\xec\x97\x49\xbd\x7f\x4f\xc7\x14\xd5\xdb\x50\x8a\x4b\x86\xfd\x3c\x19\x1e\xad\x06\xb6\x8b\xe5\xf8\x27\xe5\x71\xd1\x07\x20\xdc\x0b\x67\xde\x47\x72\x1c\xff\x85\x72\xc6\xa7\x36\x45\x08\x63\xf6\x2d\xf5\x69\xce\x67\xaf\xbe\x94\xf4\xb9\x8b\x38\x2e\x8c\xab\xe8\xc8\x0c\xf7\x1b\x5a\xc2\xe5\x3b\xdb\xe5\x9d\x68\xe5\x47\x4c\xf7\x4c\x91\x57\x0f\x40\x7f\x8b\xe6\x60\x90\x8f\x8d\x70\x86\x71\xbf\x32\x23\x4f\xa3\xc4\xec\xdd\xa6\x2a\xa0\x06\x9e\x64\xef\xfe\x42\x6c\x3d\x97\x9a\x67\xa3\x76\x90\x6e\x26\xa2\x26\x6a\xb5\xa5\xd6\x15\xe7\x35\xfb\x5f\x62\x40\x61\x30\x33\x93\x6f\x2c\xe6\x3e\xf7\xa7\xda\x50\x68\xe5\xfe\xed\xc1\xf9\x1b\xe0\x4c\x98\x11\x3e\xd6\x3c\x6d\xec\x3f\x6b\x55\x0d\xbf\xf6\xbf\xd0\xc7\x6c\x4d\xd3\xd4\x58\xdf\x7a\xee\x74\x5b\x0a\x5a\xd3\xba\xc0\xce\xc7\x3f\xe1\x8c\xf6\x10\x2d\xb3\x3b\x5e\x6f\xa1\xc9\x4b\xa6\xf5\xaf\x75\x31\x12\x2e\xb9\xe5\x9b\x13\x2e\x3c\xbd\x55\xaa\x5e\x9d\x50\x7d\x42\xb9\xc5\x19\x29\xc5\xa1\xaf\xe4\x1f\x2a\xcd\x3c\x93\xf1\xb6\x23\xdb\x50\xfa\x5a\x95\x53\xdf\x33\x47\x42\xb5\x54\xf4\x32\x97\xc8\x36\xbf\x20\xa4\xb1\xaf\xfa\x40\x50\x5d\x0d\x80\x16\x1e\x2a\xcb\x8b\xfd\xd7\x78\x5b\xff\x31\x8e\xfa\x01\xf0\x6a\x13\x2f\x03\x0a\x1f\x1a\xbd\x64\xa3\x25\xc0\xd3\x51\x64\xb5\x94\xf8\xc6\xd2\xf9\xbc\xbb\x0a\xe1\xd4\x4f\x99\x4b\xc4\x84\xf0\x8f\xad\x57\x91\xd1\x12\x97\x89\xa4\xc7\x5e\x92\x30\xcd\x39\xc6\x92\x74\x74\x31\xaa\xb1\xf3\x20\x18\x7b\x8d\x54\xac\x2a\xc9\x7b\x9f\x60\xb0\x16\xd5\x46\x52\x02\x4d\x19\x81\x5c\x4c\xde\x95\x7f\x6b\xe5\xf5\xf7\x3a\x59\xaa\x34\xed\xcb\xc1\xcb\xd6\xf7\x4e\x22\xbb\xb6\xbe\xaa\x1c\x32\xe0\x3c\xbd\x54\xb8\xfa\x03\xa1\xbf\x91\x73\xe9\x20\x41\x92\x42\xe3\x5e\x36\x76\xbe\x89\xe3\x97\x97\xa5\xec\xae\x8a\xfc\x77\xdc\x91\x23\xa5\x26\x8f\x5c\xcc\xfc\xbc\x94\x03\x76\x79\xc3\x00\xfa\xc2\x79\xf3\xcb\x88\xb3\x18\x31\xaa\xe3\x73\x3c\xab\x17\xd1\xf1\x27\x80\x15\xc8\xe2\xeb\x49\xa1\x29\x77\x17\xee\xc9\xca\x7b\xf8\xdb\xaf\x2c\xe9\x74\xd4\x13\xbb\xea\xd0\x6e\x6e\x64\xd5\x2c\x43\xc4\x2e\x43\x88\x93\xde\xdc\x5a\xb4\x8f\x09\xe6\xd2\xca\x87\x86\x0c\x07\x42\x27\x5b\x7a\xb5\xa4\x68\xb8\xa4\x3d\x7c\x8d\x0c\xed\xe0\x9e\x1d\x95\x94\x8b\x32\xc7\x85\x39\x3f\x6d\xbe\xa7\x64\xba\xca\xbc\xf3\x95\xa1\x46\x8e\x7b\xf4\x7b\x95\xc4\x3a\xac\xff\x68\x9d\xfd\x38\xf3\xbb\x24\x9e\xa8\xa6\xa2\xc9\x2e\xec\xe6\xe7\x2e\xdb\x6a\xbd\x34\x8d\x95\xb8\xef\xee\xd7\xa4\x9e\x7b\x77\xd0\xe3\x64\x59\x01\xd0\x9a\x3b\x4e\x55\xdc\xa0\x1f\xba\xa7\x1d\xf3\xac\xab\x99\x46\x4b\x40\xd9\x09\x9c\x72\x15\x8c\x02\x41\x68\xfc\x48\x10\xae\xd4\x1a\x8e\x5f\xdc\x48\x72\x45\xe5\x18\xbc\xa5\x4b\xda\x3d\x10\x7d\x35\xb9\xb8\x58\x52\xe5\x63\x7e\xd4\xa8\x06\x43\x4d\xfa\xc5\x0b\x7d\x13\x81\x4c\x6e\x2b\xb8\x23\xa8\x81\x6b\x56\x6d\x0b\x9d\x1f\x42\xf8\xcf\x77\xc6\x31\xa8\x84\x27\xfd\x1b\x04\xb2\x1d\x86\xe3\x38\xb2\x29\xb8\x02\xbe\xe3\x2e\x32\x60\xe6\x93\x33\x75\x50\x61\x8e\xc8\x9a\x9a\xe7\xf5\xfc\x60\x7f\xc6\x6c\x2d\x22\xa4\xb7\xcd\x96\xd1\xb4\xd1\x96\x54\xf0\x4a\x93\xe1\x73\x59\x0c\x6b\x5c\xf2\xf6\x80\xc1\x17\x35\xe8\xbb\x3d\x76\xd0\x0c\xda\xd0\x66\xed\x79\x1c\xa1\xb5\xde\x51\x67\x52\xe9\xaf\x97\x8e\x19\xc1\x26\x0b\x92\x91\xb3\x7a\x6e\x80\xa7\xf0\x65\xb7\xbe\x7e\x46\x03\xce\xb7\xe5\x41\x53\xe6\x54\x5b\xa7\x49\x97\x4c\x5e\x63\x09\xd7\x7d\xa3\x88\xbc\x3d\xf7\x96\xc7\x69\x04\x31\xf9\x76\x91\xac\xb8\x60\xaf\xb9\x7e\xca\x5c\xac\x84\xee\x6a\xe6\x48\x7e\x4b\x64\x0f\x2a\x57\xf3\x46\xae\x25\x65\x59\x89\x65\xdd\x59\x74\xd0\xc1\x68\xee\xb0\x72\xba\x2d\xe5\x7a\xa5\xaa\x43\x88\xe2\xe3\xb7\xef\xfa\x55\x7c\x5d\xfc\x43\xb7\x43\x3b\x01\x52\x7a\xcc\x5f\xbb\x44\xab\x39\x91\x37\xfe\x96\x3e\xaf\x11\x95\xeb\x3d\x9e\xc5\x8a\xba\xa3\xa6\xcc\xcc\x71\xb7\xd0\x85\x6f\x2f\xef\x2b\x88\x6c\x90\x6b\xd1\xd3\xec\x48\x8a\x90\x1a\x6e\x13\x78\xd6\x4f\x74\x45\xb1\x11\x53\xc4\x66\x80\x54\xe8\x5c\x63\x4f\xc9\x62\x5a\xa9\x8e\x6c\x99\xce\xa8\xb5\x73\x24\xf2\x75\xab\xae\x22\x86\x5f\xfd\xe3\xc4\xed\x8a\x8f\xcb\xce\x4b\xf2\x2a\x1f\x72\x89\x78\x67\x7c\x04\x37\x3b\x71\x0c\x57\x9e\x65\xce\x5f\x2e\xfa\x54\xb6\x88\x16\xfa\x66\x6b\xd3\xae\xbb\xc3\x64\x62\xd4\x32\xe4\x91\xfe\x91\x6e\x56\x39\x9a\x3f\x62\x47\x86\x12\xab\xa9\x9b\xd8\xec\x55\xc5\x06\x5c\xd6\x4a\xbc\xce\x4f\xd0\x0e\x38\x9e\x07\xb8\x44\x02\xd5\xe6\x36\x0d\xee\x35\x5d\x91\xe8\xf2\x79\x10\xba\x10\x97\x0f\x24\x0e\xd2\xfd\xeb\xbe\xea\xda\xa0\xaf\x0d\x84\x22\x96\x2c\x84\x59\xd7\x0b\x86\x06\x44\xfd\xf5\xd6\x92\x04\x2e\xd4\x94\xbd\x9e\x11\x41\x77\xe2\xf7\x9d\xaf\x81\x22\x44\xfa\xb8\x5d\x1b\xcf\x27\x6d\x07\xd8\x29\x5d\xc7\xed\x3d\xf9\xde\x6f\x81\x30\x49\x6d\x86\x75\x4a\x2d\x5e\xc2\x5f\xdf\x02\xc8\x18\x45\x07\x24\xb4\x3f\xde\x96\x48\x49\xed\x81\x06\xfc\x04\x85\x8c\x75\x0a\xa3\x73\x1f\x6f\xeb\x7e\x27\xca\xbb\x1d\xaa\x5a\xeb\xaa\xa9\xdd\x73\xe4\xfa\xc4\xfd\x0d\x4b\x2d\x7d\x5d\x5a\xa8\x76\xb4\x74\xef\x02\x6e\x6d\xe1\xdf\x9a\x00\x63\xd4\x2e\x86\xbe\xe0\x49\x97\x04\x8d\x62\xbb\xe3\x07\x42\xe8\x18\xf7\x95\x15\xc5\xd5\x27\xd1\xe4\x98\x60\x36\x46\x2e\x47\x7f\x6f\x25\x9c\xb3\xa5\xa7\xfc\xeb\x6f\x45\x9c\x13\xf2\xd3\xdc\xd7\x49\x0b\x1f\x80\x67\xbe\x87\xe5\x85\x9c\xd8\xdd\xc0\x24\x38\xda\x47\x68\xe1\x99\x2b\x81\x1a\xca\x54\xd3\xec\x8d\xe5\xc8\x68\x90\xcb\xb2\x5b\xb5\xa5\x16\xbe\x00\x81\x67\x63\x5f\x0e\xbe\x9c\x53\x71\xd6\xdb\xe1\xbc\xba\x96\x06\x69\xe3\xf8\xa3\x37\x09\x43\x62\x92\x84\xb6\xbc\x5d\x9d\xe4\x95\x0e\xf8\x5e\x5a\x95\xa2\x86\x72\x6f\xe7\x39\x05\x62\x62\xaf\x68\xd5\xc0\xd5\xef\xde\xbd\x14\x7f\x93\x97\x10\x48\x79\xf0\x5f\x70\xa7\x0c\x3d\x70\x6d\x68\x48\xb4\x14\xd5\x50\x57\x1a\xf7\xd9\x2e\x36\xea\xdf\x84\x45\x4f\x1b\x91\xd3\xbf\x61\x69\xc1\xcf\x8c\x76\x9a\xb0\x6d\x47\x8d\xc2\xa3\xa4\x68\x5e\x64\x28\xc4\xaa\x2f\x2c\x30\x5a\xf0\xc9\x04\x4b\x6e\x5d\x54\x93\x21\x0c\x8c\x58\x9b\x67\x9f\xb1\x20\xfa\xab\x16\x92\x03\xac\x73\x08\xb6\xe3\xde\xa4\x03\xd7\xa6\x06\x48\xfa\x8c\x8d\x2c\xca\xe5\xd5\x11\x2c\x51\xc5\xd9\xed\xcc\x6b\xb4\xd5\xa6\x2c\xd0\x8b\xb9\x5b\xbb\x4a\xb9\x4d\x29\x9f\xaf\x76\x70\x99\xbd\x06\x9b\xa6\x9e\x5d\xc6\xc6\x4e\xbf\xba\x74\x85\x1e\xdb\x8c\x9b\xfa\x59\x49\xcd\xb2\x71\x7f\x51\xe3\x61\xfa\x13\x72\xa9\x10\xaf\xf6\xac\x0a\xf7\x94\x43\x32\x53\xdc\x02\xd0\x3e\xe4\x91\x7c\x2b\xb3\xe6\x00\x1f\xc7\xd9\x57\x3a\xeb\xff\xfe\xcc\xfc\x7f\xc9\x1a\xe1\x41\x2d\x70\x3b\xa1\x8c\xd8\x0d\x41\x9e\x33\x98\x8c\xd7\x6e\xd5\xea\xd5\x4c\x28\x98\x50\xd9\xf3\xd8\x80\x23\xf9\x2f\xd1\x7f\xcc\xef\x14\x50\x6a\x58\x97\xbd\x34\x8a\x95\xb7\x3c\x0e\xb4\x0e\x4d\xf4\xaa\x63\x44\x1f\x9c\xf4\xe9\xd9\xe6\x84\xed\x48\x99\x3c\xcc\x3f\x3d\x5b\xdf\xdb\xef\xe2\x8f\x33\xb8\x24\x8f\x42\x0c\x4b\x56\x3e\xfb\xf4\x7c\xfb\xf4\x2d\x76\xea\x18\x0c\xae\x97\x43\x52\xcf\x5c\x8c\xe2\x7d\x97\x45\xe1\xf2\xf5\x02\x2d\x51\x1c\xb9\x18\x20\x79\xf3\x0a\x75\x68\xc7\xe2\x52\x55\x69\x8f\x7c\x53\x02\x1a\x36\xec\xbd\x9a\xff\x22\x43\x23\xb4\xa3\x06\xa3\x32\x40\x94\x3a\xea\xc0\xab\x1c\xa1\x47\x03\x5c\x5c\x1b\x0a\x61\xb9\xad\xb5\x29\xca\xe5\x1a\x16\x0e\x1d\x2c\x54\xc3\x92\x97\x55\xf7\xaa\xa1\xd2\xe4\xe9\x2e\x12\xfb\xc4\x54\x38\xc3\x5d\x8c\x7e\xba\xfd\x80\xb1\x7f\xcf\xce\x0c\x7e\xb8\x3a\x29\x22\xd3\xde\xcd\x5e\x9b\x59\x32\xb2\xd9\x16\x69\xab\x98\x7d\xd6\xd7\x3d\x2f\xf9\x68\xc7\x9d\xe1\xc3\xeb\xc9\xa4\x0d\xcb\xcf\x85\x2a\x95\x05\xb2\xb0\x4b\x67\x19\x35\x9b\x8c\x5b\x5a\x44\xd2\xba\xf0\xe7\x10\x05\xd9\x8b\x34\xd1\x07\x60\xb0\x14\xa4\x29\xcd\xb4\x47\xfa\x3a\x21\xea\xe7\xc0\x36\x37\x1e\x1f\x28\xce\x45\x97\xc2\x9f\x4a\x92\xc3\x66\x09\x73\x49\x71\x85\x28\x25\x23\x40\xaa\x99\x56\xbd\xa4\x7b\x0d\xe7\x18\xb3\x82\x32\x84\x06\x22\xd8\xf9\xb6\xed\x74\xdc\x4a\x01\x31\xd8\x53\x86\x2b\x77\x97\x84\x83\xeb\x92\xa8\x24\x76\xbd\x13\x20\xc6\x15\x17\x63\x0d\x7d\x23\xfe\x34\xc1\xc5\x8d\x5f\xf4\xe5\x53\x12\xdf\xd3\x33\xf2\xc8\x0e\x6e\x54\xf2\x37\x0e\x6f\x9d\x8a\x7c\x05\x8c\xd2\xa5\x3f\x5d\xbb\x88\xea\x8f\x8d\x88\xf9\xd4\x4f\x64\x72\x96\xa4\x47\x62\x94\xef\xf4\xf0\x2c\x71\x4d\x3f\x19\x7f\x0c\x90\x86\x66\xa8\x20\x07\xc3\x9f\x91\xd2\xe9\x5d\x5f\x2b\x52\x06\xed\x63\x78\x6b\x3a\xcb\xe0\x5f\xdc\x1e\xcc\x95\xf4\x88\x2d\x9a\xb0\x7c\xbf\xea\xf6\xa2\xb0\xc0\xb8\x93\xc5\xd0\x9e\xc4\xb3\x23\x3d\x93\x55\x25\xf9\xb6\x0b\xb8\x40\xe8\x3d\x37\x3a\x43\xe7\xf5\xdc\x52\x93\x5d\x83\x8c\x7b\x77\xe4\x69\x3d\xe0\x74\xfc\xc3\x55\xdf\xfe\xf4\x5e\xfc\xd8\x4f\xd2\xc5\x56\x53\x78\x62\x37\xb0\x2a\xae\xb5\xca\x9e\x4b\x94\x73\x54\x51\x7d\x4f\x0f\x1d\xb4\x9b\xe9\xb9\x68\x64\x7c\x6c\x1e\x9f\x5f\xa5\x48\x85\xeb\xa5\x5d\xaf\x67\x20\xe7\x89\x5e\x2b\xde\xf2\x1d\x83\xd8\x99\xc0\xc4\x07\x82\x88\x36\x62\x99\xa6\x83\x37\x28\xf1\xe6\xbd\xdc\x4a\xba\x6d\x79\x00\xc4\x4f\x54\xf1\x51\x4b\xef\x10\x21\x73\xfd\xc5\x0d\x0e\x90\x98\x70\xd7\x04\x90\x65\xa6\x23\x74\x70\x47\x81\x0c\x6d\x06\xda\x2a\xef\x80\x8d\xca\xe6\x25\xfe\xd9\x35\x30\xaf\x84\x96\xf3\xa9\x84\x29\xd6\x25\x64\x80\x0f\xba\x2b\x7c\x20\xcd\x30\x3b\xa3\x39\xbd\xde\x12\x4d\x5c\x9b\x6b\x4c\x53\x09\x5d\x88\xee\x60\xd5\x41\x85\xbd\x35\x64\x53\x52\x6e\x7e\x9a\x3c\x2b\x88\xd1\x05\x92\x8c\xb6\x64\xdb\x3f\x32\xaa\x5c\x1f\x97\xb4\xce\xa6\xaf\x6f\x54\xeb\xc2\xa0\x25\x96\x27\xf2\x93\xf0\x65\x07\x15\xe7\xc7\xd3\xfe\x8d\x84\x0f\x4a\x07\xd8\xf3\x83\x21\xf4\x86\xc8\xd8\x07\x60\x18\x71\xc6\x5e\xb8\xa9\xe4\x7e\x5b\xc0\x82\xf0\x72\xe6\x52\xd8\x48\x2e\xd0\x47\x79\x3d\xf5\xfd\xe5\x94\x2d\xcf\x05\x82\x4b\xf6\x48\x89\xcf\x61\x77\x59\x37\x3b\x6f\xd9\x51\x1e\x70\x95\xa1\xdc\x7e\xdc\x93\x2c\xf9\x46\xeb\x3a\x65\x4e\x82\x6d\xb0\x30\x79\xe8\x4a\xff\x56\x5c\x60\x29\x6e\xbc\x8b\xd8\xc3\xf4\x54\x0d\xbd\x3c\x94\x21\xae\xaf\x54\xbb\xb2\x23\x73\xa6\x71\x35\x13\xbb\x29\x34\xbd\xa2\x9e\x46\x15\xc0\xb1\xcf\x62\x84\xac\xb5\x62\x69\xd4\xdb\x7a\x58\x4c\xbf\xb3\x51\xed\x6b\x75\x30\x40\x3d\x5d\xe9\xa8\x59\x38\xee\x13\xd8\x89\x04\xdd\x96\xb7\x9c\x5d\x20\x74\xb5\x26\xa6\x6c\x45\x3e\x77\xc8\xc4\xb3\x35\xe8\xe2\x3c\xe5\x9b\xaa\x94\xe7\xeb\x43\x8f\xf2\x7f\xf0\x0d\xfa\x79\xc5\xce\x1d\xeb\x75\x94\x10\x26\x14\x2d\xaf\x2d\x77\xfc\x34\x8e\x1e\x1a\xfc\xa9\x3d\x3a\xa8\x93\xa4\xb3\x30\xbe\x55\x7a\x6f\x91\xe7\x6e\x69\x1c\x76\x9c\x9f\x93\x2a\xfd\xeb\xf2\x9e\x1a\xb8\x0e\xee\xad\x6c\x55\x6a\x94\x7c\x00\xca\x69\x49\xa2\x9d\xf4\xce\x13\x36\x26\x0f\x0b\x97\x22\xb0\x9f\x11\x5b\x82\x99\x8b\x6c\xff\x76\x88\x83\xfe\x28\x30\xc9\xc8\x12\x59\x65\xa1\x0a\x8c\xd7\x44\x36\x66\xd1\x53\xba\x8b\x55\xbf\x71\x68\x71\x31\xfa\x80\x0c\x7a\x2f\x12\xba\x55\xdf\xf5\xf3\xad\xd3\x31\x26\x60\x7f\x2b\x61\xca\x1b\x52\x77\xe9\xec\x21\x84\xd7\x44\x72\x64\x18\x75\x37\xb2\xdd\x86\xc3\x90\xbc\x51\x4e\x8e\xf3\xe3\x92\x6b\x70\xc3\x50\xb2\x04\x5b\xb5\x1e\x80\xa6\xf6\x75\x3b\xb0\xc5\xba\x16\x25\x72\x50\x96\x02\x26\xdf\x09\x55\x85\x0f\xd3\xf1\x95\xe9\x3e\xdb\xe4\x96\x82\xa2\x17\x22\xa0\xf3\x07\xd6\xf7\x3c\x7a\x4b\x11\x64\xf2\xa5\xad\xb5\x8e\xde\x09\xd7\x9b\xed\xa3\x4a\xb0\x9f\xf9\x6c\x32\xae\x6a\x58\x31\x7f\x1b\x1f\x79\xfc\x6b\x61\xf4\xc2\x49\xd9\x20\xac\x8f\x88\xf2\xe5\x86\x0a\x4e\x31\xf7\xab\x13\xba\x9a\x0d\x0f\xd3\x03\x01\x76\xd0\x84\x1f\x2f\x34\x5b\xbf\x35\x74\xda\xc4\x5a\x7a\x2c\x93\xec\x65\xcc\x6f\xc1\xb5\xa4\x59\x5f\xd1\x2a\x07\x25\x94\xaa\xbb\xcf\xf3\xf4\x8a\x61\x66\x43\xd1\x53\x7c\x9c\x5e\xcc\x41\x7b\x22\x29\x64\xe4\x2a\xca\x73\x23\xc2\xc7\xb0\x62\x74\xd3\xd7\x1c\x8f\xb3\x83\xa7\x80\xd9\xca\xde\x2b\x79\xf8\xe2\x8f\xd1\xe2\x2b\xad\x86\xdf\x3a\xdf\x06\x29\x77\x25\x3f\x06\x48\x82\x20\xc8\xd4\x70\x49\x0a\x1a\xd6\x3e\xe7\x03\xea\x8f\x4a\xf5\xb5\x83\x3e\xd2\xcb\x0f\xc0\x75\x47\xf2\x31\x3d\x1d\xf2\x6d\xce\x26\x17\x46\xcb\x8f\xaf\x7c\x92\xe4\x92\xe4\xd2\x9f\xb5\xe3\xa0\x43\x0c\x8f\x6d\x5d\x06\x4d\xa8\x1a\x3e\xfb\xe4\xbf\x92\x11\x2a\xf4\x58\x5a\xd6\xa4\x81\x81\xa0\x61\xdd\x03\xd3\x37\x4a\x1d\x69\x4a\x34\xc5\x50\xb8\x3b\x06\xbc\x9c\x7d\x48\x26\x06\xf0\x7d\x8c\x2d\x45\xc0\x03\x85\x05\xdf\xf3\x34\x66\xb7\x78\x44\xe0\xf6\x3a\xc5\xb2\x75\xe1\xae\xa9\x89\xd3\x6a\x57\xe8\x1c\x34\xa4\x47\x73\xf0\xd4\x0d\x73\x8a\x0e\x99\x7d\x0a\x86\x50\x94\x16\xe2\x13\xbd\xfc\x4f\x38\x11\xc2\x3f\x39\x49\x55\x5f\xab\x3b\x72\x8d\x76\x70\xdc\x2a\x34\x4c\x72\x67\x28\x7c\x7f\x02\x7f\xdf\xac\x9e\x41\xd2\x1c\x4d\xbf\x4b\x77\xc7\x0e\x1a\xe9\x60\x59\x7b\x00\x7a\xf4\x91\x74\x9f\x3e\x35\x74\x2c\x10\xc3\x47\x41\xd2\xcd\x8c\xa7\xd7\xda\x93\xf4\x44\x88\xed\x86\x90\xfc\xa5\x25\x05\xd2\xe2\x59\xaa\xae\x03\x5b\x98\x34\x21\x8a\xb5\xb2\x92\x41\x6f\xd6\xd8\xc4\x4d\x6c\x24\x82\x02\x53\xce\xfb\x05\xa3\x26\xe0\x9a\x8b\x39\xf0\xcf\x0d\xcb\x5f\x0e\x78\xc7\x13\xa8\x49\x9b\x5c\x9e\x7f\x41\x1f\xfd\xc9\xca\xe7\x04\x63\x82\x41\x3a\x08\x5b\xb1\x6d\x4d\x7e\x80\x34\x74\xf2\xd6\xd3\x65\x43\x22\xa5\xb6\x79\xc6\x3c\x54\x50\x50\x68\x6a\xc8\xf3\x85\xd7\xfa\x25\x88\xfe\x4b\x07\x3f\xf2\x07\x74\x63\x63\xc6\x15\x95\xf1\x9b\x7d\x7d\x94\x39\x48\x84\x1e\x5e\x3a\x20\x75\xbd\xd0\xae\x5a\xf4\xcb\xe0\x87\xd0\xfc\x94\xa2\x8e\x71\x0a\xc4\x99\x4b\x9a\x08\xd7\xda\x3d\x95\xde\xad\xbe\xa5\x4b\xf9\x8f\x5b\xb8\x9d\xb6\xf4\x66\x80\x40\x1b\x78\x63\x76\x4a\xe8\x33\xc8\x6f\xf7\x2a\x76\x67\x42\x8a\xff\xc8\x30\x46\x58\x83\xb1\x27\x1a\xd7\xed\x9f\x86\x44\xff\xc3\x6b\x1a\x38\x35\xd8\x69\x5d\xaf\xc4\xfb\x90\xc6\x36\xcb\x4d\x6a\xfd\x3e\x40\x89\x39\xee\x2d\x81\xab\xab\x1a\x18\xcd\x1c\x31\x28\x5b\xd7\xa6\x5c\x63\x59\x2b\xe7\x7c\x90\xff\x32\x30\x5b\xdc\x97\xeb\xa5\x3e\x32\x25\x79\xa3\x2e\x82\xd5\x79\x3b\xc3\x9e\xe2\xfb\xb1\x8d\x03\x15\x2a\x7d\x41\x76\xda\x42\xc0\x80\xd2\xd2\x4c\xda\x88\xb8\x51\x38\x78\x23\x0e\x47\x01\x9a\x70\xd0\x52\x2a\xf2\x48\x31\xb7\xd0\x99\x97\x84\xd7\x00\xed\x30\xdb\x0a\xdd\xb3\x83\x73\x0f\x39\x64\x4a\xb2\xfc\xa8\x5e\x57\xa7\x78\x4e\xa2\xc5\xd9\xcb\x4f\x58\x38\xb5\xaf\xfd\xd9\xc6\xd7\xb7\x7e\xe3\xd4\x0d\x30\xfe\x65\xe3\x9c\xd3\x43\x3d\xf1\x81\xb4\x22\xdd\xfd\x6a\x96\x8b\x9a\x3a\xc7\x98\x2e\xf2\x5d\x46\x63\x53\x86\x64\xcf\x17\x50\xa6\x36\xfb\x23\x1f\x26\x6a\x57\x20\x8e\xbd\x74\xa5\xc9\xeb\x68\x4f\xe2\x63\x80\x14\xa1\x6a\x94\xf4\xe3\xc8\xf7\x14\x17\x41\x35\xf8\xda\x8e\x60\x2a\xfa\x4c\x97\x73\x5a\x4d\x5d\x3f\xee\x7d\x65\x73\xf2\x59\x47\x83\x51\xfc\x68\xf9\xad\x77\x81\x71\x2e\x06\x21\x97\x3d\x2a\xcf\x07\x55\xac\x63\x6e\x22\xfc\xd4\xcd\x9b\xc4\xba\x41\xb4\x68\xb1\x4e\x9a\x92\x62\x79\x7b\x8f\x1b\x9d\xae\x5a\x32\x1b\xb9\x2b\xc6\x86\xf6\xeb\xa9\x86\x0f\xd0\xa8\x6e\x31\x01\xaf\x9d\x04\xb8\x14\xb3\x1e\xde\x85\x7e\xbc\xce\xd9\xcb\xee\xaa\x70\x3e\x27\x23\xa9\x0a\xa8\x18\x31\xcf\x7d\x98\xf3\x64\x1b\x83\x58\xb4\xe0\x73\x55\x23\x2c\xa8\xf0\x02\x8a\xad\x8f\xf7\xdb\x4f\xc5\xa7\xc9\x2c\x89\x14\xec\xba\xb2\xc0\xbd\xef\x1e\x28\x1e\xb5\x99\xf8\x00\x98\xeb\xff\x56\x19\x65\x26\xde\x82\x5b\x51\xde\xbb\xb5\x23\x8a\x02\x10\x95\x99\x26\xc3\x4b\x94\x92\xd7\xd4\xd2\x9c\xf2\xa9\xf4\x54\x69\xce\xa0\x10\x56\x47\x01\x97\x23\x1d\x3f\x30\xd2\x3d\xd9\xa4\xe0\x97\xfe\xb0\x73\x14\x67\xdf\xb7\x2e\x8e\xfb\xa0\x00\xa9\xcf\xea\x0b\x22\x76\x70\x1e\x7a\x6d\xab\xfb\xc5\xc8\xd1\x59\x69\xed\xab\x3b\xdb\x17\x32\xc4\xd6\x3f\x18\x56\x56\xbb\xd6\x14\xc8\xd0\xca\xd4\x0c\xc7\x1a\x2e\x60\x5c\x0d\x73\x72\xdc\x4a\xbf\x39\x93\x57\x5b\x4d\xad\x49\x12\xf5\xbf\xce\x81\x9d\x7b\xda\xca\xfb\xfc\x78\xdb\x91\x3e\x71\xc5\xfb\x68\x1d\x23\x3a\xe8\xeb\x31\x15\xed\xa3\xfe\xb2\x10\xf2\x4f\x4f\x54\x29\xa1\xf7\xa7\x3a\x6e\x09\x95\x3c\x23\xe1\x20\xa2\xf8\x8b\x95\xcc\x1b\xed\xf2\x5f\xad\x94\x5f\x4a\x99\x20\xeb\xb1\xe7\x11\x1b\x31\x24\x9f\xea\x9a\x8e\x56\x62\x35\x80\xb7\x6f\x95\x2a\x79\x5c\x74\x6a\x11\x17\x09\xc2\x47\xcb\x41\xa2\x3c\x70\x6e\x55\x97\x3d\x76\x50\x28\xaa\x7f\x33\xbc\xa2\x8e\xf7\xb7\xe2\x92\xdb\x4e\xfe\x48\x90\xb0\xe4\xe7\x95\x61\x19\xa3\x9c\x18\x4f\xcb\xc0\xb3\x1a\xb7\x8a\xb7\x3e\x29\x89\x72\xf4\x1a\xe8\xda\x06\xb1\xbf\x64\xde\xe0\x6b\x6a\xce\xc5\x45\xb4\x59\xba\x54\xac\x52\x60\x74\x1c\x42\x1b\xed\x17\x15\x56\x28\x0f\x20\xf0\x22\xf7\x55\x50\x9d\xdb\xc2\xf1\xef\x55\x59\x96\xd2\x83\xed\x91\xc4\xde\x62\x2f\x84\xb8\xf7\x24\xb8\x69\x4f\xab\xd3\x74\x86\xe7\xe8\x44\x35\x95\xd2\x20\xe9\x48\x2f\x59\x7d\xf6\xdb\xab\x02\x66\xd1\x72\x48\xd0\xdf\xdd\xd1\xe5\xf7\x8d\x94\x90\x91\x76\xe9\x06\x7c\x47\x26\xbb\xaf\xc9\xf8\x44\xbb\x61\x7a\xe7\xf9\xbd\x39\x36\x27\x32\x91\x97\x24\xcb\x87\xe2\x84\xd9\x39\x12\x69\x63\xb1\x60\x48\xf0\x02\xf2\x5e\x03\x6d\x05\xaa\xff\xc9\x4b\x83\xa4\xca\xef\x15\xe8\xac\xd2\xfb\x57\xb2\x5d\xda\xd7\x75\x3f\xcd\x81\xfd\x96\xdb\xe7\xf3\x98\xf3\x3a\x83\x2c\x98\x30\xc6\xd8\xfa\x31\xd4\xe0\xa6\x54\x7b\x72\x99\x62\xd5\x47\x6b\x7d\xc6\x57\x02\xfd\x9d\xcf\xbe\xa0\x8d\x42\x83\x14\xff\x74\x08\x75\x05\x99\xd6\xbf\x20\x26\x57\xda\xf2\xcf\x99\xef\x08\x9c\xe9\xd2\x37\x1b\xda\xe9\x70\x43\x3c\x4f\x28\xb3\xf5\xe3\xf1\xb5\xdb\x80\x26\x7f\x95\xde\x9e\xa0\x49\x58\xbe\x13\xd7\x9e\x6a\x48\xa8\x5d\x2a\x3e\x26\x14\xcb\xc5\xd3\xf8\xa7\xe1\x2c\x93\x68\x35\x80\x8a\x2a\x83\xb9\xc0\x4d\x8b\x55\x9c\x7d\xca\x2c\x14\x7f\x19\xa1\x85\xbc\x75\x8a\xde\x95\xcc\x6e\xba\xe3\xda\xc3\x3d\x8d\x0b\xa7\xc7\xb2\x53\x3f\x96\xb2\x9f\x74\x68\xfd\x1c\x33\xb2\x8b\x52\x30\x87\xbd\x06\x0e\xce\xf4\x6d\xed\x44\x5e\x47\xb2\x93\x68\x92\xfb\xa9\xe5\x12\x8d\x34\xc5\xd1\xa3\x7a\xa8\xd8\x92\x14\x82\x90\x4f\x3e\x33\x9d\x6e\x45\xe3\x50\x36\xba\x82\x1a\xaf\x2e\x2b\xda\x55\x37\xe9\x8b\x4a\xf6\x45\x1e\x0f\x17\xd7\x69\x2b\x51\x2e\x4e\xfc\xa2\x45\xc6\x83\xa5\xb3\xe7\xa2\xd6\x3f\x60\xd8\xb4\xfc\x52\x6e\x37\x56\xe4\xa1\x8b\xfa\xfa\x33\x5a\x46\x6c\x02\x9b\xed\x4a\x0d\xec\x84\xf8\xa3\x12\x6c\x0a\xc3\xd0\x67\x62\x73\x1c\x6f\x8e\xce\x3c\x5d\xbb\xd6\x2e\xf0\x54\xd4\xb6\x56\x53\x68\x7f\x69\x6a\x4e\x10\x53\x2b\x8b\x8b\x29\x47\x09\x10\x26\x5b\x04\x88\xa9\x92\xf8\xc8\x4c\x49\x2a\x10\xa5\xba\x7d\x22\x3e\x5e\xe9\xe0\xfd\xb2\xdb\xe1\x6b\x3b\x56\xdd\x46\xb1\x09\x43\x53\x65\xfd\x13\x56\xe2\x5d\xee\xfe\xc9\xd3\xdc\x23\xbe\x60\x89\xd6\x8f\xfc\x0f\x59\x88\xec\x21\x84\x5e\x2c\xd7\xc7\x04\x0a\x34\x20\x9f\xe6\x08\x27\x77\xd9\xe5\x35\x20\xfa\xdc\xd6\xcf\xaa\xe5\xa6\x6e\xf5\x0b\x6d\x39\x8b\x27\x2e\xc4\xf0\x08\xba\x5f\x3a\x83\x9b\x8e\xd4\x6d\xfd\xc8\xa6\x85\x0f\x2d\x82\xae\x47\x38\x40\xf8\x96\x56\x43\xd7\xd4\x27\x6b\xc4\xb7\xf4\x29\x03\x9e\xbc\x6d\x12\xce\x48\xf1\x00\xd3\x48\x46\xf2\xee\x3f\x30\xff\x12\x32\xb4\xa3\xc0\x40\x2a\xb0\x50\xfd\x69\x65\x49\x4c\x9b\xc3\x86\xfe\x1a\xaf\x36\xaf\x9b\x3d\x91\xc4\xe6\x55\xe0\xd9\x3a\xee\x99\x0a\xd1\xe6\x45\x60\x99\x7c\xd0\xce\xba\xde\x68\xac\x96\x11\x78\x17\x42\x1f\x23\x67\xbe\x7f\x7d\x9f\x56\x66\xff\xd8\xe3\xbb\x6a\x23\xd5\xc9\x32\xad\xd6\x57\x73\xa9\x7f\x93\x76\xc6\xe9\x07\xc8\xd4\xcd\xbc\xa6\x12\x0e\x21\x78\x72\x4f\xe5\xf8\x77\x63\xb0\x74\x67\x89\x2a\x01\x25\x45\x45\x3a\xdb\xe4\x79\xe9\x27\x50\x53\xf9\x58\xf9\x96\xb9\x23\x0f\xc6\x89\xbe\x78\x41\x91\xef\xa0\x76\x4f\xbf\x3c\x24\x5e\x3f\xfd\xf3\x79\x0a\x39\xc4\x32\xe8\x6d\x43\x3c\xe9\x0c\x3f\xe1\x8d\x94\xea\xa5\x5f\x96\x15\xc8\x61\x33\xb5\x8f\xa6\x15\x2f\xbc\x4e\x95\x70\x15\xad\x54\xf1\x67\xea\x47\x7b\xab\x7e\xc1\xae\x0f\xf8\xac\x91\x0f\xc0\x8d\x77\x1f\xa9\xef\xb7\xbb\x7b\x73\x18\x67\xf3\xc5\x79\xa5\x3f\xc8\x87\x3f\xea\x65\xfc\x9a\x8d\xfd\xb3\x73\x2c\xbb\x81\xf7\x49\xb7\x87\xd3\x09\xe8\x8c\x6a\x7c\x98\x80\x00\x25\x29\x39\x6e\x24\x7a\xec\x1c\xcf\x5f\x21\xa1\x41\xbb\xf3\x7f\xb1\x6d\x2c\x64\x23\xfb\x9b\x4d\x12\xf0\xde\xb0\x21\xcf\x41\x36\xdd\x4d\xd6\x93\x66\xd4\x52\xc8\xa9\x59\xc1\x8c\x91\xef\x80\x00\xf0\x4c\xc9\xc1\x1c\x8c\xf4\xf9\xe0\xeb\xe9\xe2\x24\xfe\x6b\x51\x65\xbb\xa8\x2d\x2a\xa0\xef\xd1\xb5\xcb\x74\xbb\xc0\x2a\x6b\x04\x5f\x2e\xbe\x6b\x35\x33\xa2\xe3\x87\xc7\x86\x9d\xd6\xee\xdb\xf9\x00\xb9\x94\x8f\x87\x12\xa2\xa2\x2c\x70\x70\x87\x14\xd7\x3c\x63\x7b\xa4\x06\x7e\x55\x21\xb1\x18\x19\x5a\x3f\x74\x67\x7d\xed\x20\x85\x9a\xcc\xf4\x89\xe5\x9a\x0c\x37\x5f\xf0\xfe\xd9\x1f\x43\xf3\xe4\x42\xf7\x8b\xd2\xf0\xc8\xd2\x6f\x7c\xc0\x00\x50\x25\x32\x20\xc2\x51\x84\x2a\x50\x99\x63\x70\x48\x71\xa1\x8d\x0b\x8c\xc7\x01\x3c\xe8\x3b\xce\x17\x17\x0d\x06\xa5\x6a\xc9\x8d\x65\x19\xb2\x00\xcf\xd4\xc8\x2a\xb6\x85\x67\xbc\x3e\xe5\xa1\xca\xb6\x58\x9c\x08\x0e\x46\x45\x8d\x20\x25\x16\xa7\x73\xf2\x2e\x25\xa7\xd2\x95\x2b\x8a\xe7\x4e\xfe\x7d\x1d\xfc\xdf\xc5\x9b\x92\x53\x17\x12\xb9\x26\x25\xdf\x30\x40\x90\x2c\xe3\x2e\x0e\x76\x77\x59\xdf\x44\x92\x6f\xaa\xdb\x33\x1d\x5f\x5f\xfe\x49\x9a\x89\x83\xc5\xae\x94\xa2\xac\x2d\xea\x82\x66\x97\x7f\x19\x88\x1c\xef\xa8\x1b\x6a\xd0\x62\xa2\x79\xb8\x5f\x48\x7f\x41\x9b\xb9\x95\x98\xdb\xe9\x6c\x6d\xfd\x91\xd6\x17\x9d\x2b\x7d\x5b\x3d\x46\xf4\x16\x80\x47\xfe\x9c\xaa\xdc\x9e\xbe\x75\xf2\x34\xfb\xc1\x18\x64\x2e\x58\xa8\x0b\xaa\x36\xc0\xdf\xad\xf2\x1c\xf4\x0a\xde\xd8\x89\xf0\x28\xee\x15\x1e\x47\x44\xf9\xe4\xb8\x72\x9b\x28\x7e\x78\xe1\x3d\x9b\x72\xb9\x5f\xea\xa3\x98\x33\x9a\xec\x93\xa1\xa3\x61\x8f\x4b\x08\x9f\x90\xf7\x15\xcb\x25\xcc\xf8\x80\x38\x39\x4c\xd7\xec\xcf\x3c\xa8\xa8\x2d\xdb\xba\xa8\x66\x68\x45\xc9\x38\xa7\xe2\x9b\xb4\x5a\xc9\xca\xb0\x53\x31\x32\x14\xbb\x18\xa1\x78\x4d\x34\x76\xe4\x6e\x0f\x93\x90\x0c\xb1\x92\x32\xf9\x81\x17\x19\x71\xcf\xed\xa7\xfa\x32\x22\x76\x17\x4a\x1c\x8c\x66\xd1\x76\x5e\x6e\x2c\x44\x12\x3f\x1f\x2d\x57\x62\xde\x7b\xfc\x6a\xc2\xe9\x30\xbb\x9d\x33\xb4\xa6\xc4\x56\x8f\x3c\x03\x56\x2a\x6b\x13\xd5\x28\xc3\x92\xe1\x12\xeb\x08\xf6\xcb\xe2\xaa\xc8\x18\xd4\x5b\x6d\xf6\xb8\xa0\x23\x9d\x17\x55\x6e\x58\x13\x8d\xdf\xf6\x3c\x8c\xc5\xe2\x4f\xf7\x4b\x5d\xe7\xb1\xd4\x98\x57\x39\x6e\x16\x34\xe6\x50\x8b\xe2\x70\x5c\x11\xdb\x15\xa5\x75\xbd\xcc\x25\xe2\x88\x92\x47\x12\x45\x1c\x07\xeb\xe9\x8f\x7c\x0f\x3e\xa5\x1b\xef\x92\xe9\xf1\x7f\xb6\x7a\xfe\x5b\x1a\x17\xe1\xda\x42\x6b\x35\x03\xda\x69\x10\x39\xf1\x14\x5e\xd9\x6f\xe1\x29\x4e\xa6\x0c\x65\x4f\x64\x65\x0b\x28\x28\x93\x52\xd1\x6d\x6f\x69\x98\x99\x19\x4f\xd7\x88\x79\x7e\xcc\x1a\x8b\x05\x7e\x0f\x21\xaf\xfa\x93\x3b\x5d\xa9\xe7\x9d\xa6\xce\x3e\x69\x9e\x35\x01\x5c\xa7\x5f\xc1\x07\xb3\x45\xda\x90\xa1\x15\x0d\xf3\x53\x8f\x67\x78\x0a\x37\x98\x47\x85\x3e\x33\x74\x76\xed\xdf\x7b\x2f\x7c\x80\xd3\x7d\x78\x8f\x0a\x2c\x25\x22\xb2\x8a\x24\x1d\xe2\xf3\x2c\xb6\x18\xfc\x8a\x36\x24\x7a\x18\x1b\x86\x24\x9f\x85\xca\x6c\x14\xea\xc9\xb3\xb5\x73\x48\x75\xdb\xfd\x62\x27\x9c\x89\x76\xf4\x7a\x00\xae\xaf\xd5\xc0\x91\x56\x0d\xd4\x73\x45\xb7\x22\x31\x85\xcb\xc9\x98\xe1\xa9\xa3\x6c\x54\x7f\x0c\xe5\x3a\x6a\xca\xad\x45\x3c\x28\x64\x2c\xa0\x6c\x8e\x38\x63\xfe\xfe\x99\x4e\xc1\xc3\x3b\x1d\x41\x2a\x02\x18\x4c\x3e\xf5\x8b\x84\x5e\xef\xb7\xa6\x79\x2c\x37\x15\xdf\x85\x42\x87\x72\x89\xc8\x1a\x50\x49\x65\x2f\x0e\x92\x60\xf6\x15\xef\xf4\x3f\x05\x7e\xd9\x3a\x07\xc7\x15\xb9\x36\x7c\x78\xa4\x23\xf7\x48\x99\x85\xf4\xd8\xa0\x61\x80\xd6\xed\xf2\xd0\xf0\x76\x95\x7a\xc6\x9e\x82\x74\xb1\x67\x4d\x83\x3c\x55\xa6\x17\x46\x00\x6b\xf5\x4b\xfe\xe4\x41\x9b\x13\xef\x02\xa1\x1c\xdc\x0c\xf9\x42\x8a\xd9\x64\x66\x10\x9b\x17\x2a\x78\x5e\xf6\x68\xb3\x2a\xec\x49\x56\x2a\xae\xe2\x21\x6c\xff\xb6\x6c\x81\x01\x5b\x92\x43\x4c\xdd\x75\x4e\xbd\xfd\xb9\x04\xd1\xe1\x3b\xb6\xee\x35\x02\x16\x2c\xd6\x48\x33\x75\x97\x93\x11\x97\xab\x49\x8c\x5a\x9f\x37\x88\x9b\xfe\x07\x80\x09\x3b\xf9\x2b\x1c\xdf\x51\x0e\x9a\x13\xeb\xa3\x4c\xb7\x10\xb5\xd9\x56\x93\xe5\xc0\xa4\xc9\x19\xf9\xf9\x78\xd9\x25\xdb\xbf\xc8\x2b\xb6\x08\xa1\xf0\xe6\x2b\xc8\xda\x45\xc8\x80\x21\x19\xd1\x75\x67\x03\x0b\xf3\x23\xdd\x4f\x17\x54\xe0\xde\x6b\x7c\xc4\x36\x52\x31\x7a\x69\x05\x1a\x16\xa2\xe3\xea\x37\x62\xe1\x21\x28\x7b\xee\x98\x72\x95\xfd\x26\x38\x76\xdd\xc5\x28\x67\x63\xed\xf3\xe3\xc7\x36\xb5\x1f\xfc\x0b\xc7\x5b\x9d\xb8\xdf\x0a\xa2\x16\x8a\x16\xad\x9f\xcf\x07\x70\xbf\xcb\x0f\xfc\x89\x3b\xa9\x49\x86\x96\x51\x62\x35\xbf\xe8\x6a\x13\xdf\x57\xca\xdf\x85\x5e\x0f\x06\x91\x7d\xfc\x77\x1e\xf4\xd8\x18\xc6\xd1\x91\xec\xb9\xb8\xea\xfb\xd4\x3e\x33\x38\xd9\xd3\x8f\xbf\xe0\xdb\xb3\x0b\x6a\x99\x86\x3c\xa1\x94\x03\xbc\x35\xbe\xfc\x8f\x48\xa4\x08\x11\xaa\x53\xc3\x94\x68\x17\x98\x38\x43\x73\x72\xa0\xfd\x2a\x46\xf3\x85\xfa\x54\x86\xd4\xe7\xc9\x8f\x96\xac\x63\x57\x14\x1c\x64\x4b\xc4\x31\x58\x33\x40\x53\xe5\x57\x7f\x48\xa6\x06\x1e\x4d\x82\xbe\xd4\x98\x9a\x33\x0b\xb5\x1d\x17\x77\x15\x4d\x48\xbb\xd7\xa6\x84\xe3\xf3\x07\xc3\x54\x11\x95\x19\x76\x0e\x83\x5e\xaf\x71\x66\xde\xe9\x07\xe8\x3b\x29\x41\x19\x1f\xc5\xc6\x7c\x80\xac\xe8\xe8\xad\xf6\x4c\x19\x40\x12\x07\x56\x34\x17\x18\xe7\x25\x50\x82\x2f\x13\x22\xc4\x7d\x3b\x99\xc1\xec\x62\x64\x68\x3b\xf3\x0f\xc0\x63\xe1\x76\xb1\x80\xb9\xb3\x25\xf7\x18\x79\x33\xa8\x39\x95\x51\x70\x02\xac\x52\xb9\xd4\xc7\x65\xa6\x60\xc6\x5e\x93\xa7\x48\xbf\x8b\x2f\xa1\xf3\x85\x94\x8b\xe1\xe7\x35\x02\x57\xa5\x2a\x65\x21\xd0\xb0\xcc\xc9\x90\xa3\xe0\xe1\xa0\x9f\x2d\xb8\x8f\x01\xcf\xb5\x70\xa6\xda\xde\x2e\xef\x25\x67\x57\xb7\x48\x1f\x0d\xad\xaf\x80\x0a\xe0\x26\x8d\x81\xa4\xed\x60\x45\x1c\xb5\xdf\x4e\x61\x78\xd0\x61\xf9\x4b\xdb\x96\x6d\xb6\x9d\x6e\x08\xcf\xce\x40\x5f\xaf\x4d\x2c\xb5\xe3\xc4\x05\xc6\xa2\xf5\x7b\x51\x9d\xff\x81\xd0\x4b\x21\x15\x06\xa8\xe3\x42\x7d\xde\x99\x5e\x00\xc7\xaf\x39\xf8\xa3\xe3\x7b\x45\x07\x0d\x88\xaa\xf5\x06\x93\xe0\x22\xe1\xf0\x66\x5b\xa7\x0d\x54\xa2\x5a\x33\x5a\x31\xcf\xd2\x12\xe8\xfc\xdb\x03\x40\x5e\xe3\x89\xa4\x9e\x98\xc3\x21\x34\xd6\xc0\xa0\x25\x49\xf4\xa4\x3f\x5f\xb1\x96\xc1\x13\x62\x2e\xc2\x6c\xaa\xe7\x11\x2a\x4f\x63\x79\xa6\xfc\x28\xee\xfd\x38\xe0\x79\xbb\x46\x76\x6b\xea\x5a\xa1\xb1\x7f\xe1\x24\xad\xc1\x8f\x11\xef\x2f\x5d\x3f\xf2\xe1\xc0\xeb\xb8\x84\x54\xc9\x63\x53\xf9\x2a\x5d\x73\x44\x1f\x52\x25\x62\x06\x5f\xa0\x94\xae\x3f\x13\x8e\xeb\x5d\x41\x1f\x60\xe0\xe1\x66\x72\xd4\x17\x73\xc3\xb8\x93\x4e\x2e\x67\x08\x75\x0d\xdf\x26\xad\xfc\x8c\xd6\x4d\x29\x01\xa6\xcc\x25\xc2\x41\xc0\xba\x47\x8f\xde\x5a\x1d\x0b\xb3\x28\x1a\x8b\xda\xc5\x36\x7f\xc4\xa6\x75\xdf\x69\x6f\xec\xbd\x27\x9e\xf6\x91\x20\x1c\xc5\x63\xcf\x83\xad\x9a\xd3\xe6\x94\x55\x9e\xc5\xa8\x99\x40\xd0\xb3\x20\xd8\x00\x08\x3d\xe5\xff\x81\xa9\xdc\xff\x0e\xff\xdb\x7d\xf8\x57\x38\x59\x9d\x1a\x58\xac\x1a\xaa\xa0\x32\x1f\xe8\x59\x39\xdb\x7c\xb8\x24\x7d\xeb\x51\xc5\x09\xef\x11\xbf\x08\x13\x50\x2e\x3e\xd0\xae\xc6\x96\x7c\x99\xd5\x0d\xa1\xb5\x64\xeb\xf4\xe3\x9a\xe7\xa8\x08\xfc\x12\x24\x98\x0e\x20\xc6\x1d\xde\x23\x31\xef\x73\x3c\x4c\xbf\x59\x4d\xad\x3c\xf1\x1d\xb4\xc0\xfe\xb5\x6b\x3d\x00\x3d\xba\x9e\x77\x08\x91\x7e\x0a\xcb\x7f\xdd\x20\x5e\x14\xb2\xac\xa5\x1c\x90\xd8\xbc\xcc\x0c\xce\x85\x15\x79\xf7\x4f\xa4\xda\x39\x37\xa5\x93\xf9\xb9\x0c\x55\x79\x7c\x40\x79\xe6\xdb\x22\x06\xe9\xc6\xf3\x83\xc2\x38\x0f\xbb\x19\xe0\xa8\x49\x0c\xed\xb5\x5f\x7e\x02\x93\x23\x15\x65\x92\x02\xa5\xbd\xf2\x6b\xb1\x02\xe2\xda\x59\x46\xd6\xf4\x6c\x88\x5b\x27\x3c\x0a\xed\x40\x9d\xd0\x53\x83\x16\x78\xb4\xaf\xc4\x19\x79\x8d\x13\x62\x57\x13\x71\x94\xc1\x40\x64\xa3\x5d\x18\xd7\x4a\x78\x8e\x77\x08\x53\x2d\x21\x8f\x23\xac\x41\xa2\x4f\xa8\x72\x1a\xf2\x3c\x83\xbf\x01\xed\xf2\xa6\x8c\x5f\x9f\xa2\x70\x81\x58\x5e\x72\xd4\xc0\xe6\x5c\x81\x2f\x9b\x19\x29\xba\xe4\xa1\x99\x05\x9b\x18\xad\xcb\xa0\x69\xba\x21\xde\xc6\x7d\x7e\x0d\x6b\x7f\xdf\x27\x3d\xdf\x71\x21\x7f\x2b\x73\x3f\x45\xc6\x6b\x74\xce\xf7\xf0\x6a\xe2\x25\xfe\x47\x28\xeb\x44\x3e\x1c\x00\x6b\xf9\x27\x73\xee\x60\xe7\xa1\x16\x51\xbf\xc4\x4f\x13\x5d\xc2\xd8\x6f\x63\xdb\xe8\x12\xb5\x89\xf2\x68\x18\x76\x97\xb9\x18\xa9\x1b\x1d\x45\xdc\x91\x65\x1e\x9c\x7d\x84\x4e\xdc\x85\x35\x06\xa6\xf6\x4e\xd7\x37\x97\x83\x12\x5e\x1e\x3d\x77\xe2\x62\x6f\x52\x2b\xb9\x8f\x01\x8d\xe5\xad\xdf\x6a\xce\x64\xde\x16\xa5\x0c\x51\xa1\x42\x51\xe3\x93\xc7\x8f\xc6\xed\x32\x46\xa3\x41\x43\xbb\x71\xa6\xea\x22\xfd\xfa\xb5\xd9\x6f\xe8\xe9\x5a\xbd\x7b\x14\x39\x89\x86\xeb\x9c\x9a\x9e\x8b\xd1\x7a\xa9\x81\xf3\x7f\x59\x3f\xbf\x98\xfa\x56\xf8\xba\xd5\x8b\x98\xf3\xe6\xab\xf1\x9b\x1f\x98\x6a\x02\x4a\xeb\xb8\x27\x81\xf0\x6a\xca\x55\x45\x95\xec\xa0\x84\x57\xc4\x7c\x8f\x48\x75\x9b\x8f\xe2\xaa\x6c\x0a\xc5\x19\xa2\x6e\x6d\xba\xcf\x0f\xcb\xa3\xb8\x44\x0c\x8b\xe7\x9f\xff\x3a\xdf\x5f\x40\x9e\xe7\x12\x96\xf7\x7d\x20\x39\xf3\x16\x18\x2e\x51\x14\xc6\x6b\xa2\xe4\x2a\xea\x1c\x6f\x94\xbe\x13\x8f\xdc\x9d\xe9\x49\x5f\x8b\xb6\xd7\xda\xed\x13\x11\x08\xc7\x59\x6e\x28\x7d\x9e\x8f\x2e\x0a\xc2\x08\x46\x2d\xa8\x14\xdc\x8a\x4d\x9f\x55\x7c\xfa\x2c\xe1\x88\x63\x66\x14\xbc\x27\xa3\xf7\xbb\xf2\xb7\x69\x28\xe3\x37\x6c\xc0\xd8\x5b\x0d\xcb\x22\x62\xe3\x46\x4a\x80\x91\xb1\x31\x06\xa0\x1c\xa9\x22\xb0\x0f\x1f\x04\x91\xb1\x98\xc8\x8b\xf5\x2b\x41\x08\x16\x09\x24\xfe\x27\x29\x59\xaa\xa2\xfc\x00\x6a\x62\x50\x3c\xc7\x3f\x54\xb2\xd0\xff\xe9\x45\xd2\xfd\x47\xf5\x14\x67\xec\xf7\x98\xa7\xc9\x2e\xd4\x55\x9b\x53\xb5\x70\xaa\x03\x29\xce\xf3\xe7\x72\xcb\x9f\xd5\xc0\x49\x3e\x02\x73\x3e\x19\xba\x67\xfb\x24\x89\x3a\x16\x9f\x7c\x32\x5e\xe2\x9f\xef\x47\x9e\x45\x08\x33\xd3\x4a\xa4\x0b\x10\x35\x57\xd3\x22\x59\xd3\xa1\x34\x03\x7f\xca\xbe\xb2\x25\x8e\x1c\xee\xd0\xbf\x13\x95\x3f\xe6\xc3\xe2\x3c\x7a\x00\x62\x2c\x90\xf8\xca\x45\x28\xf7\xc5\xed\xed\x2c\x77\xc9\x2d\xda\x57\xfc\xfb\x87\x10\xda\xad\xd8\xfb\x67\xa8\x56\x9e\x2d\xec\x37\xee\xc7\xa5\xd8\x86\xbd\x78\x03\xb6\x7b\xde\x6e\x4b\xe8\xa0\x59\xdc\x8d\x0e\x06\x14\xc3\x3d\xc9\xa8\x8c\x80\x4b\x46\xda\xdb\x5d\x60\x0b\x64\x88\xa0\xfc\xab\x9c\x3c\xff\x07\x3e\x5b\xfc\x45\x61\x00\xad\x48\xf6\x48\x73\x71\x0a\x67\x02\x5c\xaf\x97\x1f\xc0\xde\x91\x83\x47\xfb\x05\xdc\xc4\xa2\xc1\x5b\xa8\x2f\xbe\x91\xf7\x32\xbb\x99\xbc\x58\x8e\x72\x1f\x42\xe9\x8f\x88\xb5\xde\xe4\x89\xb2\xc4\x56\x77\xee\x92\xe7\x53\x7d\x00\xaa\x8a\x0d\x49\xa7\x70\xf0\x1c\x28\x61\x06\xec\x3b\xf5\xdf\xd9\x07\x85\xd0\x94\x3e\x7d\x94\x03\x18\xe1\xa0\x22\x9d\xc7\x7b\x85\xc6\xae\x65\x90\xa2\x5c\xec\x39\x3e\x4c\xa5\xff\xa3\x6f\x7a\x2a\xb5\x87\xf6\xef\x35\x45\xfe\x57\x28\xf3\x2f\x5e\xb4\x71\xaf\xb6\xf3\xc0\x55\xc6\xbb\xdb\x36\x99\xff\x66\xed\x47\x3b\x23\x14\xc2\x65\x6e\x4b\x0b\xc9\xcc\x2a\x28\xab\xb4\x61\x07\x00\xc2\xa0\xff\xed\x56\xf7\xcd\xf4\x7f\x46\x29\xfc\x0b\x81\xfe\xdf\xb5\x6a\xfb\x4f\xf0\x47\x8e\x72\xe7\xef\xf5\x01\x07\x1a\x9d\xe0\x38\xcf\x5f\xc2\xb4\xff\x6b\x91\x39\xf5\x97\x6b\x39\xfd\x7f\x16\x4c\x9b\x91\xec\xff\x47\x8f\xfc\xff\x0d\x70\xe0\x6c\xe1\xb2\xff\xff\x19\x03\xff\xdb\x92\xfd\xe1\xd7\xff\x2f\x00\x00\xff\xff\xfc\x4b\x38\xf0\x1e\x96\x00\x00") func testLargeJpg() ([]byte, error) { return bindataRead( _testLargeJpg, "testdata/test-large.jpg", ) } var _testMediumHTML = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x59\x5b\x73\xeb\xb6\xf1\x7f\xf7\xa7\x40\xf0\x9f\x7f\x9e\x0e\x05\x51\x92\x65\x2b\xa1\x78\x9a\x4b\xc7\x69\x9b\x4c\xcf\x24\x99\xe9\xf4\xa9\x83\xcb\x92\x84\x05\x02\x34\x00\xca\x56\xa6\x1f\xbe\x03\x90\xba\x50\xa6\xa4\xd3\x4e\xf2\x70\x2c\x02\xbb\xfb\xdb\xc5\x62\x77\xb1\xc0\xc9\xbe\xf8\xfe\xef\xdf\xfd\xfa\xcf\x4f\x7f\x46\x95\xaf\x55\x9e\x85\xbf\x48\x51\x5d\xae\x31\x68\x9c\xdf\x65\x15\x50\x81\x1a\x6b\x0a\xa9\x60\x8d\x2b\xef\x9b\xaf\x08\xa1\xab\x09\x37\x35\x49\x88\x6b\x80\x13\xd3\x80\x76\x40\x2d\xaf\x48\x3a\x49\x09\xce\xef\x10\xca\x6a\xf0\x14\xf1\x8a\x5a\x07\x7e\x8d\x5b\x5f\x24\x8f\x27\x04\x4d\x6b\x58\xe3\xad\x84\xd7\xc6\x58\x8f\x11\x37\xda\x83\xf6\x6b\xfc\x2a\x85\xaf\xd6\x02\xb6\x92\x43\x12\x07\x1f\x90\xd4\xd2\x4b\xaa\x12\xc7\xa9\x82\x75\x3a\x99\x76\x40\x4a\xea\x0d\xaa\x2c\x14\x6b\x4c\x12\xc2\x8c\xf1\xce\x5b\xda\x4c\x6a\xa9\x27\xdc\xb9\x8f\xdb\xf5\x23\x03\x9e\x32\x46\xe7\x30\x9b\x03\x67\x74\x36\xe3\x45\xc1\xd2\xd5\x03\x9d\x89\xc5\x62\x4a\x8b\x45\x3a\x65\xe9\xbd\xc0\xc8\x82\x5a\x63\xe7\x77\x0a\x5c\x05\xe0\xc7\x14\x38\xe9\xa1\xc7\x7d\x10\x8f\x69\x90\x5d\xf0\xc7\x95\x60\x30\x7f\x58\xce\x17\xf7\xc5\x92\x15\x30\x87\xe5\x8c\x2d\x60\x31\x15\x73\x31\x5d\x5e\xc0\xf5\xd2\x2b\xc8\x9f\xcc\xf7\x86\x67\xa4\x1b\xdc\x65\x24\x38\x3a\xbf\xcb\x98\x11\xbb\xfc\x2e\xd3\x74\x8b\xb8\xa2\xce\xad\xb1\xa6\x5b\x46\x2d\xea\x7e\x12\x01\x05\x6d\x95\xc7\xc8\x9a\xb0\x21\x9a\x6e\x65\x49\xbd\x34\xba\xc3\x16\xf2\x20\x17\x7c\x4a\xa5\x06\xfb\x8e\xd2\x43\x05\x8d\x3d\x15\xa1\x8c\xb5\xde\x1b\x8d\xfc\xae\x81\x35\xee\x06\xf8\x4c\xc0\x9b\xb2\x54\x80\x91\xa0\x9e\xf6\x83\xa0\x46\x29\xda\xb8\xc3\x34\xb5\x65\xd8\xf1\x49\x2f\x73\x20\x77\x6a\x10\xca\x5c\x43\xf5\x1e\xd8\xd9\xc4\x68\xb5\xc3\xf9\xaf\x11\x0d\x1d\x97\x93\x91\xc0\x37\x2a\x24\xb9\xd1\x09\xa3\x16\xe7\x7f\x0c\x53\x46\xba\xe5\xf7\x23\x7a\xe6\x05\x66\xa9\x16\x78\x1f\x18\x38\xcf\x9c\xb7\x46\x97\xfb\x0d\xed\x47\x19\xa1\xd1\xed\x44\xc8\xed\xfb\x9d\xe9\x7c\x82\xc6\x7d\x94\xb5\xea\x44\xe5\x9e\x49\xd3\xed\xc1\x87\x31\x38\xf7\x3c\x94\x7b\xb9\x05\x9c\x67\xf4\x68\xd3\x0f\xa6\x86\x60\x41\x46\x94\x1c\x08\x9d\x70\x25\x84\x32\xd3\x7a\x9c\x7f\x13\x7e\x86\xdc\x19\x69\x55\xff\x55\x18\x5b\x9f\x79\xe0\xc4\xaa\x48\xed\xbf\xad\x2c\x2b\x8f\x91\x14\x6b\xfc\x96\x74\x05\x01\xa3\x60\x9d\xd1\xc1\xa8\x3e\x62\x7b\x42\x9e\x49\xdd\xb4\x7e\x8f\x1c\x70\x92\x10\xb1\xd6\xa8\x21\x44\xf2\xd2\x82\xdd\xe1\x3e\x30\x3d\xbc\x79\xdc\x97\x8f\x17\x8c\x1a\x45\x39\x54\x46\x09\xb0\x6b\xfc\xcb\x1e\x99\x04\xb4\x13\xef\x1f\x7e\x34\x0d\x3f\x17\x73\x64\x40\x7a\x6e\x6b\x66\xc2\x5e\xee\x77\xa5\x9a\xe5\x9d\x06\x54\x18\x8b\x9e\x0c\xfa\x44\xf9\x86\x96\xe0\x32\x52\xcd\x3a\x9e\xbb\xde\x5f\xbd\xc4\x09\x5a\x5c\x6c\x52\x5a\xd3\x36\xc7\x4c\xb8\xe2\x81\xc3\x0a\x69\xeb\x4d\x61\x78\x1b\x36\x7a\xff\x89\xd1\x96\xaa\x16\xd6\x78\xd4\x01\xd1\xbc\xa6\xb3\x0d\xb1\x1d\x92\x75\xa8\xb1\xa8\xa1\xbe\x42\xc6\xa2\x0d\xec\x5e\x8d\x15\x93\x81\x47\xc7\xb3\xe3\x68\x73\xc2\xbc\x3e\x8d\xbe\xbe\x58\xf4\x8c\xcc\x6b\xc4\xbc\x3e\xd6\xa6\x0e\xd9\xb5\xac\x96\x1e\xe7\x4f\xe6\x8b\x61\x4a\x85\x8d\x39\x4d\xb7\x7d\x8a\xf4\xfb\xb6\xdf\xaf\xbb\xac\xe9\x92\x0a\x55\xc6\x79\x87\x84\xe1\x6d\x0d\xda\xc7\xfa\x10\x57\x79\x08\xe6\xfe\x5c\x2a\x4d\x38\xba\x26\xc6\x96\x24\xa8\x0d\x31\xbd\xf7\x84\xbb\x33\x1a\x7d\x2b\x3d\x6b\xf9\x06\xfc\x07\xf4\x24\xfd\x0f\x2d\xfb\x80\x9e\x8c\x09\x85\xe7\x93\x35\xcf\xc0\x3d\xfa\xc1\x38\x2f\x75\x89\xa8\x16\xe8\x47\xda\x6a\x5e\x35\x54\x4c\x10\xfa\x39\x1c\x83\xbe\x02\x94\xd1\x3b\x34\x9e\x41\xe8\x13\x2d\x63\xd2\x45\xd3\xa4\x0e\x8b\xe9\x4c\x8d\x5c\x88\x0a\x11\x90\xf7\xf6\x20\x6f\x50\x5c\xdd\x5d\xd0\x55\x1b\x0b\x93\xbb\x41\x00\x5a\xf3\x3a\x52\xd3\x55\xe2\xea\x64\x89\x0f\xf1\xd6\x85\xe6\x22\xff\x64\x9a\x56\x51\x7b\x1a\x94\x8b\x83\xb7\x8f\x05\x45\x49\xe7\x93\x56\xc7\x23\x49\xe0\x4b\xa5\xa1\x94\xbe\x6a\x59\x3c\xe3\xe9\xab\x0b\xff\x12\x27\x36\x49\x69\xc2\x27\xce\xaf\x92\x63\x21\xb9\x84\x26\x4a\x2b\x9f\xa9\xda\x52\xf2\xfc\xea\x93\xd2\x0c\xb0\xce\x89\x57\x91\x4a\xa9\x93\xd2\x68\xc9\xc3\xd7\x00\x66\x40\xb9\x8e\x61\x12\x0b\x42\x3a\x12\xff\x0e\x41\x06\xa4\x5b\x28\xee\x45\x25\xc2\xca\x2d\x58\x52\xef\xdc\x8b\x3a\x87\x3a\xa7\xdf\xc0\x0b\x41\x4c\x1a\x6b\xbc\x61\x6d\xd1\x7d\x9c\x21\x8e\x70\xdc\xc0\xac\x8d\x68\x15\xc4\xe5\x94\x66\x74\xc1\x23\x1c\x37\x30\xad\x54\x8a\x92\x57\x60\xce\x84\xa4\x3a\xc3\x3b\xa3\x5e\xc5\xaa\x76\x0d\x58\x05\xa2\x04\x4b\x0a\xca\xac\xe4\x84\x1b\x0b\x84\x57\x54\x6a\x6e\x04\x10\x57\xc9\x7a\xa0\xe0\xf3\x44\xae\x6a\x7d\x96\xfa\xb7\xaa\x0d\xa6\x0e\xa1\x4f\xe6\xaf\xca\x2b\xc9\x48\xf3\x32\x10\xed\xa6\xae\x4a\x35\x9b\x92\x80\xb5\xc6\x0e\x37\xe0\x38\x7d\x5d\xda\x9a\x1a\x7c\x05\xad\x23\x5c\x49\xd0\xfe\x5f\xc7\x68\xe8\x09\x43\xd8\xdb\xfc\x57\xf5\x59\xc3\x0a\x59\x12\x1e\x0f\xc2\xf1\xf9\xab\xf2\x4e\xda\xb6\x71\xa0\x89\x32\xa5\x3d\xb3\xed\x8c\x76\x1d\xc7\x5b\xf0\xbc\xb2\xc4\x83\xf3\xb2\xd8\x11\xea\x1c\xd8\x61\xcc\x5d\xe0\xb9\x8a\xdb\x6a\xf9\xd6\x48\xbe\x51\x40\x36\xb4\x32\xc6\x27\x15\xe5\x9b\x01\xec\x38\xcb\x08\xaa\x99\xb4\x0c\x6c\x3c\x7e\x7e\xa3\x0d\xce\xcf\x26\xc6\x24\x0e\xe7\xd5\x1b\xe1\x76\xd7\x78\x43\x9c\xab\x82\xe4\x28\xe1\x06\x82\x06\x4f\xe2\x4d\x2a\x9c\xe8\x97\x28\x37\x30\x0c\x6d\x7d\x35\x3b\x13\xef\x26\xc7\x24\xc3\xe1\x39\x39\xe1\x2d\x6d\xc3\x83\xf0\xd8\xfc\x98\x7c\xb3\x29\x27\x52\x93\xba\x34\x93\x6d\xd4\x3a\x98\xb8\x22\xb1\xa3\xb5\x1a\x8a\xf4\x33\xef\x65\x14\x65\xf2\x2d\x5a\xb1\x9d\x05\x60\x9c\x9f\xcf\xf4\xcd\xfa\xb0\xf3\xbd\xd2\xbd\x9f\x9e\xc1\xe1\xf0\xfd\xc9\x58\x18\x39\x79\x6f\x9e\xbb\xe7\x0d\x79\xb0\xed\xc9\xa0\x5f\x3c\xd5\x82\x5a\x71\x02\x49\x2f\x89\xb8\x96\x59\x68\x7a\xb9\x96\x25\x61\xe0\xa4\x37\x76\x77\x53\x3a\x34\x4d\x6e\xd8\x35\xbd\xca\x8d\x24\x7d\x2f\xe4\x70\xbe\xff\x42\x7f\x42\xa5\x49\x02\xf1\x26\xd6\x49\x36\xc6\x6e\xf4\xa3\x59\x0b\x70\xfc\x4b\x5a\x37\x5f\xbf\xac\x83\xa2\x96\x96\xf0\xff\xf3\x6f\x4a\x13\xe7\xdc\xda\x79\x6a\x5d\xfc\x8e\x6d\xe3\xcf\xfb\x05\x48\x70\x38\xff\xc9\x38\x8f\x22\x47\xd0\xfc\x01\x1d\x1b\x96\xdf\x41\x73\x61\xec\xe6\xa2\xe6\x3a\x68\x8e\x1c\x7f\x80\xe6\xb6\x11\xd4\x83\xb8\xa4\xdb\x02\x07\xed\xd5\x0e\xf5\x7c\xb1\xab\x34\xba\x6f\x5a\x07\x37\xb4\xe1\x15\xe7\xd0\x3b\xc7\x80\xed\xae\x51\x85\x31\x1e\xec\xe1\x2e\xcf\x15\x50\x5b\xc8\xb7\x1b\xef\x05\xd7\xd7\xd9\x9f\x21\xa5\x10\x86\x48\xe7\xda\x60\xf4\x3f\x80\x39\xe9\x01\xfd\x25\x8e\x0f\x81\x32\xb8\x52\x84\x02\x94\xd4\xad\x0f\x39\xf0\xef\xfe\x12\x70\xab\x8b\x47\x3f\xf6\x0e\x1c\x87\x6c\x5a\xa5\xfa\xab\xe7\x31\x1c\xff\x0f\xe7\xdf\x52\xbe\x09\x3d\xb6\x37\x5d\xe1\x3d\xdc\x38\xce\x3c\x76\xe2\x29\x57\x19\xeb\x79\xeb\x1d\x46\x9e\x32\xa9\x05\xbc\xad\x71\x92\x1e\x5c\x57\x1b\x41\x15\x7e\x7f\xb9\x8b\xf3\x89\x90\x54\x99\xf2\x98\xdb\xef\x18\xfa\x47\xae\xd3\xae\xfb\x1d\xcf\xe0\x4d\x66\x78\xd9\x1a\x7d\x99\xe1\xca\x1c\x9e\x5e\x84\x74\xb5\x3c\xda\x89\xa8\x95\x34\xa9\xa4\x10\xa0\xd7\xd8\xdb\x16\x70\xfe\xa5\x97\x35\xb8\xaf\xcf\xaf\x63\x7d\x1d\x1b\x9a\x12\x5f\xa6\x70\xfe\x37\xd8\x31\x13\x8a\xd1\xc1\x3b\xa7\x57\x8b\x93\x1a\x79\x69\x49\xcc\x88\xdd\x70\x41\x9e\x32\x05\xc3\x19\x9b\x67\x5e\x20\xaa\x64\xa9\xd7\x78\xbf\x9b\x2c\xff\x98\x11\x96\x67\xc4\x8b\x40\xce\xd1\x57\xe8\xd7\x4a\x3a\x54\x83\x6e\xbb\x49\xe2\xed\x67\xe1\x90\x73\x9c\xfe\xaa\x1c\x02\xf6\x12\xd2\x58\xcc\x8e\x82\x17\xe7\xe0\x7f\x6d\xeb\x26\x84\x9e\x14\xa0\xbd\x2c\x24\xd8\xff\xce\xda\x32\x00\x86\xdb\xa6\x46\xfb\xd1\x29\xfc\x93\xe9\xe3\x1a\x99\x02\x35\x31\x31\xfe\x77\x74\x36\x8e\x0e\x5a\xdc\x42\xff\x6c\xff\x0c\x15\xca\x71\x85\x31\xdb\x7e\x67\x55\x70\x61\x6d\x6f\xb4\x6e\x54\x28\x51\x63\xda\xc8\x59\x74\xde\x8c\xef\xbe\xbe\x7e\x76\xca\x32\xaf\xc7\x13\x36\xff\x2e\x24\xf3\xfb\xa7\x92\x83\xfe\x93\x97\x92\xc1\xbb\x96\xe3\x56\x36\x1e\x39\xcb\x63\x4b\xf0\x1c\x5f\xcc\x92\xd9\x64\x3a\x99\xc7\xd7\xf0\x67\xf7\x71\xbb\x2e\x58\xb1\xe2\x0f\x0f\x62\xca\x17\x30\xe7\xf3\x05\x5d\x3c\xde\xaf\x1e\xa7\x3c\x85\xfb\x79\xba\x64\xcb\x59\x3a\x4b\x97\x53\xfe\x18\xdf\x42\x23\xe0\x7b\xe4\xe1\x23\x7b\x84\xbd\xa7\x82\x3e\xf0\x74\x3a\x2f\x78\x2a\x80\x32\xbe\x9a\xdd\x73\x9e\x16\x82\x31\xb6\x84\xc5\x7d\xca\x67\x69\xc1\x1f\xa6\xd7\x60\xe3\xd3\x7a\x44\x9b\x3f\xa4\x02\x1e\xe6\x29\x4f\x1f\xc5\x2a\xe5\x8b\xd5\x4a\xac\xa6\x2c\xa5\x6c\xca\x8a\xf9\x0a\x78\xb1\x5c\x8a\x25\x2f\x1e\x06\x68\xa4\x7f\x33\x27\xf1\xbf\x30\xfe\x13\x00\x00\xff\xff\xaa\x02\x23\x78\xd2\x18\x00\x00") func testMediumHTML() ([]byte, error) { return bindataRead( _testMediumHTML, "testdata/test-medium.html", ) } var _testSmallTxt = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x0a\xc9\xc8\x2c\x56\xc8\x2c\x56\x48\x54\x28\x49\xad\x28\x51\x48\xcb\xcc\x49\xd5\x03\x04\x00\x00\xff\xff\x11\xe2\x00\xb1\x14\x00\x00\x00") func testSmallTxt() ([]byte, error) { return bindataRead( _testSmallTxt, "testdata/test-small.txt", ) } // Asset loads and returns the asset for the given name. // It returns an error if the asset could not be found or // could not be loaded. func Asset(name string) ([]byte, error) { cannonicalName := strings.Replace(name, "\\", "/", -1) if f, ok := _bindata[cannonicalName]; ok { return f() } return nil, fmt.Errorf("Asset %s not found", name) } // AssetNames returns the names of the assets. func AssetNames() []string { names := make([]string, 0, len(_bindata)) for name := range _bindata { names = append(names, name) } return names } // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() ([]byte, error){ "test-large.jpg": testLargeJpg, "test-medium.html": testMediumHTML, "test-small.txt": testSmallTxt, } // AssetDir returns the file names below a certain // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the // following hierarchy: // data/ // foo.txt // img/ // a.png // b.png // then AssetDir("data") would return []string{"foo.txt", "img"} // AssetDir("data/img") would return []string{"a.png", "b.png"} // AssetDir("foo.txt") and AssetDir("notexist") would return an error // AssetDir("") will return []string{"data"}. func AssetDir(name string) ([]string, error) { node := _bintree if len(name) != 0 { cannonicalName := strings.Replace(name, "\\", "/", -1) pathList := strings.Split(cannonicalName, "/") for _, p := range pathList { node = node.Children[p] if node == nil { return nil, fmt.Errorf("Asset %s not found", name) } } } if node.Func != nil { return nil, fmt.Errorf("Asset %s not found", name) } rv := make([]string, 0, len(node.Children)) for name := range node.Children { rv = append(rv, name) } return rv, nil } type _bintreeT struct { Func func() ([]byte, error) Children map[string]*_bintreeT } var _bintree = &_bintreeT{nil, map[string]*_bintreeT{ "testdata": {nil, map[string]*_bintreeT{ "test-large.jpg": {testLargeJpg, map[string]*_bintreeT{}}, "test-medium.html": {testMediumHTML, map[string]*_bintreeT{}}, "test-small.txt": {testSmallTxt, map[string]*_bintreeT{}}, }}, }} go-cloud-0.20.0/blob/drivertest/drivertest.go000066400000000000000000001772261367004507500211630ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package drivertest provides a conformance test for implementations of // driver. package drivertest // import "gocloud.dev/blob/drivertest" import ( "bytes" "context" "crypto/md5" "errors" "fmt" "io" "io/ioutil" "log" "net/http" "net/url" "strconv" "strings" "sync" "sync/atomic" "testing" "time" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/escape" ) // Harness descibes the functionality test harnesses must provide to run // conformance tests. type Harness interface { // MakeDriver creates a driver.Bucket to test. // Multiple calls to MakeDriver during a test run must refer to the // same storage bucket; i.e., a blob created using one driver.Bucket must // be readable by a subsequent driver.Bucket. MakeDriver(ctx context.Context) (driver.Bucket, error) // HTTPClient should return an unauthorized *http.Client, or nil. // Required if the service supports SignedURL. HTTPClient() *http.Client // Close closes resources used by the harness. Close() } // HarnessMaker describes functions that construct a harness for running tests. // It is called exactly once per test; Harness.Close() will be called when the test is complete. type HarnessMaker func(ctx context.Context, t *testing.T) (Harness, error) // AsTest represents a test of As functionality. // The conformance test: // 1. Calls BucketCheck. // 2. Creates a blob in a directory, using BeforeWrite as a WriterOption. // 3. Fetches the blob's attributes and calls AttributeCheck. // 4. Creates a Reader for the blob using BeforeReader as a ReaderOption, // and calls ReaderCheck with the resulting Reader. // 5. Calls List using BeforeList as a ListOption, with Delimiter set so // that only the directory is returned, and calls ListObjectCheck // on the single directory list entry returned. // 6. Calls List using BeforeList as a ListOption, and calls ListObjectCheck // on the single blob entry returned. // 7. Tries to read a non-existent blob, and calls ErrorCheck with the error. // 8. Makes a copy of the blob, using BeforeCopy as a CopyOption. // // For example, an AsTest might set a driver-specific field to a custom // value in BeforeWrite, and then verify the custom value was returned in // AttributesCheck and/or ReaderCheck. type AsTest interface { // Name should return a descriptive name for the test. Name() string // BucketCheck will be called to allow verification of Bucket.As. BucketCheck(b *blob.Bucket) error // ErrorCheck will be called to allow verification of Bucket.ErrorAs. ErrorCheck(b *blob.Bucket, err error) error // BeforeRead will be passed directly to ReaderOptions as part of reading // a test blob. BeforeRead(as func(interface{}) bool) error // BeforeWrite will be passed directly to WriterOptions as part of creating // a test blob. BeforeWrite(as func(interface{}) bool) error // BeforeCopy will be passed directly to CopyOptions as part of copying // the test blob. BeforeCopy(as func(interface{}) bool) error // BeforeList will be passed directly to ListOptions as part of listing the // test blob. BeforeList(as func(interface{}) bool) error // AttributesCheck will be called after fetching the test blob's attributes. // It should call attrs.As and verify the results. AttributesCheck(attrs *blob.Attributes) error // ReaderCheck will be called after creating a blob.Reader. // It should call r.As and verify the results. ReaderCheck(r *blob.Reader) error // ListObjectCheck will be called after calling List with the test object's // name as the Prefix. It should call o.As and verify the results. ListObjectCheck(o *blob.ListObject) error } type verifyAsFailsOnNil struct{} func (verifyAsFailsOnNil) Name() string { return "verify As returns false when passed nil" } func (verifyAsFailsOnNil) BucketCheck(b *blob.Bucket) error { if b.As(nil) { return errors.New("want Bucket.As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) ErrorCheck(b *blob.Bucket, err error) (ret error) { defer func() { if recover() == nil { ret = errors.New("want ErrorAs to panic when passed nil") } }() b.ErrorAs(err, nil) return nil } func (verifyAsFailsOnNil) BeforeRead(as func(interface{}) bool) error { if as(nil) { return errors.New("want BeforeReader's As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) BeforeWrite(as func(interface{}) bool) error { if as(nil) { return errors.New("want BeforeWrite's As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) BeforeCopy(as func(interface{}) bool) error { if as(nil) { return errors.New("want BeforeCopy's As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) BeforeList(as func(interface{}) bool) error { if as(nil) { return errors.New("want BeforeList's As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) AttributesCheck(attrs *blob.Attributes) error { if attrs.As(nil) { return errors.New("want Attributes.As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) ReaderCheck(r *blob.Reader) error { if r.As(nil) { return errors.New("want Reader.As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) ListObjectCheck(o *blob.ListObject) error { if o.As(nil) { return errors.New("want ListObject.As to return false when passed nil") } return nil } // RunConformanceTests runs conformance tests for driver implementations of blob. func RunConformanceTests(t *testing.T, newHarness HarnessMaker, asTests []AsTest) { t.Run("TestList", func(t *testing.T) { testList(t, newHarness) }) t.Run("TestListWeirdKeys", func(t *testing.T) { testListWeirdKeys(t, newHarness) }) t.Run("TestListDelimiters", func(t *testing.T) { testListDelimiters(t, newHarness) }) t.Run("TestRead", func(t *testing.T) { testRead(t, newHarness) }) t.Run("TestAttributes", func(t *testing.T) { testAttributes(t, newHarness) }) t.Run("TestWrite", func(t *testing.T) { testWrite(t, newHarness) }) t.Run("TestCanceledWrite", func(t *testing.T) { testCanceledWrite(t, newHarness) }) t.Run("TestConcurrentWriteAndRead", func(t *testing.T) { testConcurrentWriteAndRead(t, newHarness) }) t.Run("TestMetadata", func(t *testing.T) { testMetadata(t, newHarness) }) t.Run("TestMD5", func(t *testing.T) { testMD5(t, newHarness) }) t.Run("TestCopy", func(t *testing.T) { testCopy(t, newHarness) }) t.Run("TestDelete", func(t *testing.T) { testDelete(t, newHarness) }) t.Run("TestKeys", func(t *testing.T) { testKeys(t, newHarness) }) t.Run("TestSignedURL", func(t *testing.T) { testSignedURL(t, newHarness) }) asTests = append(asTests, verifyAsFailsOnNil{}) t.Run("TestAs", func(t *testing.T) { for _, st := range asTests { if st.Name() == "" { t.Fatalf("AsTest.Name is required") } t.Run(st.Name(), func(t *testing.T) { testAs(t, newHarness, st) }) } }) } // RunBenchmarks runs benchmarks for driver implementations of blob. func RunBenchmarks(b *testing.B, bkt *blob.Bucket) { b.Run("BenchmarkRead", func(b *testing.B) { benchmarkRead(b, bkt) }) b.Run("BenchmarkWriteReadDelete", func(b *testing.B) { benchmarkWriteReadDelete(b, bkt) }) } // testList tests the functionality of List. func testList(t *testing.T, newHarness HarnessMaker) { const keyPrefix = "blob-for-list" content := []byte("hello") keyForIndex := func(i int) string { return fmt.Sprintf("%s-%d", keyPrefix, i) } gotIndices := func(t *testing.T, objs []*driver.ListObject) []int { var got []int for _, obj := range objs { if !strings.HasPrefix(obj.Key, keyPrefix) { t.Errorf("got name %q, expected it to have prefix %q", obj.Key, keyPrefix) continue } i, err := strconv.Atoi(obj.Key[len(keyPrefix)+1:]) if err != nil { t.Error(err) continue } got = append(got, i) } return got } tests := []struct { name string pageSize int prefix string wantPages [][]int want []int }{ { name: "no objects", prefix: "no-objects-with-this-prefix", wantPages: [][]int{nil}, }, { name: "exactly 1 object due to prefix", prefix: keyForIndex(1), wantPages: [][]int{{1}}, want: []int{1}, }, { name: "no pagination", prefix: keyPrefix, wantPages: [][]int{{0, 1, 2}}, want: []int{0, 1, 2}, }, { name: "by 1", prefix: keyPrefix, pageSize: 1, wantPages: [][]int{{0}, {1}, {2}}, want: []int{0, 1, 2}, }, { name: "by 2", prefix: keyPrefix, pageSize: 2, wantPages: [][]int{{0, 1}, {2}}, want: []int{0, 1, 2}, }, { name: "by 3", prefix: keyPrefix, pageSize: 3, wantPages: [][]int{{0, 1, 2}}, want: []int{0, 1, 2}, }, } ctx := context.Background() // Creates blobs for sub-tests below. // We only create the blobs once, for efficiency and because there's // no guarantee that after we create them they will be immediately returned // from List. The very first time the test is run against a Bucket, it may be // flaky due to this race. init := func(t *testing.T) (driver.Bucket, func()) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } // See if the blobs are already there. b := blob.NewBucket(drv) iter := b.List(&blob.ListOptions{Prefix: keyPrefix}) found := iterToSetOfKeys(ctx, t, iter) for i := 0; i < 3; i++ { key := keyForIndex(i) if !found[key] { if err := b.WriteAll(ctx, key, content, nil); err != nil { b.Close() t.Fatal(err) } } } return drv, func() { b.Close(); h.Close() } } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { drv, done := init(t) defer done() var gotPages [][]int var got []int var nextPageToken []byte for { page, err := drv.ListPaged(ctx, &driver.ListOptions{ PageSize: tc.pageSize, Prefix: tc.prefix, PageToken: nextPageToken, }) if err != nil { t.Fatal(err) } gotThisPage := gotIndices(t, page.Objects) got = append(got, gotThisPage...) gotPages = append(gotPages, gotThisPage) if len(page.NextPageToken) == 0 { break } nextPageToken = page.NextPageToken } if diff := cmp.Diff(gotPages, tc.wantPages); diff != "" { t.Errorf("got\n%v\nwant\n%v\ndiff\n%s", gotPages, tc.wantPages, diff) } if diff := cmp.Diff(got, tc.want); diff != "" { t.Errorf("got\n%v\nwant\n%v\ndiff\n%s", got, tc.want, diff) } }) } // Verify pagination works when inserting in a retrieved page. t.Run("PaginationConsistencyAfterInsert", func(t *testing.T) { drv, done := init(t) defer done() // Fetch a page of 2 results: 0, 1. page, err := drv.ListPaged(ctx, &driver.ListOptions{ PageSize: 2, Prefix: keyPrefix, }) if err != nil { t.Fatal(err) } got := gotIndices(t, page.Objects) want := []int{0, 1} if diff := cmp.Diff(got, want); diff != "" { t.Fatalf("got\n%v\nwant\n%v\ndiff\n%s", got, want, diff) } // Insert a key "0a" in the middle of the page we already retrieved. b := blob.NewBucket(drv) defer b.Close() key := page.Objects[0].Key + "a" if err := b.WriteAll(ctx, key, content, nil); err != nil { t.Fatal(err) } defer func() { _ = b.Delete(ctx, key) }() // Fetch the next page. It should not include 0, 0a, or 1, and it should // include 2. page, err = drv.ListPaged(ctx, &driver.ListOptions{ Prefix: keyPrefix, PageToken: page.NextPageToken, }) if err != nil { t.Fatal(err) } got = gotIndices(t, page.Objects) want = []int{2} if diff := cmp.Diff(got, want); diff != "" { t.Errorf("got\n%v\nwant\n%v\ndiff\n%s", got, want, diff) } }) // Verify pagination works when deleting in a retrieved page. t.Run("PaginationConsistencyAfterDelete", func(t *testing.T) { drv, done := init(t) defer done() // Fetch a page of 2 results: 0, 1. page, err := drv.ListPaged(ctx, &driver.ListOptions{ PageSize: 2, Prefix: keyPrefix, }) if err != nil { t.Fatal(err) } got := gotIndices(t, page.Objects) want := []int{0, 1} if diff := cmp.Diff(got, want); diff != "" { t.Fatalf("got\n%v\nwant\n%v\ndiff\n%s", got, want, diff) } // Delete key "1". b := blob.NewBucket(drv) defer b.Close() key := page.Objects[1].Key if err := b.Delete(ctx, key); err != nil { t.Fatal(err) } defer func() { _ = b.WriteAll(ctx, key, content, nil) }() // Fetch the next page. It should not include 0 or 1, and it should // include 2. page, err = drv.ListPaged(ctx, &driver.ListOptions{ Prefix: keyPrefix, PageToken: page.NextPageToken, }) if err != nil { t.Fatal(err) } got = gotIndices(t, page.Objects) want = []int{2} if diff := cmp.Diff(got, want); diff != "" { t.Errorf("got\n%v\nwant\n%v\ndiff\n%s", got, want, diff) } }) } // testListWeirdKeys tests the functionality of List on weird keys. func testListWeirdKeys(t *testing.T, newHarness HarnessMaker) { const keyPrefix = "list-weirdkeys-" content := []byte("hello") ctx := context.Background() // We're going to create a blob for each of the weird key strings, and // then verify we can see them with List. want := map[string]bool{} for _, k := range escape.WeirdStrings { want[keyPrefix+k] = true } // Creates blobs for sub-tests below. // We only create the blobs once, for efficiency and because there's // no guarantee that after we create them they will be immediately returned // from List. The very first time the test is run against a Bucket, it may be // flaky due to this race. init := func(t *testing.T) (*blob.Bucket, func()) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } // See if the blobs are already there. b := blob.NewBucket(drv) iter := b.List(&blob.ListOptions{Prefix: keyPrefix}) found := iterToSetOfKeys(ctx, t, iter) for _, k := range escape.WeirdStrings { key := keyPrefix + k if !found[key] { if err := b.WriteAll(ctx, key, content, nil); err != nil { b.Close() t.Fatal(err) } } } return b, func() { b.Close(); h.Close() } } b, done := init(t) defer done() iter := b.List(&blob.ListOptions{Prefix: keyPrefix}) got := iterToSetOfKeys(ctx, t, iter) if diff := cmp.Diff(got, want); diff != "" { t.Errorf("got\n%v\nwant\n%v\ndiff\n%s", got, want, diff) } } // listResult is a recursive view of the hierarchy. It's used to verify List // using Delimiter. type listResult struct { Key string IsDir bool // If IsDir is true and recursion is enabled, the recursive listing of the directory. Sub []listResult } // doList lists b using prefix and delim. // If recurse is true, it recurses into directories filling in listResult.Sub. func doList(ctx context.Context, b *blob.Bucket, prefix, delim string, recurse bool) ([]listResult, error) { iter := b.List(&blob.ListOptions{ Prefix: prefix, Delimiter: delim, }) var retval []listResult for { obj, err := iter.Next(ctx) if err == io.EOF { if obj != nil { return nil, errors.New("obj is not nil on EOF") } break } if err != nil { return nil, err } var sub []listResult if obj.IsDir && recurse { sub, err = doList(ctx, b, obj.Key, delim, true) if err != nil { return nil, err } } retval = append(retval, listResult{ Key: obj.Key, IsDir: obj.IsDir, Sub: sub, }) } return retval, nil } // testListDelimiters tests the functionality of List using Delimiters. func testListDelimiters(t *testing.T, newHarness HarnessMaker) { const keyPrefix = "blob-for-delimiters-" content := []byte("hello") // The set of files to use for these tests. The strings in each entry will // be joined using delim, so the result is a directory structure like this // (using / as delimiter): // dir1/a.txt // dir1/b.txt // dir1/subdir/c.txt // dir1/subdir/d.txt // dir2/e.txt // f.txt keys := [][]string{ {"dir1", "a.txt"}, {"dir1", "b.txt"}, {"dir1", "subdir", "c.txt"}, {"dir1", "subdir", "d.txt"}, {"dir2", "e.txt"}, {"f.txt"}, } // Test with several different delimiters. tests := []struct { name, delim string // Expected result of doList with an empty delimiter. // All keys should be listed at the top level, with no directories. wantFlat []listResult // Expected result of doList with delimiter and recurse = true. // All keys should be listed, with keys in directories in the Sub field // of their directory. wantRecursive []listResult // Expected result of repeatedly calling driver.ListPaged with delimiter // and page size = 1. wantPaged []listResult // expected result of doList with delimiter and recurse = false // after dir2/e.txt is deleted // dir1/ and f.txt should be listed; dir2/ should no longer be present // because there are no keys in it. wantAfterDel []listResult }{ { name: "fwdslash", delim: "/", wantFlat: []listResult{ {Key: keyPrefix + "/dir1/a.txt"}, {Key: keyPrefix + "/dir1/b.txt"}, {Key: keyPrefix + "/dir1/subdir/c.txt"}, {Key: keyPrefix + "/dir1/subdir/d.txt"}, {Key: keyPrefix + "/dir2/e.txt"}, {Key: keyPrefix + "/f.txt"}, }, wantRecursive: []listResult{ { Key: keyPrefix + "/dir1/", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "/dir1/a.txt"}, {Key: keyPrefix + "/dir1/b.txt"}, { Key: keyPrefix + "/dir1/subdir/", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "/dir1/subdir/c.txt"}, {Key: keyPrefix + "/dir1/subdir/d.txt"}, }, }, }, }, { Key: keyPrefix + "/dir2/", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "/dir2/e.txt"}, }, }, {Key: keyPrefix + "/f.txt"}, }, wantPaged: []listResult{ { Key: keyPrefix + "/dir1/", IsDir: true, }, { Key: keyPrefix + "/dir2/", IsDir: true, }, {Key: keyPrefix + "/f.txt"}, }, wantAfterDel: []listResult{ { Key: keyPrefix + "/dir1/", IsDir: true, }, {Key: keyPrefix + "/f.txt"}, }, }, { name: "backslash", delim: "\\", wantFlat: []listResult{ {Key: keyPrefix + "\\dir1\\a.txt"}, {Key: keyPrefix + "\\dir1\\b.txt"}, {Key: keyPrefix + "\\dir1\\subdir\\c.txt"}, {Key: keyPrefix + "\\dir1\\subdir\\d.txt"}, {Key: keyPrefix + "\\dir2\\e.txt"}, {Key: keyPrefix + "\\f.txt"}, }, wantRecursive: []listResult{ { Key: keyPrefix + "\\dir1\\", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "\\dir1\\a.txt"}, {Key: keyPrefix + "\\dir1\\b.txt"}, { Key: keyPrefix + "\\dir1\\subdir\\", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "\\dir1\\subdir\\c.txt"}, {Key: keyPrefix + "\\dir1\\subdir\\d.txt"}, }, }, }, }, { Key: keyPrefix + "\\dir2\\", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "\\dir2\\e.txt"}, }, }, {Key: keyPrefix + "\\f.txt"}, }, wantPaged: []listResult{ { Key: keyPrefix + "\\dir1\\", IsDir: true, }, { Key: keyPrefix + "\\dir2\\", IsDir: true, }, {Key: keyPrefix + "\\f.txt"}, }, wantAfterDel: []listResult{ { Key: keyPrefix + "\\dir1\\", IsDir: true, }, {Key: keyPrefix + "\\f.txt"}, }, }, { name: "abc", delim: "abc", wantFlat: []listResult{ {Key: keyPrefix + "abcdir1abca.txt"}, {Key: keyPrefix + "abcdir1abcb.txt"}, {Key: keyPrefix + "abcdir1abcsubdirabcc.txt"}, {Key: keyPrefix + "abcdir1abcsubdirabcd.txt"}, {Key: keyPrefix + "abcdir2abce.txt"}, {Key: keyPrefix + "abcf.txt"}, }, wantRecursive: []listResult{ { Key: keyPrefix + "abcdir1abc", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "abcdir1abca.txt"}, {Key: keyPrefix + "abcdir1abcb.txt"}, { Key: keyPrefix + "abcdir1abcsubdirabc", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "abcdir1abcsubdirabcc.txt"}, {Key: keyPrefix + "abcdir1abcsubdirabcd.txt"}, }, }, }, }, { Key: keyPrefix + "abcdir2abc", IsDir: true, Sub: []listResult{ {Key: keyPrefix + "abcdir2abce.txt"}, }, }, {Key: keyPrefix + "abcf.txt"}, }, wantPaged: []listResult{ { Key: keyPrefix + "abcdir1abc", IsDir: true, }, { Key: keyPrefix + "abcdir2abc", IsDir: true, }, {Key: keyPrefix + "abcf.txt"}, }, wantAfterDel: []listResult{ { Key: keyPrefix + "abcdir1abc", IsDir: true, }, {Key: keyPrefix + "abcf.txt"}, }, }, } ctx := context.Background() // Creates blobs for sub-tests below. // We only create the blobs once, for efficiency and because there's // no guarantee that after we create them they will be immediately returned // from List. The very first time the test is run against a Bucket, it may be // flaky due to this race. init := func(t *testing.T, delim string) (driver.Bucket, *blob.Bucket, func()) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) // See if the blobs are already there. prefix := keyPrefix + delim iter := b.List(&blob.ListOptions{Prefix: prefix}) found := iterToSetOfKeys(ctx, t, iter) for _, keyParts := range keys { key := prefix + strings.Join(keyParts, delim) if !found[key] { if err := b.WriteAll(ctx, key, content, nil); err != nil { b.Close() t.Fatal(err) } } } return drv, b, func() { b.Close(); h.Close() } } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { drv, b, done := init(t, tc.delim) defer done() // Fetch without using delimiter. got, err := doList(ctx, b, keyPrefix+tc.delim, "", true) if err != nil { t.Fatal(err) } if diff := cmp.Diff(got, tc.wantFlat); diff != "" { t.Errorf("with no delimiter, got\n%v\nwant\n%v\ndiff\n%s", got, tc.wantFlat, diff) } // Fetch using delimiter, recursively. got, err = doList(ctx, b, keyPrefix+tc.delim, tc.delim, true) if err != nil { t.Fatal(err) } if diff := cmp.Diff(got, tc.wantRecursive); diff != "" { t.Errorf("with delimiter, got\n%v\nwant\n%v\ndiff\n%s", got, tc.wantRecursive, diff) } // Test pagination via driver.ListPaged. var nextPageToken []byte got = nil for { page, err := drv.ListPaged(ctx, &driver.ListOptions{ Prefix: keyPrefix + tc.delim, Delimiter: tc.delim, PageSize: 1, PageToken: nextPageToken, }) if err != nil { t.Fatal(err) } if len(page.Objects) > 1 { t.Errorf("got %d objects on a page, want 0 or 1", len(page.Objects)) } for _, obj := range page.Objects { got = append(got, listResult{ Key: obj.Key, IsDir: obj.IsDir, }) } if len(page.NextPageToken) == 0 { break } nextPageToken = page.NextPageToken } if diff := cmp.Diff(got, tc.wantPaged); diff != "" { t.Errorf("paged got\n%v\nwant\n%v\ndiff\n%s", got, tc.wantPaged, diff) } // Delete dir2/e.txt and verify that dir2/ is no longer returned. key := strings.Join(append([]string{keyPrefix}, "dir2", "e.txt"), tc.delim) if err := b.Delete(ctx, key); err != nil { t.Fatal(err) } // Attempt to restore dir2/e.txt at the end of the test for the next run. defer func() { _ = b.WriteAll(ctx, key, content, nil) }() got, err = doList(ctx, b, keyPrefix+tc.delim, tc.delim, false) if err != nil { t.Fatal(err) } if diff := cmp.Diff(got, tc.wantAfterDel); diff != "" { t.Errorf("after delete, got\n%v\nwant\n%v\ndiff\n%s", got, tc.wantAfterDel, diff) } }) } } func iterToSetOfKeys(ctx context.Context, t *testing.T, iter *blob.ListIterator) map[string]bool { retval := map[string]bool{} for { if item, err := iter.Next(ctx); err == io.EOF { break } else if err != nil { t.Fatal(err) } else { retval[item.Key] = true } } return retval } // testRead tests the functionality of NewReader, NewRangeReader, and Reader. func testRead(t *testing.T, newHarness HarnessMaker) { const key = "blob-for-reading" content := []byte("abcdefghijklmnopqurstuvwxyz") contentSize := int64(len(content)) tests := []struct { name string key string offset, length int64 want []byte wantReadSize int64 wantErr bool // set to true to skip creation of the object for // tests where we expect an error without any actual // read. skipCreate bool }{ { name: "read of nonexistent key fails", key: "key-does-not-exist", length: -1, wantErr: true, }, { name: "negative offset fails", key: key, offset: -1, wantErr: true, skipCreate: true, }, { name: "length 0 read", key: key, want: []byte{}, }, { name: "read from positive offset to end", key: key, offset: 10, length: -1, want: content[10:], wantReadSize: contentSize - 10, }, { name: "read a part in middle", key: key, offset: 10, length: 5, want: content[10:15], wantReadSize: 5, }, { name: "read in full", key: key, length: -1, want: content, wantReadSize: contentSize, }, { name: "read in full with negative length not -1", key: key, length: -42, want: content, wantReadSize: contentSize, }, } ctx := context.Background() // Creates a blob for sub-tests below. init := func(t *testing.T, skipCreate bool) (*blob.Bucket, func()) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) if skipCreate { return b, func() { b.Close(); h.Close() } } if err := b.WriteAll(ctx, key, content, nil); err != nil { b.Close() t.Fatal(err) } return b, func() { _ = b.Delete(ctx, key) b.Close() h.Close() } } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { b, done := init(t, tc.skipCreate) defer done() r, err := b.NewRangeReader(ctx, tc.key, tc.offset, tc.length, nil) if (err != nil) != tc.wantErr { t.Errorf("got err %v want error %v", err, tc.wantErr) } if err != nil { return } defer r.Close() // Make the buffer bigger than needed to make sure we actually only read // the expected number of bytes. got := make([]byte, tc.wantReadSize+10) n, err := r.Read(got) // EOF error is optional, see https://golang.org/pkg/io/#Reader. if err != nil && err != io.EOF { t.Errorf("unexpected error during read: %v", err) } if int64(n) != tc.wantReadSize { t.Errorf("got read length %d want %d", n, tc.wantReadSize) } if !cmp.Equal(got[:tc.wantReadSize], tc.want) { t.Errorf("got %q want %q", string(got), string(tc.want)) } if r.Size() != contentSize { t.Errorf("got size %d want %d", r.Size(), contentSize) } if r.ModTime().IsZero() { t.Errorf("got zero mod time, want non-zero") } }) } } // testAttributes tests Attributes. func testAttributes(t *testing.T, newHarness HarnessMaker) { const ( dirKey = "someDir" key = dirKey + "/blob-for-attributes" contentType = "text/plain" cacheControl = "no-cache" contentDisposition = "inline" contentEncoding = "identity" contentLanguage = "en" ) content := []byte("Hello World!") ctx := context.Background() // Creates a blob for sub-tests below. init := func(t *testing.T) (*blob.Bucket, func()) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) opts := &blob.WriterOptions{ ContentType: contentType, CacheControl: cacheControl, ContentDisposition: contentDisposition, ContentEncoding: contentEncoding, ContentLanguage: contentLanguage, } if err := b.WriteAll(ctx, key, content, opts); err != nil { b.Close() t.Fatal(err) } return b, func() { _ = b.Delete(ctx, key) b.Close() h.Close() } } b, done := init(t) defer done() for _, badKey := range []string{ "not-found", dirKey, dirKey + "/", } { _, err := b.Attributes(ctx, badKey) if err == nil { t.Errorf("got nil want error") } else if gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("got %v want NotFound error", err) } else if !strings.Contains(err.Error(), badKey) { t.Errorf("got %v want error to include missing key", err) } } a, err := b.Attributes(ctx, key) if err != nil { t.Fatalf("failed Attributes: %v", err) } // Also make a Reader so we can verify the subset of attributes // that it exposes. r, err := b.NewReader(ctx, key, nil) if err != nil { t.Fatalf("failed Attributes: %v", err) } if a.CacheControl != cacheControl { t.Errorf("got CacheControl %q want %q", a.CacheControl, cacheControl) } if a.ContentDisposition != contentDisposition { t.Errorf("got ContentDisposition %q want %q", a.ContentDisposition, contentDisposition) } if a.ContentEncoding != contentEncoding { t.Errorf("got ContentEncoding %q want %q", a.ContentEncoding, contentEncoding) } if a.ContentLanguage != contentLanguage { t.Errorf("got ContentLanguage %q want %q", a.ContentLanguage, contentLanguage) } if a.ContentType != contentType { t.Errorf("got ContentType %q want %q", a.ContentType, contentType) } if r.ContentType() != contentType { t.Errorf("got Reader.ContentType() %q want %q", r.ContentType(), contentType) } if a.Size != int64(len(content)) { t.Errorf("got Size %d want %d", a.Size, len(content)) } if r.Size() != int64(len(content)) { t.Errorf("got Reader.Size() %d want %d", r.Size(), len(content)) } r.Close() t1 := a.ModTime if err := b.WriteAll(ctx, key, content, nil); err != nil { t.Fatal(err) } a2, err := b.Attributes(ctx, key) if err != nil { t.Errorf("failed Attributes#2: %v", err) } t2 := a2.ModTime if t2.Before(t1) { t.Errorf("ModTime %v is before %v", t2, t1) } } // loadTestData loads test data, inlined using go-bindata. func loadTestData(t testing.TB, name string) []byte { data, err := Asset(name) if err != nil { t.Fatal(err) } return data } // testWrite tests the functionality of NewWriter and Writer. func testWrite(t *testing.T, newHarness HarnessMaker) { const key = "blob-for-reading" const existingContent = "existing content" smallText := loadTestData(t, "test-small.txt") mediumHTML := loadTestData(t, "test-medium.html") largeJpg := loadTestData(t, "test-large.jpg") helloWorld := []byte("hello world") helloWorldMD5 := md5.Sum(helloWorld) tests := []struct { name string key string exists bool content []byte contentType string contentMD5 []byte firstChunk int wantContentType string wantErr bool wantReadErr bool // if wantErr is true, and Read after err should fail with something other than NotExists }{ { name: "write to empty key fails", wantErr: true, wantReadErr: true, // read from empty key fails, but not always with NotExists }, { name: "no write then close results in empty blob", key: key, }, { name: "no write then close results in empty blob, blob existed", key: key, }, { name: "invalid ContentType fails", key: key, contentType: "application/octet/stream", wantErr: true, }, { name: "ContentType is discovered if not provided", key: key, content: mediumHTML, wantContentType: "text/html", }, { name: "write with explicit ContentType overrides discovery", key: key, content: mediumHTML, contentType: "application/json", wantContentType: "application/json", }, { name: "Content md5 match", key: key, content: helloWorld, contentMD5: helloWorldMD5[:], }, { name: "Content md5 did not match", key: key, content: []byte("not hello world"), contentMD5: helloWorldMD5[:], wantErr: true, }, { name: "Content md5 did not match, blob existed", exists: true, key: key, content: []byte("not hello world"), contentMD5: helloWorldMD5[:], wantErr: true, }, { name: "a small text file", key: key, content: smallText, wantContentType: "text/html", }, { name: "a large jpg file", key: key, content: largeJpg, wantContentType: "image/jpg", }, { name: "a large jpg file written in two chunks", key: key, firstChunk: 10, content: largeJpg, wantContentType: "image/jpg", }, // TODO(issue #304): Fails for GCS. /* { name: "ContentType is parsed and reformatted", key: key, content: []byte("foo"), contentType: `FORM-DATA;name="foo"`, wantContentType: `form-data; name=foo`, }, */ } ctx := context.Background() for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // If the test wants the blob to already exist, write it. if tc.exists { if err := b.WriteAll(ctx, key, []byte(existingContent), nil); err != nil { t.Fatal(err) } defer func() { _ = b.Delete(ctx, key) }() } // Write the content. opts := &blob.WriterOptions{ ContentType: tc.contentType, ContentMD5: tc.contentMD5[:], } w, err := b.NewWriter(ctx, tc.key, opts) if err == nil { if len(tc.content) > 0 { if tc.firstChunk == 0 { // Write the whole thing. _, err = w.Write(tc.content) } else { // Write it in 2 chunks. _, err = w.Write(tc.content[:tc.firstChunk]) if err == nil { _, err = w.Write(tc.content[tc.firstChunk:]) } } } if err == nil { err = w.Close() } } if (err != nil) != tc.wantErr { t.Errorf("NewWriter or Close got err %v want error %v", err, tc.wantErr) } if err != nil { // The write failed; verify that it had no effect. buf, err := b.ReadAll(ctx, tc.key) if tc.exists { // Verify the previous content is still there. if !bytes.Equal(buf, []byte(existingContent)) { t.Errorf("Write failed as expected, but content doesn't match expected previous content; got \n%s\n want \n%s", string(buf), existingContent) } } else { // Verify that the read fails with NotFound. if err == nil { t.Error("Write failed as expected, but Read after that didn't return an error") } else if !tc.wantReadErr && gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("Write failed as expected, but Read after that didn't return the right error; got %v want NotFound", err) } else if !strings.Contains(err.Error(), tc.key) { t.Errorf("got %v want error to include missing key", err) } } return } defer func() { _ = b.Delete(ctx, tc.key) }() // Read it back. buf, err := b.ReadAll(ctx, tc.key) if err != nil { t.Fatal(err) } if !bytes.Equal(buf, tc.content) { if len(buf) < 100 && len(tc.content) < 100 { t.Errorf("read didn't match write; got \n%s\n want \n%s", string(buf), string(tc.content)) } else { t.Error("read didn't match write, content too large to display") } } }) } } // testCanceledWrite tests the functionality of canceling an in-progress write. func testCanceledWrite(t *testing.T, newHarness HarnessMaker) { const key = "blob-for-canceled-write" content := []byte("hello world") cancelContent := []byte("going to cancel") tests := []struct { description string contentType string exists bool }{ { // The write will be buffered in the portable type as part of // ContentType detection, so the first call to the Driver will be Close. description: "EmptyContentType", }, { // The write will be sent to the Driver, which may do its own // internal buffering. description: "NonEmptyContentType", contentType: "text/plain", }, { description: "BlobExists", exists: true, }, // TODO(issue #482): Find a way to test that a chunked upload that's interrupted // after some chunks are uploaded cancels correctly. } ctx := context.Background() for _, test := range tests { t.Run(test.description, func(t *testing.T) { cancelCtx, cancel := context.WithCancel(ctx) h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() opts := &blob.WriterOptions{ ContentType: test.contentType, } // If the test wants the blob to already exist, write it. if test.exists { if err := b.WriteAll(ctx, key, content, opts); err != nil { t.Fatal(err) } defer func() { _ = b.Delete(ctx, key) }() } // Create a writer with the context that we're going // to cancel. w, err := b.NewWriter(cancelCtx, key, opts) if err != nil { t.Fatal(err) } // Write the content. if _, err := w.Write(cancelContent); err != nil { t.Fatal(err) } // Verify that the previous content (if any) is still readable, // because the write hasn't been Closed yet. got, err := b.ReadAll(ctx, key) if test.exists { // The previous content should still be there. if !cmp.Equal(got, content) { t.Errorf("during unclosed write, got %q want %q", string(got), string(content)) } } else { // The read should fail; the write hasn't been Closed so the // blob shouldn't exist. if err == nil { t.Error("wanted read to return an error when write is not yet Closed") } } // Cancel the context to abort the write. cancel() // Close should return some kind of canceled context error. // We can't verify the kind of error cleanly, so we just verify there's // an error. if err := w.Close(); err == nil { t.Errorf("got Close error %v want canceled ctx error", err) } // Verify the write was truly aborted. got, err = b.ReadAll(ctx, key) if test.exists { // The previous content should still be there. if !cmp.Equal(got, content) { t.Errorf("after canceled write, got %q want %q", string(got), string(content)) } } else { // The read should fail; the write was aborted so the // blob shouldn't exist. if err == nil { t.Error("wanted read to return an error when write was canceled") } } }) } } // testMetadata tests writing and reading the key/value metadata for a blob. func testMetadata(t *testing.T, newHarness HarnessMaker) { const key = "blob-for-metadata" hello := []byte("hello") weirdMetadata := map[string]string{} for _, k := range escape.WeirdStrings { weirdMetadata[k] = k } tests := []struct { name string metadata map[string]string content []byte contentType string want map[string]string wantErr bool }{ { name: "empty", content: hello, metadata: map[string]string{}, want: nil, }, { name: "empty key fails", content: hello, metadata: map[string]string{"": "empty key value"}, wantErr: true, }, { name: "duplicate case-insensitive key fails", content: hello, metadata: map[string]string{"abc": "foo", "aBc": "bar"}, wantErr: true, }, { name: "valid metadata", content: hello, metadata: map[string]string{ "key_a": "value-a", "kEy_B": "value-b", "key_c": "vAlUe-c", }, want: map[string]string{ "key_a": "value-a", "key_b": "value-b", "key_c": "vAlUe-c", }, }, { name: "valid metadata with empty body", content: nil, metadata: map[string]string{"foo": "bar"}, want: map[string]string{"foo": "bar"}, }, { name: "valid metadata with content type", content: hello, contentType: "text/plain", metadata: map[string]string{"foo": "bar"}, want: map[string]string{"foo": "bar"}, }, { name: "weird metadata keys", content: hello, metadata: weirdMetadata, want: weirdMetadata, }, { name: "non-utf8 metadata key", content: hello, metadata: map[string]string{escape.NonUTF8String: "bar"}, wantErr: true, }, { name: "non-utf8 metadata value", content: hello, metadata: map[string]string{"foo": escape.NonUTF8String}, wantErr: true, }, } ctx := context.Background() for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() opts := &blob.WriterOptions{ Metadata: tc.metadata, ContentType: tc.contentType, } err = b.WriteAll(ctx, key, hello, opts) if (err != nil) != tc.wantErr { t.Errorf("got error %v want error %v", err, tc.wantErr) } if err != nil { return } defer func() { _ = b.Delete(ctx, key) }() a, err := b.Attributes(ctx, key) if err != nil { t.Fatal(err) } if diff := cmp.Diff(a.Metadata, tc.want); diff != "" { t.Errorf("got\n%v\nwant\n%v\ndiff\n%s", a.Metadata, tc.want, diff) } }) } } // testMD5 tests reading MD5 hashes via List and Attributes. func testMD5(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() // Define two blobs with different content; we'll write them and then verify // their returned MD5 hashes. const aKey, bKey = "blob-for-md5-aaa", "blob-for-md5-bbb" aContent, bContent := []byte("hello"), []byte("goodbye") aMD5 := md5.Sum(aContent) bMD5 := md5.Sum(bContent) h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // Write the two blobs. if err := b.WriteAll(ctx, aKey, aContent, nil); err != nil { t.Fatal(err) } defer func() { _ = b.Delete(ctx, aKey) }() if err := b.WriteAll(ctx, bKey, bContent, nil); err != nil { t.Fatal(err) } defer func() { _ = b.Delete(ctx, bKey) }() // Check the MD5 we get through Attributes. Note that it's always legal to // return a nil MD5. aAttr, err := b.Attributes(ctx, aKey) if err != nil { t.Fatal(err) } if aAttr.MD5 != nil && !bytes.Equal(aAttr.MD5, aMD5[:]) { t.Errorf("got MD5\n%x\nwant\n%x", aAttr.MD5, aMD5) } bAttr, err := b.Attributes(ctx, bKey) if err != nil { t.Fatal(err) } if bAttr.MD5 != nil && !bytes.Equal(bAttr.MD5, bMD5[:]) { t.Errorf("got MD5\n%x\nwant\n%x", bAttr.MD5, bMD5) } // Check the MD5 we get through List. Note that it's always legal to // return a nil MD5. iter := b.List(&blob.ListOptions{Prefix: "blob-for-md5-"}) obj, err := iter.Next(ctx) if err != nil { t.Fatal(err) } if obj.Key != aKey { t.Errorf("got name %q want %q", obj.Key, aKey) } if obj.MD5 != nil && !bytes.Equal(obj.MD5, aMD5[:]) { t.Errorf("got MD5\n%x\nwant\n%x", obj.MD5, aMD5) } obj, err = iter.Next(ctx) if err != nil { t.Fatal(err) } if obj.Key != bKey { t.Errorf("got name %q want %q", obj.Key, bKey) } if obj.MD5 != nil && !bytes.Equal(obj.MD5, bMD5[:]) { t.Errorf("got MD5\n%x\nwant\n%x", obj.MD5, bMD5) } } // testCopy tests the functionality of Copy. func testCopy(t *testing.T, newHarness HarnessMaker) { const ( srcKey = "blob-for-copying-src" dstKey = "blob-for-copying-dest" dstKeyExists = "blob-for-copying-dest-exists" contentType = "text/plain" cacheControl = "no-cache" contentDisposition = "inline" contentEncoding = "identity" contentLanguage = "en" ) var contents = []byte("Hello World") ctx := context.Background() t.Run("NonExistentSourceFails", func(t *testing.T) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() err = b.Copy(ctx, dstKey, "does-not-exist", nil) if err == nil { t.Errorf("got nil want error") } else if gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("got %v want NotFound error", err) } else if !strings.Contains(err.Error(), "does-not-exist") { t.Errorf("got %v want error to include missing key", err) } }) t.Run("Works", func(t *testing.T) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // Create the source blob. wopts := &blob.WriterOptions{ ContentType: contentType, CacheControl: cacheControl, ContentDisposition: contentDisposition, ContentEncoding: contentEncoding, ContentLanguage: contentLanguage, Metadata: map[string]string{"foo": "bar"}, } if err := b.WriteAll(ctx, srcKey, contents, wopts); err != nil { t.Fatal(err) } // Grab its attributes to compare to the copy's attributes later. wantAttr, err := b.Attributes(ctx, srcKey) if err != nil { t.Fatal(err) } wantAttr.ModTime = time.Time{} // don't compare this field // Create another blob that we're going to overwrite. if err := b.WriteAll(ctx, dstKeyExists, []byte("clobber me"), nil); err != nil { t.Fatal(err) } // Copy the source to the destination. if err := b.Copy(ctx, dstKey, srcKey, nil); err != nil { t.Errorf("got unexpected error copying blob: %v", err) } // Read the copy. got, err := b.ReadAll(ctx, dstKey) if err != nil { t.Fatal(err) } if !cmp.Equal(got, contents) { t.Errorf("got %q want %q", string(got), string(contents)) } // Verify attributes of the copy. gotAttr, err := b.Attributes(ctx, dstKey) if err != nil { t.Fatal(err) } gotAttr.ModTime = time.Time{} // don't compare this field if diff := cmp.Diff(gotAttr, wantAttr, cmpopts.IgnoreUnexported(blob.Attributes{})); diff != "" { t.Errorf("got %v want %v diff %s", gotAttr, wantAttr, diff) } // Copy the source to the second destination, where there's an existing blob. // It should be overwritten. if err := b.Copy(ctx, dstKeyExists, srcKey, nil); err != nil { t.Errorf("got unexpected error copying blob: %v", err) } // Read the copy. got, err = b.ReadAll(ctx, dstKeyExists) if err != nil { t.Fatal(err) } if !cmp.Equal(got, contents) { t.Errorf("got %q want %q", string(got), string(contents)) } // Verify attributes of the copy. gotAttr, err = b.Attributes(ctx, dstKeyExists) if err != nil { t.Fatal(err) } gotAttr.ModTime = time.Time{} // don't compare this field if diff := cmp.Diff(gotAttr, wantAttr, cmpopts.IgnoreUnexported(blob.Attributes{})); diff != "" { t.Errorf("got %v want %v diff %s", gotAttr, wantAttr, diff) } }) } // testDelete tests the functionality of Delete. func testDelete(t *testing.T, newHarness HarnessMaker) { const key = "blob-for-deleting" ctx := context.Background() t.Run("NonExistentFails", func(t *testing.T) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() err = b.Delete(ctx, "does-not-exist") if err == nil { t.Errorf("got nil want error") } else if gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("got %v want NotFound error", err) } else if !strings.Contains(err.Error(), "does-not-exist") { t.Errorf("got %v want error to include missing key", err) } }) t.Run("Works", func(t *testing.T) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // Create the blob. if err := b.WriteAll(ctx, key, []byte("Hello world"), nil); err != nil { t.Fatal(err) } // Delete it. if err := b.Delete(ctx, key); err != nil { t.Errorf("got unexpected error deleting blob: %v", err) } // Subsequent read fails with NotFound. _, err = b.NewReader(ctx, key, nil) if err == nil { t.Errorf("read after delete got nil, want error") } else if gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("read after delete want NotFound error, got %v", err) } else if !strings.Contains(err.Error(), key) { t.Errorf("got %v want error to include missing key", err) } // Subsequent delete also fails. err = b.Delete(ctx, key) if err == nil { t.Errorf("delete after delete got nil, want error") } else if gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("delete after delete got %v, want NotFound error", err) } else if !strings.Contains(err.Error(), key) { t.Errorf("got %v want error to include missing key", err) } }) } // testConcurrentWriteAndRead tests that concurrent writing to multiple blob // keys and concurrent reading from multiple blob keys works. func testConcurrentWriteAndRead(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // Prepare data. Each of the numKeys blobs has dataSize bytes, with each byte // set to the numeric key index. For example, the blob at "key0" consists of // all dataSize bytes set to 0. const numKeys = 20 const dataSize = 4 * 1024 keyData := make(map[int][]byte) for k := 0; k < numKeys; k++ { data := make([]byte, dataSize) for i := 0; i < dataSize; i++ { data[i] = byte(k) } keyData[k] = data } blobName := func(k int) string { return fmt.Sprintf("key%d", k) } var wg sync.WaitGroup // Write all blobs concurrently. for k := 0; k < numKeys; k++ { wg.Add(1) go func(key int) { if err := b.WriteAll(ctx, blobName(key), keyData[key], nil); err != nil { t.Fatal(err) } wg.Done() }(k) defer b.Delete(ctx, blobName(k)) } wg.Wait() // Read all blobs concurrently and verify that they contain the expected data. for k := 0; k < numKeys; k++ { wg.Add(1) go func(key int) { buf, err := b.ReadAll(ctx, blobName(key)) if err != nil { t.Fatal(err) } if !bytes.Equal(buf, keyData[key]) { t.Errorf("read data mismatch for key %d", key) } wg.Done() }(k) } wg.Wait() } // testKeys tests a variety of weird keys. func testKeys(t *testing.T, newHarness HarnessMaker) { const keyPrefix = "weird-keys" content := []byte("hello") ctx := context.Background() t.Run("non-UTF8 fails", func(t *testing.T) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // Write the blob. key := keyPrefix + escape.NonUTF8String if err := b.WriteAll(ctx, key, content, nil); err == nil { t.Error("got nil error, expected error for using non-UTF8 string as key") } }) for description, key := range escape.WeirdStrings { t.Run(description, func(t *testing.T) { h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // Write the blob. key = keyPrefix + key if err := b.WriteAll(ctx, key, content, nil); err != nil { t.Fatal(err) } defer func() { err := b.Delete(ctx, key) if err != nil { t.Error(err) } }() // Verify read works. got, err := b.ReadAll(ctx, key) if err != nil { t.Fatal(err) } if !cmp.Equal(got, content) { t.Errorf("got %q want %q", string(got), string(content)) } // Verify Attributes works. _, err = b.Attributes(ctx, key) if err != nil { t.Error(err) } // Verify SignedURL works. url, err := b.SignedURL(ctx, key, nil) if gcerrors.Code(err) != gcerrors.Unimplemented { if err != nil { t.Error(err) } client := h.HTTPClient() if client == nil { t.Error("can't verify SignedURL, Harness.HTTPClient() returned nil") } resp, err := client.Get(url) if err != nil { t.Fatal(err) } defer resp.Body.Close() if resp.StatusCode != 200 { t.Errorf("got status code %d, want 200", resp.StatusCode) } got, err := ioutil.ReadAll(resp.Body) if err != nil { t.Fatal(err) } if !bytes.Equal(got, content) { t.Errorf("got body %q, want %q", string(got), string(content)) } } }) } } // testSignedURL tests the functionality of SignedURL. func testSignedURL(t *testing.T, newHarness HarnessMaker) { const key = "blob-for-signing" const contents = "hello world" ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // Verify that a negative Expiry gives an error. This is enforced in the // portable type, so works regardless of driver support. _, err = b.SignedURL(ctx, key, &blob.SignedURLOptions{Expiry: -1 * time.Minute}) if err == nil { t.Error("got nil error, expected error for negative SignedURLOptions.Expiry") } // Generate real signed URLs for GET, GET with the query params remvoed, PUT, and DELETE. getURL, err := b.SignedURL(ctx, key, nil) if err != nil { if gcerrors.Code(err) == gcerrors.Unimplemented { t.Skipf("SignedURL not supported") return } t.Fatal(err) } else if getURL == "" { t.Fatal("got empty GET url") } // Copy getURL, but remove all query params. This URL should not be allowed // to GET since the client is unauthorized. getURLNoParamsURL, err := url.Parse(getURL) if err != nil { t.Fatalf("failed to parse getURL: %v", err) } getURLNoParamsURL.RawQuery = "" getURLNoParams := getURLNoParamsURL.String() const ( allowedContentType = "text/plain" differentContentType = "application/octet-stream" ) putURLWithContentType, err := b.SignedURL(ctx, key, &blob.SignedURLOptions{ Method: http.MethodPut, ContentType: allowedContentType, }) if gcerrors.Code(err) == gcerrors.Unimplemented { t.Log("PUT URLs with content type not supported, skipping") } else if err != nil { t.Fatal(err) } else if putURLWithContentType == "" { t.Fatal("got empty PUT url") } putURLEnforcedAbsentContentType, err := b.SignedURL(ctx, key, &blob.SignedURLOptions{ Method: http.MethodPut, EnforceAbsentContentType: true, }) if gcerrors.Code(err) == gcerrors.Unimplemented { t.Log("PUT URLs with enforced absent content type not supported, skipping") } else if err != nil { t.Fatal(err) } else if putURLEnforcedAbsentContentType == "" { t.Fatal("got empty PUT url") } putURLWithoutContentType, err := b.SignedURL(ctx, key, &blob.SignedURLOptions{ Method: http.MethodPut, }) if err != nil { t.Fatal(err) } else if putURLWithoutContentType == "" { t.Fatal("got empty PUT url") } deleteURL, err := b.SignedURL(ctx, key, &blob.SignedURLOptions{Method: http.MethodDelete}) if err != nil { t.Fatal(err) } else if deleteURL == "" { t.Fatal("got empty DELETE url") } client := h.HTTPClient() if client == nil { t.Fatal("can't verify SignedURL, Harness.HTTPClient() returned nil") } // PUT the blob. Try with all URLs, only putURL should work when given the // content type used in the signature. type signedURLTest struct { urlMethod string contentType string url string wantSuccess bool } tests := []signedURLTest{ {http.MethodGet, "", getURL, false}, {http.MethodDelete, "", deleteURL, false}, } if putURLWithContentType != "" { tests = append(tests, signedURLTest{http.MethodPut, allowedContentType, putURLWithContentType, true}) tests = append(tests, signedURLTest{http.MethodPut, differentContentType, putURLWithContentType, false}) tests = append(tests, signedURLTest{http.MethodPut, "", putURLWithContentType, false}) } if putURLEnforcedAbsentContentType != "" { tests = append(tests, signedURLTest{http.MethodPut, "", putURLWithoutContentType, true}) tests = append(tests, signedURLTest{http.MethodPut, differentContentType, putURLWithoutContentType, false}) } if putURLWithoutContentType != "" { tests = append(tests, signedURLTest{http.MethodPut, "", putURLWithoutContentType, true}) } for _, test := range tests { req, err := http.NewRequest(http.MethodPut, test.url, strings.NewReader(contents)) if err != nil { t.Fatalf("failed to create PUT HTTP request using %s URL (content-type=%q): %v", test.urlMethod, test.contentType, err) } if test.contentType != "" { req.Header.Set("Content-Type", test.contentType) } if resp, err := client.Do(req); err != nil { t.Fatalf("PUT failed with %s URL (content-type=%q): %v", test.urlMethod, test.contentType, err) } else { defer resp.Body.Close() success := resp.StatusCode >= 200 && resp.StatusCode < 300 if success != test.wantSuccess { t.Errorf("PUT with %s URL (content-type=%q) got status code %d, want 2xx? %v", test.urlMethod, test.contentType, resp.StatusCode, test.wantSuccess) gotBody, _ := ioutil.ReadAll(resp.Body) t.Errorf(string(gotBody)) } } } // GET it. Try with all URLs, only getURL should work. for _, test := range []struct { urlMethod string url string wantSuccess bool }{ {http.MethodDelete, deleteURL, false}, {http.MethodPut, putURLWithoutContentType, false}, {http.MethodGet, getURLNoParams, false}, {http.MethodGet, getURL, true}, } { if resp, err := client.Get(test.url); err != nil { t.Fatalf("GET with %s URL failed: %v", test.urlMethod, err) } else { defer resp.Body.Close() success := resp.StatusCode >= 200 && resp.StatusCode < 300 if success != test.wantSuccess { t.Errorf("GET with %s URL got status code %d, want 2xx? %v", test.urlMethod, resp.StatusCode, test.wantSuccess) gotBody, _ := ioutil.ReadAll(resp.Body) t.Errorf(string(gotBody)) } else if success { gotBody, err := ioutil.ReadAll(resp.Body) if err != nil { t.Errorf("GET with %s URL failed to read response body: %v", test.urlMethod, err) } else if gotBodyStr := string(gotBody); gotBodyStr != contents { t.Errorf("GET with %s URL got body %q, want %q", test.urlMethod, gotBodyStr, contents) } } } } // DELETE it. Try with all URLs, only deleteURL should work. for _, test := range []struct { urlMethod string url string wantSuccess bool }{ {http.MethodGet, getURL, false}, {http.MethodPut, putURLWithoutContentType, false}, {http.MethodDelete, deleteURL, true}, } { req, err := http.NewRequest(http.MethodDelete, test.url, nil) if err != nil { t.Fatalf("failed to create DELETE HTTP request using %s URL: %v", test.urlMethod, err) } if resp, err := client.Do(req); err != nil { t.Fatalf("DELETE with %s URL failed: %v", test.urlMethod, err) } else { defer resp.Body.Close() success := resp.StatusCode >= 200 && resp.StatusCode < 300 if success != test.wantSuccess { t.Fatalf("DELETE with %s URL got status code %d, want 2xx? %v", test.urlMethod, resp.StatusCode, test.wantSuccess) gotBody, _ := ioutil.ReadAll(resp.Body) t.Errorf(string(gotBody)) } } } // GET should fail now that the blob has been deleted. if resp, err := client.Get(getURL); err != nil { t.Errorf("GET after DELETE failed: %v", err) } else { defer resp.Body.Close() if resp.StatusCode != 404 { t.Errorf("GET after DELETE got status code %d, want 404", resp.StatusCode) gotBody, _ := ioutil.ReadAll(resp.Body) t.Errorf(string(gotBody)) } } } // testAs tests the various As functions, using AsTest. func testAs(t *testing.T, newHarness HarnessMaker, st AsTest) { const ( dir = "mydir" key = dir + "/as-test" copyKey = dir + "/as-test-copy" ) var content = []byte("hello world") ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } b := blob.NewBucket(drv) defer b.Close() // Verify Bucket.As. if err := st.BucketCheck(b); err != nil { t.Error(err) } // Create a blob, using the provided callback. if err := b.WriteAll(ctx, key, content, &blob.WriterOptions{BeforeWrite: st.BeforeWrite}); err != nil { t.Error(err) } defer func() { _ = b.Delete(ctx, key) }() // Verify Attributes.As. attrs, err := b.Attributes(ctx, key) if err != nil { t.Fatal(err) } if err := st.AttributesCheck(attrs); err != nil { t.Error(err) } // Verify Reader.As. r, err := b.NewReader(ctx, key, &blob.ReaderOptions{BeforeRead: st.BeforeRead}) if err != nil { t.Fatal(err) } defer r.Close() if err := st.ReaderCheck(r); err != nil { t.Error(err) } // Verify ListObject.As for the directory. iter := b.List(&blob.ListOptions{Prefix: dir, Delimiter: "/", BeforeList: st.BeforeList}) found := false for { obj, err := iter.Next(ctx) if err == io.EOF { break } if found { t.Fatal("got a second object returned from List, only wanted one") } found = true if err != nil { log.Fatal(err) } if err := st.ListObjectCheck(obj); err != nil { t.Error(err) } } // Verify ListObject.As for the blob. iter = b.List(&blob.ListOptions{Prefix: key, BeforeList: st.BeforeList}) found = false for { obj, err := iter.Next(ctx) if err == io.EOF { break } if found { t.Fatal("got a second object returned from List, only wanted one") } found = true if err != nil { log.Fatal(err) } if err := st.ListObjectCheck(obj); err != nil { t.Error(err) } } _, gotErr := b.NewReader(ctx, "key-does-not-exist", nil) if gotErr == nil { t.Fatalf("got nil error from NewReader for nonexistent key, want an error") } if err := st.ErrorCheck(b, gotErr); err != nil { t.Error(err) } // Copy the blob, using the provided callback. if err := b.Copy(ctx, copyKey, key, &blob.CopyOptions{BeforeCopy: st.BeforeCopy}); err != nil { t.Error(err) } else { defer func() { _ = b.Delete(ctx, copyKey) }() } } func benchmarkRead(b *testing.B, bkt *blob.Bucket) { ctx := context.Background() const key = "readbenchmark-blob" content := loadTestData(b, "test-large.jpg") if err := bkt.WriteAll(ctx, key, content, nil); err != nil { b.Fatal(err) } defer func() { _ = bkt.Delete(ctx, key) }() b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { buf, err := bkt.ReadAll(ctx, key) if err != nil { b.Error(err) } if !bytes.Equal(buf, content) { b.Error("read didn't match write") } } }) } func benchmarkWriteReadDelete(b *testing.B, bkt *blob.Bucket) { ctx := context.Background() const baseKey = "writereaddeletebenchmark-blob-" content := loadTestData(b, "test-large.jpg") var nextID uint32 b.ResetTimer() b.RunParallel(func(pb *testing.PB) { key := fmt.Sprintf("%s%d", baseKey, atomic.AddUint32(&nextID, 1)) for pb.Next() { if err := bkt.WriteAll(ctx, key, content, nil); err != nil { b.Error(err) continue } buf, err := bkt.ReadAll(ctx, key) if err != nil { b.Error(err) } if !bytes.Equal(buf, content) { b.Error("read didn't match write") } if err := bkt.Delete(ctx, key); err != nil { b.Error(err) continue } } }) } go-cloud-0.20.0/blob/example_openbucket_test.go000066400000000000000000000043171367004507500214740ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package blob_test import ( "context" "fmt" "log" "gocloud.dev/blob" _ "gocloud.dev/blob/memblob" ) func Example_openFromURL() { ctx := context.Background() // Connect to a bucket using a URL. // This example uses "memblob", the in-memory implementation. // We need to add a blank import line to register the memblob driver's // URLOpener, which implements blob.BucketURLOpener: // import _ "gocloud.dev/blob/memblob" // memblob registers for the "mem" scheme. // All blob.OpenBucket URLs also work with "blob+" or "blob+bucket+" prefixes, // e.g., "blob+mem://" or "blob+bucket+mem://". b, err := blob.OpenBucket(ctx, "mem://") if err != nil { log.Fatal(err) } defer b.Close() // Now we can use b to read or write to blobs in the bucket. if err := b.WriteAll(ctx, "my-key", []byte("hello world"), nil); err != nil { log.Fatal(err) } data, err := b.ReadAll(ctx, "my-key") if err != nil { log.Fatal(err) } fmt.Println(string(data)) // Output: // hello world } func Example_openFromURLWithPrefix() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Connect to a bucket using a URL, using the "prefix" query parameter to // target a subfolder in the bucket. // The prefix should end with "/", so that the resulting bucket operates // in a subfolder. b, err := blob.OpenBucket(ctx, "mem://?prefix=a/subfolder/") if err != nil { log.Fatal(err) } defer b.Close() // Bucket operations on will be translated to "a/subfolder/". } go-cloud-0.20.0/blob/example_test.go000066400000000000000000000311761367004507500172600ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package blob_test import ( "context" "fmt" "io" "io/ioutil" "log" "os" "cloud.google.com/go/storage" "github.com/aws/aws-sdk-go/aws/awserr" "gocloud.dev/blob" "gocloud.dev/blob/fileblob" _ "gocloud.dev/blob/gcsblob" _ "gocloud.dev/blob/s3blob" ) func ExampleBucket_NewReader() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var bucket *blob.Bucket // Open the key "foo.txt" for reading with the default options. r, err := bucket.NewReader(ctx, "foo.txt", nil) if err != nil { log.Fatal(err) } defer r.Close() // Readers also have a limited view of the blob's metadata. fmt.Println("Content-Type:", r.ContentType()) fmt.Println() // Copy from the reader to stdout. if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err) } } func ExampleBucket_NewRangeReader() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var bucket *blob.Bucket // Open the key "foo.txt" for reading at offset 1024 and read up to 4096 bytes. r, err := bucket.NewRangeReader(ctx, "foo.txt", 1024, 4096, nil) if err != nil { log.Fatal(err) } defer r.Close() // Copy from the read range to stdout. if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err) } } func ExampleBucket_NewWriter() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var bucket *blob.Bucket // Open the key "foo.txt" for writing with the default options. w, err := bucket.NewWriter(ctx, "foo.txt", nil) if err != nil { log.Fatal(err) } _, writeErr := fmt.Fprintln(w, "Hello, World!") // Always check the return value of Close when writing. closeErr := w.Close() if writeErr != nil { log.Fatal(writeErr) } if closeErr != nil { log.Fatal(closeErr) } } func ExampleBucket_NewWriter_cancel() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var bucket *blob.Bucket // Create a cancelable context from the existing context. writeCtx, cancelWrite := context.WithCancel(ctx) defer cancelWrite() // Open the key "foo.txt" for writing with the default options. w, err := bucket.NewWriter(writeCtx, "foo.txt", nil) if err != nil { log.Fatal(err) } // Assume some writes happened and we encountered an error. // Now we want to abort the write. if err != nil { // First cancel the context. cancelWrite() // You must still close the writer to avoid leaking resources. w.Close() } } func ExampleBucket_Delete() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var bucket *blob.Bucket if err := bucket.Delete(ctx, "foo.txt"); err != nil { log.Fatal(err) } } func Example() { // Connect to a bucket when your program starts up. // This example uses the file-based implementation in fileblob, and creates // a temporary directory to use as the root directory. dir, cleanup := newTempDir() defer cleanup() bucket, err := fileblob.OpenBucket(dir, nil) if err != nil { log.Fatal(err) } defer bucket.Close() // We now have a *blob.Bucket! We can write our application using the // *blob.Bucket type, and have the freedom to change the initialization code // above to choose a different service-specific driver later. // In this example, we'll write a blob and then read it. ctx := context.Background() if err := bucket.WriteAll(ctx, "foo.txt", []byte("Go Cloud Development Kit"), nil); err != nil { log.Fatal(err) } b, err := bucket.ReadAll(ctx, "foo.txt") if err != nil { log.Fatal(err) } fmt.Println(string(b)) // Output: // Go Cloud Development Kit } func ExampleBucket_ErrorAs() { // This example is specific to the s3blob implementation; it demonstrates // access to the underlying awserr.Error type. // The types exposed for ErrorAs by s3blob are documented in // https://godoc.org/gocloud.dev/blob/s3blob#hdr-As ctx := context.Background() b, err := blob.OpenBucket(ctx, "s3://my-bucket") if err != nil { log.Fatal(err) } defer b.Close() _, err = b.ReadAll(ctx, "nosuchfile") if err != nil { var awsErr awserr.Error if b.ErrorAs(err, &awsErr) { fmt.Println(awsErr.Code()) } } } func ExampleBucket_List() { // Connect to a bucket when your program starts up. // This example uses the file-based implementation. dir, cleanup := newTempDir() defer cleanup() // Create the file-based bucket. bucket, err := fileblob.OpenBucket(dir, nil) if err != nil { log.Fatal(err) } defer bucket.Close() // Create some blob objects for listing: "foo[0..4].txt". ctx := context.Background() for i := 0; i < 5; i++ { if err := bucket.WriteAll(ctx, fmt.Sprintf("foo%d.txt", i), []byte("Go Cloud Development Kit"), nil); err != nil { log.Fatal(err) } } // Iterate over them. // This will list the blobs created above because fileblob is strongly // consistent, but is not guaranteed to work on all services. iter := bucket.List(nil) for { obj, err := iter.Next(ctx) if err == io.EOF { break } if err != nil { log.Fatal(err) } fmt.Println(obj.Key) } // Output: // foo0.txt // foo1.txt // foo2.txt // foo3.txt // foo4.txt } func ExampleBucket_List_withDelimiter() { // Connect to a bucket when your program starts up. // This example uses the file-based implementation. dir, cleanup := newTempDir() defer cleanup() // Create the file-based bucket. bucket, err := fileblob.OpenBucket(dir, nil) if err != nil { log.Fatal(err) } defer bucket.Close() // Create some blob objects in a hierarchy. ctx := context.Background() for _, key := range []string{ "dir1/subdir/a.txt", "dir1/subdir/b.txt", "dir2/c.txt", "d.txt", } { if err := bucket.WriteAll(ctx, key, []byte("Go Cloud Development Kit"), nil); err != nil { log.Fatal(err) } } // list lists files in b starting with prefix. It uses the delimiter "/", // and recurses into "directories", adding 2 spaces to indent each time. // It will list the blobs created above because fileblob is strongly // consistent, but is not guaranteed to work on all services. var list func(context.Context, *blob.Bucket, string, string) list = func(ctx context.Context, b *blob.Bucket, prefix, indent string) { iter := b.List(&blob.ListOptions{ Delimiter: "/", Prefix: prefix, }) for { obj, err := iter.Next(ctx) if err == io.EOF { break } if err != nil { log.Fatal(err) } fmt.Printf("%s%s\n", indent, obj.Key) if obj.IsDir { list(ctx, b, obj.Key, indent+" ") } } } list(ctx, bucket, "", "") // Output: // d.txt // dir1/ // dir1/subdir/ // dir1/subdir/a.txt // dir1/subdir/b.txt // dir2/ // dir2/c.txt } func ExampleBucket_As() { // This example is specific to the gcsblob implementation; it demonstrates // access to the underlying cloud.google.com/go/storage.Client type. // The types exposed for As by gcsblob are documented in // https://godoc.org/gocloud.dev/blob/gcsblob#hdr-As // This URL will open the bucket "my-bucket" using default credentials. ctx := context.Background() b, err := blob.OpenBucket(ctx, "gs://my-bucket") if err != nil { log.Fatal(err) } defer b.Close() // Access storage.Client fields via gcsClient here. var gcsClient *storage.Client if b.As(&gcsClient) { email, err := gcsClient.ServiceAccount(ctx, "project-name") if err != nil { log.Fatal(err) } _ = email } else { log.Println("Unable to access storage.Client through Bucket.As") } } func ExampleWriterOptions() { // This example is specific to the gcsblob implementation; it demonstrates // access to the underlying cloud.google.com/go/storage.Writer type. // The types exposed for As by gcsblob are documented in // https://godoc.org/gocloud.dev/blob/gcsblob#hdr-As ctx := context.Background() b, err := blob.OpenBucket(ctx, "gs://my-bucket") if err != nil { log.Fatal(err) } defer b.Close() beforeWrite := func(as func(interface{}) bool) error { var sw *storage.Writer if as(&sw) { fmt.Println(sw.ChunkSize) } return nil } options := blob.WriterOptions{BeforeWrite: beforeWrite} if err := b.WriteAll(ctx, "newfile.txt", []byte("hello\n"), &options); err != nil { log.Fatal(err) } } func ExampleListObject_As() { // This example is specific to the gcsblob implementation; it demonstrates // access to the underlying cloud.google.com/go/storage.ObjectAttrs type. // The types exposed for As by gcsblob are documented in // https://godoc.org/gocloud.dev/blob/gcsblob#hdr-As ctx := context.Background() b, err := blob.OpenBucket(ctx, "gs://my-bucket") if err != nil { log.Fatal(err) } defer b.Close() iter := b.List(nil) for { obj, err := iter.Next(ctx) if err == io.EOF { break } if err != nil { log.Fatal(err) } // Access storage.ObjectAttrs via oa here. var oa storage.ObjectAttrs if obj.As(&oa) { _ = oa.Owner } } } func ExampleListOptions() { // This example is specific to the gcsblob implementation; it demonstrates // access to the underlying cloud.google.com/go/storage.Query type. // The types exposed for As by gcsblob are documented in // https://godoc.org/gocloud.dev/blob/gcsblob#hdr-As ctx := context.Background() b, err := blob.OpenBucket(ctx, "gs://my-bucket") if err != nil { log.Fatal(err) } defer b.Close() beforeList := func(as func(interface{}) bool) error { // Access storage.Query via q here. var q *storage.Query if as(&q) { _ = q.Delimiter } return nil } iter := b.List(&blob.ListOptions{Prefix: "", Delimiter: "/", BeforeList: beforeList}) for { obj, err := iter.Next(ctx) if err == io.EOF { break } if err != nil { log.Fatal(err) } _ = obj } } func ExamplePrefixedBucket() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. var bucket *blob.Bucket // Wrap the bucket using blob.PrefixedBucket. // The prefix should end with "/", so that the resulting bucket operates // in a subfolder. bucket = blob.PrefixedBucket(bucket, "a/subfolder/") // The original bucket is no longer usable; it has been closed. // The wrapped bucket should be closed when done. defer bucket.Close() // Bucket operations on will be translated to "a/subfolder/". } func ExampleReader_As() { // This example is specific to the gcsblob implementation; it demonstrates // access to the underlying cloud.google.com/go/storage.Reader type. // The types exposed for As by gcsblob are documented in // https://godoc.org/gocloud.dev/blob/gcsblob#hdr-As ctx := context.Background() b, err := blob.OpenBucket(ctx, "gs://my-bucket") if err != nil { log.Fatal(err) } defer b.Close() r, err := b.NewReader(ctx, "gopher.png", nil) if err != nil { log.Fatal(err) } defer r.Close() // Access storage.Reader via sr here. var sr *storage.Reader if r.As(&sr) { _ = sr.Attrs } } func ExampleAttributes_As() { // This example is specific to the gcsblob implementation; it demonstrates // access to the underlying cloud.google.com/go/storage.ObjectAttrs type. // The types exposed for As by gcsblob are documented in // https://godoc.org/gocloud.dev/blob/gcsblob#hdr-As ctx := context.Background() b, err := blob.OpenBucket(ctx, "gs://my-bucket") if err != nil { log.Fatal(err) } defer b.Close() attrs, err := b.Attributes(ctx, "gopher.png") if err != nil { log.Fatal(err) } var oa storage.ObjectAttrs if attrs.As(&oa) { fmt.Println(oa.Owner) } } func newTempDir() (string, func()) { dir, err := ioutil.TempDir("", "go-cloud-blob-example") if err != nil { panic(err) } return dir, func() { os.RemoveAll(dir) } } go-cloud-0.20.0/blob/fileblob/000077500000000000000000000000001367004507500160055ustar00rootroot00000000000000go-cloud-0.20.0/blob/fileblob/attrs.go000066400000000000000000000044461367004507500175010ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package fileblob import ( "encoding/json" "fmt" "os" ) const attrsExt = ".attrs" var errAttrsExt = fmt.Errorf("file extension %q is reserved", attrsExt) // xattrs stores extended attributes for an object. The format is like // filesystem extended attributes, see // https://www.freedesktop.org/wiki/CommonExtendedAttributes. type xattrs struct { CacheControl string `json:"user.cache_control"` ContentDisposition string `json:"user.content_disposition"` ContentEncoding string `json:"user.content_encoding"` ContentLanguage string `json:"user.content_language"` ContentType string `json:"user.content_type"` Metadata map[string]string `json:"user.metadata"` MD5 []byte `json:"md5"` } // setAttrs creates a "path.attrs" file along with blob to store the attributes, // it uses JSON format. func setAttrs(path string, xa xattrs) error { f, err := os.Create(path + attrsExt) if err != nil { return err } if err := json.NewEncoder(f).Encode(xa); err != nil { f.Close() return err } return f.Close() } // getAttrs looks at the "path.attrs" file to retrieve the attributes and // decodes them into a xattrs struct. It doesn't return error when there is no // such .attrs file. func getAttrs(path string) (xattrs, error) { f, err := os.Open(path + attrsExt) if err != nil { if os.IsNotExist(err) { // Handle gracefully for non-existent .attr files. return xattrs{ ContentType: "application/octet-stream", }, nil } return xattrs{}, err } xa := new(xattrs) if err := json.NewDecoder(f).Decode(xa); err != nil { f.Close() return xattrs{}, err } return *xa, f.Close() } go-cloud-0.20.0/blob/fileblob/example_test.go000066400000000000000000000041311367004507500210250ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package fileblob_test import ( "context" "fmt" "io/ioutil" "log" "os" "path/filepath" "strings" "gocloud.dev/blob" "gocloud.dev/blob/fileblob" ) func ExampleOpenBucket() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // The directory you pass to fileblob.OpenBucket must exist first. const myDir = "path/to/local/directory" if err := os.MkdirAll(myDir, 0777); err != nil { log.Fatal(err) } // Create a file-based bucket. bucket, err := fileblob.OpenBucket(myDir, nil) if err != nil { log.Fatal(err) } defer bucket.Close() } func Example_openBucketFromURL() { // Create a temporary directory. dir, err := ioutil.TempDir("", "go-cloud-fileblob-example") if err != nil { log.Fatal(err) } defer os.RemoveAll(dir) // On Unix, append the dir to "file://". // On Windows, convert "\" to "/" and add a leading "/": dirpath := filepath.ToSlash(dir) if os.PathSeparator != '/' && !strings.HasPrefix(dirpath, "/") { dirpath = "/" + dirpath } // blob.OpenBucket creates a *blob.Bucket from a URL. ctx := context.Background() b, err := blob.OpenBucket(ctx, "file://"+dirpath) if err != nil { log.Fatal(err) } defer b.Close() // Now we can use b to read or write files to the container. err = b.WriteAll(ctx, "my-key", []byte("hello world"), nil) if err != nil { log.Fatal(err) } data, err := b.ReadAll(ctx, "my-key") if err != nil { log.Fatal(err) } fmt.Println(string(data)) // Output: // hello world } go-cloud-0.20.0/blob/fileblob/fileblob.go000066400000000000000000000534431367004507500201230ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package fileblob provides a blob implementation that uses the filesystem. // Use OpenBucket to construct a *blob.Bucket. // // URLs // // For blob.OpenBucket, fileblob registers for the scheme "file". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Escaping // // Go CDK supports all UTF-8 strings; to make this work with services lacking // full UTF-8 support, strings must be escaped (during writes) and unescaped // (during reads). The following escapes are performed for fileblob: // - Blob keys: ASCII characters 0-31 are escaped to "__0x__". // If os.PathSeparator != "/", it is also escaped. // Additionally, the "/" in "../", the trailing "/" in "//", and a trailing // "/" is key names are escaped in the same way. // On Windows, the characters "<>:"|?*" are also escaped. // // As // // fileblob exposes the following types for As: // - Error: *os.PathError package fileblob // import "gocloud.dev/blob/fileblob" import ( "context" "crypto/hmac" "crypto/md5" "crypto/sha256" "encoding/base64" "errors" "fmt" "hash" "io" "io/ioutil" "net/url" "os" "path/filepath" "strconv" "strings" "time" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/escape" ) const defaultPageSize = 1000 func init() { blob.DefaultURLMux().RegisterBucket(Scheme, &URLOpener{}) } // Scheme is the URL scheme fileblob registers its URLOpener under on // blob.DefaultMux. const Scheme = "file" // URLOpener opens file bucket URLs like "file:///foo/bar/baz". // // The URL's host is ignored unless it is ".", which is used to signal a // relative path. For example, "file://./../.." uses "../.." as the path. // // If os.PathSeparator != "/", any leading "/" from the path is dropped // and remaining '/' characters are converted to os.PathSeparator. // // The following query parameters are supported: // // - base_url: the base URL to use to construct signed URLs; see URLSignerHMAC // - secret_key_path: path to read for the secret key used to construct signed URLs; // see URLSignerHMAC // // If either of these is provided, both must be. // // - file:///a/directory // -> Passes "/a/directory" to OpenBucket. // - file://localhost/a/directory // -> Also passes "/a/directory". // - file://./../.. // -> The hostname is ".", signaling a relative path; passes "../..". // - file:///c:/foo/bar on Windows. // -> Passes "c:\foo\bar". // - file://localhost/c:/foo/bar on Windows. // -> Also passes "c:\foo\bar". // - file:///a/directory?base_url=/show&secret_key_path=secret.key // -> Passes "/a/directory" to OpenBucket, and sets Options.URLSigner // to a URLSignerHMAC initialized with base URL "/show" and secret key // bytes read from the file "secret.key". type URLOpener struct { // Options specifies the default options to pass to OpenBucket. Options Options } // OpenBucketURL opens a blob.Bucket based on u. func (o *URLOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { path := u.Path // Hostname == "." means a relative path, so drop the leading "/". // Also drop the leading "/" on Windows. if u.Host == "." || os.PathSeparator != '/' { path = strings.TrimPrefix(path, "/") } opts, err := o.forParams(ctx, u.Query()) if err != nil { return nil, fmt.Errorf("open bucket %v: %v", u, err) } return OpenBucket(filepath.FromSlash(path), opts) } func (o *URLOpener) forParams(ctx context.Context, q url.Values) (*Options, error) { for k := range q { if k != "base_url" && k != "secret_key_path" { return nil, fmt.Errorf("invalid query parameter %q", k) } } opts := new(Options) *opts = o.Options baseURL := q.Get("base_url") keyPath := q.Get("secret_key_path") if (baseURL == "") != (keyPath == "") { return nil, errors.New("must supply both base_url and secret_key_path query parameters") } if baseURL != "" { burl, err := url.Parse(baseURL) if err != nil { return nil, err } sk, err := ioutil.ReadFile(keyPath) if err != nil { return nil, err } opts.URLSigner = NewURLSignerHMAC(burl, sk) } return opts, nil } // Options sets options for constructing a *blob.Bucket backed by fileblob. type Options struct { // URLSigner implements signing URLs (to allow access to a resource without // further authorization) and verifying that a given URL is unexpired and // contains a signature produced by the URLSigner. // URLSigner is only required for utilizing the SignedURL API. URLSigner URLSigner } type bucket struct { dir string opts *Options } // openBucket creates a driver.Bucket that reads and writes to dir. // dir must exist. func openBucket(dir string, opts *Options) (driver.Bucket, error) { absdir, err := filepath.Abs(dir) if err != nil { return nil, fmt.Errorf("failed to convert %s into an absolute path: %v", dir, err) } info, err := os.Stat(absdir) if err != nil { return nil, err } if !info.IsDir() { return nil, fmt.Errorf("%s is not a directory", absdir) } if opts == nil { opts = &Options{} } return &bucket{dir: absdir, opts: opts}, nil } // OpenBucket creates a *blob.Bucket backed by the filesystem and rooted at // dir, which must exist. See the package documentation for an example. func OpenBucket(dir string, opts *Options) (*blob.Bucket, error) { drv, err := openBucket(dir, opts) if err != nil { return nil, err } return blob.NewBucket(drv), nil } func (b *bucket) Close() error { return nil } // escapeKey does all required escaping for UTF-8 strings to work the filesystem. func escapeKey(s string) string { s = escape.HexEscape(s, func(r []rune, i int) bool { c := r[i] switch { case c < 32: return true // We're going to replace '/' with os.PathSeparator below. In order for this // to be reversible, we need to escape raw os.PathSeparators. case os.PathSeparator != '/' && c == os.PathSeparator: return true // For "../", escape the trailing slash. case i > 1 && c == '/' && r[i-1] == '.' && r[i-2] == '.': return true // For "//", escape the trailing slash. case i > 0 && c == '/' && r[i-1] == '/': return true // Escape the trailing slash in a key. case c == '/' && i == len(r)-1: return true // https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file case os.PathSeparator == '\\' && (c == '>' || c == '<' || c == ':' || c == '"' || c == '|' || c == '?' || c == '*'): return true } return false }) // Replace "/" with os.PathSeparator if needed, so that the local filesystem // can use subdirectories. if os.PathSeparator != '/' { s = strings.Replace(s, "/", string(os.PathSeparator), -1) } return s } // unescapeKey reverses escapeKey. func unescapeKey(s string) string { if os.PathSeparator != '/' { s = strings.Replace(s, string(os.PathSeparator), "/", -1) } s = escape.HexUnescape(s) return s } func (b *bucket) ErrorCode(err error) gcerrors.ErrorCode { switch { case os.IsNotExist(err): return gcerrors.NotFound default: return gcerrors.Unknown } } // path returns the full path for a key func (b *bucket) path(key string) (string, error) { path := filepath.Join(b.dir, escapeKey(key)) if strings.HasSuffix(path, attrsExt) { return "", errAttrsExt } return path, nil } // forKey returns the full path, os.FileInfo, and attributes for key. func (b *bucket) forKey(key string) (string, os.FileInfo, *xattrs, error) { path, err := b.path(key) if err != nil { return "", nil, nil, err } info, err := os.Stat(path) if err != nil { return "", nil, nil, err } if info.IsDir() { return "", nil, nil, os.ErrNotExist } xa, err := getAttrs(path) if err != nil { return "", nil, nil, err } return path, info, &xa, nil } // ListPaged implements driver.ListPaged. func (b *bucket) ListPaged(ctx context.Context, opts *driver.ListOptions) (*driver.ListPage, error) { var pageToken string if len(opts.PageToken) > 0 { pageToken = string(opts.PageToken) } pageSize := opts.PageSize if pageSize == 0 { pageSize = defaultPageSize } // If opts.Delimiter != "", lastPrefix contains the last "directory" key we // added. It is used to avoid adding it again; all files in this "directory" // are collapsed to the single directory entry. var lastPrefix string // If the Prefix contains a "/", we can set the root of the Walk // to the path specified by the Prefix as any files below the path will not // match the Prefix. // Note that we use "/" explicitly and not os.PathSeparator, as the opts.Prefix // is in the unescaped form. root := b.dir if i := strings.LastIndex(opts.Prefix, "/"); i > -1 { root = filepath.Join(root, opts.Prefix[:i]) } // Do a full recursive scan of the root directory. var result driver.ListPage err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { // Couldn't read this file/directory for some reason; just skip it. return nil } // Skip the self-generated attribute files. if strings.HasSuffix(path, attrsExt) { return nil } // os.Walk returns the root directory; skip it. if path == b.dir { return nil } // Strip the prefix from path; +1 is to include the separator. path = path[len(b.dir)+1:] // Unescape the path to get the key. key := unescapeKey(path) // Skip all directories. If opts.Delimiter is set, we'll create // pseudo-directories later. // Note that returning nil means that we'll still recurse into it; // we're just not adding a result for the directory itself. if info.IsDir() { key += "/" // Avoid recursing into subdirectories if the directory name already // doesn't match the prefix; any files in it are guaranteed not to match. if len(key) > len(opts.Prefix) && !strings.HasPrefix(key, opts.Prefix) { return filepath.SkipDir } // Similarly, avoid recursing into subdirectories if we're making // "directories" and all of the files in this subdirectory are guaranteed // to collapse to a "directory" that we've already added. if lastPrefix != "" && strings.HasPrefix(key, lastPrefix) { return filepath.SkipDir } return nil } // Skip files/directories that don't match the Prefix. if !strings.HasPrefix(key, opts.Prefix) { return nil } var md5 []byte if xa, err := getAttrs(path); err == nil { // Note: we only have the MD5 hash for blobs that we wrote. // For other blobs, md5 will remain nil. md5 = xa.MD5 } obj := &driver.ListObject{ Key: key, ModTime: info.ModTime(), Size: info.Size(), MD5: md5, } // If using Delimiter, collapse "directories". if opts.Delimiter != "" { // Strip the prefix, which may contain Delimiter. keyWithoutPrefix := key[len(opts.Prefix):] // See if the key still contains Delimiter. // If no, it's a file and we just include it. // If yes, it's a file in a "sub-directory" and we want to collapse // all files in that "sub-directory" into a single "directory" result. if idx := strings.Index(keyWithoutPrefix, opts.Delimiter); idx != -1 { prefix := opts.Prefix + keyWithoutPrefix[0:idx+len(opts.Delimiter)] // We've already included this "directory"; don't add it. if prefix == lastPrefix { return nil } // Update the object to be a "directory". obj = &driver.ListObject{ Key: prefix, IsDir: true, } lastPrefix = prefix } } // If there's a pageToken, skip anything before it. if pageToken != "" && obj.Key <= pageToken { return nil } // If we've already got a full page of results, set NextPageToken and stop. if len(result.Objects) == pageSize { result.NextPageToken = []byte(result.Objects[pageSize-1].Key) return io.EOF } result.Objects = append(result.Objects, obj) return nil }) if err != nil && err != io.EOF { return nil, err } return &result, nil } // As implements driver.As. func (b *bucket) As(i interface{}) bool { return false } // As implements driver.ErrorAs. func (b *bucket) ErrorAs(err error, i interface{}) bool { if perr, ok := err.(*os.PathError); ok { if p, ok := i.(**os.PathError); ok { *p = perr return true } } return false } // Attributes implements driver.Attributes. func (b *bucket) Attributes(ctx context.Context, key string) (*driver.Attributes, error) { _, info, xa, err := b.forKey(key) if err != nil { return nil, err } return &driver.Attributes{ CacheControl: xa.CacheControl, ContentDisposition: xa.ContentDisposition, ContentEncoding: xa.ContentEncoding, ContentLanguage: xa.ContentLanguage, ContentType: xa.ContentType, Metadata: xa.Metadata, ModTime: info.ModTime(), Size: info.Size(), MD5: xa.MD5, }, nil } // NewRangeReader implements driver.NewRangeReader. func (b *bucket) NewRangeReader(ctx context.Context, key string, offset, length int64, opts *driver.ReaderOptions) (driver.Reader, error) { path, info, xa, err := b.forKey(key) if err != nil { return nil, err } f, err := os.Open(path) if err != nil { return nil, err } if opts.BeforeRead != nil { if err := opts.BeforeRead(func(interface{}) bool { return false }); err != nil { return nil, err } } if offset > 0 { if _, err := f.Seek(offset, io.SeekStart); err != nil { return nil, err } } r := io.Reader(f) if length >= 0 { r = io.LimitReader(r, length) } return &reader{ r: r, c: f, attrs: driver.ReaderAttributes{ ContentType: xa.ContentType, ModTime: info.ModTime(), Size: info.Size(), }, }, nil } type reader struct { r io.Reader c io.Closer attrs driver.ReaderAttributes } func (r *reader) Read(p []byte) (int, error) { if r.r == nil { return 0, io.EOF } return r.r.Read(p) } func (r *reader) Close() error { if r.c == nil { return nil } return r.c.Close() } func (r *reader) Attributes() *driver.ReaderAttributes { return &r.attrs } func (r *reader) As(i interface{}) bool { return false } // NewTypedWriter implements driver.NewTypedWriter. func (b *bucket) NewTypedWriter(ctx context.Context, key string, contentType string, opts *driver.WriterOptions) (driver.Writer, error) { path, err := b.path(key) if err != nil { return nil, err } if err := os.MkdirAll(filepath.Dir(path), 0777); err != nil { return nil, err } f, err := ioutil.TempFile(filepath.Dir(path), "fileblob") if err != nil { return nil, err } if opts.BeforeWrite != nil { if err := opts.BeforeWrite(func(interface{}) bool { return false }); err != nil { return nil, err } } var metadata map[string]string if len(opts.Metadata) > 0 { metadata = opts.Metadata } attrs := xattrs{ CacheControl: opts.CacheControl, ContentDisposition: opts.ContentDisposition, ContentEncoding: opts.ContentEncoding, ContentLanguage: opts.ContentLanguage, ContentType: contentType, Metadata: metadata, } w := &writer{ ctx: ctx, f: f, path: path, attrs: attrs, contentMD5: opts.ContentMD5, md5hash: md5.New(), } return w, nil } type writer struct { ctx context.Context f *os.File path string attrs xattrs contentMD5 []byte // We compute the MD5 hash so that we can store it with the file attributes, // not for verification. md5hash hash.Hash } func (w *writer) Write(p []byte) (n int, err error) { if _, err := w.md5hash.Write(p); err != nil { return 0, err } return w.f.Write(p) } func (w *writer) Close() error { err := w.f.Close() if err != nil { return err } // Always delete the temp file. On success, it will have been renamed so // the Remove will fail. defer func() { _ = os.Remove(w.f.Name()) }() // Check if the write was cancelled. if err := w.ctx.Err(); err != nil { return err } md5sum := w.md5hash.Sum(nil) w.attrs.MD5 = md5sum // Write the attributes file. if err := setAttrs(w.path, w.attrs); err != nil { return err } // Rename the temp file to path. if err := os.Rename(w.f.Name(), w.path); err != nil { _ = os.Remove(w.path + attrsExt) return err } return nil } // Copy implements driver.Copy. func (b *bucket) Copy(ctx context.Context, dstKey, srcKey string, opts *driver.CopyOptions) error { // Note: we could use NewRangeReader here, but since we need to copy all of // the metadata (from xa), it's more efficient to do it directly. srcPath, _, xa, err := b.forKey(srcKey) if err != nil { return err } f, err := os.Open(srcPath) if err != nil { return err } defer f.Close() // We'll write the copy using Writer, to avoid re-implementing making of a // temp file, cleaning up after partial failures, etc. wopts := driver.WriterOptions{ CacheControl: xa.CacheControl, ContentDisposition: xa.ContentDisposition, ContentEncoding: xa.ContentEncoding, ContentLanguage: xa.ContentLanguage, Metadata: xa.Metadata, BeforeWrite: opts.BeforeCopy, } // Create a cancelable context so we can cancel the write if there are // problems. writeCtx, cancel := context.WithCancel(ctx) defer cancel() w, err := b.NewTypedWriter(writeCtx, dstKey, xa.ContentType, &wopts) if err != nil { return err } _, err = io.Copy(w, f) if err != nil { cancel() // cancel before Close cancels the write w.Close() return err } return w.Close() } // Delete implements driver.Delete. func (b *bucket) Delete(ctx context.Context, key string) error { path, err := b.path(key) if err != nil { return err } err = os.Remove(path) if err != nil { return err } if err = os.Remove(path + attrsExt); err != nil && !os.IsNotExist(err) { return err } return nil } // SignedURL implements driver.SignedURL func (b *bucket) SignedURL(ctx context.Context, key string, opts *driver.SignedURLOptions) (string, error) { if b.opts.URLSigner == nil { return "", errors.New("sign fileblob url: bucket does not have an Options.URLSigner") } surl, err := b.opts.URLSigner.URLFromKey(ctx, key, opts) if err != nil { return "", err } return surl.String(), nil } // URLSigner defines an interface for creating and verifying a signed URL for // objects in a fileblob bucket. Signed URLs are typically used for granting // access to an otherwise-protected resource without requiring further // authentication, and callers should take care to restrict the creation of // signed URLs as is appropriate for their application. type URLSigner interface { // URLFromKey defines how the bucket's object key will be turned // into a signed URL. URLFromKey must be safe to call from multiple goroutines. URLFromKey(ctx context.Context, key string, opts *driver.SignedURLOptions) (*url.URL, error) // KeyFromURL must be able to validate a URL returned from URLFromKey. // KeyFromURL must only return the object if if the URL is // both unexpired and authentic. KeyFromURL must be safe to call from // multiple goroutines. Implementations of KeyFromURL should not modify // the URL argument. KeyFromURL(ctx context.Context, surl *url.URL) (string, error) } // URLSignerHMAC signs URLs by adding the object key, expiration time, and a // hash-based message authentication code (HMAC) into the query parameters. // Values of URLSignerHMAC with the same secret key will accept URLs produced by // others as valid. type URLSignerHMAC struct { baseURL *url.URL secretKey []byte } // NewURLSignerHMAC creates a URLSignerHMAC. If the secret key is empty, // then NewURLSignerHMAC panics. func NewURLSignerHMAC(baseURL *url.URL, secretKey []byte) *URLSignerHMAC { if len(secretKey) == 0 { panic("creating URLSignerHMAC: secretKey is required") } uc := new(url.URL) *uc = *baseURL return &URLSignerHMAC{ baseURL: uc, secretKey: secretKey, } } // URLFromKey creates a signed URL by copying the baseURL and appending the // object key, expiry, and signature as a query params. func (h *URLSignerHMAC) URLFromKey(ctx context.Context, key string, opts *driver.SignedURLOptions) (*url.URL, error) { sURL := new(url.URL) *sURL = *h.baseURL q := sURL.Query() q.Set("obj", key) q.Set("expiry", strconv.FormatInt(time.Now().Add(opts.Expiry).Unix(), 10)) q.Set("method", opts.Method) if opts.ContentType != "" { q.Set("contentType", opts.ContentType) } q.Set("signature", h.getMAC(q)) sURL.RawQuery = q.Encode() return sURL, nil } func (h *URLSignerHMAC) getMAC(q url.Values) string { signedVals := url.Values{} signedVals.Set("obj", q.Get("obj")) signedVals.Set("expiry", q.Get("expiry")) signedVals.Set("method", q.Get("method")) if contentType := q.Get("contentType"); contentType != "" { signedVals.Set("contentType", contentType) } msg := signedVals.Encode() hsh := hmac.New(sha256.New, h.secretKey) hsh.Write([]byte(msg)) return base64.RawURLEncoding.EncodeToString(hsh.Sum(nil)) } // KeyFromURL checks expiry and signature, and returns the object key // only if the signed URL is both authentic and unexpired. func (h *URLSignerHMAC) KeyFromURL(ctx context.Context, sURL *url.URL) (string, error) { q := sURL.Query() exp, err := strconv.ParseInt(q.Get("expiry"), 10, 64) if err != nil || time.Now().Unix() > exp { return "", errors.New("retrieving blob key from URL: key cannot be retrieved") } if !h.checkMAC(q) { return "", errors.New("retrieving blob key from URL: key cannot be retrieved") } return q.Get("obj"), nil } func (h *URLSignerHMAC) checkMAC(q url.Values) bool { mac := q.Get("signature") expected := h.getMAC(q) // This compares the Base-64 encoded MACs return hmac.Equal([]byte(mac), []byte(expected)) } go-cloud-0.20.0/blob/fileblob/fileblob_test.go000066400000000000000000000221551367004507500211560ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package fileblob import ( "context" "errors" "fmt" "io" "io/ioutil" "net/http" "net/http/httptest" "net/url" "os" "path/filepath" "strings" "testing" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/blob/drivertest" ) type harness struct { dir string prefix string server *httptest.Server urlSigner URLSigner closer func() } func newHarness(ctx context.Context, t *testing.T, prefix string) (drivertest.Harness, error) { dir := filepath.Join(os.TempDir(), "go-cloud-fileblob") if err := os.MkdirAll(dir, os.ModePerm); err != nil { return nil, err } if prefix != "" { if err := os.MkdirAll(filepath.Join(dir, prefix), os.ModePerm); err != nil { return nil, err } } h := &harness{dir: dir, prefix: prefix} localServer := httptest.NewServer(http.HandlerFunc(h.serveSignedURL)) h.server = localServer u, err := url.Parse(h.server.URL) if err != nil { return nil, err } h.urlSigner = NewURLSignerHMAC(u, []byte("I'm a secret key")) h.closer = func() { _ = os.RemoveAll(dir); localServer.Close() } return h, nil } func (h *harness) serveSignedURL(w http.ResponseWriter, r *http.Request) { objKey, err := h.urlSigner.KeyFromURL(r.Context(), r.URL) if err != nil { w.WriteHeader(http.StatusForbidden) return } allowedMethod := r.URL.Query().Get("method") if allowedMethod == "" { allowedMethod = http.MethodGet } if allowedMethod != r.Method { w.WriteHeader(http.StatusForbidden) return } contentType := r.URL.Query().Get("contentType") if r.Header.Get("Content-Type") != contentType { w.WriteHeader(http.StatusForbidden) return } bucket, err := OpenBucket(h.dir, &Options{}) if err != nil { w.WriteHeader(http.StatusInternalServerError) return } defer bucket.Close() switch r.Method { case http.MethodGet: reader, err := bucket.NewReader(r.Context(), objKey, nil) if err != nil { w.WriteHeader(http.StatusNotFound) return } defer reader.Close() io.Copy(w, reader) case http.MethodPut: writer, err := bucket.NewWriter(r.Context(), objKey, &blob.WriterOptions{ ContentType: contentType, }) if err != nil { w.WriteHeader(http.StatusInternalServerError) return } io.Copy(writer, r.Body) if err := writer.Close(); err != nil { w.WriteHeader(http.StatusInternalServerError) return } case http.MethodDelete: if err := bucket.Delete(r.Context(), objKey); err != nil { w.WriteHeader(http.StatusNotFound) return } default: w.WriteHeader(http.StatusForbidden) } } func (h *harness) HTTPClient() *http.Client { return &http.Client{} } func (h *harness) MakeDriver(ctx context.Context) (driver.Bucket, error) { opts := &Options{ URLSigner: h.urlSigner, } drv, err := openBucket(h.dir, opts) if err != nil { return nil, err } if h.prefix == "" { return drv, nil } return driver.NewPrefixedBucket(drv, h.prefix), nil } func (h *harness) Close() { h.closer() } func TestConformance(t *testing.T) { newHarnessNoPrefix := func(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return newHarness(ctx, t, "") } drivertest.RunConformanceTests(t, newHarnessNoPrefix, []drivertest.AsTest{verifyPathError{}}) } func TestConformanceWithPrefix(t *testing.T) { const prefix = "some/prefix/dir/" newHarnessWithPrefix := func(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return newHarness(ctx, t, prefix) } drivertest.RunConformanceTests(t, newHarnessWithPrefix, []drivertest.AsTest{verifyPathError{prefix: prefix}}) } func BenchmarkFileblob(b *testing.B) { dir := filepath.Join(os.TempDir(), "go-cloud-fileblob") if err := os.MkdirAll(dir, os.ModePerm); err != nil { b.Fatal(err) } bkt, err := OpenBucket(dir, nil) if err != nil { b.Fatal(err) } drivertest.RunBenchmarks(b, bkt) } // File-specific unit tests. func TestNewBucket(t *testing.T) { t.Run("BucketDirMissing", func(t *testing.T) { dir, err := ioutil.TempDir("", "fileblob") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) _, gotErr := OpenBucket(filepath.Join(dir, "notfound"), nil) if gotErr == nil { t.Errorf("got nil want error") } }) t.Run("BucketIsFile", func(t *testing.T) { f, err := ioutil.TempFile("", "fileblob") if err != nil { t.Fatal(err) } defer os.Remove(f.Name()) _, gotErr := OpenBucket(f.Name(), nil) if gotErr == nil { t.Errorf("got nil want error") } }) } type verifyPathError struct { prefix string } func (verifyPathError) Name() string { return "verify ErrorAs handles os.PathError" } func (verifyPathError) BucketCheck(b *blob.Bucket) error { return nil } func (verifyPathError) BeforeRead(as func(interface{}) bool) error { return nil } func (verifyPathError) BeforeWrite(as func(interface{}) bool) error { return nil } func (verifyPathError) BeforeCopy(as func(interface{}) bool) error { return nil } func (verifyPathError) BeforeList(as func(interface{}) bool) error { return nil } func (verifyPathError) AttributesCheck(attrs *blob.Attributes) error { return nil } func (verifyPathError) ReaderCheck(r *blob.Reader) error { return nil } func (verifyPathError) ListObjectCheck(o *blob.ListObject) error { return nil } func (v verifyPathError) ErrorCheck(b *blob.Bucket, err error) error { var perr *os.PathError if !b.ErrorAs(err, &perr) { return errors.New("want ErrorAs to succeed for PathError") } wantSuffix := filepath.Join("go-cloud-fileblob", v.prefix, "key-does-not-exist") if got := perr.Path; !strings.HasSuffix(got, wantSuffix) { return fmt.Errorf("got path %q, want suffix %q", got, wantSuffix) } return nil } func TestOpenBucketFromURL(t *testing.T) { const subdir = "mysubdir" dir := filepath.Join(os.TempDir(), "fileblob") if err := os.MkdirAll(dir, os.ModePerm); err != nil { t.Fatal(err) } if err := os.MkdirAll(filepath.Join(dir, subdir), os.ModePerm); err != nil { t.Fatal(err) } if err := ioutil.WriteFile(filepath.Join(dir, "myfile.txt"), []byte("hello world"), 0666); err != nil { t.Fatal(err) } // To avoid making another temp dir, use the bucket directory to hold the secret key file. secretKeyPath := filepath.Join(dir, "secret.key") if err := ioutil.WriteFile(secretKeyPath, []byte("secret key"), 0666); err != nil { t.Fatal(err) } if err := ioutil.WriteFile(filepath.Join(dir, subdir, "myfileinsubdir.txt"), []byte("hello world in subdir"), 0666); err != nil { t.Fatal(err) } // Convert dir to a URL path, adding a leading "/" if needed on Windows. dirpath := filepath.ToSlash(dir) if os.PathSeparator != '/' && !strings.HasPrefix(dirpath, "/") { dirpath = "/" + dirpath } tests := []struct { URL string Key string WantErr bool WantReadErr bool Want string }{ // Bucket doesn't exist -> error at construction time. {"file:///bucket-not-found", "", true, false, ""}, // File doesn't exist -> error at read time. {"file://" + dirpath, "filenotfound.txt", false, true, ""}, // Relative path using host="."; bucket is created but error at read time. {"file://./../..", "filenotfound.txt", false, true, ""}, // OK. {"file://" + dirpath, "myfile.txt", false, false, "hello world"}, // OK, host is ignored. {"file://localhost" + dirpath, "myfile.txt", false, false, "hello world"}, // OK, with prefix. {"file://" + dirpath + "?prefix=" + subdir + "/", "myfileinsubdir.txt", false, false, "hello world in subdir"}, // Invalid query parameter. {"file://" + dirpath + "?param=value", "myfile.txt", true, false, ""}, // OK, with params. { fmt.Sprintf("file://%s?base_url=/show&secret_key_path=%s", dirpath, secretKeyPath), "myfile.txt", false, false, "hello world", }, // Bad secret key filename. { fmt.Sprintf("file://%s?base_url=/show&secret_key_path=%s", dirpath, "bad"), "myfile.txt", true, false, "", }, // Missing base_url. { fmt.Sprintf("file://%s?secret_key_path=%s", dirpath, secretKeyPath), "myfile.txt", true, false, "", }, // Missing secret_key_path. {"file://" + dirpath + "?base_url=/show", "myfile.txt", true, false, ""}, } ctx := context.Background() for i, test := range tests { b, err := blob.OpenBucket(ctx, test.URL) if b != nil { defer b.Close() } if (err != nil) != test.WantErr { t.Errorf("#%d: %s: got error %v, want error %v", i, test.URL, err, test.WantErr) } if err != nil { continue } got, err := b.ReadAll(ctx, test.Key) if (err != nil) != test.WantReadErr { t.Errorf("%s: got read error %v, want error %v", test.URL, err, test.WantReadErr) } if err != nil { continue } if string(got) != test.Want { t.Errorf("%s: got %q want %q", test.URL, got, test.Want) } } } go-cloud-0.20.0/blob/gcsblob/000077500000000000000000000000001367004507500156425ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/example_test.go000066400000000000000000000041321367004507500206630ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcsblob_test import ( "context" "log" "gocloud.dev/blob" "gocloud.dev/blob/gcsblob" "gocloud.dev/gcp" ) func ExampleOpenBucket() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Your GCP credentials. // See https://cloud.google.com/docs/authentication/production // for more info on alternatives. creds, err := gcp.DefaultCredentials(ctx) if err != nil { log.Fatal(err) } // Create an HTTP client. // This example uses the default HTTP transport and the credentials // created above. client, err := gcp.NewHTTPClient( gcp.DefaultTransport(), gcp.CredentialsTokenSource(creds)) if err != nil { log.Fatal(err) } // Create a *blob.Bucket. bucket, err := gcsblob.OpenBucket(ctx, client, "my-bucket", nil) if err != nil { log.Fatal(err) } defer bucket.Close() } func Example_openBucketFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/blob/gcsblob" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // blob.OpenBucket creates a *blob.Bucket from a URL. // This URL will open the bucket "my-bucket" using default credentials. bucket, err := blob.OpenBucket(ctx, "gs://my-bucket") if err != nil { log.Fatal(err) } defer bucket.Close() } go-cloud-0.20.0/blob/gcsblob/gcsblob.go000066400000000000000000000514521367004507500176130ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcsblob provides a blob implementation that uses GCS. Use OpenBucket // to construct a *blob.Bucket. // // URLs // // For blob.OpenBucket, gcsblob registers for the scheme "gs". // The default URL opener will set up a connection using default credentials // from the environment, as described in // https://cloud.google.com/docs/authentication/production. // Some environments, such as GCE, come without a private key. In such cases // the IAM Credentials API will be configured for use in Options.MakeSignBytes, // which will introduce latency to any and all calls to bucket.SignedURL // that you can avoid by installing a service account credentials file or // obtaining and configuring a private key: // https://cloud.google.com/iam/docs/creating-managing-service-account-keys // // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Escaping // // Go CDK supports all UTF-8 strings; to make this work with services lacking // full UTF-8 support, strings must be escaped (during writes) and unescaped // (during reads). The following escapes are performed for gcsblob: // - Blob keys: ASCII characters 10 and 13 are escaped to "__0x__". // Additionally, the "/" in "../" is escaped in the same way. // // As // // gcsblob exposes the following types for As: // - Bucket: *storage.Client // - Error: *googleapi.Error // - ListObject: storage.ObjectAttrs // - ListOptions.BeforeList: *storage.Query // - Reader: *storage.Reader // - ReaderOptions.BeforeRead: **storage.ObjectHandle, *storage.Reader (if accessing both, must be in that order) // - Attributes: storage.ObjectAttrs // - CopyOptions.BeforeCopy: *CopyObjectHandles, *storage.Copier (if accessing both, must be in that order) // - WriterOptions.BeforeWrite: **storage.ObjectHandle, *storage.Writer (if accessing both, must be in that order) package gcsblob // import "gocloud.dev/blob/gcsblob" import ( "context" "encoding/json" "errors" "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "sort" "strings" "sync" "time" "cloud.google.com/go/compute/metadata" "cloud.google.com/go/storage" "github.com/google/wire" "golang.org/x/oauth2/google" "google.golang.org/api/googleapi" "google.golang.org/api/iterator" "google.golang.org/api/option" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/gcerrors" "gocloud.dev/gcp" "gocloud.dev/internal/escape" "gocloud.dev/internal/useragent" ) const defaultPageSize = 1000 func init() { blob.DefaultURLMux().RegisterBucket(Scheme, new(lazyCredsOpener)) } // Set holds Wire providers for this package. var Set = wire.NewSet( wire.Struct(new(URLOpener), "Client"), ) // readDefaultCredentials gets the field values from the supplied JSON data. // For its possible formats please see // https://cloud.google.com/iam/docs/creating-managing-service-account-keys#iam-service-account-keys-create-go // // Use "golang.org/x/oauth2/google".DefaultCredentials.JSON to get // the contents of the preferred credential file. // // Returns null-values for fields that have not been obtained. func readDefaultCredentials(credFileAsJSON []byte) (AccessID string, PrivateKey []byte) { // For example, a credentials file as generated for service accounts through the web console. var contentVariantA struct { ClientEmail string `json:"client_email"` PrivateKey string `json:"private_key"` } if err := json.Unmarshal(credFileAsJSON, &contentVariantA); err == nil { AccessID = contentVariantA.ClientEmail PrivateKey = []byte(contentVariantA.PrivateKey) } if AccessID != "" { return } // If obtained through the REST API. var contentVariantB struct { Name string `json:"name"` PrivateKeyData string `json:"privateKeyData"` } if err := json.Unmarshal(credFileAsJSON, &contentVariantB); err == nil { nextFieldIsAccessID := false for _, s := range strings.Split(contentVariantB.Name, "/") { if nextFieldIsAccessID { AccessID = s break } nextFieldIsAccessID = s == "serviceAccounts" } PrivateKey = []byte(contentVariantB.PrivateKeyData) } return } // lazyCredsOpener obtains Application Default Credentials on the first call // to OpenBucketURL. type lazyCredsOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyCredsOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { o.init.Do(func() { var opts Options var creds *google.Credentials if os.Getenv("STORAGE_EMULATOR_HOST") != "" { creds, _ = google.CredentialsFromJSON(ctx, []byte(`{"type": "service_account", "project_id": "my-project-id"}`)) } else { var err error creds, err = gcp.DefaultCredentials(ctx) if err != nil { o.err = err return } // Populate default values from credentials files, where available. opts.GoogleAccessID, opts.PrivateKey = readDefaultCredentials(creds.JSON) // … else, on GCE, at least get the instance's main service account. if opts.GoogleAccessID == "" && metadata.OnGCE() { mc := metadata.NewClient(nil) opts.GoogleAccessID, _ = mc.Email("") } } // Provide a default factory for SignBytes for environments without a private key. if len(opts.PrivateKey) <= 0 && opts.GoogleAccessID != "" { iam := new(credentialsClient) // We cannot hold onto the first context: it might've been cancelled already. ctx := context.Background() opts.MakeSignBytes = iam.CreateMakeSignBytesWith(ctx, opts.GoogleAccessID) } client, err := gcp.NewHTTPClient(gcp.DefaultTransport(), creds.TokenSource) if err != nil { o.err = err return } o.opener = &URLOpener{Client: client, Options: opts} }) if o.err != nil { return nil, fmt.Errorf("open bucket %v: %v", u, o.err) } return o.opener.OpenBucketURL(ctx, u) } // Scheme is the URL scheme gcsblob registers its URLOpener under on // blob.DefaultMux. const Scheme = "gs" // URLOpener opens GCS URLs like "gs://mybucket". // // The URL host is used as the bucket name. // // The following query parameters are supported: // // - access_id: sets Options.GoogleAccessID // - private_key_path: path to read for Options.PrivateKey // // Currently their use is limited to SignedURL. type URLOpener struct { // Client must be set to a non-nil HTTP client authenticated with // Cloud Storage scope or equivalent. Client *gcp.HTTPClient // Options specifies the default options to pass to OpenBucket. Options Options } // OpenBucketURL opens the GCS bucket with the same name as the URL's host. func (o *URLOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { opts, err := o.forParams(ctx, u.Query()) if err != nil { return nil, fmt.Errorf("open bucket %v: %v", u, err) } return OpenBucket(ctx, o.Client, u.Host, opts) } func (o *URLOpener) forParams(ctx context.Context, q url.Values) (*Options, error) { for k := range q { if k != "access_id" && k != "private_key_path" { return nil, fmt.Errorf("invalid query parameter %q", k) } } opts := new(Options) *opts = o.Options if accessID := q.Get("access_id"); accessID != "" && accessID != opts.GoogleAccessID { opts.GoogleAccessID = accessID opts.PrivateKey = nil // Clear any previous key unrelated to the new accessID. // Clear this as well to prevent calls with the old and mismatched accessID. opts.MakeSignBytes = nil } if keyPath := q.Get("private_key_path"); keyPath != "" { pk, err := ioutil.ReadFile(keyPath) if err != nil { return nil, err } opts.PrivateKey = pk } else if _, exists := q["private_key_path"]; exists { // A possible default value has been cleared by setting this to an empty value: // The private key might have expired, or falling back to SignBytes/MakeSignBytes // is intentional such as for tests or involving a key stored in a HSM/TPM. opts.PrivateKey = nil } return opts, nil } // Options sets options for constructing a *blob.Bucket backed by GCS. type Options struct { // GoogleAccessID represents the authorizer for SignedURL. // Required to use SignedURL. // See https://godoc.org/cloud.google.com/go/storage#SignedURLOptions. GoogleAccessID string // PrivateKey is the Google service account private key. // Exactly one of PrivateKey or SignBytes must be non-nil to use SignedURL. // See https://godoc.org/cloud.google.com/go/storage#SignedURLOptions. PrivateKey []byte // SignBytes is a function for implementing custom signing. // Exactly one of PrivateKey, SignBytes, or MakeSignBytes must be non-nil to use SignedURL. // See https://godoc.org/cloud.google.com/go/storage#SignedURLOptions. SignBytes func([]byte) ([]byte, error) // MakeSignBytes is a factory for functions that are being used in place of an empty SignBytes. // If your implementation of 'SignBytes' needs a request context, set this instead. MakeSignBytes func(requestCtx context.Context) SignBytesFunc } // SignBytesFunc is shorthand for the signature of Options.SignBytes. type SignBytesFunc func([]byte) ([]byte, error) // openBucket returns a GCS Bucket that communicates using the given HTTP client. func openBucket(ctx context.Context, client *gcp.HTTPClient, bucketName string, opts *Options) (*bucket, error) { if client == nil { return nil, errors.New("gcsblob.OpenBucket: client is required") } if bucketName == "" { return nil, errors.New("gcsblob.OpenBucket: bucketName is required") } clientOpts := []option.ClientOption{option.WithHTTPClient(useragent.HTTPClient(&client.Client, "blob"))} if host := os.Getenv("STORAGE_EMULATOR_HOST"); host != "" { clientOpts = []option.ClientOption{ option.WithoutAuthentication(), option.WithEndpoint("http://" + host + "/storage/v1/"), option.WithHTTPClient(http.DefaultClient), } } // We wrap the provided http.Client to add a Go CDK User-Agent. c, err := storage.NewClient(ctx, clientOpts...) if err != nil { return nil, err } if opts == nil { opts = &Options{} } return &bucket{name: bucketName, client: c, opts: opts}, nil } // OpenBucket returns a *blob.Bucket backed by an existing GCS bucket. See the // package documentation for an example. func OpenBucket(ctx context.Context, client *gcp.HTTPClient, bucketName string, opts *Options) (*blob.Bucket, error) { drv, err := openBucket(ctx, client, bucketName, opts) if err != nil { return nil, err } return blob.NewBucket(drv), nil } // bucket represents a GCS bucket, which handles read, write and delete operations // on objects within it. type bucket struct { name string client *storage.Client opts *Options } var emptyBody = ioutil.NopCloser(strings.NewReader("")) // reader reads a GCS object. It implements driver.Reader. type reader struct { body io.ReadCloser attrs driver.ReaderAttributes raw *storage.Reader } func (r *reader) Read(p []byte) (int, error) { return r.body.Read(p) } // Close closes the reader itself. It must be called when done reading. func (r *reader) Close() error { return r.body.Close() } func (r *reader) Attributes() *driver.ReaderAttributes { return &r.attrs } func (r *reader) As(i interface{}) bool { p, ok := i.(**storage.Reader) if !ok { return false } *p = r.raw return true } func (b *bucket) ErrorCode(err error) gcerrors.ErrorCode { if err == storage.ErrObjectNotExist { return gcerrors.NotFound } if gerr, ok := err.(*googleapi.Error); ok { switch gerr.Code { case http.StatusForbidden: return gcerrors.PermissionDenied case http.StatusNotFound: return gcerrors.NotFound case http.StatusPreconditionFailed: return gcerrors.FailedPrecondition case http.StatusTooManyRequests: return gcerrors.ResourceExhausted } } return gcerrors.Unknown } func (b *bucket) Close() error { return nil } // ListPaged implements driver.ListPaged. func (b *bucket) ListPaged(ctx context.Context, opts *driver.ListOptions) (*driver.ListPage, error) { bkt := b.client.Bucket(b.name) query := &storage.Query{ Prefix: escapeKey(opts.Prefix), Delimiter: escapeKey(opts.Delimiter), } if opts.BeforeList != nil { asFunc := func(i interface{}) bool { p, ok := i.(**storage.Query) if !ok { return false } *p = query return true } if err := opts.BeforeList(asFunc); err != nil { return nil, err } } pageSize := opts.PageSize if pageSize == 0 { pageSize = defaultPageSize } iter := bkt.Objects(ctx, query) pager := iterator.NewPager(iter, pageSize, string(opts.PageToken)) var objects []*storage.ObjectAttrs nextPageToken, err := pager.NextPage(&objects) if err != nil { return nil, err } page := driver.ListPage{NextPageToken: []byte(nextPageToken)} if len(objects) > 0 { page.Objects = make([]*driver.ListObject, len(objects)) for i, obj := range objects { toCopy := obj asFunc := func(val interface{}) bool { p, ok := val.(*storage.ObjectAttrs) if !ok { return false } *p = *toCopy return true } if obj.Prefix == "" { // Regular blob. page.Objects[i] = &driver.ListObject{ Key: unescapeKey(obj.Name), ModTime: obj.Updated, Size: obj.Size, MD5: obj.MD5, AsFunc: asFunc, } } else { // "Directory". page.Objects[i] = &driver.ListObject{ Key: unescapeKey(obj.Prefix), IsDir: true, AsFunc: asFunc, } } } // GCS always returns "directories" at the end; sort them. sort.Slice(page.Objects, func(i, j int) bool { return page.Objects[i].Key < page.Objects[j].Key }) } return &page, nil } // As implements driver.As. func (b *bucket) As(i interface{}) bool { p, ok := i.(**storage.Client) if !ok { return false } *p = b.client return true } // As implements driver.ErrorAs. func (b *bucket) ErrorAs(err error, i interface{}) bool { switch v := err.(type) { case *googleapi.Error: if p, ok := i.(**googleapi.Error); ok { *p = v return true } } return false } // Attributes implements driver.Attributes. func (b *bucket) Attributes(ctx context.Context, key string) (*driver.Attributes, error) { key = escapeKey(key) bkt := b.client.Bucket(b.name) obj := bkt.Object(key) attrs, err := obj.Attrs(ctx) if err != nil { return nil, err } return &driver.Attributes{ CacheControl: attrs.CacheControl, ContentDisposition: attrs.ContentDisposition, ContentEncoding: attrs.ContentEncoding, ContentLanguage: attrs.ContentLanguage, ContentType: attrs.ContentType, Metadata: attrs.Metadata, ModTime: attrs.Updated, Size: attrs.Size, MD5: attrs.MD5, AsFunc: func(i interface{}) bool { p, ok := i.(*storage.ObjectAttrs) if !ok { return false } *p = *attrs return true }, }, nil } // NewRangeReader implements driver.NewRangeReader. func (b *bucket) NewRangeReader(ctx context.Context, key string, offset, length int64, opts *driver.ReaderOptions) (driver.Reader, error) { key = escapeKey(key) bkt := b.client.Bucket(b.name) obj := bkt.Object(key) // Add an extra level of indirection so that BeforeRead can replace obj // if needed. For example, ObjectHandle.If returns a new ObjectHandle. // Also, make the Reader lazily in case this replacement happens. objp := &obj makeReader := func() (*storage.Reader, error) { return (*objp).NewRangeReader(ctx, offset, length) } var r *storage.Reader var rerr error madeReader := false if opts.BeforeRead != nil { asFunc := func(i interface{}) bool { if p, ok := i.(***storage.ObjectHandle); ok && !madeReader { *p = objp return true } if p, ok := i.(**storage.Reader); ok { if !madeReader { r, rerr = makeReader() madeReader = true if r == nil { return false } } *p = r return true } return false } if err := opts.BeforeRead(asFunc); err != nil { return nil, err } } if !madeReader { r, rerr = makeReader() } if rerr != nil { return nil, rerr } return &reader{ body: r, attrs: driver.ReaderAttributes{ ContentType: r.Attrs.ContentType, ModTime: r.Attrs.LastModified, Size: r.Attrs.Size, }, raw: r, }, nil } // escapeKey does all required escaping for UTF-8 strings to work with GCS. func escapeKey(key string) string { return escape.HexEscape(key, func(r []rune, i int) bool { switch { // GCS doesn't handle these characters (determined via experimentation). case r[i] == 10 || r[i] == 13: return true // For "../", escape the trailing slash. case i > 1 && r[i] == '/' && r[i-1] == '.' && r[i-2] == '.': return true } return false }) } // unescapeKey reverses escapeKey. func unescapeKey(key string) string { return escape.HexUnescape(key) } // NewTypedWriter implements driver.NewTypedWriter. func (b *bucket) NewTypedWriter(ctx context.Context, key string, contentType string, opts *driver.WriterOptions) (driver.Writer, error) { key = escapeKey(key) bkt := b.client.Bucket(b.name) obj := bkt.Object(key) // Add an extra level of indirection so that BeforeWrite can replace obj // if needed. For example, ObjectHandle.If returns a new ObjectHandle. // Also, make the Writer lazily in case this replacement happens. objp := &obj makeWriter := func() *storage.Writer { w := (*objp).NewWriter(ctx) w.CacheControl = opts.CacheControl w.ContentDisposition = opts.ContentDisposition w.ContentEncoding = opts.ContentEncoding w.ContentLanguage = opts.ContentLanguage w.ContentType = contentType w.ChunkSize = bufferSize(opts.BufferSize) w.Metadata = opts.Metadata w.MD5 = opts.ContentMD5 return w } var w *storage.Writer if opts.BeforeWrite != nil { asFunc := func(i interface{}) bool { if p, ok := i.(***storage.ObjectHandle); ok && w == nil { *p = objp return true } if p, ok := i.(**storage.Writer); ok { if w == nil { w = makeWriter() } *p = w return true } return false } if err := opts.BeforeWrite(asFunc); err != nil { return nil, err } } if w == nil { w = makeWriter() } return w, nil } // CopyObjectHandles holds the ObjectHandles for the destination and source // of a Copy. It is used by the BeforeCopy As hook. type CopyObjectHandles struct { Dst, Src *storage.ObjectHandle } // Copy implements driver.Copy. func (b *bucket) Copy(ctx context.Context, dstKey, srcKey string, opts *driver.CopyOptions) error { dstKey = escapeKey(dstKey) srcKey = escapeKey(srcKey) bkt := b.client.Bucket(b.name) // Add an extra level of indirection so that BeforeCopy can replace the // dst or src ObjectHandles if needed. // Also, make the Copier lazily in case this replacement happens. handles := CopyObjectHandles{ Dst: bkt.Object(dstKey), Src: bkt.Object(srcKey), } makeCopier := func() *storage.Copier { return handles.Dst.CopierFrom(handles.Src) } var copier *storage.Copier if opts.BeforeCopy != nil { asFunc := func(i interface{}) bool { if p, ok := i.(**CopyObjectHandles); ok && copier == nil { *p = &handles return true } if p, ok := i.(**storage.Copier); ok { if copier == nil { copier = makeCopier() } *p = copier return true } return false } if err := opts.BeforeCopy(asFunc); err != nil { return err } } if copier == nil { copier = makeCopier() } _, err := copier.Run(ctx) return err } // Delete implements driver.Delete. func (b *bucket) Delete(ctx context.Context, key string) error { key = escapeKey(key) bkt := b.client.Bucket(b.name) obj := bkt.Object(key) return obj.Delete(ctx) } func (b *bucket) SignedURL(ctx context.Context, key string, dopts *driver.SignedURLOptions) (string, error) { numSigners := 0 if b.opts.PrivateKey != nil { numSigners++ } if b.opts.SignBytes != nil { numSigners++ } if b.opts.MakeSignBytes != nil { numSigners++ } if b.opts.GoogleAccessID == "" || numSigners != 1 { return "", errors.New("to use SignedURL, you must call OpenBucket with a valid Options.GoogleAccessID and exactly one of Options.PrivateKey, Options.SignBytes, or Options.MakeSignBytes") } key = escapeKey(key) opts := &storage.SignedURLOptions{ Expires: time.Now().Add(dopts.Expiry), Method: dopts.Method, ContentType: dopts.ContentType, GoogleAccessID: b.opts.GoogleAccessID, PrivateKey: b.opts.PrivateKey, SignBytes: b.opts.SignBytes, } if b.opts.MakeSignBytes != nil { opts.SignBytes = b.opts.MakeSignBytes(ctx) } return storage.SignedURL(b.name, key, opts) } func bufferSize(size int) int { if size == 0 { return googleapi.DefaultUploadChunkSize } else if size > 0 { return size } return 0 // disable buffering } go-cloud-0.20.0/blob/gcsblob/gcsblob_test.go000066400000000000000000000517761367004507500206630ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcsblob import ( "context" "errors" "flag" "fmt" "io/ioutil" "net/http" "net/url" "os" "os/user" "path/filepath" "testing" "time" "cloud.google.com/go/storage" "github.com/google/go-cmp/cmp" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/blob/drivertest" "gocloud.dev/gcerrors" "gocloud.dev/gcp" "gocloud.dev/internal/testing/setup" "google.golang.org/api/googleapi" ) const ( // These constants capture values that were used during the last -record. // // If you want to use --record mode, // 1. Create a bucket in your GCP project: // https://console.cloud.google.com/storage/browser, then "Create Bucket". // 2. Update the bucketName constant to your bucket name. // 3. Create a service account in your GCP project and update the // serviceAccountID constant to it. // 4. Download a private key to a .pem file as described here: // https://godoc.org/cloud.google.com/go/storage#SignedURLOptions // and pass a path to it via the --privatekey flag. // TODO(issue #300): Use Terraform to provision a bucket, and get the bucket // name from the Terraform output instead (saving a copy of it for replay). bucketName = "go-cloud-blob-test-bucket" serviceAccountID = "storage-updater@go-cloud-test-216917.iam.gserviceaccount.com" ) var pathToPrivateKey = flag.String("privatekey", "", "path to .pem file containing private key (required for --record); defaults to ~/Downloads/gcs-private-key.pem") type harness struct { client *gcp.HTTPClient opts *Options rt http.RoundTripper closer func() } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { opts := &Options{GoogleAccessID: serviceAccountID} if *setup.Record { if *pathToPrivateKey == "" { usr, _ := user.Current() *pathToPrivateKey = filepath.Join(usr.HomeDir, "Downloads", "gcs-private-key.pem") } // Use a real private key for signing URLs during -record. pk, err := ioutil.ReadFile(*pathToPrivateKey) if err != nil { t.Fatalf("Couldn't find private key at %v: %v", *pathToPrivateKey, err) } opts.PrivateKey = pk } else { // Use a dummy signer in replay mode. opts.SignBytes = func(b []byte) ([]byte, error) { return []byte("signed!"), nil } } client, rt, done := setup.NewGCPClient(ctx, t) return &harness{client: client, opts: opts, rt: rt, closer: done}, nil } func (h *harness) HTTPClient() *http.Client { return &http.Client{Transport: h.rt} } func (h *harness) MakeDriver(ctx context.Context) (driver.Bucket, error) { return openBucket(ctx, h.client, bucketName, h.opts) } func (h *harness) Close() { h.closer() } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyContentLanguage{}}) } func BenchmarkGcsblob(b *testing.B) { ctx := context.Background() creds, err := gcp.DefaultCredentials(ctx) if err != nil { b.Fatal(err) } client, err := gcp.NewHTTPClient(gcp.DefaultTransport(), gcp.CredentialsTokenSource(creds)) if err != nil { b.Fatal(err) } bkt, err := OpenBucket(context.Background(), client, bucketName, nil) if err != nil { b.Fatal(err) } drivertest.RunBenchmarks(b, bkt) } const language = "nl" // verifyContentLanguage uses As to access the underlying GCS types and // read/write the ContentLanguage field. type verifyContentLanguage struct{} func (verifyContentLanguage) Name() string { return "verify ContentLanguage can be written and read through As" } func (verifyContentLanguage) BucketCheck(b *blob.Bucket) error { var client *storage.Client if !b.As(&client) { return errors.New("Bucket.As failed") } return nil } func (verifyContentLanguage) ErrorCheck(b *blob.Bucket, err error) error { // Can't really verify this one because the storage library returns // a sentinel error, storage.ErrObjectNotExist, for "not exists" // instead of the supported As type googleapi.Error. // Call ErrorAs anyway, and expect it to fail. var to *googleapi.Error if b.ErrorAs(err, &to) { return errors.New("expected ErrorAs to fail") } return nil } func (verifyContentLanguage) BeforeRead(as func(interface{}) bool) error { var objp **storage.ObjectHandle if !as(&objp) { return errors.New("BeforeRead.As failed to get ObjectHandle") } var sr *storage.Reader if !as(&sr) { return errors.New("BeforeRead.As failed to get Reader") } return nil } func (verifyContentLanguage) BeforeWrite(as func(interface{}) bool) error { var objp **storage.ObjectHandle if !as(&objp) { return errors.New("Writer.As failed to get ObjectHandle") } var sw *storage.Writer if !as(&sw) { return errors.New("Writer.As failed to get Writer") } sw.ContentLanguage = language return nil } func (verifyContentLanguage) BeforeCopy(as func(interface{}) bool) error { var coh *CopyObjectHandles if !as(&coh) { return errors.New("BeforeCopy.As failed to get CopyObjectHandles") } var copier *storage.Copier if !as(&copier) { return errors.New("BeforeCopy.As failed") } return nil } func (verifyContentLanguage) BeforeList(as func(interface{}) bool) error { var q *storage.Query if !as(&q) { return errors.New("List.As failed") } // Nothing to do. return nil } func (verifyContentLanguage) AttributesCheck(attrs *blob.Attributes) error { var oa storage.ObjectAttrs if !attrs.As(&oa) { return errors.New("Attributes.As returned false") } if got := oa.ContentLanguage; got != language { return fmt.Errorf("got %q want %q", got, language) } return nil } func (verifyContentLanguage) ReaderCheck(r *blob.Reader) error { var rr *storage.Reader if !r.As(&rr) { return errors.New("Reader.As returned false") } // GCS doesn't return Content-Language via storage.Reader. return nil } func (verifyContentLanguage) ListObjectCheck(o *blob.ListObject) error { var oa storage.ObjectAttrs if !o.As(&oa) { return errors.New("ListObject.As returned false") } if o.IsDir { return nil } if got := oa.ContentLanguage; got != language { return fmt.Errorf("got %q want %q", got, language) } return nil } // GCS-specific unit tests. func TestBufferSize(t *testing.T) { tests := []struct { size int want int }{ { size: 5 * 1024 * 1024, want: 5 * 1024 * 1024, }, { size: 0, want: googleapi.DefaultUploadChunkSize, }, { size: -1024, want: 0, }, } for i, test := range tests { got := bufferSize(test.size) if got != test.want { t.Errorf("%d) got buffer size %d, want %d", i, got, test.want) } } } func TestOpenBucket(t *testing.T) { tests := []struct { description string bucketName string nilClient bool want string wantErr bool }{ { description: "empty bucket name results in error", wantErr: true, }, { description: "nil client results in error", bucketName: "foo", nilClient: true, wantErr: true, }, { description: "success", bucketName: "foo", want: "foo", }, } ctx := context.Background() for _, test := range tests { t.Run(test.description, func(t *testing.T) { var client *gcp.HTTPClient if !test.nilClient { var done func() client, _, done = setup.NewGCPClient(ctx, t) defer done() } // Create driver impl. drv, err := openBucket(ctx, client, test.bucketName, nil) if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } if err == nil && drv != nil && drv.name != test.want { t.Errorf("got %q want %q", drv.name, test.want) } // Create portable type. b, err := OpenBucket(ctx, client, test.bucketName, nil) if b != nil { defer b.Close() } if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } }) } } // TestBeforeReadNonExistentKey tests using BeforeRead on a nonexistent key. func TestBeforeReadNonExistentKey(t *testing.T) { ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } bucket := blob.NewBucket(drv) defer bucket.Close() // Try reading a nonexistent key. _, err = bucket.NewReader(ctx, "nonexistent-key", &blob.ReaderOptions{ BeforeRead: func(asFunc func(interface{}) bool) error { var objp **storage.ObjectHandle if !asFunc(&objp) { return errors.New("Reader.As failed to get ObjectHandle") } var rp *storage.Reader if asFunc(&rp) { return errors.New("Reader.As unexpectedly got storage.Reader") } return nil }, }) if err == nil || gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("got error %v, wanted NotFound for Read", err) } } // TestPreconditions tests setting of ObjectHandle preconditions via As. func TestPreconditions(t *testing.T) { const ( key = "precondition-key" key2 = "precondition-key2" content = "hello world" ) ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() drv, err := h.MakeDriver(ctx) if err != nil { t.Fatal(err) } bucket := blob.NewBucket(drv) defer bucket.Close() // Try writing with a failing precondition. if err := bucket.WriteAll(ctx, key, []byte(content), &blob.WriterOptions{ BeforeWrite: func(asFunc func(interface{}) bool) error { var objp **storage.ObjectHandle if !asFunc(&objp) { return errors.New("Writer.As failed to get ObjectHandle") } // Replace the ObjectHandle with a new one that adds Conditions. *objp = (*objp).If(storage.Conditions{GenerationMatch: -999}) return nil }, }); err == nil || gcerrors.Code(err) != gcerrors.FailedPrecondition { t.Errorf("got error %v, wanted FailedPrecondition for Write", err) } // Repeat with a precondition that will pass. if err := bucket.WriteAll(ctx, key, []byte(content), &blob.WriterOptions{ BeforeWrite: func(asFunc func(interface{}) bool) error { var objp **storage.ObjectHandle if !asFunc(&objp) { return errors.New("Writer.As failed to get ObjectHandle") } // Replace the ObjectHandle with a new one that adds Conditions. *objp = (*objp).If(storage.Conditions{DoesNotExist: true}) return nil }, }); err != nil { t.Errorf("got error %v, wanted nil", err) } defer bucket.Delete(ctx, key) // Try reading with a failing precondition. _, err = bucket.NewReader(ctx, key, &blob.ReaderOptions{ BeforeRead: func(asFunc func(interface{}) bool) error { var objp **storage.ObjectHandle if !asFunc(&objp) { return errors.New("Reader.As failed to get ObjectHandle") } // Replace the ObjectHandle with a new one. *objp = (*objp).Generation(999999) return nil }, }) if err == nil || gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("got error %v, wanted NotFound for Read", err) } attrs, err := bucket.Attributes(ctx, key) if err != nil { t.Fatal(err) } var oa storage.ObjectAttrs if !attrs.As(&oa) { t.Fatal("Attributes.As failed") } generation := oa.Generation // Repeat with a precondition that will pass. reader, err := bucket.NewReader(ctx, key, &blob.ReaderOptions{ BeforeRead: func(asFunc func(interface{}) bool) error { var objp **storage.ObjectHandle if !asFunc(&objp) { return errors.New("Reader.As failed to get ObjectHandle") } // Replace the ObjectHandle with a new one. *objp = (*objp).Generation(generation) return nil }, }) if err != nil { t.Fatal(err) } defer reader.Close() gotBytes, err := ioutil.ReadAll(reader) if err != nil { t.Fatal(err) } if got := string(gotBytes); got != content { t.Errorf("got %q want %q", got, content) } // Try copying with a failing precondition on Dst. err = bucket.Copy(ctx, key2, key, &blob.CopyOptions{ BeforeCopy: func(asFunc func(interface{}) bool) error { var coh *CopyObjectHandles if !asFunc(&coh) { return errors.New("Copy.As failed to get CopyObjectHandles") } // Replace the dst ObjectHandle with a new one. coh.Dst = coh.Dst.If(storage.Conditions{GenerationMatch: -999}) return nil }, }) if err == nil || gcerrors.Code(err) != gcerrors.FailedPrecondition { t.Errorf("got error %v, wanted FailedPrecondition for Copy", err) } // Try copying with a failing precondition on Src. err = bucket.Copy(ctx, key2, key, &blob.CopyOptions{ BeforeCopy: func(asFunc func(interface{}) bool) error { var coh *CopyObjectHandles if !asFunc(&coh) { return errors.New("Copy.As failed to get CopyObjectHandles") } // Replace the src ObjectHandle with a new one. coh.Src = coh.Src.Generation(9999999) return nil }, }) if err == nil || gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("got error %v, wanted NotFound for Copy", err) } // Repeat with preconditions on Dst and Src that will succeed. err = bucket.Copy(ctx, key2, key, &blob.CopyOptions{ BeforeCopy: func(asFunc func(interface{}) bool) error { var coh *CopyObjectHandles if !asFunc(&coh) { return errors.New("Reader.As failed to get CopyObjectHandles") } coh.Dst = coh.Dst.If(storage.Conditions{DoesNotExist: true}) coh.Src = coh.Src.Generation(generation) return nil }, }) if err != nil { t.Error(err) } defer bucket.Delete(ctx, key2) } func TestURLOpenerForParams(t *testing.T) { ctx := context.Background() // Create a file for use as a dummy private key file. privateKey := []byte("some content") pkFile, err := ioutil.TempFile("", "my-private-key") if err != nil { t.Fatal(err) } defer os.Remove(pkFile.Name()) if _, err := pkFile.Write(privateKey); err != nil { t.Fatal(err) } if err := pkFile.Close(); err != nil { t.Fatal(err) } tests := []struct { name string currOpts Options query url.Values wantOpts Options wantErr bool }{ { name: "InvalidParam", query: url.Values{ "foo": {"bar"}, }, wantErr: true, }, { name: "AccessID", query: url.Values{ "access_id": {"bar"}, }, wantOpts: Options{GoogleAccessID: "bar"}, }, { name: "AccessID override", currOpts: Options{GoogleAccessID: "foo"}, query: url.Values{ "access_id": {"bar"}, }, wantOpts: Options{GoogleAccessID: "bar"}, }, { name: "AccessID not overridden", currOpts: Options{GoogleAccessID: "bar"}, wantOpts: Options{GoogleAccessID: "bar"}, }, { name: "BadPrivateKeyPath", query: url.Values{ "private_key_path": {"/path/does/not/exist"}, }, wantErr: true, }, { name: "PrivateKeyPath", query: url.Values{ "private_key_path": {pkFile.Name()}, }, wantOpts: Options{PrivateKey: privateKey}, }, { name: "PrivateKey cleared", currOpts: Options{PrivateKey: privateKey}, query: url.Values{ "private_key_path": {""}, }, wantOpts: Options{}, }, { name: "AccessID change clears PrivateKey and MakeSignBytes", currOpts: Options{ GoogleAccessID: "foo", PrivateKey: privateKey, MakeSignBytes: func(context.Context) SignBytesFunc { return func([]byte) ([]byte, error) { return nil, context.DeadlineExceeded } }, }, query: url.Values{ "access_id": {"bar"}, }, wantOpts: Options{GoogleAccessID: "bar"}, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { o := &URLOpener{Options: test.currOpts} got, err := o.forParams(ctx, test.query) if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } if err != nil { return } if diff := cmp.Diff(got, &test.wantOpts); diff != "" { t.Errorf("opener.forParams(...) diff (-want +got):\n%s", diff) } }) } } func TestOpenBucketFromURL(t *testing.T) { cleanup := setup.FakeGCPDefaultCredentials(t) defer cleanup() pkFile, err := ioutil.TempFile("", "my-private-key") if err != nil { t.Fatal(err) } defer os.Remove(pkFile.Name()) if err := ioutil.WriteFile(pkFile.Name(), []byte("key"), 0666); err != nil { t.Fatal(err) } tests := []struct { URL string WantErr bool }{ // OK. {"gs://mybucket", false}, // OK, setting access_id. {"gs://mybucket?access_id=foo", false}, // OK, setting private_key_path. {"gs://mybucket?private_key_path=" + pkFile.Name(), false}, // OK, clearing any pre-existing private key. {"gs://mybucket?private_key_path=", false}, // Invalid private_key_path. {"gs://mybucket?private_key_path=invalid-path", true}, // Invalid parameter. {"gs://mybucket?param=value", true}, } ctx := context.Background() for _, test := range tests { b, err := blob.OpenBucket(ctx, test.URL) if b != nil { defer b.Close() } if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } } } func TestReadDefaultCredentials(t *testing.T) { tests := []struct { givenJSON string WantAccessID string WantPrivateKey []byte }{ // Variant A: service account file {`{ "type": "service_account", "project_id": "project-id", "private_key_id": "key-id", "private_key": "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n", "client_email": "service-account-email", "client_id": "client-id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-account-email" }`, "service-account-email", []byte("-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n"), }, // Variant A: credentials file absent a private key (stripped) {`{ "google": {}, "client_email": "service-account-email", "client_id": "client-id" }`, "service-account-email", []byte(""), }, // Variant B: obtained through the REST API {`{ "name": "projects/project-id/serviceAccounts/service-account-email/keys/key-id", "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE", "privateKeyData": "private-key", "validAfterTime": "date", "validBeforeTime": "date", "keyAlgorithm": "KEY_ALG_RSA_2048" }`, "service-account-email", []byte("private-key"), }, // An empty input shall not throw an exception {"", "", nil}, } for i, test := range tests { inJSON := []byte(test.givenJSON) if len(test.givenJSON) == 0 { inJSON = nil } gotAccessID, gotPrivateKey := readDefaultCredentials(inJSON) if gotAccessID != test.WantAccessID || string(gotPrivateKey) != string(test.WantPrivateKey) { t.Errorf("Mismatched field values in case %d:\n -- got: %v, %v\n -- want: %v, %v", i, gotAccessID, gotPrivateKey, test.WantAccessID, test.WantPrivateKey, ) } } } func TestRemainingSignedURLSchemes(t *testing.T) { tests := []struct { name string currOpts Options wantSignedURL string // Not the actual URL, which is subject to change, but a mimickry. wantErr bool }{ { name: "no scheme available, error", wantErr: true, }, { name: "too many schemes configured", currOpts: Options{ GoogleAccessID: "foo", PrivateKey: []byte("private-key"), SignBytes: func([]byte) ([]byte, error) { return []byte("signed"), nil }, }, wantErr: true, }, { name: "SignBytes", currOpts: Options{ GoogleAccessID: "foo", SignBytes: func([]byte) ([]byte, error) { return []byte("signed"), nil }, }, wantSignedURL: "https://host/go-cloud-blob-test-bucket/some-key?GoogleAccessId=foo&Signature=c2lnbmVk", }, { name: "MakeSignBytes is being used", currOpts: Options{ GoogleAccessID: "foo", MakeSignBytes: func(context.Context) SignBytesFunc { return func([]byte) ([]byte, error) { return []byte("signed"), nil } }, }, wantSignedURL: "https://host/go-cloud-blob-test-bucket/some-key?GoogleAccessId=foo&Signature=c2lnbmVk", }, } ctx := context.Background() signOpts := &driver.SignedURLOptions{ Expiry: 30 * time.Second, Method: http.MethodGet, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { bucket := bucket{name: bucketName, opts: &test.currOpts} // SignedURL doesn't check whether a key exists. gotURL, gotErr := bucket.SignedURL(ctx, "some-key", signOpts) if (gotErr != nil) != test.wantErr { t.Errorf("Got unexpected error %v", gotErr) } if test.wantSignedURL == "" { return } got, _ := url.Parse(gotURL) want, _ := url.Parse(test.wantSignedURL) gotParams, wantParams := got.Query(), want.Query() for _, param := range []string{"GoogleAccessId", "Signature"} { if gotParams.Get(param) != wantParams.Get(param) { // Print the full URL because the parameter might've not been set at all. t.Errorf("Query parameter in SignedURL differs: %v\n -- got URL: %v\n -- want URL: %v", param, got, want) } } }) } } go-cloud-0.20.0/blob/gcsblob/iam.go000066400000000000000000000047261367004507500167500ustar00rootroot00000000000000// Copyright 2020 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // This is an implementation for Options.MakeSignBytes // that serves as example for how to keep a private key in a separate // process, service, or HSM/TPM, yet use it as signer for blob.Bucket. package gcsblob import ( "context" "sync" credentials "cloud.google.com/go/iam/credentials/apiv1" gax "github.com/googleapis/gax-go/v2" credentialspb "google.golang.org/genproto/googleapis/iam/credentials/v1" ) // credentialsClient wraps the IAM Credentials API client for a lazy initialization // and expresses it in the reduced format expected by SignBytes. // See https://cloud.google.com/iam/docs/reference/credentials/rest type credentialsClient struct { init sync.Once err error // client as reduced surface of credentials.IamCredentialsClient // enables us to use a mock in tests. client interface { SignBlob(context.Context, *credentialspb.SignBlobRequest, ...gax.CallOption) (*credentialspb.SignBlobResponse, error) } } // CreateMakeSignBytesWith produces a MakeSignBytes variant from an expanded parameter set. // It essentially adapts a remote call to the IAM Credentials API // to the function signature expected by storage.SignedURLOptions.SignBytes. func (c *credentialsClient) CreateMakeSignBytesWith(lifetimeCtx context.Context, googleAccessID string) func(context.Context) SignBytesFunc { return func(requestCtx context.Context) SignBytesFunc { c.init.Do(func() { if c.client != nil { // Set previously, likely to a mock implementation for tests. return } c.client, c.err = credentials.NewIamCredentialsClient(lifetimeCtx) }) return func(p []byte) ([]byte, error) { if c.err != nil { return nil, c.err } resp, err := c.client.SignBlob( requestCtx, &credentialspb.SignBlobRequest{ Name: googleAccessID, Payload: p, }) if err != nil { return nil, err } return resp.GetSignedBlob(), nil } } } go-cloud-0.20.0/blob/gcsblob/iam_test.go000066400000000000000000000054621367004507500200050ustar00rootroot00000000000000// Copyright 2020 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcsblob import ( "context" "errors" "testing" gax "github.com/googleapis/gax-go/v2" credentialspb "google.golang.org/genproto/googleapis/iam/credentials/v1" ) const ( mockKey = "key0000" mockSignature = "signature" ) type mockIAMClient struct { requestErr error } func (m mockIAMClient) SignBlob(context.Context, *credentialspb.SignBlobRequest, ...gax.CallOption) (*credentialspb.SignBlobResponse, error) { if m.requestErr != nil { return nil, m.requestErr } return &credentialspb.SignBlobResponse{KeyId: mockKey, SignedBlob: []byte(mockSignature)}, nil } func TestIAMCredentialsClient(t *testing.T) { tests := []struct { name string connectErr error mockClient interface { SignBlob(context.Context, *credentialspb.SignBlobRequest, ...gax.CallOption) (*credentialspb.SignBlobResponse, error) } // These are for the produced SignBytesFunc input []byte wantOutput []byte requestErr error }{ {"happy path: signing", nil, mockIAMClient{}, []byte("payload"), []byte(mockSignature), nil, }, {"won't connect", errors.New("Missing role: serviceAccountTokenCreator"), mockIAMClient{}, []byte("payload"), nil, nil, }, {"request fails", nil, mockIAMClient{requestErr: context.Canceled}, []byte("payload"), nil, context.Canceled, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { c := credentialsClient{err: test.connectErr, client: test.mockClient} makeSignBytesFn := c.CreateMakeSignBytesWith(nil, serviceAccountID) signBytesFn := makeSignBytesFn(nil) // Our mocks don't read any context. haveOutput, haveErr := signBytesFn(test.input) if len(test.wantOutput) > 0 && string(haveOutput) != string(test.wantOutput) { t.Errorf("Unexpected output:\n -- have: %v\n -- want: %v", string(haveOutput), string(test.wantOutput)) return } if test.connectErr == nil && test.requestErr == nil { return } if test.connectErr != nil && haveErr != test.connectErr { t.Error("The connection error, a permanent error, has not been returned but should.") } if test.requestErr != nil && haveErr != test.requestErr { t.Error("The per-request error has not been returned but should.") } }) } } go-cloud-0.20.0/blob/gcsblob/testdata/000077500000000000000000000000001367004507500174535ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestBeforeReadNonExistentKey.replay000066400000000000000000000052601367004507500264020ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCwMs/N5v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "7349916083d312d9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/nonexistent-key", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "203" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUn4-7sqxDARfGdIBuaWAB7NXKtn5jCwacgcq_3ZnZy7U2u_Ydh4H4PsD_OcNjE6RjZjPBGvl0bA6XiA9PHFSDw" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ub25leGlzdGVudC1rZXk8L0RldGFpbHM+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/000077500000000000000000000000001367004507500225455ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestAs/000077500000000000000000000000001367004507500237505ustar00rootroot00000000000000verify_As_returns_false_when_passed_nil.replay000066400000000000000000001036721367004507500352250ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestAs{ "Initial": "AQAAAA7WcSCwAPOeJP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "795355f431f41e7d", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=mydir%2Fas-test\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsIm5hbWUiOiJteWRpci9hcy10ZXN0In0K", "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2751" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Etag": [ "COSh9I6L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlwuL-hH0c1Th2Pemgabu28RviNcngcZu5LRcijij2YEXPzHGWAIeyFwYr6VGQ32lxwEKlOitjno6molVmGY6M" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTA0MjE0MjQ0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdD9nZW5lcmF0aW9uPTE1OTE2ODM1MDQyMTQyNDQmYWx0PW1lZGlhIiwibmFtZSI6Im15ZGlyL2FzLXRlc3QiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDQyMTQyNDQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJYclk3dStBZTd0Q1R5eUs3ajFyTnd3PT0iLCJjcmMzMmMiOiJ5WlJscWc9PSIsImV0YWciOiJDT1NoOUk2TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI0LjIxNFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoyNC4yMTRaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI0LjIxNFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJteWRpci9hcy10ZXN0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDQyMTQyNDQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTA0MjE0MjQ0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ09TaDlJNkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNDIxNDI0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDQyMTQyNDQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT1NoOUk2TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNDIxNDI0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDQyMTQyNDQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ09TaDlJNkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJteWRpci9hcy10ZXN0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDQyMTQyNDQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTA0MjE0MjQ0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ09TaDlJNkw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "77b21b781a3a52df", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2751" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Etag": [ "COSh9I6L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkNB1E31DNwMpRSRUQHFua37r3AsTIOMAC6pN-qMrZJ1LKlhG-YWsFhsPf5PdaF2A19BV_CFRoWwRq11WSdoOs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTA0MjE0MjQ0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdD9nZW5lcmF0aW9uPTE1OTE2ODM1MDQyMTQyNDQmYWx0PW1lZGlhIiwibmFtZSI6Im15ZGlyL2FzLXRlc3QiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDQyMTQyNDQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJYclk3dStBZTd0Q1R5eUs3ajFyTnd3PT0iLCJjcmMzMmMiOiJ5WlJscWc9PSIsImV0YWciOiJDT1NoOUk2TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI0LjIxNFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoyNC4yMTRaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI0LjIxNFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJteWRpci9hcy10ZXN0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDQyMTQyNDQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTA0MjE0MjQ0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ09TaDlJNkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNDIxNDI0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDQyMTQyNDQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT1NoOUk2TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNDIxNDI0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDQyMTQyNDQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ09TaDlJNkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJteWRpci9hcy10ZXN0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDQyMTQyNDQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTA0MjE0MjQ0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ09TaDlJNkw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "ebf66b1b638a9322", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683504214244" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmWNO31ejeya9cyJYSGciML3kruvrRe5_vQ4y-OTu7AZdN68Ge4o6aXPfUE0IFI-B42wzHiy1_ZdQTpbwA4Zms" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "d81f74a1e047c791", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1000\u0026pageToken=\u0026prefix=mydir\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "48" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm0UwdVw3F5XUz5PEppO9ARl1SwpClPaY_K6YVgU4vjBClnpF9oHhhpBFVvypo2OCrSUOSLz_MYy-ISjYDu8M4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsibXlkaXIvIl19" } }, { "ID": "cd08e1afa221f9cb", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=mydir%2Fas-test\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2788" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmUzp8PasU3B2hzbnBM7HwO1_QH9poEWqrJ0RcBrMPcKq5dkmupEYwMaMJ4kwdjjVjK-mvNAXjU3CeMNzBwTLM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDQyMTQyNDQiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0P2dlbmVyYXRpb249MTU5MTY4MzUwNDIxNDI0NCZhbHQ9bWVkaWEiLCJuYW1lIjoibXlkaXIvYXMtdGVzdCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNDIxNDI0NCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsImNyYzMyYyI6InlaUmxxZz09IiwiZXRhZyI6IkNPU2g5STZMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjQuMjE0WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI0LjIxNFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjQuMjE0WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNDIxNDI0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDQyMTQyNDQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT1NoOUk2TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTA0MjE0MjQ0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QvMTU5MTY4MzUwNDIxNDI0NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPU2g5STZMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTA0MjE0MjQ0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QvMTU5MTY4MzUwNDIxNDI0NC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDT1NoOUk2TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNDIxNDI0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDQyMTQyNDQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT1NoOUk2TDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "67168aab69194efa", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "206" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlGx72bcm-53akp-khPWTbURfbutdGzQJvQunIdlq1hU2UhqVZmo4JRBFf5fZfD0Lu7IMaJwfiGYAVqtQvAKXg" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXktZG9lcy1ub3QtZXhpc3Q8L0RldGFpbHM+PC9FcnJvcj4=" } }, { "ID": "d7408faab6ce49f4", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test/rewriteTo/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test-copy?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "application/json", "BodyParts": [ "e30K" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2934" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm41YktWuLXwtLK8ubkKoJhGB6E6C-3C1iyl7SpYA4VCK6P_4MP0AhtYF2t9JxjOemmH63OC5ZELMtmIYbWnP4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLCJ0b3RhbEJ5dGVzUmV3cml0dGVuIjoiMTEiLCJvYmplY3RTaXplIjoiMTEiLCJkb25lIjp0cnVlLCJyZXNvdXJjZSI6eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC1jb3B5LzE1OTE2ODM1MDQ2OTk4NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0LWNvcHkiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QtY29weT9nZW5lcmF0aW9uPTE1OTE2ODM1MDQ2OTk4NTkmYWx0PW1lZGlhIiwibmFtZSI6Im15ZGlyL2FzLXRlc3QtY29weSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNDY5OTg1OSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsImNyYzMyYyI6InlaUmxxZz09IiwiZXRhZyI6IkNOUHprWStMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjQuNjk5WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI0LjY5OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjQuNjk5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QtY29weSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTA0Njk5ODU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QtY29weS8xNTkxNjgzNTA0Njk5ODU5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QtY29weS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTlB6a1krTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdC1jb3B5IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDQ2OTk4NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC1jb3B5LzE1OTE2ODM1MDQ2OTk4NTkvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QtY29weS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOUHprWStMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdC1jb3B5IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDQ2OTk4NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC1jb3B5LzE1OTE2ODM1MDQ2OTk4NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QtY29weS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTlB6a1krTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QtY29weSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTA0Njk5ODU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QtY29weS8xNTkxNjgzNTA0Njk5ODU5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QtY29weS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTlB6a1krTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX19" } }, { "ID": "207f4a93ab13bdf6", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test-copy?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlqNmweQf70L9_Hi5btEuyj3A7IEh_Dyg4j_k0Eg0TCUCqI8LW52CRwE7IUinPP61aQhTOMrtx5rxkodjTtuN8" ] }, "Body": "" } }, { "ID": "d6b252ba6a4dc688", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk3V_kukS7EZL5wjUr3gxIA9R7CdWXtPpzNeYezrRLS0HExKZnY-CMjM565d59-Ux2NExj-PE6DPmh7NNJtfUc" ] }, "Body": "" } } ] }verify_ContentLanguage_can_be_written_and_read_through_As.replay000066400000000000000000001042241367004507500406170ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestAs{ "Initial": "AQAAAA7WcSCvCHu9yv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "f45542dfcd490e4e", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=mydir%2Fas-test\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudExhbmd1YWdlIjoibmwiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJtZDVIYXNoIjoiWHJZN3UrQWU3dENUeXlLN2oxck53dz09IiwibmFtZSI6Im15ZGlyL2FzLXRlc3QifQo=", "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2774" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Etag": [ "CM+Hvo6L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlBh3nzmL4cMNkU3ZS5L-KruaLneS5kJuTC3WQFGcAC5L0vh6yX9xCX6i6DnPypr1QuV5HF3I5Bc98y7IobwZo" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTAzMzI2MTU5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdD9nZW5lcmF0aW9uPTE1OTE2ODM1MDMzMjYxNTkmYWx0PW1lZGlhIiwibmFtZSI6Im15ZGlyL2FzLXRlc3QiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDMzMjYxNTkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJYclk3dStBZTd0Q1R5eUs3ajFyTnd3PT0iLCJjb250ZW50TGFuZ3VhZ2UiOiJubCIsImNyYzMyYyI6InlaUmxxZz09IiwiZXRhZyI6IkNNK0h2bzZMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjMuMzI1WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjIzLjMyNVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjMuMzI1WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwMzMyNjE1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDMzMjYxNTkvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTStIdm82TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTAzMzI2MTU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QvMTU5MTY4MzUwMzMyNjE1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNK0h2bzZMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTAzMzI2MTU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QvMTU5MTY4MzUwMzMyNjE1OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTStIdm82TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwMzMyNjE1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDMzMjYxNTkvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTStIdm82TDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "2b0fe4a8eab3ea59", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2774" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Etag": [ "CM+Hvo6L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkZ0J6t7q_jl_BMLhutuydjihCOrjYP8sXIjyy8oiNQcWU3sOe-3ieoAqO9y_c2yZ9Ewr2owpZkz-fft5mGRBA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTAzMzI2MTU5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdD9nZW5lcmF0aW9uPTE1OTE2ODM1MDMzMjYxNTkmYWx0PW1lZGlhIiwibmFtZSI6Im15ZGlyL2FzLXRlc3QiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDMzMjYxNTkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJYclk3dStBZTd0Q1R5eUs3ajFyTnd3PT0iLCJjb250ZW50TGFuZ3VhZ2UiOiJubCIsImNyYzMyYyI6InlaUmxxZz09IiwiZXRhZyI6IkNNK0h2bzZMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjMuMzI1WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjIzLjMyNVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjMuMzI1WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwMzMyNjE1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDMzMjYxNTkvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTStIdm82TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTAzMzI2MTU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QvMTU5MTY4MzUwMzMyNjE1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNK0h2bzZMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTAzMzI2MTU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QvMTU5MTY4MzUwMzMyNjE1OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTStIdm82TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Im15ZGlyL2FzLXRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwMzMyNjE1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDMzMjYxNTkvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTStIdm82TDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "78e1c4ab8abd7d95", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683503326159" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlUuRCHTiJyQqfHLgVvaqWEAD6EZwa4P3kJydLEezWMt76HhElIZkekQLx90wSA6aVNWKn7dUa8MyiJ0gNlrg8" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "550336dbc87c7f43", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1000\u0026pageToken=\u0026prefix=mydir\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "48" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkRR2yOcGnXUOory7PlG8O-oUK-WIhc3nGLUvXYFDcH55dYOXjBH8izXBcyATeFgoKcJ_vSanld5jzbGZKwuIs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsibXlkaXIvIl19" } }, { "ID": "a4ed3501867b9eb0", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=mydir%2Fas-test\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2811" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUknTO22xac1pWX3sWRUPqmaVOveID-52z6I7PmygiZukLrNOO1diXmBR5bE-RIXN7FdCvAvFfiEPI8GaSERF_E" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LzE1OTE2ODM1MDMzMjYxNTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0P2dlbmVyYXRpb249MTU5MTY4MzUwMzMyNjE1OSZhbHQ9bWVkaWEiLCJuYW1lIjoibXlkaXIvYXMtdGVzdCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwMzMyNjE1OSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsImNvbnRlbnRMYW5ndWFnZSI6Im5sIiwiY3JjMzJjIjoieVpSbHFnPT0iLCJldGFnIjoiQ00rSHZvNkw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoyMy4zMjVaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjMuMzI1WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoyMy4zMjVaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTAzMzI2MTU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QvMTU5MTY4MzUwMzMyNjE1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNK0h2bzZMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJteWRpci9hcy10ZXN0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDMzMjYxNTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTAzMzI2MTU5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ00rSHZvNkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJteWRpci9hcy10ZXN0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDMzMjYxNTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC8xNTkxNjgzNTAzMzI2MTU5L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNNK0h2bzZMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTAzMzI2MTU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L215ZGlyL2FzLXRlc3QvMTU5MTY4MzUwMzMyNjE1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNK0h2bzZMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "c69b1e0e7493b941", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "206" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUkroxAmpEmESSZCz6DMSHHIDDy2aLOb6CCpWAI3GTNID8ajr72GMp-N6V-ISYsqc1Nu4IrfAA5aYJUhTOvp_EA" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXktZG9lcy1ub3QtZXhpc3Q8L0RldGFpbHM+PC9FcnJvcj4=" } }, { "ID": "01fe724b553f2047", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test/rewriteTo/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test-copy?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "application/json", "BodyParts": [ "e30K" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2957" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl3rtCsLG4VuhEFfj3UHkuLPZhzlixwkShaTWUGaZjlSHAx93IoFBTDUmlQnR0Z1-MuPChCIL0O-TFOcsAiU8s" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLCJ0b3RhbEJ5dGVzUmV3cml0dGVuIjoiMTEiLCJvYmplY3RTaXplIjoiMTEiLCJkb25lIjp0cnVlLCJyZXNvdXJjZSI6eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC1jb3B5LzE1OTE2ODM1MDM4NjAzMzUiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbXlkaXIlMkZhcy10ZXN0LWNvcHkiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9teWRpciUyRmFzLXRlc3QtY29weT9nZW5lcmF0aW9uPTE1OTE2ODM1MDM4NjAzMzUmYWx0PW1lZGlhIiwibmFtZSI6Im15ZGlyL2FzLXRlc3QtY29weSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwMzg2MDMzNSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsImNvbnRlbnRMYW5ndWFnZSI6Im5sIiwiY3JjMzJjIjoieVpSbHFnPT0iLCJldGFnIjoiQ08vVTNvNkw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoyMy44NjBaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjMuODYwWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoyMy44NjBaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdC1jb3B5IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDM4NjAzMzUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC1jb3B5LzE1OTE2ODM1MDM4NjAzMzUvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC1jb3B5L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPL1UzbzZMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJteWRpci9hcy10ZXN0LWNvcHkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwMzg2MDMzNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LWNvcHkvMTU5MTY4MzUwMzg2MDMzNS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC1jb3B5L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ08vVTNvNkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJteWRpci9hcy10ZXN0LWNvcHkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwMzg2MDMzNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9teWRpci9hcy10ZXN0LWNvcHkvMTU5MTY4MzUwMzg2MDMzNS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC1jb3B5L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNPL1UzbzZMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibXlkaXIvYXMtdGVzdC1jb3B5IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDM4NjAzMzUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbXlkaXIvYXMtdGVzdC1jb3B5LzE1OTE2ODM1MDM4NjAzMzUvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL215ZGlyJTJGYXMtdGVzdC1jb3B5L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNPL1UzbzZMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fX0=" } }, { "ID": "f7f32e5993c63a96", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test-copy?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl8i0r9DRv_NMzSZcYBbNf1uFRNmJ6wOPnwC9UX1e4X0FRuiQcBJvWrhKWFODbEV5oWEDepEK5EZvMnLV8lIiU" ] }, "Body": "" } }, { "ID": "6a0d7a301f10d843", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/mydir%2Fas-test?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:24 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlX3MpmdYli0v0BFQ7Ff1zz1VlzXPzC7rtaFf6qfxhblbxpussv8bKukBUCz496Rnn2dZ_Um_hx3Hm_8jQz4mI" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestAttributes.replay000066400000000000000000001105071367004507500267550ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCXB5IIOv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "30e01a73cff56673", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=someDir%2Fblob-for-attributes\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY2FjaGVDb250cm9sIjoibm8tY2FjaGUiLCJjb250ZW50RGlzcG9zaXRpb24iOiJpbmxpbmUiLCJjb250ZW50RW5jb2RpbmciOiJpZGVudGl0eSIsImNvbnRlbnRMYW5ndWFnZSI6ImVuIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluIiwibWQ1SGFzaCI6IjdRZGloMU11aGpaZWhCNlN2OFVOakE9PSIsIm5hbWUiOiJzb21lRGlyL2Jsb2ItZm9yLWF0dHJpYnV0ZXMifQo=", "SGVsbG8gV29ybGQh" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3068" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Etag": [ "COCxhYOL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmuVHR9-6xAqzmeaY7woWJWO5yEMKrSGwkFqcdYNtOkJ3949PMUsV-GSNxaL7FWMvYm9YTknRYiBDvyovpPWGQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0NzkzMjg5OTIiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vc29tZURpciUyRmJsb2ItZm9yLWF0dHJpYnV0ZXMiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcz9nZW5lcmF0aW9uPTE1OTE2ODM0NzkzMjg5OTImYWx0PW1lZGlhIiwibmFtZSI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3OTMyODk5MiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjEyIiwibWQ1SGFzaCI6IjdRZGloMU11aGpaZWhCNlN2OFVOakE9PSIsImNvbnRlbnRFbmNvZGluZyI6ImlkZW50aXR5IiwiY29udGVudERpc3Bvc2l0aW9uIjoiaW5saW5lIiwiY29udGVudExhbmd1YWdlIjoiZW4iLCJjYWNoZUNvbnRyb2wiOiJuby1jYWNoZSIsImNyYzMyYyI6Ii9tengzQT09IiwiZXRhZyI6IkNPQ3hoWU9MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTkuMzI4WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjU5LjMyOFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTkuMzI4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc5MzI4OTkyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcy8xNTkxNjgzNDc5MzI4OTkyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0N4aFlPTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoic29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzkzMjg5OTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0NzkzMjg5OTIvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPQ3hoWU9MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoic29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzkzMjg5OTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0NzkzMjg5OTIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDT0N4aFlPTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc5MzI4OTkyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcy8xNTkxNjgzNDc5MzI4OTkyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT0N4aFlPTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "bbb81b8acfb8a1dc", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/not-found?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "201" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUl8q-UVax0fIUVW6abi2OAid778UCnvPcTleC7G-Z4iVHeF2XnzuqRS7kedEQL_ZUt7E-h5Bn1DCr3ITSg9eCU" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MDQsIm1lc3NhZ2UiOiJObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ub3QtZm91bmQiLCJlcnJvcnMiOlt7Im1lc3NhZ2UiOiJObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ub3QtZm91bmQiLCJkb21haW4iOiJnbG9iYWwiLCJyZWFzb24iOiJub3RGb3VuZCJ9XX19" } }, { "ID": "6b594d13a7acc792", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/someDir?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "197" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlXe1FAAbgdHx4zfThNKDJCdva2OgfBAx2hFmIj8O-cZiAwZsV2JAfSiDdyTThdGbNbvLXnBMcJMwBQgKHFnec" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MDQsIm1lc3NhZ2UiOiJObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9zb21lRGlyIiwiZXJyb3JzIjpbeyJtZXNzYWdlIjoiTm8gc3VjaCBvYmplY3Q6IGdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpciIsImRvbWFpbiI6Imdsb2JhbCIsInJlYXNvbiI6Im5vdEZvdW5kIn1dfX0=" } }, { "ID": "b98fc9c09d730156", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/someDir%2F?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "199" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUmXCOHxp-e2X5g0g92kGNvoQK4SnRxKpwg5VDDgS_pUNSEakrArCwyodL0qs3Q85__77l7gjiEkUdprZ-Bh3UU" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MDQsIm1lc3NhZ2UiOiJObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9zb21lRGlyLyIsImVycm9ycyI6W3sibWVzc2FnZSI6Ik5vIHN1Y2ggb2JqZWN0OiBnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvIiwiZG9tYWluIjoiZ2xvYmFsIiwicmVhc29uIjoibm90Rm91bmQifV19fQ==" } }, { "ID": "5ed389fb6e171478", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/someDir%2Fblob-for-attributes?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3068" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Etag": [ "COCxhYOL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUklr6JYaMfaqb-s_d_pPZvGykpmBtujtcNP3EbGa__KAd1H2NvpDrBf1iGkzsjIEzqtGmdzw798h7gie2NMN54" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0NzkzMjg5OTIiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vc29tZURpciUyRmJsb2ItZm9yLWF0dHJpYnV0ZXMiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcz9nZW5lcmF0aW9uPTE1OTE2ODM0NzkzMjg5OTImYWx0PW1lZGlhIiwibmFtZSI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3OTMyODk5MiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjEyIiwibWQ1SGFzaCI6IjdRZGloMU11aGpaZWhCNlN2OFVOakE9PSIsImNvbnRlbnRFbmNvZGluZyI6ImlkZW50aXR5IiwiY29udGVudERpc3Bvc2l0aW9uIjoiaW5saW5lIiwiY29udGVudExhbmd1YWdlIjoiZW4iLCJjYWNoZUNvbnRyb2wiOiJuby1jYWNoZSIsImNyYzMyYyI6Ii9tengzQT09IiwiZXRhZyI6IkNPQ3hoWU9MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTkuMzI4WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjU5LjMyOFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTkuMzI4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc5MzI4OTkyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcy8xNTkxNjgzNDc5MzI4OTkyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0N4aFlPTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoic29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzkzMjg5OTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0NzkzMjg5OTIvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPQ3hoWU9MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoic29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzkzMjg5OTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0NzkzMjg5OTIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDT0N4aFlPTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc5MzI4OTkyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcy8xNTkxNjgzNDc5MzI4OTkyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT0N4aFlPTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "d4d81c141af56a03", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683479328992" ], "X-Goog-Hash": [ "crc32c=/mzx3A==", "md5=7Qdih1MuhjZehB6Sv8UNjA==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "12" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmxkEjKHS6b10T2cTm_yBiGJeWWtKf9JVSwa3RmEAiK_70DTIzcyOE4Grw2TGQ-cXXplNQMUIaSur1uW-1bi_U" ] }, "Body": "SGVsbG8gV29ybGQh" } }, { "ID": "cad08d0af2b924c0", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=someDir%2Fblob-for-attributes\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IjdRZGloMU11aGpaZWhCNlN2OFVOakE9PSIsIm5hbWUiOiJzb21lRGlyL2Jsb2ItZm9yLWF0dHJpYnV0ZXMifQo=", "SGVsbG8gV29ybGQh" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2975" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Etag": [ "CP6InoOL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnpLVw8ji4jJGnGWccWermpmUtFw02CspFhkX7hsY9lkwb6dPpTe1ywER28He5LfqJ8oqltk8_t6KNk3qtPxfg" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0Nzk3MzMzNzQiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vc29tZURpciUyRmJsb2ItZm9yLWF0dHJpYnV0ZXMiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcz9nZW5lcmF0aW9uPTE1OTE2ODM0Nzk3MzMzNzQmYWx0PW1lZGlhIiwibmFtZSI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3OTczMzM3NCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjEyIiwibWQ1SGFzaCI6IjdRZGloMU11aGpaZWhCNlN2OFVOakE9PSIsImNyYzMyYyI6Ii9tengzQT09IiwiZXRhZyI6IkNQNklub09MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTkuNzMzWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjU5LjczM1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTkuNzMzWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc5NzMzMzc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcy8xNTkxNjgzNDc5NzMzMzc0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUDZJbm9PTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoic29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0Nzk3MzMzNzQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0Nzk3MzMzNzQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQNklub09MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoic29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0Nzk3MzMzNzQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0Nzk3MzMzNzQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUDZJbm9PTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc5NzMzMzc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcy8xNTkxNjgzNDc5NzMzMzc0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUDZJbm9PTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "763ab977b733999d", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/someDir%2Fblob-for-attributes?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2975" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Etag": [ "CP6InoOL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl-pk_OUMrciUGijVIDLXAqeiTq8bNtKUJtdhV_DinWBBuBLdmUApaRsIlEpazOyUYmB8X7fJtFviS65wsYen4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0Nzk3MzMzNzQiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vc29tZURpciUyRmJsb2ItZm9yLWF0dHJpYnV0ZXMiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcz9nZW5lcmF0aW9uPTE1OTE2ODM0Nzk3MzMzNzQmYWx0PW1lZGlhIiwibmFtZSI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3OTczMzM3NCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjEyIiwibWQ1SGFzaCI6IjdRZGloMU11aGpaZWhCNlN2OFVOakE9PSIsImNyYzMyYyI6Ii9tengzQT09IiwiZXRhZyI6IkNQNklub09MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTkuNzMzWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjU5LjczM1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTkuNzMzWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc5NzMzMzc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcy8xNTkxNjgzNDc5NzMzMzc0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUDZJbm9PTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoic29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0Nzk3MzMzNzQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0Nzk3MzMzNzQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQNklub09MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoic29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0Nzk3MzMzNzQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvc29tZURpci9ibG9iLWZvci1hdHRyaWJ1dGVzLzE1OTE2ODM0Nzk3MzMzNzQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUDZJbm9PTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InNvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc5NzMzMzc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3NvbWVEaXIvYmxvYi1mb3ItYXR0cmlidXRlcy8xNTkxNjgzNDc5NzMzMzc0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9zb21lRGlyJTJGYmxvYi1mb3ItYXR0cmlidXRlcy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUDZJbm9PTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "a3543039a132efed", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/someDir%2Fblob-for-attributes?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:17:59 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnTD4FEdO9l8_TO51jBqS8Pu1zBBgHVYtk6pkyTYxUnbrPMnSe8_EpJqR0eEVkl3qxYyYFK9ElKXihVM5g9m2Y" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestCanceledWrite/000077500000000000000000000000001367004507500261165ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestCanceledWrite/BlobExists.replay000066400000000000000000000330641367004507500314200ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCbIeiHeP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "4547aa70d457b786", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-canceled-write\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsIm5hbWUiOiJibG9iLWZvci1jYW5jZWxlZC13cml0ZSJ9Cg==", "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2899" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Etag": [ "CKqlkoWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn3df8ExOxTRo0wUEtcQBlN85hevsn9d0Aq_wZZZP_kifr8-84GVmHbjARwtoHTlmdNGwSfzMEYMmGvkk01slY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY2FuY2VsZWQtd3JpdGUvMTU5MTY4MzQ4MzczNDY5OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jYW5jZWxlZC13cml0ZSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNhbmNlbGVkLXdyaXRlP2dlbmVyYXRpb249MTU5MTY4MzQ4MzczNDY5OCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItY2FuY2VsZWQtd3JpdGUiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODM3MzQ2OTgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJYclk3dStBZTd0Q1R5eUs3ajFyTnd3PT0iLCJjcmMzMmMiOiJ5WlJscWc9PSIsImV0YWciOiJDS3Fsa29XTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjAzLjczNFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowMy43MzRaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjAzLjczNFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jYW5jZWxlZC13cml0ZSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDgzNzM0Njk4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNhbmNlbGVkLXdyaXRlLzE1OTE2ODM0ODM3MzQ2OTgvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNhbmNlbGVkLXdyaXRlL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLcWxrb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jYW5jZWxlZC13cml0ZSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDgzNzM0Njk4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNhbmNlbGVkLXdyaXRlLzE1OTE2ODM0ODM3MzQ2OTgvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jYW5jZWxlZC13cml0ZS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLcWxrb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY2FuY2VsZWQtd3JpdGUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4MzczNDY5OCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jYW5jZWxlZC13cml0ZS8xNTkxNjgzNDgzNzM0Njk4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY2FuY2VsZWQtd3JpdGUvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0txbGtvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jYW5jZWxlZC13cml0ZSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDgzNzM0Njk4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNhbmNlbGVkLXdyaXRlLzE1OTE2ODM0ODM3MzQ2OTgvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNhbmNlbGVkLXdyaXRlL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLcWxrb1dMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "be5991e99a363cf1", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683483734698" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnuh4kypBgheLhV9qpcz4e6rzAGo5L-9rMYzf5AZ6NtN7aQPgDOTTrNJbDiPXle5z93hBDNd9Aww4L6TPHUYE0" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "975bce7c120e1f96", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683483734698" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnzPq9B28p2E2VLHTip4bXchMlMaNNA73ePQEp1RIMC1AqOr5gZMmv4hoCm1jO5GCHy_Cznhp9_okRQTQI-Eeg" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "aade3d43425bea2e", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-canceled-write?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkEwfvUzxbQz_VbKQUtTYLJAb3igfJg8xkEpsKs6oxbTY1H3wK3xs0X-gJMlBWFLgobvNalUykmmpA22QYCAXw" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestCanceledWrite/EmptyContentType.replay000066400000000000000000000112701367004507500326300ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCaN8xnx/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "f17d987e8503e421", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "211" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUkx3Td3bQY_nHsL2iZz9JfpXxlhjoDmEwFye63IiHRDtTgtKtIpQumwUXSJz_Ttq1v2hUQBg9pp2XVMIMnfV2A" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvRGV0YWlscz48L0Vycm9yPg==" } }, { "ID": "eeb62b1fffb3d049", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "211" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlajulw4YGfgw7PCzL0qY2BmjejD4UUmFDK7t0sT68nkBfSbF_NM2WYYjRGjZuQRya18m_-wsZPuOHizIlObK4" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvRGV0YWlscz48L0Vycm9yPg==" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestCanceledWrite/NonEmptyContentType.replay000066400000000000000000000112701367004507500333030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCbDsf6pv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "78e832da453be215", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "211" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlanwofGPKFGWL38OiiyDYM2UqTuQFJb4UstLaliyDCyy-RTa1Z-KrPAwqd-n3LDiCqj8CW2mB85t8rZvlvGYY" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvRGV0YWlscz48L0Vycm9yPg==" } }, { "ID": "48b83ad88b76b8e9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "211" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:03 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlONd71r0nSqDiANV2qOZCa6oTaz6Mm3soQR_Ex8ekmBo-PYxakB0kkUPFf5vA4r5oXkHxchbQGh5KUxK6IuvY" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvRGV0YWlscz48L0Vycm9yPg==" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestConcurrentWriteAndRead.replay000066400000000000000000014721121367004507500312070ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCbOm8T8f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "b37ef0baadd17b4f", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key5\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiWWZSYUtRa0cwV3YxVWVlTXNEMWYrUT09IiwibmFtZSI6ImtleTUifQo=", "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "COC0roWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkAk-S12fJyDVBo5oKzoPJ7gV5DNR_P5Q9uLqpprKG6V2h3nHHq4pajGsxaYFzxikdZ-2tcD_3VQixKLRsiU0w" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5NS8xNTkxNjgzNDg0MTk1NDI0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTUiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk1P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE5NTQyNCZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5NSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE5NTQyNCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiJZZlJhS1FrRzBXdjFVZWVNc0QxZitRPT0iLCJjcmMzMmMiOiJKNmhidEE9PSIsImV0YWciOiJDT0Mwcm9XTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5NVoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xOTVaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5NVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk1IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTU0MjQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5NS8xNTkxNjgzNDg0MTk1NDI0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk1L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPQzByb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk1IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTU0MjQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5NS8xNTkxNjgzNDg0MTk1NDI0L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5NS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPQzByb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5NSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTk1NDI0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTUvMTU5MTY4MzQ4NDE5NTQyNC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTUvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ09DMHJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk1IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTU0MjQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5NS8xNTkxNjgzNDg0MTk1NDI0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk1L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNPQzByb1dMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "7b9973b16b0f1e19", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key19\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiMnc5UzRhUnFLQUJIb2VBaHlpQUpNQT09IiwibmFtZSI6ImtleTE5In0K", "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2612" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CNnmrIWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl3-JW6JE31IPseQDZMPpkjm-sL2v3xU4wzOHs-ua2mZbwZNdrIGNs2qJ7S0E6snlHFRM2gjnlQB6aU48C75ko" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTkvMTU5MTY4MzQ4NDE2OTA0OSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxOSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE5P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE2OTA0OSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNjkwNDkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjQwOTYiLCJtZDVIYXNoIjoiMnc5UzRhUnFLQUJIb2VBaHlpQUpNQT09IiwiY3JjMzJjIjoiWVJyOXZ3PT0iLCJldGFnIjoiQ05ubXJJV0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xNjhaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTY4WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xNjhaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE2OTA0OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxOS8xNTkxNjgzNDg0MTY5MDQ5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxOS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTm5tcklXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE2OTA0OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxOS8xNTkxNjgzNDg0MTY5MDQ5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTkvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTm5tcklXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTE5IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNjkwNDkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTkvMTU5MTY4MzQ4NDE2OTA0OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE5L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNObm1ySVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE2OTA0OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxOS8xNTkxNjgzNDg0MTY5MDQ5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxOS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTm5tcklXTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "b05b636d3491ca61", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key1\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoicW84NWxuM3JSQnB1ZElTV09VV3BZQT09IiwibmFtZSI6ImtleTEifQo=", "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CM+FrYWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnItSuAFA2QfP8J0FlTIy1hHGgCXOQIiy8D-MFdpWApkELRe-jtxxD6D44YMf_AlBc9qmoEEvLmoJ_oLxttJ48" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MS8xNTkxNjgzNDg0MTczMDA3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxP2dlbmVyYXRpb249MTU5MTY4MzQ4NDE3MzAwNyZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE3MzAwNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiJxbzg1bG4zclJCcHVkSVNXT1VXcFlBPT0iLCJjcmMzMmMiOiJRaGhyZnc9PSIsImV0YWciOiJDTStGcllXTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE3MloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xNzJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE3MloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkxIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzMwMDciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MS8xNTkxNjgzNDg0MTczMDA3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNK0ZyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkxIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzMwMDciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MS8xNTkxNjgzNDg0MTczMDA3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNK0ZyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTczMDA3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTEvMTU5MTY4MzQ4NDE3MzAwNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ00rRnJZV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkxIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzMwMDciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MS8xNTkxNjgzNDg0MTczMDA3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNK0ZyWVdMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "0ca9d3ab7053ca0d", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key17\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiMzJlZVhzajdaeWhDbDBvMjB3UFEvdz09IiwibmFtZSI6ImtleTE3In0K", "EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2612" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CKPqrYWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmt6MgT_6v66Ayd7RQIFWzhqoLpzcdHyRuWH9SEoNfnv_-9y8Otak_y2BL1TryiedQlsYAns6TsYCTTjogguz4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTcvMTU5MTY4MzQ4NDE4NTg5MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNyIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE3P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE4NTg5MSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTciLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODU4OTEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjQwOTYiLCJtZDVIYXNoIjoiMzJlZVhzajdaeWhDbDBvMjB3UFEvdz09IiwiY3JjMzJjIjoiMFRUZW9nPT0iLCJldGFnIjoiQ0tQcXJZV0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xODVaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTg1WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xODVaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4NTg5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNy8xNTkxNjgzNDg0MTg1ODkxL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDS1BxcllXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4NTg5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNy8xNTkxNjgzNDg0MTg1ODkxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTcvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDS1BxcllXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTE3IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODU4OTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTcvMTU5MTY4MzQ4NDE4NTg5MS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE3L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNLUHFyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4NTg5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNy8xNTkxNjgzNDg0MTg1ODkxL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDS1BxcllXTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "e6191357e15de33f", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key0\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiWWc4TFo2a2ZmM1FWRzhXK2RGdHhFQT09IiwibmFtZSI6ImtleTAifQo=", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CInerYWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkPuA3Qr-iZZQqHmO45oGEiPM4b3GcINLCsUbXtnpZ-vpeySKA22DWvrs5Fm0eJE-xaRt_Ch5sD6lnOrMOc3Fs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MC8xNTkxNjgzNDg0MTg0MzI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkwP2dlbmVyYXRpb249MTU5MTY4MzQ4NDE4NDMyOSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4NDMyOSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiJZZzhMWjZrZmYzUVZHOFcrZEZ0eEVBPT0iLCJjcmMzMmMiOiJtUGxCaVE9PSIsImV0YWciOiJDSW5lcllXTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE4NFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xODRaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE4NFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkwIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODQzMjkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MC8xNTkxNjgzNDg0MTg0MzI5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkwL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJbmVyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkwIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODQzMjkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MC8xNTkxNjgzNDg0MTg0MzI5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJbmVyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTg0MzI5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTAvMTU5MTY4MzQ4NDE4NDMyOS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTAvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0luZXJZV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkwIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODQzMjkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MC8xNTkxNjgzNDg0MTg0MzI5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkwL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNJbmVyWVdMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "4d92c3dc6858cf52", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key3\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiN3RCUE95S0lvMG9tWU9tYk4zSHQ3dz09IiwibmFtZSI6ImtleTMifQo=", "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CNT0rIWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmrlwgG7H0GL1slvKBoyBSC-TEpI0YkzdEF4huEOoxHDsaiQhYO9CWv-SkkvooyZKwlRLfD6QGx0uD-REipa6M" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5My8xNTkxNjgzNDg0MTcwODM2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTMiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkzP2dlbmVyYXRpb249MTU5MTY4MzQ4NDE3MDgzNiZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE3MDgzNiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiI3dEJQT3lLSW8wb21ZT21iTjNIdDd3PT0iLCJjcmMzMmMiOiI4alpJWWc9PSIsImV0YWciOiJDTlQwcklXTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE3MFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xNzBaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE3MFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzA4MzYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5My8xNTkxNjgzNDg0MTcwODM2L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkzL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOVDBySVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzA4MzYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5My8xNTkxNjgzNDg0MTcwODM2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5My9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOVDBySVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTcwODM2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTMvMTU5MTY4MzQ4NDE3MDgzNi9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTMvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ05UMHJJV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzA4MzYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5My8xNTkxNjgzNDg0MTcwODM2L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkzL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNOVDBySVdMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "dd21b7e26f44a694", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key11\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiQWJEbVdSOTZmMVZJRm5XNEpRNS9TQT09IiwibmFtZSI6ImtleTExIn0K", "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2612" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "COzXrYWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn9KyJGyBbJvMrgW8wG-T9kSPuvDd4pqRIfePZe7a4Wo-4XoxQMQ6rsp6qUpNxTh3btwy10yNuTFmVNSkp4MNo" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTEvMTU5MTY4MzQ4NDE4MzUzMiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTExP2dlbmVyYXRpb249MTU5MTY4MzQ4NDE4MzUzMiZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODM1MzIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjQwOTYiLCJtZDVIYXNoIjoiQWJEbVdSOTZmMVZJRm5XNEpRNS9TQT09IiwiY3JjMzJjIjoiT1ZZcDlBPT0iLCJldGFnIjoiQ096WHJZV0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xODNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTgzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xODNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4MzUzMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxMS8xNTkxNjgzNDg0MTgzNTMyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT3pYcllXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4MzUzMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxMS8xNTkxNjgzNDg0MTgzNTMyL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT3pYcllXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTExIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODM1MzIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTEvMTU5MTY4MzQ4NDE4MzUzMi9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTExL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNPelhyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4MzUzMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxMS8xNTkxNjgzNDg0MTgzNTMyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT3pYcllXTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "a2bad16002aef2aa", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key7\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoia2J1aVRwNUpFdWdqd0FrZ3p0UG9YQT09IiwibmFtZSI6ImtleTcifQo=", "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CPmXroWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmxvf7YmQa48Xc3beYl9S3yf_IiwQ7RENzfO3Mqw-WAAhrMrO9bWIhYyPax95VvwCFONf8Y8ozf8EkpY83qva4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Ny8xNTkxNjgzNDg0MTkxNzM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk3P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE5MTczNyZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5NyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE5MTczNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiJrYnVpVHA1SkV1Z2p3QWtnenRQb1hBPT0iLCJjcmMzMmMiOiJsNFo0cVE9PSIsImV0YWciOiJDUG1Ycm9XTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5MVoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xOTFaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5MVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk3IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTE3MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Ny8xNTkxNjgzNDg0MTkxNzM3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk3L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQbVhyb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk3IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTE3MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Ny8xNTkxNjgzNDg0MTkxNzM3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5Ny9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQbVhyb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5NyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTkxNzM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTcvMTU5MTY4MzQ4NDE5MTczNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTcvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1BtWHJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk3IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTE3MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Ny8xNTkxNjgzNDg0MTkxNzM3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk3L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNQbVhyb1dMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "4da4a42000ec583d", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key18\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoid1p2STFNdE9nQU5HUUQwZ3paNE5VZz09IiwibmFtZSI6ImtleTE4In0K", "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2612" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CP2htIWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlULDphOJ1iYiU6_XREhneLdLjAsiswt1mcFcYy_4toE-hXWMCUe7u8OIG6Qo9Ri6VfbCJ2iL-peHuzDSMNIHA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTgvMTU5MTY4MzQ4NDI5MTMyNSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxOCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE4P2dlbmVyYXRpb249MTU5MTY4MzQ4NDI5MTMyNSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTgiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQyOTEzMjUiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjQwOTYiLCJtZDVIYXNoIjoid1p2STFNdE9nQU5HUUQwZ3paNE5VZz09IiwiY3JjMzJjIjoidS92WFNRPT0iLCJldGFnIjoiQ1AyaHRJV0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4yOTFaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMjkxWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4yOTFaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTgiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDI5MTMyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxOC8xNTkxNjgzNDg0MjkxMzI1L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxOC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUDJodElXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTgiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDI5MTMyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxOC8xNTkxNjgzNDg0MjkxMzI1L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTgvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUDJodElXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTE4IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQyOTEzMjUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTgvMTU5MTY4MzQ4NDI5MTMyNS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE4L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQMmh0SVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTgiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDI5MTMyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxOC8xNTkxNjgzNDg0MjkxMzI1L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxOC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUDJodElXTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "0337ba76953b2902", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key15\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoicUhxeTNUT0NQTFdBQlovWVRFZWlBZz09IiwibmFtZSI6ImtleTE1In0K", "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2612" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CMemroWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkOSPnAsIyQsDgdKlBiWGe66T-Pnw4DTiTgJOYzftcwXTmBAAVT13_VNEW9CcjvhybCH6R-mC8YnGv0K1hdG_U" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTUvMTU5MTY4MzQ4NDE5MzYwNyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE1P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE5MzYwNyZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTUiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM2MDciLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjQwOTYiLCJtZDVIYXNoIjoicUhxeTNUT0NQTFdBQlovWVRFZWlBZz09IiwiY3JjMzJjIjoiWE9ZWlB3PT0iLCJldGFnIjoiQ01lbXJvV0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xOTNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTkzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xOTNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE5MzYwNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNS8xNTkxNjgzNDg0MTkzNjA3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTWVtcm9XTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE5MzYwNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNS8xNTkxNjgzNDg0MTkzNjA3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTUvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTWVtcm9XTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTE1IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM2MDciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTUvMTU5MTY4MzQ4NDE5MzYwNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE1L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNNZW1yb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE5MzYwNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNS8xNTkxNjgzNDg0MTkzNjA3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTWVtcm9XTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "0a3293208006cd54", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key6\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoibGtvMnVEcW9KcmdFeVlObnZjSjZ2dz09IiwibmFtZSI6ImtleTYifQo=", "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CKuyrYWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl95sPyXUnwS0Rg9zyMsamhe_Oc0vcqwITjbHNZRMv0FOnQ7nybE-HbiWl10YmmO2237qCUIhtuMuM-bmKS4Js" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Ni8xNTkxNjgzNDg0MTc4NzMxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTYiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk2P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE3ODczMSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5NiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE3ODczMSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiJsa28ydURxb0pyZ0V5WU5udmNKNnZ3PT0iLCJjcmMzMmMiOiJUV2RTWHc9PSIsImV0YWciOiJDS3V5cllXTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE3OFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xNzhaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE3OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk2IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzg3MzEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Ni8xNTkxNjgzNDg0MTc4NzMxL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk2L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLdXlyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk2IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzg3MzEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Ni8xNTkxNjgzNDg0MTc4NzMxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5Ni9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLdXlyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5NiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTc4NzMxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTYvMTU5MTY4MzQ4NDE3ODczMS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTYvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0t1eXJZV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk2IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxNzg3MzEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Ni8xNTkxNjgzNDg0MTc4NzMxL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk2L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLdXlyWVdMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "14973fcf1e6cbd36", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key9\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6Imtmc2l1S1JaNzNEN0N6YXVLb2RBaGc9PSIsIm5hbWUiOiJrZXk5In0K", "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2597" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CK2WrYWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmBYBvavNswR5c2NkhcuNyPvOqAPbUlOcchEEtouFWHWcNmWGEeIozAolNp72G6fuUdiG4GM3y4D-Y0bhxbpLE" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5OS8xNTkxNjgzNDg0MTc1MTQ5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTkiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk5P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE3NTE0OSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5OSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE3NTE0OSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjQwOTYiLCJtZDVIYXNoIjoia2ZzaXVLUlo3M0Q3Q3phdUtvZEFoZz09IiwiY3JjMzJjIjoiaVhnSzZRPT0iLCJldGFnIjoiQ0syV3JZV0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xNzRaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTc0WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xNzRaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5OSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTc1MTQ5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTkvMTU5MTY4MzQ4NDE3NTE0OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5OS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSzJXcllXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5OSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTc1MTQ5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTkvMTU5MTY4MzQ4NDE3NTE0OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTkvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSzJXcllXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE3NTE0OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXk5LzE1OTE2ODM0ODQxNzUxNDkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk5L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNLMldyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5OSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTc1MTQ5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTkvMTU5MTY4MzQ4NDE3NTE0OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5OS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSzJXcllXTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "a9ba457fdd89444c", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key16\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiNjVuOUNqZHJKa05RRWFHNGZGV01nUT09IiwibmFtZSI6ImtleTE2In0K", "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2612" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CKTarYWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk2uq2Momcks2TwdxufegvUzC04ZSWOnqUEPQKQtTCj2IP3EEbvnoG6f1d578j7JmrkO52YtbE-kOSbigKFhcU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTYvMTU5MTY4MzQ4NDE4Mzg0NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE2P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE4Mzg0NCZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTYiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODM4NDQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjQwOTYiLCJtZDVIYXNoIjoiNjVuOUNqZHJKa05RRWFHNGZGV01nUT09IiwiY3JjMzJjIjoiQzlYMFZBPT0iLCJldGFnIjoiQ0tUYXJZV0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xODNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTgzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xODNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4Mzg0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNi8xNTkxNjgzNDg0MTgzODQ0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDS1RhcllXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4Mzg0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNi8xNTkxNjgzNDg0MTgzODQ0L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTYvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDS1RhcllXTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTE2IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxODM4NDQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTYvMTU5MTY4MzQ4NDE4Mzg0NC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE2L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNLVGFyWVdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE4Mzg0NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNi8xNTkxNjgzNDg0MTgzODQ0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDS1RhcllXTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "157cbd8fec118571", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key10\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IkFYS0sxSlZjWjc5MUt4Y2hJWFlOTmc9PSIsIm5hbWUiOiJrZXkxMCJ9Cg==", "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2613" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CITAroWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmNHN_4ZWLhwbEGn_8MvHe7GGM5EQNcdfN7qSjU97w4mU63lQHXHuFMoobvwnYhHbPWAnYloFInm3Pi9-4--XM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTAvMTU5MTY4MzQ4NDE5Njg2OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTEwP2dlbmVyYXRpb249MTU5MTY4MzQ4NDE5Njg2OCZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTY4NjgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI0MDk2IiwibWQ1SGFzaCI6IkFYS0sxSlZjWjc5MUt4Y2hJWFlOTmc9PSIsImNyYzMyYyI6IjQ3Y0RBZz09IiwiZXRhZyI6IkNJVEFyb1dMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTk2WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5NloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTk2WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEwIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTY4NjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTAvMTU5MTY4MzQ4NDE5Njg2OC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0lUQXJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEwIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTY4NjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTAvMTU5MTY4MzQ4NDE5Njg2OC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTEwL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0lUQXJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkxMCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTk2ODY4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTEwLzE1OTE2ODM0ODQxOTY4NjgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSVRBcm9XTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEwIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTY4NjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTAvMTU5MTY4MzQ4NDE5Njg2OC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0lUQXJvV0w5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "426593d6026265dd", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key2\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiWlVIbi9VaG9DNXRnN0FWZXY2TWNBZz09IiwibmFtZSI6ImtleTIifQo=", "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CI6CsoWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUktVnbT1teSoFHc-Y1JKVxK8QHFagOu96Z1zjqBqKZiHeOU0Ev7Q586jW4En5Fd9bZIf9H24ULuC_J5FqG0oGY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Mi8xNTkxNjgzNDg0MjU0NDc4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTIiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkyP2dlbmVyYXRpb249MTU5MTY4MzQ4NDI1NDQ3OCZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDI1NDQ3OCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiJaVUhuL1Vob0M1dGc3QVZldjZNY0FnPT0iLCJjcmMzMmMiOiJLTmRpbEE9PSIsImV0YWciOiJDSTZDc29XTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjI1NFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4yNTRaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjI1NFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkyIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQyNTQ0NzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Mi8xNTkxNjgzNDg0MjU0NDc4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkyL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJNkNzb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkyIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQyNTQ0NzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Mi8xNTkxNjgzNDg0MjU0NDc4L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5Mi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJNkNzb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MjU0NDc4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTIvMTU5MTY4MzQ4NDI1NDQ3OC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0k2Q3NvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkyIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQyNTQ0NzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5Mi8xNTkxNjgzNDg0MjU0NDc4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkyL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNJNkNzb1dMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "075ad1b56dbc154b", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key8\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoicVBaUEUwdUFHQk5LRTZMaEVRVEE4UT09IiwibmFtZSI6ImtleTgifQo=", "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "COuoroWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmB-Z8nD1Ln2oI4ocaMxaTaioScOF0u8mYtL-A9p2oyvWD-wJ4aeHnjWQRbkKTPEtV8bBqv_aE-rkSzeW9Rfgw" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5OC8xNTkxNjgzNDg0MTkzODk5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTgiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk4P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE5Mzg5OSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5OCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE5Mzg5OSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiJxUFpQRTB1QUdCTktFNkxoRVFUQThRPT0iLCJjcmMzMmMiOiJVNWtnSHc9PSIsImV0YWciOiJDT3Vvcm9XTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5M1oiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xOTNaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5M1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk4IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM4OTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5OC8xNTkxNjgzNDg0MTkzODk5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk4L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPdW9yb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk4IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM4OTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5OC8xNTkxNjgzNDg0MTkzODk5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5OC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPdW9yb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5OCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTkzODk5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTgvMTU5MTY4MzQ4NDE5Mzg5OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTgvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ091b3JvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk4IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM4OTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5OC8xNTkxNjgzNDg0MTkzODk5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk4L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNPdW9yb1dMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "927ade0e4d9e222b", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key12\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlZrR1ErM0xKc2VIQUZvcGJiK0JZdmc9PSIsIm5hbWUiOiJrZXkxMiJ9Cg==", "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2613" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CJGjroWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlOtffxScnPe_ZyfALxfYnvlICrpWj98C5gKXMuFXnVfQ6NQ4lLl5GXoLqW6F6IEnCGjWrGVEW-0ltvU_FvUhc" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTIvMTU5MTY4MzQ4NDE5MzE2OSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTEyP2dlbmVyYXRpb249MTU5MTY4MzQ4NDE5MzE2OSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTIiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTMxNjkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI0MDk2IiwibWQ1SGFzaCI6IlZrR1ErM0xKc2VIQUZvcGJiK0JZdmc9PSIsImNyYzMyYyI6Ik5pa1ExQT09IiwiZXRhZyI6IkNKR2pyb1dMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTkyWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5MloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTkyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEyIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTMxNjkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTIvMTU5MTY4MzQ4NDE5MzE2OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTIvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pHanJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEyIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTMxNjkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTIvMTU5MTY4MzQ4NDE5MzE2OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTEyL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pHanJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkxMiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTkzMTY5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTEyLzE1OTE2ODM0ODQxOTMxNjkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMi9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSkdqcm9XTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEyIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTMxNjkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTIvMTU5MTY4MzQ4NDE5MzE2OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTIvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pHanJvV0w5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "c0c7ed86c1ac4fa9", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key4\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiSDA2anlGM1pzSkRPY3d5QjVnZyt6dz09IiwibmFtZSI6ImtleTQifQo=", "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2596" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CJDYroWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlJ9qJKb_bJh_xWMutCWZ9hqZQ2Yr9Sz1xm9oALczX_IU3T3tiBP2u2175xEPCt8ViQSBDHokjByOWupC1IAqo" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5NC8xNTkxNjgzNDg0MTk5OTUyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk0P2dlbmVyYXRpb249MTU5MTY4MzQ4NDE5OTk1MiZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5NCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDE5OTk1MiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNDA5NiIsIm1kNUhhc2giOiJIMDZqeUYzWnNKRE9jd3lCNWdnK3p3PT0iLCJjcmMzMmMiOiIvVWx4UWc9PSIsImV0YWciOiJDSkRZcm9XTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5OVoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4xOTlaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5OVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTk5NTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5NC8xNTkxNjgzNDg0MTk5OTUyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKRFlyb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTk5NTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5NC8xNTkxNjgzNDg0MTk5OTUyL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5NC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKRFlyb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5NCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTk5OTUyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTQvMTU5MTY4MzQ4NDE5OTk1Mi9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pEWXJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXk0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTk5NTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5NC8xNTkxNjgzNDg0MTk5OTUyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXk0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKRFlyb1dMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "eeef3999d0e69bab", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key14\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLCJtZDVIYXNoIjoiTmxGRFVGTTBUcEYxUytNWEUxUHhEZz09IiwibmFtZSI6ImtleTE0In0K", "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2612" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CO75roWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlQHnktvJzVZ6T1-vnTQHgtVPfsAMNTlKgPFzk4y9SryV3pUx_FzTm7RHK7GslX4X89UrN9OFX4h2brxJpOVC8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTQvMTU5MTY4MzQ4NDIwNDI3MCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE0P2dlbmVyYXRpb249MTU5MTY4MzQ4NDIwNDI3MCZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQyMDQyNzAiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjQwOTYiLCJtZDVIYXNoIjoiTmxGRFVGTTBUcEYxUytNWEUxUHhEZz09IiwiY3JjMzJjIjoiaGdjenlRPT0iLCJldGFnIjoiQ083NXJvV0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4yMDRaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMjA0WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNC4yMDRaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDIwNDI3MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNC8xNTkxNjgzNDg0MjA0MjcwL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTzc1cm9XTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDIwNDI3MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNC8xNTkxNjgzNDg0MjA0MjcwL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTzc1cm9XTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTE0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQyMDQyNzAiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTQvMTU5MTY4MzQ4NDIwNDI3MC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTE0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNPNzVyb1dMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoia2V5MTQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NDIwNDI3MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXkxNC8xNTkxNjgzNDg0MjA0MjcwL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxNC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTzc1cm9XTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "2bf20d3a177b852d", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=key13\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlNzVHpGWjNtN1IxTnJJYzQyVUtXK1E9PSIsIm5hbWUiOiJrZXkxMyJ9Cg==", "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2613" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "CKeproWL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmzT_vzez8kyKWsLdwnr_GSNqytKDn2wFAqqQmo2fSsp19HfVN6MZqcOc1q858m1s7QYek46T3SjHoUpn_gBAw" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTMvMTU5MTY4MzQ4NDE5Mzk1OSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMyIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTEzP2dlbmVyYXRpb249MTU5MTY4MzQ4NDE5Mzk1OSZhbHQ9bWVkaWEiLCJuYW1lIjoia2V5MTMiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM5NTkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI0MDk2IiwibWQ1SGFzaCI6IlNzVHpGWjNtN1IxTnJJYzQyVUtXK1E9PSIsImNyYzMyYyI6IjdNZzZJZz09IiwiZXRhZyI6IkNLZXByb1dMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTkzWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA0LjE5M1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDQuMTkzWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM5NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTMvMTU5MTY4MzQ4NDE5Mzk1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTMvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tlcHJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM5NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTMvMTU5MTY4MzQ4NDE5Mzk1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2tleTEzL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tlcHJvV0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJrZXkxMyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg0MTkzOTU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2tleTEzLzE1OTE2ODM0ODQxOTM5NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9rZXkxMy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS2Vwcm9XTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImtleTEzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODQxOTM5NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQva2V5MTMvMTU5MTY4MzQ4NDE5Mzk1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28va2V5MTMvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tlcHJvV0w5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "922fa5e953394ac0", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"aa8f39967deb441a6e7484963945a960\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484173007" ], "X-Goog-Hash": [ "crc32c=Qhhrfw==", "md5=qo85ln3rRBpudISWOUWpYA==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlQhT-EBaD0ekm8ix115fwp5xoyk7406lOblS4-aR4W1FQX-IraQQjO3CVteqYcO0fuXuTQMv0lvu8to_VxiXk" ] }, "Body": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ==" } }, { "ID": "d7eec498af62da9c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key0", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"620f0b67a91f7f74151bc5be745b7110\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484184329" ], "X-Goog-Hash": [ "crc32c=mPlBiQ==", "md5=Yg8LZ6kff3QVG8W+dFtxEA==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUknXZ71UMXbE9TPm923YFYa_zubaODimx7j4HKU6oOOaD1mv-W_Qc2uA81x5Zbj7CnCdQufr6DdD_9h60zb0MQ" ] }, "Body": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" } }, { "ID": "66f74adb071908fd", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key4", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"1f4ea3c85dd9b090ce730c81e6083ecf\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484199952" ], "X-Goog-Hash": [ "crc32c=/UlxQg==", "md5=H06jyF3ZsJDOcwyB5gg+zw==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkVrMaJcxEWQ5NvqFOeb5rt_Lgi9NmxsP4L5KUDqFJjZWMnsZolRoIIskt7qZU9u1b_Wvtn7uU3Qly-XYNlQFg" ] }, "Body": "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA==" } }, { "ID": "6633f1230f495411", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key5", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"61f45a290906d16bf551e78cb03d5ff9\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484195424" ], "X-Goog-Hash": [ "crc32c=J6hbtA==", "md5=YfRaKQkG0Wv1UeeMsD1f+Q==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkpZC8GqPUYTQePDc2-OTPRkTLO4bxUxhJ1QL1hnAtsQW9UJxJuXvjLS2UxHK_4wCmAdLSvHJ9_PBg0LDoFEq0" ] }, "Body": "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ==" } }, { "ID": "3f0bea6519f61bfe", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key7", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"91bba24e9e4912e823c00920ced3e85c\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484191737" ], "X-Goog-Hash": [ "crc32c=l4Z4qQ==", "md5=kbuiTp5JEugjwAkgztPoXA==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkFRJA78RTfaY5M8h4zukxA8zHQbdy9mxsG5vy8I2pV1ym5HuOeWLm37vfNj6GjmzAE2Ff9nP-Adcs7WsMyBRE" ] }, "Body": "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw==" } }, { "ID": "ef6bee9ca3bf1571", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key3", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"eed04f3b2288a34a2660e99b3771edef\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484170836" ], "X-Goog-Hash": [ "crc32c=8jZIYg==", "md5=7tBPOyKIo0omYOmbN3Ht7w==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnlxQ-STf_PUWbaNk7R_om7dIi3qKobZcZnyJ-FM8ZogUizFiGEK-D73SZj0AsVxzmp_wd-kpdcDAlTKkfakF8" ] }, "Body": "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==" } }, { "ID": "a0f40756e0fedb87", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key11", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"01b0e6591f7a7f55481675b8250e7f48\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484183532" ], "X-Goog-Hash": [ "crc32c=OVYp9A==", "md5=AbDmWR96f1VIFnW4JQ5/SA==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlraUCQ5P2JrMp5OXB2b2tZRcoaYHVyE2CxJWUzR-gkjsf7MqJPtCUT5o8_u3JO2qJxUm8kH7Yad0K1VBjtWCY" ] }, "Body": "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw==" } }, { "ID": "8ed8532e1117e9ec", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key6", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"964a36b83aa826b804c98367bdc27abf\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484178731" ], "X-Goog-Hash": [ "crc32c=TWdSXw==", "md5=lko2uDqoJrgEyYNnvcJ6vw==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnQAzacpXXSiKRdxkrcH25AtQe-m2_Nk3ErGqnAb1cTsEMizFQy_B-pMXhSiVAcxqrsOUaXGF9kDpWkGV4n6Xk" ] }, "Body": "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg==" } }, { "ID": "1ce0ea4fe4ab4908", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key10", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"01728ad4955c67bf752b172121760d36\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484196868" ], "X-Goog-Hash": [ "crc32c=47cDAg==", "md5=AXKK1JVcZ791KxchIXYNNg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlS6dQzdQyBXNRNcnTLnKsHgGtc-kYZJfG3On9AIEsgvw7EKG9vRnbDy15wFiM7KSKKJ5xwFQ1M_zZ2n87VnUU" ] }, "Body": "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==" } }, { "ID": "eabf7cca6f662668", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key19", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"db0f52e1a46a280047a1e021ca200930\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484169049" ], "X-Goog-Hash": [ "crc32c=YRr9vw==", "md5=2w9S4aRqKABHoeAhyiAJMA==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk8e8k2CoPLLYrdROdyLVCuZ95Kw85Vz0cYcP66TgGtyuQWzA8A0dBf7ri0vY4owUmEny01GUZGC8LvS4h6LYU" ] }, "Body": "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw==" } }, { "ID": "e58bad7f1f2246dc", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key2", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"6541e7fd48680b9b60ec055ebfa31c02\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484254478" ], "X-Goog-Hash": [ "crc32c=KNdilA==", "md5=ZUHn/UhoC5tg7AVev6McAg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnx8Wv6Nebx69jas75RtxNkkfEm-apRfj2ooszYqCxSlZK9ySILn9lKUAGOVsiQiN3u3bNNA5PKwWPa7hdQqio" ] }, "Body": "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg==" } }, { "ID": "5ee290253779e4ef", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key16", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"eb99fd0a376b26435011a1b87c558c81\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484183844" ], "X-Goog-Hash": [ "crc32c=C9X0VA==", "md5=65n9CjdrJkNQEaG4fFWMgQ==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnI8zzc-fRUIKfrU5ikE4Z-TCbYVntlUcfFSHWiQQZw6xGdMnzZEsxbinC1SvIcC6cQhPqlZDEaAhgYeW9qyns" ] }, "Body": "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA==" } }, { "ID": "2add2b2838ac4e27", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key8", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"a8f64f134b8018134a13a2e11104c0f1\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484193899" ], "X-Goog-Hash": [ "crc32c=U5kgHw==", "md5=qPZPE0uAGBNKE6LhEQTA8Q==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkyC6dBqZJLV_R_tzelOgbr99GDNw2-djrOA8Xe-fh8i8k-BHbZb1GSzrah5H4COPLiI428xaat3Vmf26TKeJ0" ] }, "Body": "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA==" } }, { "ID": "b69c7973488d1143", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key17", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"df679e5ec8fb672842974a36d303d0ff\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484185891" ], "X-Goog-Hash": [ "crc32c=0TTeog==", "md5=32eeXsj7ZyhCl0o20wPQ/w==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmZ06jnyZ-_UDLWuyGDaSk_L1m4QqhHg_uFha3ovErSz_BfsAAegwvv8YvWLhj7jyUtcqraidvGG896QkC6qSg" ] }, "Body": "EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQ==" } }, { "ID": "061f97d6eb49f6ca", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key13", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"4ac4f3159de6ed1d4dac8738d94296f9\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484193959" ], "X-Goog-Hash": [ "crc32c=7Mg6Ig==", "md5=SsTzFZ3m7R1NrIc42UKW+Q==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlSE_5ZtsUuEL3zDnWQ4V3TQ4BmiDJwttAEhTUy8fv-Kavl-LnahviiuVX97bVzHnUKQDaZKMZav7vkF-COgUk" ] }, "Body": "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ==" } }, { "ID": "1edc8735ea82872b", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key15", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"a87ab2dd33823cb580059fd84c47a202\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484193607" ], "X-Goog-Hash": [ "crc32c=XOYZPw==", "md5=qHqy3TOCPLWABZ/YTEeiAg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkJx7Qe8dtmkgiQSjIWdsABGNsFe5ipXRAl0I6ztW4jQySPabKqO9_xzjCxA3UzSuiDDA-ZQ_MF6Qc3uh0aUrA" ] }, "Body": "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw==" } }, { "ID": "199db7e9d4aa8742", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key18", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"c19bc8d4cb4e800346403d20cd9e0d52\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484291325" ], "X-Goog-Hash": [ "crc32c=u/vXSQ==", "md5=wZvI1MtOgANGQD0gzZ4NUg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlgavvFpwjCPl7JiaN7geC-HJCPpMby3YOrykIjU1RDccl_9iya77S38MHzAdFEuJE89s_OCd2LufH4vE7enhU" ] }, "Body": "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg==" } }, { "ID": "f276712946d3b810", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key14", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"3651435053344e91754be3171353f10e\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484204270" ], "X-Goog-Hash": [ "crc32c=hgczyQ==", "md5=NlFDUFM0TpF1S+MXE1PxDg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkk5SvQLKCL_n2TnyFhQlNMn7Y2voQKh61thZsF2TsykBUN-CUkzU2xed2BaErYfC0FDuBcX19IqlWSnD4CzCs" ] }, "Body": "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg==" } }, { "ID": "caed381f1a108022", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key12", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"564190fb72c9b1e1c0168a5b6fe058be\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484193169" ], "X-Goog-Hash": [ "crc32c=NikQ1A==", "md5=VkGQ+3LJseHAFopbb+BYvg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUndtvLWmsf91c75gj88AqiGp8uwfFKUSraUmDYwA45ZH_t-8sspvwvKpQG07ku01S9TkIsskEP5Ua6ytGnVLR4" ] }, "Body": "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA==" } }, { "ID": "d7ee8b6e77bacca1", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key9", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Etag": [ "\"91fb22b8a459ef70fb0b36ae2a874086\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683484175149" ], "X-Goog-Hash": [ "crc32c=iXgK6Q==", "md5=kfsiuKRZ73D7CzauKodAhg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "4096" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlbodCUFm856Fm6Vw4ogToE264DF5_cXcU27bOK84egiPlDuyQbDBfBz-dPGDRlW91H8RBohDfemP57evLug0I" ] }, "Body": "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ==" } }, { "ID": "5eb7fa12d014b88b", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key19?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmQ8NQlmnomcDowIk23pJ0WFb8ZKzqha4l41VPWE4UvfHO6Tw-H3fUV4bz1Nn5SEGpMHkb8xp-4yEKbR4sFLzo" ] }, "Body": "" } }, { "ID": "b448b9016b930d26", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key18?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn5M3ai77s8wTThYbUh95AAY0JHu374bdim7vvfoDhld5_Z91S7HQunJ8PKnI1jZuJhbMqAIan5HCsVuudl5iM" ] }, "Body": "" } }, { "ID": "cd29203dd72b6b41", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key17?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmsIPK-fckP8Y1-XoUWjdVFy6QTIVJ0bli-RLkybkdEmSZF8qKTZPSYUFgVOLrydSOrNwOKpBhPjGw7eRgAa8Q" ] }, "Body": "" } }, { "ID": "85742eb0924fa514", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key16?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkrRm7eA8U1cL3AJTjwHWTpNNKvVZufwpicVcwHoUSfP7lOmR288GZql0OCOVJZkDplzvpgGAk-oSH_OLYfE18" ] }, "Body": "" } }, { "ID": "25a7b64c3be548c4", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key15?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlWuF7Bb96JwGFeO1BoEDeKmS3-HNimvO1H-yTkdAQWTPMgUuzDW3MA1NPYKqLMLluYS85Anjpv39BTmJTDllU" ] }, "Body": "" } }, { "ID": "527dbbb05c90132c", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key14?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkhMMC4gP9svBZVwDcDBICwkSzZ5r0yM-15ZiFVWBOnhq1pQQvPlyYON2cTJZGkXYEDcgwaJQmu4cq2C-APZ2E" ] }, "Body": "" } }, { "ID": "7a8cfa084c968789", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key13?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:04 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm6qWJiBF-b062CXSgeKwOfV5wrvd5r_eXmIEtXjQB8H7CNC2nH3dMP-6FziP1uJF4_HSLgCEipxLO-VXK6YgM" ] }, "Body": "" } }, { "ID": "51f7ec52c6e47955", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key12?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmHC7feI1_kWvQBz1Gn6SNAqZw27OzWRL99J1tDF2M-qcyfdn7dYiJlG_VG6x8lt5M8fnOZs9zqJdbHC_8lEsY" ] }, "Body": "" } }, { "ID": "418c308c78ea33b8", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key11?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk4TJfDwP-Xb8y_fKT-NTqc6gZfFK-GRuFvuNRkMS84BW3xk5IXZNtSRPPAGRAKBX2KkUL6Zf_Wc2QhZYaQXc0" ] }, "Body": "" } }, { "ID": "8667293c0bbe2124", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key10?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm7zvL4SRug9uC8D1C4w_wZpmlaKU0elOAu-4sS5Mk5t3fdLu-kiqDBczZouZQlJ4Uh0A_M3pnYMHGrDVZ0Z1U" ] }, "Body": "" } }, { "ID": "562c422399617f4e", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key9?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlp4-b0vmprHXy9kic5_K6BmTW0_qnCW1RYFH-vPgG6d2uOdn2CApUMKsi-1KwHNYNnmlE-7Xd81CC5GyoUDus" ] }, "Body": "" } }, { "ID": "628758a2c721415b", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key8?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl6_KtPOFRMXqIULKCNFuekp9XSMomXT1IeNscWfNeBICGfZTcmMRX8yoFsf5QtbxPMrd7rjxXRalJSTq36Ni8" ] }, "Body": "" } }, { "ID": "0e2a67d3d55e66bf", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key7?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk73rgHD5d8eUC6zT1iY8ak3MZi1VmMAguVKfE9m4XFkUUGFv6vdQn8oa81KMWqnIyos6Ggae5wB4sxSw8ZDUs" ] }, "Body": "" } }, { "ID": "e93db9b9b5fe3539", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key6?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnwokbBDLNebyXFUo0N9h5V6LtljLDL09F77fmxyk54o5pB90EGXsf8SmSbgw4aqWxU_pulEwTGkuI2y8jD-L0" ] }, "Body": "" } }, { "ID": "2686c792da6d6a2b", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key5?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmC0qciSrPYO6VntEyumbj7dMiC7AbgdMyMg0wrrXc1Zwgzbrui6qMQXY44TBppndc_oJe7UQv41ugRWgSOp_8" ] }, "Body": "" } }, { "ID": "83dfcdf627cee04e", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key4?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmh6wjiUT4nvXKf_RgPbMmOl-RUhuSjwKxxfFl2UKqzuFg8RI13uylddWJXHvGORdbHfKTLPsd_e7m9lYrxMy4" ] }, "Body": "" } }, { "ID": "ea8b78a3408a8a3d", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key3?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmQi_fNhr3MEe_q2chLBty8pLNH8zoNE__x8CgYtBI_oVf_X7mJNBRfOlktAitE9SMwtvZ2-jCx2IHll2gi5ik" ] }, "Body": "" } }, { "ID": "b8e676a78d1ab18e", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key2?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkg3aCxLl0rqHZKyiQXURtwZhrqOesYC9qSjDi86VUsuUe65_NpAC0bOiJ81hCijZ1AcD_zk62zvwOLPYfVr08" ] }, "Body": "" } }, { "ID": "862aba35e706f8bd", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key1?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkxN9lkVYQnHWRxCDLIRbgsAfd8OQoNTwyVZShfkxVAOQKax7mnSs3XRA7rJSwnL_pLuX6YCHU3McPVrAFI5K4" ] }, "Body": "" } }, { "ID": "0b6770faa5c974c5", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/key0?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:05 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkxgTtdsqT1-xKxXEaqv0n50NCJAUzd7r6JEJcHMQO4_tHLk15oJXM3kzS6tRt_uoqEMZv6bhIiy1PjxZsKv0M" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestCopy/000077500000000000000000000000001367004507500243175ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestCopy/NonExistentSourceFails.replay000066400000000000000000000061321367004507500321550ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCgBtCyFf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "46f8a09b0994da96", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/does-not-exist/rewriteTo/b/go-cloud-blob-test-bucket/o/blob-for-copying-dest?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "application/json", "BodyParts": [ "e30K" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "211" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUmX2uXZbYCwY7bEkoLE4rC_1Jvvh_nxQu0M2Ivrlt3sc5xH7vPJXTxgFD4yRrSmAbjw_6ByUNwmf7eTDaz6fms" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MDQsIm1lc3NhZ2UiOiJObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9kb2VzLW5vdC1leGlzdCIsImVycm9ycyI6W3sibWVzc2FnZSI6Ik5vIHN1Y2ggb2JqZWN0OiBnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2RvZXMtbm90LWV4aXN0IiwiZG9tYWluIjoiZ2xvYmFsIiwicmVhc29uIjoibm90Rm91bmQifV19fQ==" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestCopy/Works.replay000066400000000000000000001410131367004507500266420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCgEY7l7v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "57b3b466b8b27fe7", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-copying-src\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY2FjaGVDb250cm9sIjoibm8tY2FjaGUiLCJjb250ZW50RGlzcG9zaXRpb24iOiJpbmxpbmUiLCJjb250ZW50RW5jb2RpbmciOiJpZGVudGl0eSIsImNvbnRlbnRMYW5ndWFnZSI6ImVuIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluIiwibWQ1SGFzaCI6InNRcU5zV1RnZFVFRnQ2bWI1eTQvNVE9PSIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJuYW1lIjoiYmxvYi1mb3ItY29weWluZy1zcmMifQo=", "SGVsbG8gV29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2969" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Etag": [ "CLrvtIeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkzN6f84HUMJcQS1xIjJwVcKVlNmFmxro_PpfKzEv02ysJA6SU7ClEbCKlRoE3Fi0M1Rmod8ABV3Vgcpad1LoQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1zcmMvMTU5MTY4MzQ4ODQ5NTU0NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLXNyYyIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctc3JjP2dlbmVyYXRpb249MTU5MTY4MzQ4ODQ5NTU0NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItY29weWluZy1zcmMiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODg0OTU1NDYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW4iLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJzUXFOc1dUZ2RVRUZ0Nm1iNXk0LzVRPT0iLCJjb250ZW50RW5jb2RpbmciOiJpZGVudGl0eSIsImNvbnRlbnREaXNwb3NpdGlvbiI6ImlubGluZSIsImNvbnRlbnRMYW5ndWFnZSI6ImVuIiwiY2FjaGVDb250cm9sIjoibm8tY2FjaGUiLCJjcmMzMmMiOiJhUjJxTHc9PSIsImV0YWciOiJDTHJ2dEllTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA4LjQ5NVoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowOC40OTVaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA4LjQ5NVoiLCJtZXRhZGF0YSI6eyJmb28iOiJiYXIifSwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY29weWluZy1zcmMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODQ5NTU0NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLXNyYy8xNTkxNjgzNDg4NDk1NTQ2L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLXNyYy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHJ2dEllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY29weWluZy1zcmMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODQ5NTU0NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLXNyYy8xNTkxNjgzNDg4NDk1NTQ2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1zcmMvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHJ2dEllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctc3JjIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODg0OTU1NDYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1zcmMvMTU5MTY4MzQ4ODQ5NTU0Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctc3JjL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNMcnZ0SWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY29weWluZy1zcmMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODQ5NTU0NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLXNyYy8xNTkxNjgzNDg4NDk1NTQ2L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLXNyYy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTHJ2dEllTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "69906bb240510bfd", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-copying-src?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2969" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Etag": [ "CLrvtIeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlyyZs3pSMM1kMhe721Ap1l1RB_oodak11mA-IGRBa31EVwfxjKFpdVFFI8k_AGjvq0NMZXzwXg4kYSJWErgz4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1zcmMvMTU5MTY4MzQ4ODQ5NTU0NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLXNyYyIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctc3JjP2dlbmVyYXRpb249MTU5MTY4MzQ4ODQ5NTU0NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItY29weWluZy1zcmMiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODg0OTU1NDYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW4iLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJzUXFOc1dUZ2RVRUZ0Nm1iNXk0LzVRPT0iLCJjb250ZW50RW5jb2RpbmciOiJpZGVudGl0eSIsImNvbnRlbnREaXNwb3NpdGlvbiI6ImlubGluZSIsImNvbnRlbnRMYW5ndWFnZSI6ImVuIiwiY2FjaGVDb250cm9sIjoibm8tY2FjaGUiLCJjcmMzMmMiOiJhUjJxTHc9PSIsImV0YWciOiJDTHJ2dEllTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA4LjQ5NVoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowOC40OTVaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA4LjQ5NVoiLCJtZXRhZGF0YSI6eyJmb28iOiJiYXIifSwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY29weWluZy1zcmMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODQ5NTU0NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLXNyYy8xNTkxNjgzNDg4NDk1NTQ2L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLXNyYy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHJ2dEllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY29weWluZy1zcmMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODQ5NTU0NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLXNyYy8xNTkxNjgzNDg4NDk1NTQ2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1zcmMvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHJ2dEllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctc3JjIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODg0OTU1NDYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1zcmMvMTU5MTY4MzQ4ODQ5NTU0Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctc3JjL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNMcnZ0SWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY29weWluZy1zcmMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODQ5NTU0NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLXNyYy8xNTkxNjgzNDg4NDk1NTQ2L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLXNyYy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTHJ2dEllTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "6560e012bcc15b19", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-copying-dest-exists\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6Im9QcWFmWEpBMWNYdXZYQ0psRERGbHc9PSIsIm5hbWUiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzIn0K", "Y2xvYmJlciBtZQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2979" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Etag": [ "CK/QvIeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk5sAgZhHLHRUJcS35VSNZEIIGA1hA7mg8bkYsGke6sjAOZzSnjtfiJLK5Lsz87Ibkb-EYVUJlF4IIAm-h5gCU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg4NjIyNjM5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzP2dlbmVyYXRpb249MTU5MTY4MzQ4ODYyMjYzOSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODYyMjYzOSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjEwIiwibWQ1SGFzaCI6Im9QcWFmWEpBMWNYdXZYQ0psRERGbHc9PSIsImNyYzMyYyI6ImhpQmdkQT09IiwiZXRhZyI6IkNLL1F2SWVMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDguNjIyWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA4LjYyMloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDguNjIyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODYyMjYzOSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzLzE1OTE2ODM0ODg2MjI2MzkvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0svUXZJZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODYyMjYzOSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzLzE1OTE2ODM0ODg2MjI2MzkvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0svUXZJZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODg2MjI2MzkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg4NjIyNjM5L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSy9RdkllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODYyMjYzOSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzLzE1OTE2ODM0ODg2MjI2MzkvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0svUXZJZUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "e91db5c346043de3", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-copying-src/rewriteTo/b/go-cloud-blob-test-bucket/o/blob-for-copying-dest?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "application/json", "BodyParts": [ "e30K" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3088" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmkefXsrfsS35cPTDj8ZEHtxTy8qroRWAc10LI9dvZ-8kFYPr5SReZN_3CaHf0NeRKYj4pftNzBZT1f52CPsBs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLCJ0b3RhbEJ5dGVzUmV3cml0dGVuIjoiMTEiLCJvYmplY3RTaXplIjoiMTEiLCJkb25lIjp0cnVlLCJyZXNvdXJjZSI6eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LzE1OTE2ODM0ODg3NzQ4OTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0P2dlbmVyYXRpb249MTU5MTY4MzQ4ODc3NDg5OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItY29weWluZy1kZXN0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg4Nzc0ODk5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiMTEiLCJtZDVIYXNoIjoic1FxTnNXVGdkVUVGdDZtYjV5NC81UT09IiwiY29udGVudEVuY29kaW5nIjoiaWRlbnRpdHkiLCJjb250ZW50RGlzcG9zaXRpb24iOiJpbmxpbmUiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiIsImNhY2hlQ29udHJvbCI6Im5vLWNhY2hlIiwiY3JjMzJjIjoiYVIycUx3PT0iLCJldGFnIjoiQ1BQMXhZZUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowOC43NzRaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDguNzc0WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowOC43NzRaIiwibWV0YWRhdGEiOnsiZm9vIjoiYmFyIn0sImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg4Nzc0ODk5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNvcHlpbmctZGVzdC8xNTkxNjgzNDg4Nzc0ODk5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BQMXhZZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg4Nzc0ODk5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNvcHlpbmctZGVzdC8xNTkxNjgzNDg4Nzc0ODk5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BQMXhZZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODc3NDg5OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLWRlc3QvMTU5MTY4MzQ4ODc3NDg5OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUFAxeFllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg4Nzc0ODk5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNvcHlpbmctZGVzdC8xNTkxNjgzNDg4Nzc0ODk5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1BQMXhZZUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19fQ==" } }, { "ID": "03eaaa6e4f2a4349", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683488774899" ], "X-Goog-Hash": [ "crc32c=aR2qLw==", "md5=sQqNsWTgdUEFt6mb5y4/5Q==" ], "X-Goog-Meta-Foo": [ "bar" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlpkV7J8eNmS70pbJfJ62EVWsFfXVnyirESv6fi9WD7ce6bhFGSjREYB5FswKnBWV6quNWX7efXuZwX9d_pDOI" ] }, "Body": "SGVsbG8gV29ybGQ=" } }, { "ID": "5e14ad152f6f6f67", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-copying-dest?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2985" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Etag": [ "CPP1xYeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkAHgRFMrHksowG-b6ORUdzJa9FlPKx76_MqGXQipuU_yVhXuQMyWwYTtuDbdKAyroNjnTomP79j6zokzXQjhg" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LzE1OTE2ODM0ODg3NzQ4OTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0P2dlbmVyYXRpb249MTU5MTY4MzQ4ODc3NDg5OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItY29weWluZy1kZXN0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg4Nzc0ODk5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluIiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiMTEiLCJtZDVIYXNoIjoic1FxTnNXVGdkVUVGdDZtYjV5NC81UT09IiwiY29udGVudEVuY29kaW5nIjoiaWRlbnRpdHkiLCJjb250ZW50RGlzcG9zaXRpb24iOiJpbmxpbmUiLCJjb250ZW50TGFuZ3VhZ2UiOiJlbiIsImNhY2hlQ29udHJvbCI6Im5vLWNhY2hlIiwiY3JjMzJjIjoiYVIycUx3PT0iLCJldGFnIjoiQ1BQMXhZZUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowOC43NzRaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDguNzc0WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowOC43NzRaIiwibWV0YWRhdGEiOnsiZm9vIjoiYmFyIn0sImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg4Nzc0ODk5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNvcHlpbmctZGVzdC8xNTkxNjgzNDg4Nzc0ODk5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BQMXhZZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg4Nzc0ODk5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNvcHlpbmctZGVzdC8xNTkxNjgzNDg4Nzc0ODk5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BQMXhZZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4ODc3NDg5OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1jb3B5aW5nLWRlc3QvMTU5MTY4MzQ4ODc3NDg5OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUFAxeFllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWNvcHlpbmctZGVzdCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg4Nzc0ODk5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNvcHlpbmctZGVzdC8xNTkxNjgzNDg4Nzc0ODk5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1BQMXhZZUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "78c62aacb7bc7308", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-copying-src/rewriteTo/b/go-cloud-blob-test-bucket/o/blob-for-copying-dest-exists?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "application/json", "BodyParts": [ "e30K" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3200" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnCN2uyq3UMTmDAaQl74gKL66LyO9XeUT4U5Tusc3NETMHlZoaxOWlSBai2xAxI1ex3nzAKPyYkwV8NpT2yzog" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLCJ0b3RhbEJ5dGVzUmV3cml0dGVuIjoiMTEiLCJvYmplY3RTaXplIjoiMTEiLCJkb25lIjp0cnVlLCJyZXNvdXJjZSI6eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg5MDgzNTY2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzP2dlbmVyYXRpb249MTU5MTY4MzQ4OTA4MzU2NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4OTA4MzU2NiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6InNRcU5zV1RnZFVFRnQ2bWI1eTQvNVE9PSIsImNvbnRlbnRFbmNvZGluZyI6ImlkZW50aXR5IiwiY29udGVudERpc3Bvc2l0aW9uIjoiaW5saW5lIiwiY29udGVudExhbmd1YWdlIjoiZW4iLCJjYWNoZUNvbnRyb2wiOiJuby1jYWNoZSIsImNyYzMyYyI6ImFSMnFMdz09IiwiZXRhZyI6IkNLN2gySWVMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDkuMDgzWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA5LjA4M1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDkuMDgzWiIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODkwODM1NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg5MDgzNTY2L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLN2gySWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODkwODM1NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg5MDgzNTY2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLN2gySWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg5MDgzNTY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMvMTU5MTY4MzQ4OTA4MzU2Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0s3aDJJZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODkwODM1NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg5MDgzNTY2L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLN2gySWVMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fX0=" } }, { "ID": "d44ad5edb641ec48", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683489083566" ], "X-Goog-Hash": [ "crc32c=aR2qLw==", "md5=sQqNsWTgdUEFt6mb5y4/5Q==" ], "X-Goog-Meta-Foo": [ "bar" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn_6aIjBl3RwpIA3BNSmMy0h0a81l5cJy9ZnD620tilCqSuPN3yxT43JJMw1JZx7Tk0Sd2PtYUt1PZy9CUlXXo" ] }, "Body": "SGVsbG8gV29ybGQ=" } }, { "ID": "f88aa8291f78fe61", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-copying-dest-exists?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3097" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Etag": [ "CK7h2IeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlyKXrLTPovJDtuqaQIitOJcDGsBhYI7up5XZuBu9KhJp_MXMaVzm7Ii5rFplEP_OItsrc2J2ikE0Rnv6ReWu8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg5MDgzNTY2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzP2dlbmVyYXRpb249MTU5MTY4MzQ4OTA4MzU2NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4OTA4MzU2NiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbiIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6InNRcU5zV1RnZFVFRnQ2bWI1eTQvNVE9PSIsImNvbnRlbnRFbmNvZGluZyI6ImlkZW50aXR5IiwiY29udGVudERpc3Bvc2l0aW9uIjoiaW5saW5lIiwiY29udGVudExhbmd1YWdlIjoiZW4iLCJjYWNoZUNvbnRyb2wiOiJuby1jYWNoZSIsImNyYzMyYyI6ImFSMnFMdz09IiwiZXRhZyI6IkNLN2gySWVMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDkuMDgzWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA5LjA4M1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDkuMDgzWiIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODkwODM1NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg5MDgzNTY2L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLN2gySWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODkwODM1NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg5MDgzNTY2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLN2gySWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg5MDgzNTY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMvMTU5MTY4MzQ4OTA4MzU2Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWNvcHlpbmctZGVzdC1leGlzdHMvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0s3aDJJZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODkwODM1NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItY29weWluZy1kZXN0LWV4aXN0cy8xNTkxNjgzNDg5MDgzNTY2L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1jb3B5aW5nLWRlc3QtZXhpc3RzL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLN2gySWVMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestDelete/000077500000000000000000000000001367004507500246075ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestDelete/NonExistentFails.replay000066400000000000000000000056721367004507500312740ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSChDeErkf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "49de767291a4d1d3", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/does-not-exist?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "211" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlE2UR8e_GlXRdQFapDKIv7H9VYr5jEHah-pzRasbKVL0Mr1rviBoyUg0_rS-_CUJcR5ygsvn--AqcV1D0534U" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MDQsIm1lc3NhZ2UiOiJObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9kb2VzLW5vdC1leGlzdCIsImVycm9ycyI6W3sibWVzc2FnZSI6Ik5vIHN1Y2ggb2JqZWN0OiBnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2RvZXMtbm90LWV4aXN0IiwiZG9tYWluIjoiZ2xvYmFsIiwicmVhc29uIjoibm90Rm91bmQifV19fQ==" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestDelete/Works.replay000066400000000000000000000314711367004507500271400ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSChGK8P+P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "2b1aec075282117b", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-deleting\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlBpV1dDbm5ieHB0blROVHNaNmNzWWc9PSIsIm5hbWUiOiJibG9iLWZvci1kZWxldGluZyJ9Cg==", "SGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2803" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Etag": [ "CJD39oeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmCuvhXLacPWesgm2pBgfZGePwi1hCsTUJHYulBE3oisEKk6mJLdF3560JiZYmAsNFKV0bRg4ZZtWoGlv2AESc" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsZXRpbmcvMTU5MTY4MzQ4OTU3Nzg3MiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxldGluZyIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGV0aW5nP2dlbmVyYXRpb249MTU5MTY4MzQ4OTU3Nzg3MiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsZXRpbmciLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODk1Nzc4NzIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJQaVdXQ25uYnhwdG5UTlRzWjZjc1lnPT0iLCJjcmMzMmMiOiJjclVmZUE9PSIsImV0YWciOiJDSkQzOW9lTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA5LjU3N1oiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowOS41NzdaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA5LjU3N1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxldGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg5NTc3ODcyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGV0aW5nLzE1OTE2ODM0ODk1Nzc4NzIvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGV0aW5nL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKRDM5b2VMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxldGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg5NTc3ODcyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGV0aW5nLzE1OTE2ODM0ODk1Nzc4NzIvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxldGluZy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKRDM5b2VMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsZXRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4OTU3Nzg3MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxldGluZy8xNTkxNjgzNDg5NTc3ODcyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsZXRpbmcvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pEMzlvZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxldGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg5NTc3ODcyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGV0aW5nLzE1OTE2ODM0ODk1Nzc4NzIvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGV0aW5nL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKRDM5b2VMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "bec873b2659aea4a", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-deleting?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmZ82TCtV3CAW6qja4DaRXHLBBvJTX90G_dqd-36ioUyw-IJQRzKaEzxCU1WF4OrqwvENyodsFMBQYq4RWF1T0" ] }, "Body": "" } }, { "ID": "9f22aae2e16410e7", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "205" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUmCoSgteJifkymN7ASwf5mtQvv2AaxTw4JqPlXvDV3CoxVuX61WRtd4S6qP2PV9LsQuhIuyPm2juU_aURlQnEI" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxldGluZzwvRGV0YWlscz48L0Vycm9yPg==" } }, { "ID": "47c50cc87d9a737f", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-deleting?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "217" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:09 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUnYTPK-tikcKamwcrO61yOnHotfgbBewCUNt7WqgBp-w8raBw2P5d1cQ9fQ_Afosop3_Y7A3tk4k5Fgnz_o7fI" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MDQsIm1lc3NhZ2UiOiJObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxldGluZyIsImVycm9ycyI6W3sibWVzc2FnZSI6Ik5vIHN1Y2ggb2JqZWN0OiBnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGV0aW5nIiwiZG9tYWluIjoiZ2xvYmFsIiwicmVhc29uIjoibm90Rm91bmQifV19fQ==" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/000077500000000000000000000000001367004507500243205ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/ascii-1.replay000066400000000000000000000544351367004507500267770ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCkOEH3S/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "b1a8d932e93da5d6", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys%00%01%02%03%04%05%06%07%08%09__0xa__%0B%0C__0xd__%0E%0F\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XHUwMDA4XHRfXzB4YV9fXHUwMDBiXHUwMDBjX18weGRfX1x1MDAwZVx1MDAwZiJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3886" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Etag": [ "CJSu0YmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmRQEZAVe3XcwPRsqf1vvRLvKagbzjjGjpYA_Bu3y1rQ3SsDs6b_qNkefqQ-vTHafc0sciHRY8VYQS1Y2a24hY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1x1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmLzE1OTE2ODM0OTMxNTY2MjgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGP2dlbmVyYXRpb249MTU5MTY4MzQ5MzE1NjYyOCZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c1x1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkzMTU2NjI4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSlN1MFltTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEzLjE1NloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMy4xNTZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEzLjE1NloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MzE1NjYyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYvMTU5MTY4MzQ5MzE1NjYyOC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKU3UwWW1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MzE1NjYyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYvMTU5MTY4MzQ5MzE1NjYyOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMDAlMDElMDIlMDMlMDQlMDUlMDYlMDclMDglMDlfXzB4YV9fJTBCJTBDX18weGRfXyUwRSUwRi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKU3UwWW1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1x1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTMxNTY2MjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1x1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmLzE1OTE2ODM0OTMxNTY2MjgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTAwJTAxJTAyJTAzJTA0JTA1JTA2JTA3JTA4JTA5X18weGFfXyUwQiUwQ19fMHhkX18lMEUlMEYvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pTdTBZbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MzE1NjYyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYvMTU5MTY4MzQ5MzE1NjYyOC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKU3UwWW1MOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "bfa9a650dc3cbb50", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%00%01%02%03%04%05%06%07%08%09__0xa__%0B%0C__0xd__%0E%0F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683493156628" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmzNTgzjoQ0oiZ7RNJHfwV35YKggmS5w7-8Fzk1RBJ-I8k5Mk7mevIjj9r-GBJqCjqMdpwgQ4uXf7ckgCCDYTU" ] }, "Body": "aGVsbG8=" } }, { "ID": "f531c8bec0e09ed2", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%00%01%02%03%04%05%06%07%08%09__0xa__%0B%0C__0xd__%0E%0F?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3886" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Etag": [ "CJSu0YmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmrf7E9PqtkV-lJi1Lm7qV56aVB8xJKabXeLEqA_dV9If4lFRTl4OpOmOBlY_EhK2NqeAaOTISHwC4ZilfEaDc" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1x1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmLzE1OTE2ODM0OTMxNTY2MjgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGP2dlbmVyYXRpb249MTU5MTY4MzQ5MzE1NjYyOCZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c1x1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkzMTU2NjI4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSlN1MFltTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEzLjE1NloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMy4xNTZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEzLjE1NloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MzE1NjYyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYvMTU5MTY4MzQ5MzE1NjYyOC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKU3UwWW1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MzE1NjYyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYvMTU5MTY4MzQ5MzE1NjYyOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMDAlMDElMDIlMDMlMDQlMDUlMDYlMDclMDglMDlfXzB4YV9fJTBCJTBDX18weGRfXyUwRSUwRi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKU3UwWW1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1x1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTMxNTY2MjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1x1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmLzE1OTE2ODM0OTMxNTY2MjgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTAwJTAxJTAyJTAzJTA0JTA1JTA2JTA3JTA4JTA5X18weGFfXyUwQiUwQ19fMHhkX18lMEUlMEYvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pTdTBZbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MzE1NjYyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYvMTU5MTY4MzQ5MzE1NjYyOC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKU3UwWW1MOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "8f86966ae37cd511", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%00%01%02%03%04%05%06%07%08%09__0xa__%0B%0C__0xd__%0E%0F?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683493156628" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnfAMy-0-WehyY_ckQprJjatScSbyu-QNS_oeab61hA7VMp9rfxjdyHT35YgaxILx6i1NdGtuJ7NzH5D9SXNhQ" ] }, "Body": "aGVsbG8=" } }, { "ID": "3366057cdd40f565", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%00%01%02%03%04%05%06%07%08%09__0xa__%0B%0C__0xd__%0E%0F?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlkSl6ivv68wMvmtI04IWIMUU_WaIcZstI5tGE_efHctwBgqyXbF6uzOe6PR5DXJQdTn16XTcD7XtT_bRcBfZY" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/ascii-2.replay000066400000000000000000000545751367004507500270050ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCiNWj6lP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "5d0ec2dd91bcc748", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmIn0K", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3938" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Etag": [ "CK6j0YiL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmE4TyZ-Zp08h_sPPP3AH63QX_Piax41j5fXIHNm8VNMuDLT5F0LPFd_YArWSW6THdx5B2BNMZdllesgIhMvcs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZi8xNTkxNjgzNDkxMDU4MDk0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUYiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGP2dlbmVyYXRpb249MTU5MTY4MzQ5MTA1ODA5NCZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MTA1ODA5NCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0s2ajBZaUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMS4wNTdaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTEuMDU3WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMS4wNTdaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxMDU4MDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU5MTY4MzQ5MTA1ODA5NC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUxMCUxMSUxMiUxMyUxNCUxNSUxNiUxNyUxOCUxOSUxQSUxQiUxQyUxRCUxRSUxRi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSzZqMFlpTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxMDU4MDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU5MTY4MzQ5MTA1ODA5NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUYvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSzZqMFlpTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MTA1ODA5NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmLzE1OTE2ODM0OTEwNTgwOTQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNLNmowWWlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxMDU4MDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU5MTY4MzQ5MTA1ODA5NC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUxMCUxMSUxMiUxMyUxNCUxNSUxNiUxNyUxOCUxOSUxQSUxQiUxQyUxRCUxRSUxRi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSzZqMFlpTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "267d78093adc0275", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683491058094" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUniFBPMkggPlqAdmpGjc-DbxUdgcKWfhUQcUYxjmJ6HeIn6U1sKGvgnmXen8IyxrzidQhH-W8bpF9hY0pFdPqo" ] }, "Body": "aGVsbG8=" } }, { "ID": "63de88f160058784", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3938" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Etag": [ "CK6j0YiL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmFMMXJjm_o_1ydsSiPhPycB7rG3AZS2xxJOHpRsGcX5u06R1zU2GHkCeZWoaQV0jtLPkTsTFiM1oYwWaQpqT0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZi8xNTkxNjgzNDkxMDU4MDk0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUYiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGP2dlbmVyYXRpb249MTU5MTY4MzQ5MTA1ODA5NCZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MTA1ODA5NCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0s2ajBZaUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMS4wNTdaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTEuMDU3WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMS4wNTdaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxMDU4MDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU5MTY4MzQ5MTA1ODA5NC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUxMCUxMSUxMiUxMyUxNCUxNSUxNiUxNyUxOCUxOSUxQSUxQiUxQyUxRCUxRSUxRi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSzZqMFlpTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxMDU4MDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU5MTY4MzQ5MTA1ODA5NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUYvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSzZqMFlpTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MTA1ODA5NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmLzE1OTE2ODM0OTEwNTgwOTQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNLNmowWWlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1x1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxMDU4MDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU5MTY4MzQ5MTA1ODA5NC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUxMCUxMSUxMiUxMyUxNCUxNSUxNiUxNyUxOCUxOSUxQSUxQiUxQyUxRCUxRSUxRi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSzZqMFlpTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "a49b060dc03047ea", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683491058094" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnmAL23Cl613FRByzRZx0SDsa0W1unaueZlFyPON2m7sLOJFBKnpzbCzIu1USqXI9XXvbzA04FNaZ_lZFVDFYk" ] }, "Body": "aGVsbG8=" } }, { "ID": "ec4230b5d66d8359", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmeKJKnJ-__tEkwce-b7cPFqYSr5m1VcxvLjYQ2hZ5hIG_g1kFRfPgVm25SgcoSlZe7pXlaThgTNgXCzjYr9YM" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/ascii-3.replay000066400000000000000000000476051367004507500270020ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCqA3twrv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "b1b91e63d15a7c40", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzICFcIiMkJVx1MDAyNicoKSorLC0uLyJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3028" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Etag": [ "CKjohoyL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkKMaEEd7xY8GHPvMamxmp622EFiw-v68sEtrs3C4v9BCJtVOduUnhiTr_a0wX2ZUMtU75uikaXZ5LlEGx7c6o" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vLzE1OTE2ODM0OTgyMjY3MjgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUyMCElMjIlMjMkJTI1JicoKSolMkIsLS4lMkYiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRj9nZW5lcmF0aW9uPTE1OTE2ODM0OTgyMjY3MjgmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXMgIVwiIyQlJicoKSorLC0uLyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5ODIyNjcyOCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0tqb2hveUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxOC4yMjZaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTguMjI2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxOC4yMjZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTgyMjY3MjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vLzE1OTE2ODM0OTgyMjY3MjgvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLam9ob3lMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzICFcIiMkJSYnKCkqKywtLi8iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5ODIyNjcyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzICFcIiMkJSYnKCkqKywtLi8vMTU5MTY4MzQ5ODIyNjcyOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tqb2hveUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzICFcIiMkJSYnKCkqKywtLi8iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5ODIyNjcyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzICFcIiMkJSYnKCkqKywtLi8vMTU5MTY4MzQ5ODIyNjcyOC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNLam9ob3lMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTgyMjY3MjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vLzE1OTE2ODM0OTgyMjY3MjgvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLam9ob3lMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "8b7a58ac116026c8", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%20%21%22%23$%25\u0026%27%28%29%2A+,-./", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683498226728" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlPcTwX4Dhs-WGiFlZtk7QIaaHsoJEcZczi6GQGDyPkJCZuE44-73I8uKiFYR4uZBsnzrkfVjReMucUfkMNw9M" ] }, "Body": "aGVsbG8=" } }, { "ID": "1e3b702cf7071a70", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3028" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Etag": [ "CKjohoyL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlFhSG_Wc_WbLOVT7mK55AJghbPQ5DiaHfQ3Ks02jqMD16KZ1dG1bs5Or9ij1astuMv-foltrySPWUy6wQPDl8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vLzE1OTE2ODM0OTgyMjY3MjgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyUyMCElMjIlMjMkJTI1JicoKSolMkIsLS4lMkYiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRj9nZW5lcmF0aW9uPTE1OTE2ODM0OTgyMjY3MjgmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXMgIVwiIyQlJicoKSorLC0uLyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5ODIyNjcyOCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0tqb2hveUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxOC4yMjZaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTguMjI2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxOC4yMjZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTgyMjY3MjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vLzE1OTE2ODM0OTgyMjY3MjgvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLam9ob3lMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzICFcIiMkJSYnKCkqKywtLi8iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5ODIyNjcyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzICFcIiMkJSYnKCkqKywtLi8vMTU5MTY4MzQ5ODIyNjcyOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tqb2hveUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzICFcIiMkJSYnKCkqKywtLi8iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5ODIyNjcyOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzICFcIiMkJSYnKCkqKywtLi8vMTU5MTY4MzQ5ODIyNjcyOC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNLam9ob3lMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTgyMjY3MjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cyAhXCIjJCUmJygpKissLS4vLzE1OTE2ODM0OTgyMjY3MjgvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLam9ob3lMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "c40ab21cc30c7822", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%20%21%22%23$%25\u0026%27%28%29%2A+,-./?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683498226728" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkVLucOOFhMwFo-zJRY9pPlQM2xY6QWlxXEC5yU6dWnZPvyBn2FjBotwv9Tr-DJXvoQLHnvy_VVDvSTTlO0aCM" ] }, "Body": "aGVsbG8=" } }, { "ID": "20efdc3146fc9d79", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm-ovBDfl3PsFuKBvwgzjtwxoHaTUgL9hlZwtYeCY5-Z3S0On9RkqIIebg8mLlB1NLn1HFS-AuUkYs9lzrNeZU" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/ascii-4.replay000066400000000000000000000467331367004507500270040ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSClHmGBZ/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "abc2db7e3fb8c218", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys%3A%3B%3C%3D%3E%3F\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzOjtcdTAwM2M9XHUwMDNlPyJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2922" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Etag": [ "CILB9YmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmbvEkN0m_WoN3yJ9mDIqwXKdfmZsQWQBxiA4-CNCjiZzpyE0yuwyjKfoer33eWvoMhn_EI8J3iQT84IPUyde8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czo7XHUwMDNjPVx1MDAzZT8vMTU5MTY4MzQ5Mzc0ODg2NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzOjslM0M9JTNFJTNGIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czo7JTNDPSUzRSUzRj9nZW5lcmF0aW9uPTE1OTE2ODM0OTM3NDg4NjYmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkzNzQ4ODY2IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSUxCOVltTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEzLjc0OFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMy43NDhaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEzLjc0OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzOjtcdTAwM2M9XHUwMDNlPyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkzNzQ4ODY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/LzE1OTE2ODM0OTM3NDg4NjYvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXM6OyUzQz0lM0UlM0YvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0lMQjlZbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTM3NDg4NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czo7XHUwMDNjPVx1MDAzZT8vMTU5MTY4MzQ5Mzc0ODg2Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXM6OyUzQz0lM0UlM0YvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSUxCOVltTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTM3NDg4NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czo7XHUwMDNjPVx1MDAzZT8vMTU5MTY4MzQ5Mzc0ODg2Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXM6OyUzQz0lM0UlM0YvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0lMQjlZbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzOjtcdTAwM2M9XHUwMDNlPyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkzNzQ4ODY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/LzE1OTE2ODM0OTM3NDg4NjYvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXM6OyUzQz0lM0UlM0YvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0lMQjlZbUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "dc2ca4e88d0ff250", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys:;%3C=%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683493748866" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmLx9Mi-Y0FyXsMjpHlhRXzMOkvZf9F_vePm8jnxagi-QAFv5BOq5_PrZ8_OnI01Dlb6V_BQvuhBD5eajM05Kg" ] }, "Body": "aGVsbG8=" } }, { "ID": "8d8eef26b3104f3c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%3A%3B%3C%3D%3E%3F?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2922" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Etag": [ "CILB9YmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmLd0joOZkVVdUrhnPzi_7NcewrceRcfPB4DyRsoCEMhZIp8XVgGPHV8rGE06R0FDXJB5fmrA_d7w7fkO2kZC0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czo7XHUwMDNjPVx1MDAzZT8vMTU5MTY4MzQ5Mzc0ODg2NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzOjslM0M9JTNFJTNGIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czo7JTNDPSUzRSUzRj9nZW5lcmF0aW9uPTE1OTE2ODM0OTM3NDg4NjYmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkzNzQ4ODY2IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSUxCOVltTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEzLjc0OFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMy43NDhaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEzLjc0OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzOjtcdTAwM2M9XHUwMDNlPyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkzNzQ4ODY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/LzE1OTE2ODM0OTM3NDg4NjYvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXM6OyUzQz0lM0UlM0YvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0lMQjlZbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTM3NDg4NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czo7XHUwMDNjPVx1MDAzZT8vMTU5MTY4MzQ5Mzc0ODg2Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXM6OyUzQz0lM0UlM0YvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSUxCOVltTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTM3NDg4NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czo7XHUwMDNjPVx1MDAzZT8vMTU5MTY4MzQ5Mzc0ODg2Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXM6OyUzQz0lM0UlM0YvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0lMQjlZbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzOjtcdTAwM2M9XHUwMDNlPyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkzNzQ4ODY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXM6O1x1MDAzYz1cdTAwM2U/LzE1OTE2ODM0OTM3NDg4NjYvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXM6OyUzQz0lM0UlM0YvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0lMQjlZbUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "ce1642a5b207ef5a", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys:;%3C=%3E%3F?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:13 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683493748866" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmET-uDUORsMgQvXRahLZ1bVU60mywHPeUQaUNuDoPeRDPd16kJ4JWfwIfL5SY0ezQL7DxRysHTfWTcsKw_HXw" ] }, "Body": "aGVsbG8=" } }, { "ID": "0823da23c62c179f", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%3A%3B%3C%3D%3E%3F?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkeJEOFoD-MgiV06yGeUF8KDSiXGpKLz7eTwnCRSRHVpn6WU3zW2QIYFcYqENJP2zdFpUpczXhzCi4U9_NuaYo" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/ascii-5.replay000066400000000000000000000455041367004507500270000ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCoAb+7x/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "57aa5a4a778d95f4", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys%40\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzQCJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2706" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Etag": [ "CJaKi4uL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmF3rhJCb-i5PSeXxcfXtntAXEymcAGYgO8ayfk4F2JtPBFUxaXskiY--uczNG0JvLCmo3x-tPz6ztdx7gxPQc" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c0AvMTU5MTY4MzQ5NjE5OTQ0NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzQCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNAP2dlbmVyYXRpb249MTU5MTY4MzQ5NjE5OTQ0NiZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c0AiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTYxOTk0NDYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKYUtpNHVMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTYuMTk5WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE2LjE5OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTYuMTk5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNAIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTYxOTk0NDYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c0AvMTU5MTY4MzQ5NjE5OTQ0Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c0AvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0phS2k0dUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNAIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTYxOTk0NDYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c0AvMTU5MTY4MzQ5NjE5OTQ0Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNAL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0phS2k0dUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzQCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk2MTk5NDQ2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNALzE1OTE2ODM0OTYxOTk0NDYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzQC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSmFLaTR1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNAIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTYxOTk0NDYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c0AvMTU5MTY4MzQ5NjE5OTQ0Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c0AvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0phS2k0dUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "c0c4d66e05b2cc75", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys@", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683496199446" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnMP_t5byqWLRaUrVG81YT6kVJKSBh0MFI-A5LcGXyQHI9ebHCcCJt6NSRlYiRu54AVab51bF4M3fLxHiuTYRs" ] }, "Body": "aGVsbG8=" } }, { "ID": "d936aefafc814888", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%40?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2706" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Etag": [ "CJaKi4uL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlKJ2SG8OMc2qLv90w9Nw_DysNmJ3nRA3qK-jrbsc-oxPCuy5zbFLIX0dlaOFuHJAZn6uYC_dZiFEwHX75JEqs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c0AvMTU5MTY4MzQ5NjE5OTQ0NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzQCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNAP2dlbmVyYXRpb249MTU5MTY4MzQ5NjE5OTQ0NiZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c0AiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTYxOTk0NDYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKYUtpNHVMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTYuMTk5WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE2LjE5OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTYuMTk5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNAIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTYxOTk0NDYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c0AvMTU5MTY4MzQ5NjE5OTQ0Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c0AvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0phS2k0dUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNAIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTYxOTk0NDYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c0AvMTU5MTY4MzQ5NjE5OTQ0Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNAL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0phS2k0dUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzQCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk2MTk5NDQ2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNALzE1OTE2ODM0OTYxOTk0NDYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzQC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSmFLaTR1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNAIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTYxOTk0NDYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c0AvMTU5MTY4MzQ5NjE5OTQ0Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c0AvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0phS2k0dUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "5612ae02d6ef02b6", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys@?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683496199446" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnQ5-H8uV3wQYivCxZZ8wUuQ0b7qWbxnStGj5vGhfIirWuy-menVZV-8r7xupLG39LJkQwn5zYq0ML8ndIzgps" ] }, "Body": "aGVsbG8=" } }, { "ID": "a267e6e1a3e6f325", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%40?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm0FQCmmL4RLYNR-AJnTLIdjwzqjZc-k51VY8ag8_1lR9jg1i6cED1Hki7OkMZ1tjEhU2yK8cr8804xapTImyU" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/ascii-6.replay000066400000000000000000000463061367004507500270020ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCoH/2AQP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "44a552cbd53397cf", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys%5B%5C%5D%5E_\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzW1xcXV5fIn0K", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2828" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Etag": [ "CMa+q4uL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnObyz9HY8uMESNVEPYdLbWb1n6xhSyIBnqTLVSLtCpF2rePQJ6E0C6CckewqsjLaQ1LUgV56U_hk3dMgY7x64" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1tcXF1eXy8xNTkxNjgzNDk2NzMwNDM4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNUIlNUMlNUQlNUVfIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU1QiU1QyU1RCU1RV8/Z2VuZXJhdGlvbj0xNTkxNjgzNDk2NzMwNDM4JmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzW1xcXV5fIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk2NzMwNDM4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTWErcTR1TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE2LjczMFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNi43MzBaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE2LjczMFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzW1xcXV5fIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTY3MzA0MzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1tcXF1eXy8xNTkxNjgzNDk2NzMwNDM4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTVCJTVDJTVEJTVFXy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTWErcTR1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1tcXF1eXyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk2NzMwNDM4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNbXFxdXl8vMTU5MTY4MzQ5NjczMDQzOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNUIlNUMlNUQlNUVfL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01hK3E0dUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzW1xcXV5fIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTY3MzA0MzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1tcXF1eXy8xNTkxNjgzNDk2NzMwNDM4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU1QiU1QyU1RCU1RV8vYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01hK3E0dUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzW1xcXV5fIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTY3MzA0MzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1tcXF1eXy8xNTkxNjgzNDk2NzMwNDM4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTVCJTVDJTVEJTVFXy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTWErcTR1TDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "fdad0fb69a64cb46", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%5B%5C%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683496730438" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkxFeDThn8pOhQZpNlP5WRRBBgoyOtiiWZU0NRvZ5AAFR8l0Cz_UiAWXkkJu0iWijReGlDxRL7NnGRytv7xshI" ] }, "Body": "aGVsbG8=" } }, { "ID": "2ecc8dc2b17ab67e", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%5B%5C%5D%5E_?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2828" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Etag": [ "CMa+q4uL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkxFaNzc0q40CIYQMh1e_Q6DA2AF8_6Xx_e11keNo8vzPYAz5t-SiN1PJT3zced6HG8RjSOIW-TYKHPlauNXnA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1tcXF1eXy8xNTkxNjgzNDk2NzMwNDM4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNUIlNUMlNUQlNUVfIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU1QiU1QyU1RCU1RV8/Z2VuZXJhdGlvbj0xNTkxNjgzNDk2NzMwNDM4JmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzW1xcXV5fIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk2NzMwNDM4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTWErcTR1TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE2LjczMFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNi43MzBaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE2LjczMFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzW1xcXV5fIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTY3MzA0MzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1tcXF1eXy8xNTkxNjgzNDk2NzMwNDM4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTVCJTVDJTVEJTVFXy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTWErcTR1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c1tcXF1eXyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk2NzMwNDM4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNbXFxdXl8vMTU5MTY4MzQ5NjczMDQzOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNUIlNUMlNUQlNUVfL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01hK3E0dUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzW1xcXV5fIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTY3MzA0MzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1tcXF1eXy8xNTkxNjgzNDk2NzMwNDM4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU1QiU1QyU1RCU1RV8vYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01hK3E0dUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzW1xcXV5fIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTY3MzA0MzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c1tcXF1eXy8xNTkxNjgzNDk2NzMwNDM4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTVCJTVDJTVEJTVFXy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTWErcTR1TDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "02765d07f034a49c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%5B%5C%5D%5E_?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683496730438" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlUuWhRMzQ2_eSWGwjtZwzExTH_CZSwxFkj4UO8zJs9cL9T1K3Kb1QsSm-xJ5pinCeT84GCGch-Xe6bYvn56qI" ] }, "Body": "aGVsbG8=" } }, { "ID": "bef99c3e63b7a866", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%5B%5C%5D%5E_?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkUhsUlDYlcCZZvXucdxkU6J4NVsmgvlonI2VXZfq2ZSdVywyfDvBsaLKNGXSHyznDnXHdeVYT2zFtRHMwB0Fc" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/ascii-7.replay000066400000000000000000000455501367004507500270030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCmAyUlpP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "5e210b16838c1407", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys%60\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzYCJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2718" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Etag": [ "CIa6k4qL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUklKMSB9HIiZ8c0owiDTEnyXww1aGx8ujIbPC01uIlBaEhqlHZmO11ITH9oRWua_Jf0lNhAil38eAdNzNOp4ng" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2AvMTU5MTY4MzQ5NDIzOTQ5NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTYwIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU2MD9nZW5lcmF0aW9uPTE1OTE2ODM0OTQyMzk0OTQmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXNgIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0MjM5NDk0IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSWE2azRxTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE0LjIzOVoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNC4yMzlaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE0LjIzOVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzYCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0MjM5NDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNgLzE1OTE2ODM0OTQyMzk0OTQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNjAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0lhNms0cUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNgIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTQyMzk0OTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2AvMTU5MTY4MzQ5NDIzOTQ5NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNjAvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSWE2azRxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNgIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTQyMzk0OTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2AvMTU5MTY4MzQ5NDIzOTQ5NC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNjAvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0lhNms0cUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzYCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0MjM5NDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNgLzE1OTE2ODM0OTQyMzk0OTQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNjAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0lhNms0cUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "e7a6fd1cafedaa23", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683494239494" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn9FHHvOD6eo_VtiXQKShIrQ2Auc3dRWKs4F4cdZSNB8ibgZmK9bRYp_tBqbBIkEuhX1OhljjZnYlQuBPsop0E" ] }, "Body": "aGVsbG8=" } }, { "ID": "5da99b14a4227a7c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%60?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2718" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Etag": [ "CIa6k4qL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnbaZxhLui0gldiuxQ7ZKALWxEWiu-hfATuPN5IPOf8JMmwyRTDtQFRoxkba0A7oFJ7s3yTEcG6kfJOgaWs3AE" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2AvMTU5MTY4MzQ5NDIzOTQ5NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTYwIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU2MD9nZW5lcmF0aW9uPTE1OTE2ODM0OTQyMzk0OTQmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXNgIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0MjM5NDk0IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSWE2azRxTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE0LjIzOVoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNC4yMzlaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE0LjIzOVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzYCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0MjM5NDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNgLzE1OTE2ODM0OTQyMzk0OTQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNjAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0lhNms0cUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNgIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTQyMzk0OTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2AvMTU5MTY4MzQ5NDIzOTQ5NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNjAvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSWE2azRxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNgIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTQyMzk0OTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2AvMTU5MTY4MzQ5NDIzOTQ5NC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNjAvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0lhNms0cUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzYCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0MjM5NDk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNgLzE1OTE2ODM0OTQyMzk0OTQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlNjAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0lhNms0cUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "12198d8d14514f04", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%60?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683494239494" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlsd-OA8cRHD_AJI0RET8lm0vZ3ouX_uhgm1imjbrpsTFtZZ2G_bGSOPYbwvQcQSE9C1A9bz6TU9kZXuh09Uo8" ] }, "Body": "aGVsbG8=" } }, { "ID": "bb327c47ab4bc213", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%60?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl_20FLltq99whork1OmArdX2rqM5cpqd1Dxf_mBcmBKmcfM3EFxu8_zhHMl_u90mtppy3yhZc5bdFl-ZvINO8" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/ascii-8.replay000066400000000000000000000464561367004507500270120ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCpAwjM4v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "d1a43747e6d53ef1", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys%7B%7C%7D~%7F\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlze3x9fn8ifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2868" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Etag": [ "CKi5yYuL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkwP5meMie1JmYFg7rVexNoEF7kBY6DU-TXYnrBZoyWyDGUfsZk9NTrfuxfAlCesbHmNh3AW0sOlRSH1PWIcmI" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c3t8fX5cdTAwN2YvMTU5MTY4MzQ5NzIyMTI4OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTdCJTdDJTdEfiU3RiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlN0IlN0MlN0R+JTdGP2dlbmVyYXRpb249MTU5MTY4MzQ5NzIyMTI4OCZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c3t8fX5cdTAwN2YiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTcyMjEyODgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLaTV5WXVMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTcuMjIxWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE3LjIyMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTcuMjIxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXN7fH1+XHUwMDdmIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTcyMjEyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c3t8fX5cdTAwN2YvMTU5MTY4MzQ5NzIyMTI4OC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU3QiU3QyU3RH4lN0YvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tpNXlZdUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXN7fH1+XHUwMDdmIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTcyMjEyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c3t8fX5cdTAwN2YvMTU5MTY4MzQ5NzIyMTI4OC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlN0IlN0MlN0R+JTdGL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tpNXlZdUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlze3x9flx1MDA3ZiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk3MjIxMjg4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXN7fH1+XHUwMDdmLzE1OTE2ODM0OTcyMjEyODgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTdCJTdDJTdEfiU3Ri9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS2k1eVl1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXN7fH1+XHUwMDdmIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTcyMjEyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c3t8fX5cdTAwN2YvMTU5MTY4MzQ5NzIyMTI4OC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU3QiU3QyU3RH4lN0YvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tpNXlZdUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "5139dc5155385c50", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%7B%7C%7D~%7F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683497221288" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkwOAK3cTDcKPi26uyCdmCwGuaC_5vVXHMi_luMxg6XrFLlpy7AGVjwhSEw5Z0b7bU_7kysMQeb8-uTA7JN8Vo" ] }, "Body": "aGVsbG8=" } }, { "ID": "cdbb6358205b16cf", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%7B%7C%7D~%7F?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2868" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Etag": [ "CKi5yYuL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUncpG9mX7RtXW_US5XCUqmjBO5arxUaJ8P9eyQE3u2fU0eF_QTtVDBeR0oeyqjIiGyUbr_dfnIUvWLMoXedPjU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c3t8fX5cdTAwN2YvMTU5MTY4MzQ5NzIyMTI4OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTdCJTdDJTdEfiU3RiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlN0IlN0MlN0R+JTdGP2dlbmVyYXRpb249MTU5MTY4MzQ5NzIyMTI4OCZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c3t8fX5cdTAwN2YiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTcyMjEyODgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLaTV5WXVMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTcuMjIxWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE3LjIyMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTcuMjIxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXN7fH1+XHUwMDdmIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTcyMjEyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c3t8fX5cdTAwN2YvMTU5MTY4MzQ5NzIyMTI4OC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU3QiU3QyU3RH4lN0YvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tpNXlZdUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXN7fH1+XHUwMDdmIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTcyMjEyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c3t8fX5cdTAwN2YvMTU5MTY4MzQ5NzIyMTI4OC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlN0IlN0MlN0R+JTdGL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tpNXlZdUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlze3x9flx1MDA3ZiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk3MjIxMjg4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXN7fH1+XHUwMDdmLzE1OTE2ODM0OTcyMjEyODgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJTdCJTdDJTdEfiU3Ri9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS2k1eVl1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXN7fH1+XHUwMDdmIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTcyMjEyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c3t8fX5cdTAwN2YvMTU5MTY4MzQ5NzIyMTI4OC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyU3QiU3QyU3RH4lN0YvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tpNXlZdUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "5afec761a4cfcdc1", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%7B%7C%7D~%7F?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683497221288" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUluGhUdUBddpsC5yIX-zxrXWYpnUNjgpkMZljYoFCDo0JY1mS28fqHBFMsXGDzbeGsdCgg3DTuU-ogq95NAmsQ" ] }, "Body": "aGVsbG8=" } }, { "ID": "b3c1d30b3f3f7aad", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%7B%7C%7D~%7F?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUng9FK6EXqMkxwU9bajCiB6fbrJTWyhkhzvWSd1BYfUr1-QW5YxmkzgxLT2epJzCrV0dTyZ5zX6GFYf-SRU9II" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/backslashes.replay000066400000000000000000000466641367004507500300410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCpIHWGPP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "96b4fbd7baaae484", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keysfoo%5Cbar%5Cbaz\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vXFxiYXJcXGJheiJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2910" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Etag": [ "CP/W6IuL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm5i4yIt-2T3MT6KFfcofCq3hn6u_HZ2niycL67oJcO_Cse-ieEIFAd0tLekb7dC4zRKmKpBl0D8yZPjKiyTlA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1xcYmFyXFxiYXovMTU5MTY4MzQ5NzczMjk5MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTVDYmFyJTVDYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyU1Q2JhciU1Q2Jhej9nZW5lcmF0aW9uPTE1OTE2ODM0OTc3MzI5OTEmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXNmb29cXGJhclxcYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk3NzMyOTkxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUC9XNkl1TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE3LjczMloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNy43MzJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE3LjczMloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vXFxiYXJcXGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk3NzMyOTkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb29cXGJhclxcYmF6LzE1OTE2ODM0OTc3MzI5OTEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lNUNiYXIlNUNiYXovYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1AvVzZJdUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb29cXGJhclxcYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTc3MzI5OTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1xcYmFyXFxiYXovMTU5MTY4MzQ5NzczMjk5MS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lNUNiYXIlNUNiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUC9XNkl1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb29cXGJhclxcYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTc3MzI5OTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1xcYmFyXFxiYXovMTU5MTY4MzQ5NzczMjk5MS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lNUNiYXIlNUNiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1AvVzZJdUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vXFxiYXJcXGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk3NzMyOTkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb29cXGJhclxcYmF6LzE1OTE2ODM0OTc3MzI5OTEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lNUNiYXIlNUNiYXovYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1AvVzZJdUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "ae0d680b89ea6bfc", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo%5Cbar%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683497732991" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnevkpr_qDJTuAoKwEk9iMI73iwzhO8TrcfOF40runW7AG1_bMWcSCAvJKqUD0L4Y-qePcV3bJzyqJCZvfcQJw" ] }, "Body": "aGVsbG8=" } }, { "ID": "d20e520e57f62afd", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%5Cbar%5Cbaz?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2910" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Etag": [ "CP/W6IuL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkXdjwDlAMazpgz1KXC2Kty__vjedS-q6o4PDZFEMVfYe6hVWzyJuxD7VSbe3gg_gdN0AEYS9xI5ld0UPGKVso" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1xcYmFyXFxiYXovMTU5MTY4MzQ5NzczMjk5MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTVDYmFyJTVDYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyU1Q2JhciU1Q2Jhej9nZW5lcmF0aW9uPTE1OTE2ODM0OTc3MzI5OTEmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXNmb29cXGJhclxcYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk3NzMyOTkxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUC9XNkl1TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE3LjczMloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNy43MzJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE3LjczMloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vXFxiYXJcXGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk3NzMyOTkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb29cXGJhclxcYmF6LzE1OTE2ODM0OTc3MzI5OTEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lNUNiYXIlNUNiYXovYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1AvVzZJdUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb29cXGJhclxcYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTc3MzI5OTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1xcYmFyXFxiYXovMTU5MTY4MzQ5NzczMjk5MS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lNUNiYXIlNUNiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUC9XNkl1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb29cXGJhclxcYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTc3MzI5OTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1xcYmFyXFxiYXovMTU5MTY4MzQ5NzczMjk5MS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lNUNiYXIlNUNiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1AvVzZJdUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vXFxiYXJcXGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk3NzMyOTkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb29cXGJhclxcYmF6LzE1OTE2ODM0OTc3MzI5OTEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lNUNiYXIlNUNiYXovYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1AvVzZJdUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "49930bf6102ffba8", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo%5Cbar%5Cbaz?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:17 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683497732991" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmF0G7fJ5aEsmDqS9sY4MLQdHFU6BJdpjSjCLGYTg2uiq6TAxSB2ZHp6FUIl76kzmOslDg-5sAfh1HZ-xdEzoM" ] }, "Body": "aGVsbG8=" } }, { "ID": "5ccb6fcf6e951c8a", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%5Cbar%5Cbaz?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlhSbeBrP0tR3RTnDJAVKJHTWLYk6Qmx7cSIVHSsEOVC8U0nOxs8ggL97ghmjF4JKD4-eccxUMvTt4zq1ZEgqY" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/dotdotbackslash.replay000066400000000000000000000507611367004507500307200ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCiFSfDB/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "24da51ed3cce4944", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIn0K", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3260" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Etag": [ "CJTlsoiL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnXMfFA3HHSkdqvnJdJFwPrF0i5TUCVMs_MW3JMzH99adMMRyRPCn-PmweNyAnpHK87hIOiPzbDRScY_8aSksA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTkxNjgzNDkwNTU4NjEyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMuLiU1Q2ZvbyU1Qy4uJTVDYmFyJTVDLi4lNUMuLiU1Q2Jhei4uJTVDIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUM/Z2VuZXJhdGlvbj0xNTkxNjgzNDkwNTU4NjEyJmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkwNTU4NjEyIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSlRsc29pTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEwLjU1OFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMC41NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEwLjU1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTA1NTg2MTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTkxNjgzNDkwNTU4NjEyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1Qy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlRsc29pTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkwNTU4NjEyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXMuLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwvMTU5MTY4MzQ5MDU1ODYxMi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMuLiU1Q2ZvbyU1Qy4uJTVDYmFyJTVDLi4lNUMuLiU1Q2Jhei4uJTVDL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pUbHNvaUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTA1NTg2MTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTkxNjgzNDkwNTU4NjEyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUMvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pUbHNvaUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTA1NTg2MTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTkxNjgzNDkwNTU4NjEyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1Qy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlRsc29pTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "2d9054152b38c292", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683490558612" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl3IFptX0cSKLqWheoz4TB61w-n_8oPXnmFUWuRA9Sgrtq0bWj5PmQq0AaFimas6PQ7pHhKp8-rBnlA8cERXqE" ] }, "Body": "aGVsbG8=" } }, { "ID": "169e2ec00f59c98f", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3260" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Etag": [ "CJTlsoiL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmUbgMAU8OEei6Lr5sxQTmUHkOU7882ZdGWK1DALSx0_iPmhfjYl_C0b-Q99u1LxCV0MQp4ovqg4vzfljBnK_M" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTkxNjgzNDkwNTU4NjEyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMuLiU1Q2ZvbyU1Qy4uJTVDYmFyJTVDLi4lNUMuLiU1Q2Jhei4uJTVDIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUM/Z2VuZXJhdGlvbj0xNTkxNjgzNDkwNTU4NjEyJmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkwNTU4NjEyIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSlRsc29pTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEwLjU1OFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMC41NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEwLjU1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTA1NTg2MTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTkxNjgzNDkwNTU4NjEyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1Qy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlRsc29pTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkwNTU4NjEyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXMuLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwvMTU5MTY4MzQ5MDU1ODYxMi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMuLiU1Q2ZvbyU1Qy4uJTVDYmFyJTVDLi4lNUMuLiU1Q2Jhei4uJTVDL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pUbHNvaUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTA1NTg2MTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTkxNjgzNDkwNTU4NjEyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUMvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pUbHNvaUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTA1NTg2MTIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTkxNjgzNDkwNTU4NjEyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1Qy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlRsc29pTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "9ac781d1eea820f2", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683490558612" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlaaKYIDip1uPRAud8QbUotc_Sf9l1SmHZhLtbeBGhIcu7viEiGEnULcGwN4f7MhkOyZ0bfbXoFWFsXw7K1FJg" ] }, "Body": "aGVsbG8=" } }, { "ID": "0d9ccc086faa4f2b", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlaLpSm2zDm_YTG7CMRc3eZNZ1dUe5lZos0I-SUjy2TM39w3M4KnLLSB_sbfGRrvMwVwOAUs_WB9oIzQptotvE" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/dotdotslash.replay000066400000000000000000000534061367004507500300760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCjNZH1pv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "de8d65de7b5622df", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys..__0x2f__foo%2F..__0x2f__bar%2F..__0x2f__..__0x2f__baz..__0x2f__\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXyJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3690" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Etag": [ "CPrpj4mL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmY0wnDdQB0765WDU1XZZ8s_hFMYsBaARgIFbzwGLsh8sPMI_8vc7ML__TwbCbbIqqQ4lxlfi7JW_zG7pKEYdY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vMTU5MTY4MzQ5MjA4MjkzOCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18iLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18/Z2VuZXJhdGlvbj0xNTkxNjgzNDkyMDgyOTM4JmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjA4MjkzOCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1BycGo0bUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMi4wODJaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTIuMDgyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMi4wODJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjA4MjkzOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTkxNjgzNDkyMDgyOTM4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BycGo0bUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXMuLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTIwODI5MzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vMTU5MTY4MzQ5MjA4MjkzOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMuLl9fMHgyZl9fZm9vJTJGLi5fXzB4MmZfX2JhciUyRi4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQcnBqNG1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjA4MjkzOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTkxNjgzNDkyMDgyOTM4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uX18weDJmX19mb28lMkYuLl9fMHgyZl9fYmFyJTJGLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQcnBqNG1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjA4MjkzOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTkxNjgzNDkyMDgyOTM4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1BycGo0bUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "7d1ab12e828423ca", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683492082938" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlGAG4bSBKsu4RWdsY0j2rQZdL-ZUDthIoq-QQJAn0jrfzdWJWBejLuhdsRcTBEJo37V2azxsohDiNuO2a8Mt0" ] }, "Body": "aGVsbG8=" } }, { "ID": "581e7529991cd1ea", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys..__0x2f__foo%2F..__0x2f__bar%2F..__0x2f__..__0x2f__baz..__0x2f__?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3690" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Etag": [ "CPrpj4mL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnk6MNhkENZ5aJeCcgC1KC48azM57w28RDMPpeC7BXdbFnZlASUbq8EEnkVxUqZ14lYF2olMdJGfvPJmjgh7FY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vMTU5MTY4MzQ5MjA4MjkzOCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18iLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18/Z2VuZXJhdGlvbj0xNTkxNjgzNDkyMDgyOTM4JmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjA4MjkzOCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1BycGo0bUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMi4wODJaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTIuMDgyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMi4wODJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjA4MjkzOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTkxNjgzNDkyMDgyOTM4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BycGo0bUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXMuLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTIwODI5MzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vMTU5MTY4MzQ5MjA4MjkzOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMuLl9fMHgyZl9fZm9vJTJGLi5fXzB4MmZfX2JhciUyRi4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQcnBqNG1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjA4MjkzOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTkxNjgzNDkyMDgyOTM4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uX18weDJmX19mb28lMkYuLl9fMHgyZl9fYmFyJTJGLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQcnBqNG1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18iLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjA4MjkzOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTkxNjgzNDkyMDgyOTM4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1BycGo0bUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "2f07cf4823e86a1e", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683492082938" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkTtD2ZyyRQKtJqG4HUkvVgb5Z_Jc_IXpbOwFVGmIc_lRMJu88w2k7gj9Uhjo67QOTaJ2h5WzvoHcFyrTS2yTk" ] }, "Body": "aGVsbG8=" } }, { "ID": "bec652f3564acdbd", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys..__0x2f__foo%2F..__0x2f__bar%2F..__0x2f__..__0x2f__baz..__0x2f__?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUluHDL6-EZkMj9ImHb5Ja-TFHwYfD7ksL8lMYGZvBxpvpFvNwLywnLHUdJDc_FkVILZqFuwIYUarxTaB3FKk7A" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/fwdslashes.replay000066400000000000000000000465701367004507500277150ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCmIfqPdP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "b2271ca7f7ca71bc", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keysfoo%2Fbar%2Fbaz\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vL2Jhci9iYXoifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2890" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Etag": [ "CNPrsYqL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnT4f-sm5Du2W54SuQTOoLlRD7VUReKkjG8hekrA_woMi5ZjwKKq7md7jyfnfsYkF0x0nlAGEwx3LDX0AeD-vE" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvby9iYXIvYmF6LzE1OTE2ODM0OTQ3MzczNjMiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyRmJhciUyRmJheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMkZiYXIlMkZiYXo/Z2VuZXJhdGlvbj0xNTkxNjgzNDk0NzM3MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vL2Jhci9iYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTQ3MzczNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOUHJzWXFMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTQuNzM3WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE0LjczN1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTQuNzM3WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0NzM3MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vYmFyL2Jhei8xNTkxNjgzNDk0NzM3MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTJGYmFyJTJGYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOUHJzWXFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vL2Jhci9iYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NDczNzM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzZm9vL2Jhci9iYXovMTU5MTY4MzQ5NDczNzM2My9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMkZiYXIlMkZiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTlByc1lxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0NzM3MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vYmFyL2Jhei8xNTkxNjgzNDk0NzM3MzYzL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyRmJhciUyRmJhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTlByc1lxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0NzM3MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vYmFyL2Jhei8xNTkxNjgzNDk0NzM3MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTJGYmFyJTJGYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNOUHJzWXFMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "6d6cc9c6c49e315c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683494737363" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUktEj_-YGB1sdwiNNBoD300VkCAa-AcVdOVMXmWLpnBeUi7w2hFLMs0ad7bRZk050-lcQbAnekatvbgBWIsdrU" ] }, "Body": "aGVsbG8=" } }, { "ID": "3ef03efe8a20a769", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%2Fbar%2Fbaz?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2890" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Etag": [ "CNPrsYqL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl5Q7PSQulmI3clyMqj7vRnY792svJFCUr22CkKnv5fDYFmsYCiXD0CmBurIifQzCSI_NTJA08EMWYqWjRXs6Y" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvby9iYXIvYmF6LzE1OTE2ODM0OTQ3MzczNjMiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyRmJhciUyRmJheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMkZiYXIlMkZiYXo/Z2VuZXJhdGlvbj0xNTkxNjgzNDk0NzM3MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vL2Jhci9iYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTQ3MzczNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOUHJzWXFMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTQuNzM3WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE0LjczN1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTQuNzM3WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0NzM3MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vYmFyL2Jhei8xNTkxNjgzNDk0NzM3MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTJGYmFyJTJGYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOUHJzWXFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vL2Jhci9iYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NDczNzM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzZm9vL2Jhci9iYXovMTU5MTY4MzQ5NDczNzM2My9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMkZiYXIlMkZiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTlByc1lxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0NzM3MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vYmFyL2Jhei8xNTkxNjgzNDk0NzM3MzYzL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyRmJhciUyRmJhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTlByc1lxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk0NzM3MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vYmFyL2Jhei8xNTkxNjgzNDk0NzM3MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTJGYmFyJTJGYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNOUHJzWXFMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "032349888acbbeca", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo/bar/baz?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:14 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683494737363" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkVIVG7tlZdTknuVs2yI8KVOSYBAnV-4CpHwmaJ6q1Cj-b1MhOiFjeJy4gypLNWCpWY76G82yftmI0RjWjVgf0" ] }, "Body": "aGVsbG8=" } }, { "ID": "f7ef6aa988ee7da9", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%2Fbar%2Fbaz?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn9YUP9w61CSD4wcHgVka5o7Jfb_4qkr28MvxTvEr2VP4uhlQDIp79NOJ83OU__PXQIgUkrUJZYQtvXxNHiWpc" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/non-UTF8_fails.replay000066400000000000000000000013201367004507500302260ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSChL+FyL/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": null }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/quote.replay000066400000000000000000000466641367004507500267130ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCqIp/z2v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "94613edeba8a4b5b", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keysfoo%22bar%22baz\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vXCJiYXJcImJheiJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2910" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Etag": [ "CLinp4yL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk41Ljty_PYQsFRN9U9st_d9nRWB9VDfumI_CDl9fvNDq91asFRblOezcNhoMZmGXFSA0UzFBMaVooUcXlnMPA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1wiYmFyXCJiYXovMTU5MTY4MzQ5ODc1OTA5NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTIyYmFyJTIyYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyMmJhciUyMmJhej9nZW5lcmF0aW9uPTE1OTE2ODM0OTg3NTkwOTYmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXNmb29cImJhclwiYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk4NzU5MDk2IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTGlucDR5TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE4Ljc1OFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxOC43NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE4Ljc1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vXCJiYXJcImJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk4NzU5MDk2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb29cImJhclwiYmF6LzE1OTE2ODM0OTg3NTkwOTYvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xpbnA0eUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb29cImJhclwiYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTg3NTkwOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1wiYmFyXCJiYXovMTU5MTY4MzQ5ODc1OTA5Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTGlucDR5TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb29cImJhclwiYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTg3NTkwOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1wiYmFyXCJiYXovMTU5MTY4MzQ5ODc1OTA5Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0xpbnA0eUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vXCJiYXJcImJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk4NzU5MDk2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb29cImJhclwiYmF6LzE1OTE2ODM0OTg3NTkwOTYvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjJiYXIlMjJiYXovYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0xpbnA0eUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "5b18e24ceef4e62d", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683498759096" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkTpYmviV8OgpQ7DecuCqOWNtalUyYxbNpzI4gjEk3Sl-VSgyiIxAaHp372jg1HamQY9OlYIE2SEgnkW3tu7yc" ] }, "Body": "aGVsbG8=" } }, { "ID": "aea76fb0c1f583b4", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%22bar%22baz?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2910" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Etag": [ "CLinp4yL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkqoRJMaTmd0BWFNG2PdyuBHg5EJbMFfMY154H1EF_DHRN69c3R8YboGBaKhCiFhzUjaOmL2nB56UQcwg-Lt84" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1wiYmFyXCJiYXovMTU5MTY4MzQ5ODc1OTA5NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTIyYmFyJTIyYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyMmJhciUyMmJhej9nZW5lcmF0aW9uPTE1OTE2ODM0OTg3NTkwOTYmYWx0PW1lZGlhIiwibmFtZSI6IndlaXJkLWtleXNmb29cImJhclwiYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk4NzU5MDk2IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTGlucDR5TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE4Ljc1OFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxOC43NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE4Ljc1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vXCJiYXJcImJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk4NzU5MDk2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb29cImJhclwiYmF6LzE1OTE2ODM0OTg3NTkwOTYvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xpbnA0eUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb29cImJhclwiYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTg3NTkwOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1wiYmFyXCJiYXovMTU5MTY4MzQ5ODc1OTA5Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTGlucDR5TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb29cImJhclwiYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTg3NTkwOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvb1wiYmFyXCJiYXovMTU5MTY4MzQ5ODc1OTA5Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0xpbnA0eUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vXCJiYXJcImJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk4NzU5MDk2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb29cImJhclwiYmF6LzE1OTE2ODM0OTg3NTkwOTYvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjJiYXIlMjJiYXovYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0xpbnA0eUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "689ae6c8b0dac898", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo%22bar%22baz?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:19 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:18 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683498759096" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUltizb3wlMSf4albc3f3RePupBYWVRxuZ-krayxiAfbxofb4AoMdXhyO9a64k-TGkKC0YKBYLykPOz73RxbUlA" ] }, "Body": "aGVsbG8=" } }, { "ID": "c169404891365c45", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%22bar%22baz?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:19 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl37pfqiedIaVvCKECzgysipkPGX1TmZn49pe7O5lRcGFyBEW-6qXkV9T_LdVDE5yMTn104RG4_kiABlHe0x9k" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/repeatedbackslashes.replay000066400000000000000000000477661367004507500315570ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSChL+67Ev5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "95c4f7e449b306df", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3094" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Etag": [ "CJqTkYiL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlWhWZ5aClRVU0hhnzUdBwNaeYDBoCiPJHma9gX0Dd8M6kfe8ooBugNjsZdtT7Spw8rjYFgjxQZPhTyga2EuvQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXFxcYmFyXFxcXFxcYmF6LzE1OTE2ODM0OTAwMDc0NTAiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6P2dlbmVyYXRpb249MTU5MTY4MzQ5MDAwNzQ1MCZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5cy4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkwMDA3NDUwIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSnFUa1lpTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEwLjAwN1oiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMC4wMDdaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEwLjAwN1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MDAwNzQ1MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXovMTU5MTY4MzQ5MDAwNzQ1MC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKcVRrWWlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MDAwNzQ1MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXovMTU5MTY4MzQ5MDAwNzQ1MC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMuLiU1Q2ZvbyU1QyU1Q2JhciU1QyU1QyU1Q2Jhei9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKcVRrWWlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTAwMDc0NTAiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXFxcYmFyXFxcXFxcYmF6LzE1OTE2ODM0OTAwMDc0NTAvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi4lNUNmb28lNUMlNUNiYXIlNUMlNUMlNUNiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pxVGtZaUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MDAwNzQ1MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXovMTU5MTY4MzQ5MDAwNzQ1MC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKcVRrWWlMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "0d1f302ea784573e", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683490007450" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmlUf9A2hAujnxcM5JZSUsjALIFBYBL0_biEcWSd1z6aPcVy-UMf5GF7SEOAWxZlzb6WejWKJ2KrA9oU6ueW_M" ] }, "Body": "aGVsbG8=" } }, { "ID": "f6c305aa89a14433", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3094" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Etag": [ "CJqTkYiL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUngxCkmDKbZhsLA_peI0BnuM8MXe7SNnYtAU6SCqghhI8952G-Q06OlNAoH02CneFEh1vn2Zdlfkh-vsQFgbnU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXFxcYmFyXFxcXFxcYmF6LzE1OTE2ODM0OTAwMDc0NTAiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6P2dlbmVyYXRpb249MTU5MTY4MzQ5MDAwNzQ1MCZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5cy4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkwMDA3NDUwIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSnFUa1lpTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEwLjAwN1oiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxMC4wMDdaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEwLjAwN1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MDAwNzQ1MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXovMTU5MTY4MzQ5MDAwNzQ1MC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKcVRrWWlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MDAwNzQ1MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXovMTU5MTY4MzQ5MDAwNzQ1MC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMuLiU1Q2ZvbyU1QyU1Q2JhciU1QyU1QyU1Q2Jhei9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKcVRrWWlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5cy4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTAwMDc0NTAiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5cy4uXFxmb29cXFxcYmFyXFxcXFxcYmF6LzE1OTE2ODM0OTAwMDc0NTAvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzLi4lNUNmb28lNUMlNUNiYXIlNUMlNUMlNUNiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pxVGtZaUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MDAwNzQ1MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXovMTU5MTY4MzQ5MDAwNzQ1MC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cy4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKcVRrWWlMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "2223c1ab3bc3ee41", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683490007450" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlwiSFH0UfTQjM3EkPVbf0-GsbjQMmVbL5xh7yEEGfUknUTYs0GdoqT824bs9iPJqgFqZzAyTy_h_doJ-Sudak" ] }, "Body": "aGVsbG8=" } }, { "ID": "2408451ab76ef9c8", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:10 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkKx3kP6Ny65TkrTyYY-ZZErncvBoWZVE8xmxLC_5bjz6ioFPikxp4p-umA8ni720nYo-rrT0nwI-MdjDmFOBk" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/repeatedfwdslashes.replay000066400000000000000000000471751367004507500314310ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCjF14HD/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "a4269aad6417c608", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keysfoo%2F%2Fbar%2F%2F%2Fbaz\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vLy9iYXIvLy9iYXoifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2974" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Etag": [ "CKDx74iL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkA1ECaEbkzl0Bkmo20rPYUW4SiJ04Gl1LWZgJw87xeDy42TPmZcnj1xH43oS1u6nc0z4S_PEBGXsNrkvQrlNg" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvby8vYmFyLy8vYmF6LzE1OTE2ODM0OTE1NTk1ODQiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyRiUyRmJhciUyRiUyRiUyRmJheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMkYlMkZiYXIlMkYlMkYlMkZiYXo/Z2VuZXJhdGlvbj0xNTkxNjgzNDkxNTU5NTg0JmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vLy9iYXIvLy9iYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTE1NTk1ODQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLRHg3NGlMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTEuNTU5WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjExLjU1OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTEuNTU5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vL2Jhci8vL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxNTU5NTg0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vL2Jhci8vL2Jhei8xNTkxNjgzNDkxNTU5NTg0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLRHg3NGlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vLy9iYXIvLy9iYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MTU1OTU4NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzZm9vLy9iYXIvLy9iYXovMTU5MTY4MzQ5MTU1OTU4NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMkYlMkZiYXIlMkYlMkYlMkZiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDS0R4NzRpTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vL2Jhci8vL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxNTU5NTg0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vL2Jhci8vL2Jhei8xNTkxNjgzNDkxNTU5NTg0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyRiUyRmJhciUyRiUyRiUyRmJhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS0R4NzRpTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vL2Jhci8vL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxNTU5NTg0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vL2Jhci8vL2Jhei8xNTkxNjgzNDkxNTU5NTg0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLRHg3NGlMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "15e69330ce293598", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo//bar///baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683491559584" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmmEDMsB10QpqWPA5sJtvFnVTqmATzijmPcNE60CvrzZEmja9rnbWSHrjBj9k4lVqaSTHzatKvVMZNfY13bRaA" ] }, "Body": "aGVsbG8=" } }, { "ID": "810141796aea6c75", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%2F%2Fbar%2F%2F%2Fbaz?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2974" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Etag": [ "CKDx74iL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm6ClkvdQGHEiGZ1DwQv-AwcWiui_gqI7UxN3idClH9HsSi0qbcYO7JliTlwMgGMBYNvDmQNZDCaQ7hXqntHt4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2Zvby8vYmFyLy8vYmF6LzE1OTE2ODM0OTE1NTk1ODQiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyRiUyRmJhciUyRiUyRiUyRmJheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMkYlMkZiYXIlMkYlMkYlMkZiYXo/Z2VuZXJhdGlvbj0xNTkxNjgzNDkxNTU5NTg0JmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vLy9iYXIvLy9iYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTE1NTk1ODQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLRHg3NGlMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTEuNTU5WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjExLjU1OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTEuNTU5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vL2Jhci8vL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxNTU5NTg0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vL2Jhci8vL2Jhei8xNTkxNjgzNDkxNTU5NTg0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLRHg3NGlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vLy9iYXIvLy9iYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MTU1OTU4NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzZm9vLy9iYXIvLy9iYXovMTU5MTY4MzQ5MTU1OTU4NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMkYlMkZiYXIlMkYlMkYlMkZiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDS0R4NzRpTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vL2Jhci8vL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxNTU5NTg0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vL2Jhci8vL2Jhei8xNTkxNjgzNDkxNTU5NTg0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyRiUyRmJhciUyRiUyRiUyRmJhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS0R4NzRpTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28vL2Jhci8vL2JheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkxNTU5NTg0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28vL2Jhci8vL2Jhei8xNTkxNjgzNDkxNTU5NTg0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLRHg3NGlMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "2194c5b0ce70dafe", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo//bar///baz?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683491559584" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkzhFc7uBl1s1G1AdrqZHYVmJKITpO38SjfLYsf6fSV8rVPSWrE1jICCyENUkmgXsdCPUJxRFlOyLNtxHWZVus" ] }, "Body": "aGVsbG8=" } }, { "ID": "ee8a6f507a060108", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%2F%2Fbar%2F%2F%2Fbaz?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:11 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmSxZjd367ryuXEWFF6HiqpOtjfvTYKIhe-a-EYCl-rqUW1NMbVcgpMvQIo9r9Lulsv2h4GhahGaWRxDq2HxE0" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/spaces.replay000066400000000000000000000465741367004507500270340ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCkGanjCP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "8e609b98fbc6a142", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keysfoo+bar+baz\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vIGJhciBiYXoifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2890" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Etag": [ "CPfEr4mL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkCP7Yj08MWHg8aaECupjmSmZ9H7d8SvXvc8jQJcmwqx-FxueR6AW_sp1niAWOoBnDnwX7SVCVVCN1mSG4rweg" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2ZvbyBiYXIgYmF6LzE1OTE2ODM0OTI2MDI0ODciLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyMGJhciUyMGJheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjBiYXIlMjBiYXo/Z2VuZXJhdGlvbj0xNTkxNjgzNDkyNjAyNDg3JmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vIGJhciBiYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTI2MDI0ODciLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQZkVyNG1MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTIuNjAyWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEyLjYwMloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTIuNjAyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28gYmFyIGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkyNjAyNDg3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28gYmFyIGJhei8xNTkxNjgzNDkyNjAyNDg3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTIwYmFyJTIwYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQZkVyNG1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vIGJhciBiYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjYwMjQ4NyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzZm9vIGJhciBiYXovMTU5MTY4MzQ5MjYwMjQ4Ny9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjBiYXIlMjBiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUGZFcjRtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28gYmFyIGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkyNjAyNDg3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28gYmFyIGJhei8xNTkxNjgzNDkyNjAyNDg3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyMGJhciUyMGJhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUGZFcjRtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28gYmFyIGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkyNjAyNDg3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28gYmFyIGJhei8xNTkxNjgzNDkyNjAyNDg3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTIwYmFyJTIwYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNQZkVyNG1MOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "af48e32ad8d5b13f", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683492602487" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl7f_CLKfS87R0eMXK5CaTTm6I07ZoAAYza3SCx7C9ph0EU7FwZ99STh9zGGBBwJRC1aiYtWoL5Eeiu0dZn_vA" ] }, "Body": "aGVsbG8=" } }, { "ID": "11c03ac8bd464ee7", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%20bar%20baz?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2890" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Etag": [ "CPfEr4mL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlBpGxf-PEAoQ1VFYUlrjygN8-wu2Z3uKAkYxfn2BhZroQtp8LvfWD2zd40KJEyCf10XmL8_0XhIMBrSMMQSH8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c2ZvbyBiYXIgYmF6LzE1OTE2ODM0OTI2MDI0ODciLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyMGJhciUyMGJheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjBiYXIlMjBiYXo/Z2VuZXJhdGlvbj0xNTkxNjgzNDkyNjAyNDg3JmFsdD1tZWRpYSIsIm5hbWUiOiJ3ZWlyZC1rZXlzZm9vIGJhciBiYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTI2MDI0ODciLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQZkVyNG1MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTIuNjAyWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjEyLjYwMloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTIuNjAyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28gYmFyIGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkyNjAyNDg3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28gYmFyIGJhei8xNTkxNjgzNDkyNjAyNDg3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTIwYmFyJTIwYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQZkVyNG1MOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzZm9vIGJhciBiYXoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5MjYwMjQ4NyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzZm9vIGJhciBiYXovMTU5MTY4MzQ5MjYwMjQ4Ny9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXNmb28lMjBiYXIlMjBiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUGZFcjRtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28gYmFyIGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkyNjAyNDg3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28gYmFyIGJhei8xNTkxNjgzNDkyNjAyNDg3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5c2ZvbyUyMGJhciUyMGJhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUGZFcjRtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXNmb28gYmFyIGJheiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDkyNjAyNDg3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXNmb28gYmFyIGJhei8xNTkxNjgzNDkyNjAyNDg3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzZm9vJTIwYmFyJTIwYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNQZkVyNG1MOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "7aae6822aaa6cfab", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keysfoo%20bar%20baz?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683492602487" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmL45BCc8ozzjaWPsGvjFSnjfXsD4uTcNNO5Sw59iQiQEELvIwUCPS4ZsjncZAsqUPRT9xyH84lfarXEuKDgsA" ] }, "Body": "aGVsbG8=" } }, { "ID": "b56252204d4329f5", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keysfoo%20bar%20baz?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:12 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnO3-85JhD9aSWGhQJ3rn2nIjBGwFw0iqpD7VpCcvTtn7fYtprIezvEB_gopJoW-i_GaGjCBMAwNRp3qOQ8ObE" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/startwithdigit.replay000066400000000000000000000460061367004507500306160ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCnAwxL4v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "e924728360ef2223", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys12345\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlzMTIzNDUifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2770" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Etag": [ "CMHbz4qL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm6M7EIC6HTcAQ0d70Tn6MSKH46M3QOrLW3EYYrXMYtk5QhhYN6-55ZV1rINEufDWMZNiVDmOuQDIm2C6NVrXI" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czEyMzQ1LzE1OTE2ODM0OTUyMjY4MTciLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czEyMzQ1IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czEyMzQ1P2dlbmVyYXRpb249MTU5MTY4MzQ5NTIyNjgxNyZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5czEyMzQ1IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk1MjI2ODE3IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTUhiejRxTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE1LjIyNloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNS4yMjZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE1LjIyNloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzMTIzNDUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTIyNjgxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzMTIzNDUvMTU5MTY4MzQ5NTIyNjgxNy9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czEyMzQ1L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNSGJ6NHFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzMTIzNDUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTIyNjgxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzMTIzNDUvMTU5MTY4MzQ5NTIyNjgxNy9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMxMjM0NS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNSGJ6NHFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5czEyMzQ1IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTUyMjY4MTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czEyMzQ1LzE1OTE2ODM0OTUyMjY4MTcvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzMTIzNDUvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01IYno0cUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzMTIzNDUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTIyNjgxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzMTIzNDUvMTU5MTY4MzQ5NTIyNjgxNy91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czEyMzQ1L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNSGJ6NHFMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "adb78ebec5bd01fb", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683495226817" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnJ3C3oMO9A-C96GzucfwWSgp7AqgwmZhyolOOaD40NzKSIa4XK_BQKMREHR3Fgkt6cSTCwh_pPRPPcmE5Yll8" ] }, "Body": "aGVsbG8=" } }, { "ID": "4c9fccfe76e23758", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys12345?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2770" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Etag": [ "CMHbz4qL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl4ASIxpwljbZqO5IRljfmUZwuc04VDeqE82ftN6-MlOffJ5F2OaY18rVoyTdYmx0qCfzDyF0VY8c7Ztf0i7b0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czEyMzQ1LzE1OTE2ODM0OTUyMjY4MTciLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czEyMzQ1IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czEyMzQ1P2dlbmVyYXRpb249MTU5MTY4MzQ5NTIyNjgxNyZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5czEyMzQ1IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk1MjI2ODE3IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTUhiejRxTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE1LjIyNloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNS4yMjZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjE1LjIyNloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzMTIzNDUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTIyNjgxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzMTIzNDUvMTU5MTY4MzQ5NTIyNjgxNy9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czEyMzQ1L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNSGJ6NHFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzMTIzNDUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTIyNjgxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzMTIzNDUvMTU5MTY4MzQ5NTIyNjgxNy9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMxMjM0NS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNSGJ6NHFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5czEyMzQ1IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0OTUyMjY4MTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5czEyMzQ1LzE1OTE2ODM0OTUyMjY4MTcvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzMTIzNDUvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01IYno0cUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJ3ZWlyZC1rZXlzMTIzNDUiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTIyNjgxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlzMTIzNDUvMTU5MTY4MzQ5NTIyNjgxNy91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5czEyMzQ1L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNSGJ6NHFMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "29b598445e93156b", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys12345?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683495226817" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmhWjdnxcopMVHLyaSc3zkeTK7qEML-7S-ScwS2WhcVOhfmfeAujmKVCy_FKL6h06WIaO5cJfhb3qZPOIz_i08" ] }, "Body": "aGVsbG8=" } }, { "ID": "00fa5fcbcdd1876d", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys12345?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnMUziiEHzeU-EZLmNXXza90-5WJOlE2KrW55oUIQE-zBQM5Bo36LDHTRf_AgtIsVQCDwM7UoOocLSWCrLFuAg" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestKeys/unicode.replay000066400000000000000000000471001367004507500271660ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCnIFYwiv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "5beb5085a7cdc4e8", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=weird-keys%E2%98%BA%E2%98%BA%E2%98%BA\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJ3ZWlyZC1rZXlz4pi64pi64pi6In0K", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2942" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Etag": [ "CNG57YqL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmDHfVdw2m05QAc2ndcJuRgbN3wlkyfmFpFGVGVl0K7k0nvo3l_ktgsuNAyE2smdC1AOM_PaVgftSKfyO1gC84" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c+KYuuKYuuKYui8xNTkxNjgzNDk1NzE0MDAxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlRTIlOTglQkElRTIlOTglQkElRTIlOTglQkEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBP2dlbmVyYXRpb249MTU5MTY4MzQ5NTcxNDAwMSZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c+KYuuKYuuKYuiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTcxNDAwMSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ05HNTdZcUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNS43MTNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTUuNzEzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNS43MTNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c+KYuuKYuuKYuiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk1NzE0MDAxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXPimLrimLrimLovMTU5MTY4MzQ5NTcxNDAwMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyVFMiU5OCVCQSVFMiU5OCVCQSVFMiU5OCVCQS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTkc1N1lxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c+KYuuKYuuKYuiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk1NzE0MDAxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXPimLrimLrimLovMTU5MTY4MzQ5NTcxNDAwMS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlRTIlOTglQkElRTIlOTglQkElRTIlOTglQkEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTkc1N1lxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXPimLrimLrimLoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTcxNDAwMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlz4pi64pi64pi6LzE1OTE2ODM0OTU3MTQwMDEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNORzU3WXFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c+KYuuKYuuKYuiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk1NzE0MDAxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXPimLrimLrimLovMTU5MTY4MzQ5NTcxNDAwMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyVFMiU5OCVCQSVFMiU5OCVCQSVFMiU5OCVCQS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTkc1N1lxTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "84c65657f48d1789", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683495714001" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlFkMWix1qUdIhWdRP9T1ju6o1Yl2YdWYiQzmyQaTrXmxsBZlg576uCiYBkeTHe8G5CuLVtl8vMRQW_ypwvt-U" ] }, "Body": "aGVsbG8=" } }, { "ID": "9f8ea4cd0ea4d1c3", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2942" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Etag": [ "CNG57YqL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnfyIHTnukWNOqI9khFXlp3wwLyFtNQhOzLu_-7GwCcGh1juHiF382Z0X9Q3n5JBCQ4poC-yIFAMft5wdrKmFI" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvd2VpcmQta2V5c+KYuuKYuuKYui8xNTkxNjgzNDk1NzE0MDAxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlRTIlOTglQkElRTIlOTglQkElRTIlOTglQkEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBP2dlbmVyYXRpb249MTU5MTY4MzQ5NTcxNDAwMSZhbHQ9bWVkaWEiLCJuYW1lIjoid2VpcmQta2V5c+KYuuKYuuKYuiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTcxNDAwMSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ05HNTdZcUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNS43MTNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MTUuNzEzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoxNS43MTNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c+KYuuKYuuKYuiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk1NzE0MDAxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXPimLrimLrimLovMTU5MTY4MzQ5NTcxNDAwMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyVFMiU5OCVCQSVFMiU5OCVCQSVFMiU5OCVCQS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTkc1N1lxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c+KYuuKYuuKYuiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk1NzE0MDAxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXPimLrimLrimLovMTU5MTY4MzQ5NTcxNDAwMS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3dlaXJkLWtleXMlRTIlOTglQkElRTIlOTglQkElRTIlOTglQkEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTkc1N1lxTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6IndlaXJkLWtleXPimLrimLrimLoiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ5NTcxNDAwMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC93ZWlyZC1rZXlz4pi64pi64pi6LzE1OTE2ODM0OTU3MTQwMDEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby93ZWlyZC1rZXlzJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNORzU3WXFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0Ijoid2VpcmQta2V5c+KYuuKYuuKYuiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDk1NzE0MDAxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3dlaXJkLWtleXPimLrimLrimLovMTU5MTY4MzQ5NTcxNDAwMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vd2VpcmQta2V5cyVFMiU5OCVCQSVFMiU5OCVCQSVFMiU5OCVCQS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTkc1N1lxTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "7890da80c0108098", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:15 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683495714001" ], "X-Goog-Hash": [ "crc32c=mnG7TA==", "md5=XUFAKrxLKna5cZ2REBfFkg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "5" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl9MCFhQByF0RNTFwzt7xG7a0UX0bW_DuMC3XMl1OefsBbeoUyfh3vMkyDBsoACHGfpEasmPh83CaCKOO_q7oA" ] }, "Body": "aGVsbG8=" } }, { "ID": "9f5fbf0991f04ba1", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:16 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlOSEb5M1M4F8jkDnAzZw_-3Qw1zoG5c7htgSTTt5XYvExYbWdnKeFU7FgMvG66MyL1t_0dnhX1b-MxmPVecEQ" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList/000077500000000000000000000000001367004507500243205ustar00rootroot00000000000000PaginationConsistencyAfterDelete.replay000066400000000000000000001105551367004507500341060ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList{ "Initial": "AQAAAA7WcSCQOIVpb/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "bf3ab3bbe8ef6bc9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:53 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmpj7n92w9oQo7Re_cHbm5mgBP_KO-gMmwBmLECuCVEzKYDQ-aQIzR3onue-Rq_ugeMVLf5ZM1LkLRlhsklRCE" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "22c8489e0c4d8a50", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "5621" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:53 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUknwi8JrXLJoCEQ73zzVwzxQPVMcENKVFU8NT3Cip8wRuEWAenh7McuJo3JHxm2DvL1UesMGrLIMGYkGe0CJzQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNnOWliRzlpTFdadmNpMXNhWE4wTFRFPSIsIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wLzE1NDk2NjA5MjE2OTkzNjMiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wP2dlbmVyYXRpb249MTU0OTY2MDkyMTY5OTM2MyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0wIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMS42OThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0wIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wLzE1NDk2NjA5MjE2OTkzNjMvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTE/Z2VuZXJhdGlvbj0xNTY1NzQ5OTczNTA2ODM3JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInVwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjUzLjUwNloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "ebda433555ea55bf", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-list-1?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:17:53 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmGIFm0oqh1OPBEQEr4dwV9zsVzM_fW5NYuvVfxcB3LYQA4i8yqn18ykRSvzkcLm4wZS3bJqaHw8ymZksv-1kI" ] }, "Body": "" } }, { "ID": "f999596c7b0562b7", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=Cg9ibG9iLWZvci1saXN0LTE%3D\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2807" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:53 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnGuysEvTezbSDVbp9DusJTXeKnZnarUif4IeFYd80ULrwMLZ2pI2AMrIkWRELztHnNugLLDZNRxgGwViowzq8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTI/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIyODU4NjU5JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTIiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDIuODU4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDIuODU4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "750ed1a528d5cd9a", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-list-1\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTEifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2770" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:53 GMT" ], "Etag": [ "COPWo4CL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnx_eo6LIEW898GaJ6STW_MfuqyX9Enic-8iqgfChMrp-dpElCpj1H4oaDkLAEoo0k34O2k9QrOd_Eqr42PPl4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1OTE2ODM0NzM1MzM3OTUiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xP2dlbmVyYXRpb249MTU5MTY4MzQ3MzUzMzc5NSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0xIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDczNTMzNzk1IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDT1BXbzRDTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjUzLjUzM1oiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxNzo1My41MzNaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjUzLjUzM1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3MzUzMzc5NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU5MTY4MzQ3MzUzMzc5NS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPUFdvNENMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3MzUzMzc5NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU5MTY4MzQ3MzUzMzc5NS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPUFdvNENMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzM1MzM3OTUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1OTE2ODM0NzM1MzM3OTUvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ09QV280Q0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3MzUzMzc5NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU5MTY4MzQ3MzUzMzc5NS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNPUFdvNENMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } } ] }PaginationConsistencyAfterInsert.replay000066400000000000000000001106031367004507500341420ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList{ "Initial": "AQAAAA7WcSCQB9Czv/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "754f47e3fc997047", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:52 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmeE2CHIy5XPKfdEJJwyrzA-rW7F6xLmQVgFXtLe11R5LfqDRWr_7Dr8q85670v5ENYlRCTRefI2grSl1VDPE0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "75aba5ff8e471ef2", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "5621" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:52 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUki_phjNVkRiLqES7B5eypHovI73y8u4GWdQDyfOcWUeEN1UZoobrhex41cnXltEmrNCdqlWvNxM4prjoJWHxk" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNnOWliRzlpTFdadmNpMXNhWE4wTFRFPSIsIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wLzE1NDk2NjA5MjE2OTkzNjMiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wP2dlbmVyYXRpb249MTU0OTY2MDkyMTY5OTM2MyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0wIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMS42OThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0wIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wLzE1NDk2NjA5MjE2OTkzNjMvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTE/Z2VuZXJhdGlvbj0xNTY1NzQ5OTczNTA2ODM3JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInVwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjUzLjUwNloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "b7cc4daea256c2d3", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-list-0a\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTBhIn0K", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2786" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:52 GMT" ], "Etag": [ "CNDC6/+K9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlS0zV0FFCgkv4xg5VA_611bqNW34o2V6etEwovH4-XKVH3EMIrT5ogNE23lVDOcMaIndKpiN5ZBSCTChNRAdg" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wYS8xNTkxNjgzNDcyNjEzNzEyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMGEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTBhP2dlbmVyYXRpb249MTU5MTY4MzQ3MjYxMzcxMiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0wYSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3MjYxMzcxMiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ05EQzYvK0s5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxNzo1Mi42MTNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTIuNjEzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxNzo1Mi42MTNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0wYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDcyNjEzNzEyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMGEvMTU5MTY4MzQ3MjYxMzcxMi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wYS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTkRDNi8rSzlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0wYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDcyNjEzNzEyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMGEvMTU5MTY4MzQ3MjYxMzcxMi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMGEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTkRDNi8rSzlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3MjYxMzcxMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTBhLzE1OTE2ODM0NzI2MTM3MTIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTBhL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNOREM2LytLOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0wYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDcyNjEzNzEyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMGEvMTU5MTY4MzQ3MjYxMzcxMi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wYS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTkRDNi8rSzlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "eb5e480c2e2053c8", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=Cg9ibG9iLWZvci1saXN0LTE%3D\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2807" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:52 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk-bwln0SorsjRDJGUcsyRgOEviv522k1fja8_Nx9RWpvdyONbdb_mutRGutHdlk44FeNXGRG7FZE-qGqB6_oM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTI/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIyODU4NjU5JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTIiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDIuODU4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDIuODU4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "3783947bad7d9c48", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-list-0a?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:17:52 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnP9lid3XK2aUwpiXuGJwnfOKnbBffWXA88paOm1OIXxJLMWTN-EAlD4lmMImYXPKbvXP1mg6T_KCTAh8MO-0Y" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList/by_1.replay000066400000000000000000000752071367004507500264030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCONWy6+f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "bde7185f86f16322", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:51 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUleaIojv7KP7Whru7bzOVNcabKIEjJR_A9ymBuJkiuY7NqV4xvadJjL8I7lqdkDW8eXVDhCv39n_mSv4qKkU_0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "a7174bfba8ae18d2", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2850" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:51 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnR1Jn-loOxU_hflmrb51PA1-s1v8zMy9t2ZPFpt1wUK8DXiQVA9RB2MibMGHd_K8pxvNtleUCfTuxd2Zv4lHs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNnOWliRzlpTFdadmNpMXNhWE4wTFRBPSIsIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wLzE1NDk2NjA5MjE2OTkzNjMiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wP2dlbmVyYXRpb249MTU0OTY2MDkyMTY5OTM2MyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0wIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMS42OThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0wIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wLzE1NDk2NjA5MjE2OTkzNjMvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "6819987a931e5908", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=Cg9ibG9iLWZvci1saXN0LTA%3D\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2850" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:51 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl0B41nDcNwGHvidXbcj1pS9OU60JJQSJzzrV2CqAQzv5NUvyOtkIluM8CJUu7U-FnM8-sEzNHJNE2YBQxiSMU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNnOWliRzlpTFdadmNpMXNhWE4wTFRFPSIsIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzciLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xP2dlbmVyYXRpb249MTU2NTc0OTk3MzUwNjgzNyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0xIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjUzLjUwNloiLCJ1cGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjUzLjUwNloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNy9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNy9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNy91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "bd894f3ce594820a", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1\u0026pageToken=Cg9ibG9iLWZvci1saXN0LTE%3D\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2807" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:51 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkrsKrUdNPR1DAIEO-yopVdpOhA5D6rLNVwmSpNz7pUH579inQxffn5vXpgK0vMV8KsIVmzR-3X0OUSRY-Qc90" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTI/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIyODU4NjU5JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTIiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDIuODU4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDIuODU4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList/by_2.replay000066400000000000000000000710301367004507500263720ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCPGYb0v/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "bf168ca22123e588", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:51 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm-7TrurgaGuInOe-sCcZdHclkkQP99iqve2qG7hOgceVed77_tbiJmuWRxFnwNKsUZEmwy8I7gwgaMWRtDE50" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "0493c09b8adebde0", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "5621" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:51 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlvHm0t2fuvTHedyR5vwIEn_6zgv9uonbYXc8-i3MU_1IAbcFouvhyK_ShV15qsSI4LZOgzq2ltP2X9uI5tAGs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNnOWliRzlpTFdadmNpMXNhWE4wTFRFPSIsIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wLzE1NDk2NjA5MjE2OTkzNjMiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wP2dlbmVyYXRpb249MTU0OTY2MDkyMTY5OTM2MyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0wIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMS42OThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0wIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0wLzE1NDk2NjA5MjE2OTkzNjMvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTE/Z2VuZXJhdGlvbj0xNTY1NzQ5OTczNTA2ODM3JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInVwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjUzLjUwNloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "c0ec17602ade75f0", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=2\u0026pageToken=Cg9ibG9iLWZvci1saXN0LTE%3D\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2807" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:51 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUktY_NO5k7xjmETi29UVfwme9mZLg6uTIeOEox5ZibXSc2-eWm-IaVr5aO4Nzw47IaPqQO9owq7icU2E-GlrZY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTI/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIyODU4NjU5JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTIiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDIuODU4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDIuODU4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMiIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMi8xNTQ5NjYwOTIyODU4NjU5L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList/by_3.replay000066400000000000000000000646451367004507500264110ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCPMQbn4v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "954a4e9b0f914b40", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:52 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUla-lZiu0_lErkLh4n6GJ3QOEXlb4QhWFDrbl5PBCpHkKkVjylTGbzVGP9Bz-IA9tz6BgmdYQAPpJLkJ7vA0Eg" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "ace4bb5aa5302822", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=3\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:52 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkJA4KqZaLk9Vu6WboFmgQJbFZfhR_USq6aGfQsfpmTU_lhKxj091jxAORc_njcdPzMyudCGWCemApjWVv2ETY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList/exactly_1_object_due_to_prefix.replay000066400000000000000000000463161367004507500337030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCOC4ZUz/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "6af54315aa6d1799", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:50 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm8RmqB58jhj7jFKVZ0Uanm9_WDAuRcaHCrxciDfD9EEzUwjpdrM24Itx_mzVaRLY_IicGqszOTSGww0TOtukQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "a9b284161879f4b2", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list-1\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2807" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:50 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmKtDLlbRCqn_LWEKl8Qti9wPtNlx6KNlzAUo32_mMNecFXqz18KrYsURngiNd0sUKHhen1veRItkDggDgafsc" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTE/Z2VuZXJhdGlvbj0xNTY1NzQ5OTczNTA2ODM3JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInVwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjUzLjUwNloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTEiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTEvMTU2NTc0OTk3MzUwNjgzNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList/no_objects.replay000066400000000000000000000371341367004507500276730ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCNHuZ2U/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "d2c0c901d71fe811", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:50 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUleY2TPnKRTMGWF1NPgzC5dz5FM3MhxYCZFCUfH-p8J0JG4ZIlgnzglNVLWkeejEpPXCUJpqEm9k4hQ2foHc_k" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "12bf80a632d05ca1", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=no-objects-with-this-prefix\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "26" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:50 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlF2_qOiIy6bIHRlaJNrmNlWa9n_BaBg-oV3V8kuQygTCA8tIOgHhcHtbtfmvqQ4dW88XiBDeJ5Zfvufsp0_Og" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIn0=" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestList/no_pagination.replay000066400000000000000000000646501367004507500303760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCOI4Q2fP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "cc1ad5ea98b6a808", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:50 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkjBULTMrriALsii8NN7KjFsygbEJ1q2sHotCwdvbE5gd1-vhIWHU6GtM-vutYHg2pZq5qGSkmy7ORyFe4wYow" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "fecf25844ef8c5d6", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-list\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "8349" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:50 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkbfYIzfR_UzINfsXiiBR3pVoMMxn76vYbnlISpGzm6VBPER9joWZEWm41woCLIivHMJpfXuwdyg-Q2YYntkE0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTA/Z2VuZXJhdGlvbj0xNTQ5NjYwOTIxNjk5MzYzJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1saXN0LTAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjE2OTkzNjMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTzRpdWFJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAxLjY5OFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MDEuNjk4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0wL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTAiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMTY5OTM2MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTAvMTU0OTY2MDkyMTY5OTM2My9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS080aXVhSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIxNjk5MzYzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMC8xNTQ5NjYwOTIxNjk5MzYzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPNGl1YUlyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMT9nZW5lcmF0aW9uPTE1NjU3NDk5NzM1MDY4MzcmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWxpc3QtMSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3MzUwNjgzNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pXMjZaZXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTMuNTA2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1My41MDZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWxpc3QtMSIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTczNTA2ODM3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWxpc3QtMS8xNTY1NzQ5OTczNTA2ODM3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0xL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKVzI2WmVwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0xIiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzM1MDY4MzciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0xLzE1NjU3NDk5NzM1MDY4MzcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSlcyNlplcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yP2dlbmVyYXRpb249MTU0OTY2MDkyMjg1ODY1OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbGlzdC0yIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTIyODU4NjU5IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09aMGVhSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjowMi44NThaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjAyLjg1OFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWxpc3QtMi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbGlzdC0yIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5MjI4NTg2NTkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbGlzdC0yLzE1NDk2NjA5MjI4NTg2NTkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1saXN0LTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPWjBlYUlyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1saXN0LTIiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDkyMjg1ODY1OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1saXN0LTIvMTU0OTY2MDkyMjg1ODY1OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbGlzdC0yL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT1owZWFJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestListDelimiters/000077500000000000000000000000001367004507500263425ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestListDelimiters/abc.replay000066400000000000000000003357171367004507500303250ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCUAB/mc/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "cd68f7218bcb33c5", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "18758" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnmrCO_9ZgG14UZDo0WbSwEAF4yjjQ03KnI0SXX1k9d_RHIzFmE5_sIIMSLli2mIgmCPykfk9c05JnDg_j6hyY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC8xNTQ5NjYwOTUyMDY3MzU0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTUyMDY3MzU0JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjA2NzM1NCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pyNngvU0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMi4wNjZaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzIuMDY2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMi4wNjZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjA2NzM1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC8xNTQ5NjYwOTUyMDY3MzU0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSnI2eC9TSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjA2NzM1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC8xNTQ5NjYwOTUyMDY3MzU0L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSnI2eC9TSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTIwNjczNTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvMTU0OTY2MDk1MjA2NzM1NC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKcjZ4L1NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjA2NzM1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC8xNTQ5NjYwOTUyMDY3MzU0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSnI2eC9TSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvMTU0OTY2MDk1MjU5NzQxMSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0P2dlbmVyYXRpb249MTU0OTY2MDk1MjU5NzQxMSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTI1OTc0MTEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLT242UFNJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzIuNTk3WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMyLjU5N1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzIuNTk3WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTI1OTc0MTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvMTU0OTY2MDk1MjU5NzQxMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPbjZQU0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTI1OTc0MTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvMTU0OTY2MDk1MjU5NzQxMS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPbjZQU0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUyNTk3NDExIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0LzE1NDk2NjA5NTI1OTc0MTEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS09uNlBTSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTI1OTc0MTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvMTU0OTY2MDk1MjU5NzQxMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPbjZQU0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0LzE1NDk2NjA5NTMwNjQyNjUiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NTMwNjQyNjUmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzMDY0MjY1IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTW5taFBXSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMzLjA2M1oiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMy4wNjNaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMzLjA2M1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzMDY0MjY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0LzE1NDk2NjA5NTMwNjQyNjUvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNbm1oUFdJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzMDY0MjY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0LzE1NDk2NjA5NTMwNjQyNjUvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNbm1oUFdJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzA2NDI2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC8xNTQ5NjYwOTUzMDY0MjY1L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01ubWhQV0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzMDY0MjY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0LzE1NDk2NjA5NTMwNjQyNjUvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNbm1oUFdJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC8xNTQ5NjYwOTUzNTg0MzcyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTUzNTg0MzcyJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzU4NDM3MiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1BURnBQV0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMy41ODJaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzMuNTgyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMy41ODJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzU4NDM3MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC8xNTQ5NjYwOTUzNTg0MzcyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUFRGcFBXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzU4NDM3MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC8xNTQ5NjYwOTUzNTg0MzcyL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUFRGcFBXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTM1ODQzNzIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvMTU0OTY2MDk1MzU4NDM3Mi9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQVEZwUFdJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzU4NDM3MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC8xNTQ5NjYwOTUzNTg0MzcyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUFRGcFBXSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0P2dlbmVyYXRpb249MTU2NTc0OTk3ODE2NTI5NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMRGdoWnFwZ2VRQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTguMTY0WiIsInVwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU4LjE2NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTguMTY0WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xEZ2hacXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xEZ2hacXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc4MTY1Mjk2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0LzE1NjU3NDk5NzgxNjUyOTYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTERnaFpxcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0xEZ2hacXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NTQ1OTk5MDImYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTQ1OTk5MDIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNON0Q0dldJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzQuNTk5WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjM0LjU5OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzQuNTk5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTQ1OTk5MDIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC8xNTQ5NjYwOTU0NTk5OTAyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "5a9b75d1ddd4c27f", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "18758" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkbLvIljzv7kY9fDTo51jg1-IWCBUYIwsV5gBzzhPpZkMhgMxbwc0fEeIznLiEWNFLUF-fN-iq1IeKZ_nex5iQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC8xNTQ5NjYwOTUyMDY3MzU0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTUyMDY3MzU0JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjA2NzM1NCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pyNngvU0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMi4wNjZaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzIuMDY2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMi4wNjZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjA2NzM1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC8xNTQ5NjYwOTUyMDY3MzU0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSnI2eC9TSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjA2NzM1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC8xNTQ5NjYwOTUyMDY3MzU0L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSnI2eC9TSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTIwNjczNTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvMTU0OTY2MDk1MjA2NzM1NC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKcjZ4L1NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjA2NzM1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC8xNTQ5NjYwOTUyMDY3MzU0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSnI2eC9TSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvMTU0OTY2MDk1MjU5NzQxMSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0P2dlbmVyYXRpb249MTU0OTY2MDk1MjU5NzQxMSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTI1OTc0MTEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLT242UFNJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzIuNTk3WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMyLjU5N1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzIuNTk3WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTI1OTc0MTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvMTU0OTY2MDk1MjU5NzQxMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPbjZQU0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTI1OTc0MTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvMTU0OTY2MDk1MjU5NzQxMS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0tPbjZQU0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUyNTk3NDExIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0LzE1NDk2NjA5NTI1OTc0MTEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS09uNlBTSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTI1OTc0MTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvMTU0OTY2MDk1MjU5NzQxMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0tPbjZQU0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0LzE1NDk2NjA5NTMwNjQyNjUiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NTMwNjQyNjUmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzMDY0MjY1IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTW5taFBXSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMzLjA2M1oiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMy4wNjNaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMzLjA2M1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzMDY0MjY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0LzE1NDk2NjA5NTMwNjQyNjUvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNbm1oUFdJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzMDY0MjY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0LzE1NDk2NjA5NTMwNjQyNjUvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNbm1oUFdJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzA2NDI2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC8xNTQ5NjYwOTUzMDY0MjY1L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01ubWhQV0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzMDY0MjY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0LzE1NDk2NjA5NTMwNjQyNjUvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNbm1oUFdJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC8xNTQ5NjYwOTUzNTg0MzcyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTUzNTg0MzcyJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzU4NDM3MiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1BURnBQV0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMy41ODJaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzMuNTgyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMy41ODJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzU4NDM3MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC8xNTQ5NjYwOTUzNTg0MzcyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUFRGcFBXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzU4NDM3MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC8xNTQ5NjYwOTUzNTg0MzcyL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUFRGcFBXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTM1ODQzNzIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvMTU0OTY2MDk1MzU4NDM3Mi9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQVEZwUFdJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzU4NDM3MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC8xNTQ5NjYwOTUzNTg0MzcyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUFRGcFBXSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0P2dlbmVyYXRpb249MTU2NTc0OTk3ODE2NTI5NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMRGdoWnFwZ2VRQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTguMTY0WiIsInVwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU4LjE2NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTguMTY0WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xEZ2hacXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xEZ2hacXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc4MTY1Mjk2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0LzE1NjU3NDk5NzgxNjUyOTYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTERnaFpxcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0xEZ2hacXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NTQ1OTk5MDImYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTQ1OTk5MDIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNON0Q0dldJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzQuNTk5WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjM0LjU5OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzQuNTk5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTQ1OTk5MDIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC8xNTQ5NjYwOTU0NTk5OTAyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "d3c76b12a5b94177", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=abc\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3094" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmIFIJINt_vByby7O0FQ133B0UlmiYz8y_mawSn_wj4hqtjIXEfxkMgW-wQpwD0e1abYprNYr9rAQEMbOw9kUQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjIiwiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjIl0sIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC8xNTQ5NjYwOTU0NTk5OTAyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0P2dlbmVyYXRpb249MTU0OTY2MDk1NDU5OTkwMiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozNC41OTlaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzQuNTk5WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozNC41OTlaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTU0NTk5OTAyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTU0NTk5OTAyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNON0Q0dldJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTU0NTk5OTAyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "ee6816cf6d76a27b", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=abc\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-abcdir1abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "6273" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkuWQYxiZlZT_gXYwAmL-eEYg_GfUh3E6vv88p_nI_JlrW2_Ip8BQzt8J9Y3wsn1xwCU6-pu-jju0tb7baWXpQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjIl0sIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvMTU0OTY2MDk1MjA2NzM1NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0P2dlbmVyYXRpb249MTU0OTY2MDk1MjA2NzM1NCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTIwNjczNTQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKcjZ4L1NJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzIuMDY2WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMyLjA2NloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzIuMDY2WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTIwNjczNTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvMTU0OTY2MDk1MjA2NzM1NC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pyNngvU0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTIwNjczNTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvMTU0OTY2MDk1MjA2NzM1NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pyNngvU0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUyMDY3MzU0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0LzE1NDk2NjA5NTIwNjczNTQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSnI2eC9TSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTIwNjczNTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvMTU0OTY2MDk1MjA2NzM1NC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pyNngvU0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0LzE1NDk2NjA5NTI1OTc0MTEiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NTI1OTc0MTEmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUyNTk3NDExIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS09uNlBTSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMyLjU5N1oiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMi41OTdaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMyLjU5N1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUyNTk3NDExIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0LzE1NDk2NjA5NTI1OTc0MTEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT242UFNJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUyNTk3NDExIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0LzE1NDk2NjA5NTI1OTc0MTEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT242UFNJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MjU5NzQxMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dC8xNTQ5NjYwOTUyNTk3NDExL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPbjZQU0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUyNTk3NDExIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0LzE1NDk2NjA5NTI1OTc0MTEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY2IudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT242UFNJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "34262221ad223cca", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=abc\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-abcdir1abcsubdirabc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "6506" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlkNGGdrEsrLgDa5MkDnPLyGyzp-dFW5JE7q1LyagYcISnPwtLdq_6R34l1ATHJjEXb2reRdIXFRNLWY7jQ0tA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC8xNTQ5NjYwOTUzMDY0MjY1Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTUzMDY0MjY1JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzA2NDI2NSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ01ubWhQV0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMy4wNjNaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzMuMDYzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozMy4wNjNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzA2NDI2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC8xNTQ5NjYwOTUzMDY0MjY1L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTW5taFBXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzA2NDI2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC8xNTQ5NjYwOTUzMDY0MjY1L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTW5taFBXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTMwNjQyNjUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQvMTU0OTY2MDk1MzA2NDI2NS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2MudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNNbm1oUFdJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1MzA2NDI2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC8xNTQ5NjYwOTUzMDY0MjY1L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTW5taFBXSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvMTU0OTY2MDk1MzU4NDM3MiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0P2dlbmVyYXRpb249MTU0OTY2MDk1MzU4NDM3MiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTM1ODQzNzIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQVEZwUFdJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzMuNTgyWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjMzLjU4MloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzMuNTgyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTM1ODQzNzIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvMTU0OTY2MDk1MzU4NDM3Mi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BURnBQV0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTM1ODQzNzIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvMTU0OTY2MDk1MzU4NDM3Mi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BURnBQV0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTUzNTg0MzcyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0LzE1NDk2NjA5NTM1ODQzNzIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUFRGcFBXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiY2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTM1ODQzNzIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvMTU0OTY2MDk1MzU4NDM3Mi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1BURnBQV0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "4f3493018ed3b459", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=abc\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-abcdir2abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3127" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUluwx0nqwA0aM03cyiIlYyCkZpE3_KUVkla8XbPCPGhao94L5tbPiXj3GzqdoVHV03IYMtNtLU1ThILFc4vgzU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC8xNTY1NzQ5OTc4MTY1Mjk2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQ/Z2VuZXJhdGlvbj0xNTY1NzQ5OTc4MTY1Mjk2JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3ODE2NTI5NiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0xEZ2hacXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1OC4xNjRaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTguMTY0WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1OC4xNjRaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3ODE2NTI5NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC8xNTY1NzQ5OTc4MTY1Mjk2L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTERnaFpxcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3ODE2NTI5NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC8xNTY1NzQ5OTc4MTY1Mjk2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTERnaFpxcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzgxNjUyOTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU2NTc0OTk3ODE2NTI5Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNMRGdoWnFwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3ODE2NTI5NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC8xNTY1NzQ5OTc4MTY1Mjk2L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTERnaFpxcGdlUUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "e7a1007d4e15050a", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=abc\u0026maxResults=1\u0026pageToken=\u0026prefix=blob-for-delimiters-abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "135" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmcY3NxTehr4KS1ZPCVb2Ov-_DKZU2g6lwxoOljJL6JKbDVNo-TDjgEUJFwYnh4dQYPNNYMOQn80_KrtKB90QU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNoNWliRzlpTFdadmNpMWtaV3hwYldsMFpYSnpMV0ZpWTJScGNqRmhZbU09IiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjIl19" } }, { "ID": "9ef80736783802e8", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=abc\u0026maxResults=1\u0026pageToken=Ch5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmM%3D\u0026prefix=blob-for-delimiters-abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "135" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmOaQdTBXc8Gl1nYPW9eJZw5dIQXu2c1NDhOheFnhoq68PzWAhhJBJWRvEu-fFs_uyQsj9nVsue0RNMCZ8_RVc" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNoNWliRzlpTFdadmNpMWtaV3hwYldsMFpYSnpMV0ZpWTJScGNqSmhZbU09IiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjIl19" } }, { "ID": "4e900ba13b6fd177", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=abc\u0026maxResults=1\u0026pageToken=Ch5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmM%3D\u0026prefix=blob-for-delimiters-abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3015" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUknTkvoPq0o7sRABZHJa2i8T7k3-XOMnZCf_djQzE3U5DnS8m1h_ip1i4gSDZgenrCODOY7t213lLeuAt35AXY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTU0NTk5OTAyJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTU0NTk5OTAyIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjM0LjU5OVoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozNC41OTlaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjM0LjU5OVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTQ1OTk5MDIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC8xNTQ5NjYwOTU0NTk5OTAyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNON0Q0dldJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTQ1OTk5MDIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC8xNTQ5NjYwOTU0NTk5OTAyL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNON0Q0dldJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTU0NTk5OTAyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMi9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NTQ1OTk5MDIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC8xNTQ5NjYwOTU0NTk5OTAyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNON0Q0dldJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "b0248d641082d017", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-delimiters-abcdir2abce.txt?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmKwgrPHHypIUu7ZZdRhrBtl9_-ycSrAeQ9SDTSz9DdYWlpNOEsqbudxaEAjiMFkpxwIR43qU3gVzOOKOG1fpA" ] }, "Body": "" } }, { "ID": "d9ae22625d65c2a1", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=abc\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-abc\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3061" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn5D6AK-FhWH68aHp83milr_Ahwtkl14ggGD-XJABiPCeiKHOZUGJCtMeAHMiq1JluHS-qqwSmqQR2ccz1r0ak" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjIl0sIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC8xNTQ5NjYwOTU0NTk5OTAyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0P2dlbmVyYXRpb249MTU0OTY2MDk1NDU5OTkwMiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ043RDR2V0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozNC41OTlaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MzQuNTk5WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjozNC41OTlaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTU0NTk5OTAyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTU0NTk5OTAyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk1NDU5OTkwMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0LzE1NDk2NjA5NTQ1OTk5MDIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNON0Q0dldJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTU0NTk5OTAyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQvMTU0OTY2MDk1NDU5OTkwMi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTjdENHZXSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "890f29c1ec13fe58", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-delimiters-abcdir2abce.txt\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dCJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3090" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:56 GMT" ], "Etag": [ "CMmL9oGL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlpDkDSnZqF8eenKAZGPCIr6Pqs7I2nTi5JQh23Y6-KjM2fJPLagn5gVhmlwaN_D0f8KAHpJ-eq2GHszfbBLmk" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU5MTY4MzQ3Njk4MTE5MyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0P2dlbmVyYXRpb249MTU5MTY4MzQ3Njk4MTE5MyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzY5ODExOTMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNNbUw5b0dMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTYuOTgxWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjU2Ljk4MVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTYuOTgxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzY5ODExOTMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU5MTY4MzQ3Njk4MTE5My9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01tTDlvR0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzY5ODExOTMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU5MTY4MzQ3Njk4MTE5My9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01tTDlvR0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc2OTgxMTkzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0LzE1OTE2ODM0NzY5ODExOTMvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTW1MOW9HTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiY2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzY5ODExOTMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvMTU5MTY4MzQ3Njk4MTE5My91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ01tTDlvR0w5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestListDelimiters/backslash.replay000066400000000000000000003345631367004507500315310ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCSOhxWkP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "da8985bd0c80df0a", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "18628" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkOxz1dLpO0HIO0BiJLfkRkciUu-RbjT1ocQnotNlOsjQEruwDDymkFBw312CYdOGvghc8vYdHqx_TEaUHlVf0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQvMTU1MjU4MTUwNTAxMjM1MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNhLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2EudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTAxMjM1MSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGEudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MDEyMzUxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUCtrM2VpSWd1RUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjAxMloiLCJ1cGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4wMTJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjAxMloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTAxMjM1MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQvMTU1MjU4MTUwNTAxMjM1MS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1ArazNlaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MDEyMzUxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dC8xNTUyNTgxNTA1MDEyMzUxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUCtrM2VpSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MDEyMzUxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dC8xNTUyNTgxNTA1MDEyMzUxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1ArazNlaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTAxMjM1MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQvMTU1MjU4MTUwNTAxMjM1MS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1ArazNlaUlndUVDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dC8xNTUyNTgxNTA1MTQ5NDMxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2IudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYi50eHQ/Z2VuZXJhdGlvbj0xNTUyNTgxNTA1MTQ5NDMxJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUxNDk0MzEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQZlQ1ZWlJZ3VFQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMTQ5WiIsInVwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjE0OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMTQ5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MTQ5NDMxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dC8xNTUyNTgxNTA1MTQ5NDMxL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUGZUNWVpSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUxNDk0MzEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0LzE1NTI1ODE1MDUxNDk0MzEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQZlQ1ZWlJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUxNDk0MzEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0LzE1NTI1ODE1MDUxNDk0MzEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUGZUNWVpSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MTQ5NDMxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dC8xNTUyNTgxNTA1MTQ5NDMxL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUGZUNWVpSWd1RUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNjLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2MudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTI1Nzc4NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMcWk3T2lJZ3VFQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMjU3WiIsInVwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjI1N1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMjU3WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDYy50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xxaTdPaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2MudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xxaTdPaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxjLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MjU3Nzg2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0LzE1NTI1ODE1MDUyNTc3ODYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNjLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTHFpN09pSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDYy50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0xxaTdPaUlndUVDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDZC50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNkLnR4dD9nZW5lcmF0aW9uPTE1NTI1ODE1MDUzODE2NDImYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSXJxOCtpSWd1RUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjM4MVoiLCJ1cGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4zODFaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjM4MVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2QudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJcnE4K2lJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNkLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJcnE4K2lJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcZC50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTM4MTY0MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dC8xNTUyNTgxNTA1MzgxNjQyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDZC50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0lycTgraUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2QudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNJcnE4K2lJZ3VFQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjIlNUNlLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMiU1Q2UudHh0P2dlbmVyYXRpb249MTU2NTc0OTk3NjgwNjYwNSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjJcXGUudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTTNwc3BtcGdlUUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU2LjgwNloiLCJ1cGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1Ni44MDZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU2LjgwNloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NjgwNjYwNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dC8xNTY1NzQ5OTc2ODA2NjA1L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTTNwc3BtcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dC8xNTY1NzQ5OTc2ODA2NjA1L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NjgwNjYwNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dC8xNTUyNTgxNTA1Njc2OTIxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTY3NjkyMSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1Njc2OTIxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjY3NloiLCJ1cGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS42NzZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjY3NloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "d822bdfcf5ea8d41", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "18628" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkBPhMSEtrsq-6s5A0yuVZWlqA6ugDjVlv5H6EURVZ-uYpi0DA0OuuSnIfZGneJB30oBLOoTPGdpEitPl2TKsI" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQvMTU1MjU4MTUwNTAxMjM1MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNhLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2EudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTAxMjM1MSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGEudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MDEyMzUxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUCtrM2VpSWd1RUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjAxMloiLCJ1cGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4wMTJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjAxMloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTAxMjM1MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQvMTU1MjU4MTUwNTAxMjM1MS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1ArazNlaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MDEyMzUxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dC8xNTUyNTgxNTA1MDEyMzUxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUCtrM2VpSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MDEyMzUxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dC8xNTUyNTgxNTA1MDEyMzUxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1ArazNlaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTAxMjM1MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQvMTU1MjU4MTUwNTAxMjM1MS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1ArazNlaUlndUVDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dC8xNTUyNTgxNTA1MTQ5NDMxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2IudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYi50eHQ/Z2VuZXJhdGlvbj0xNTUyNTgxNTA1MTQ5NDMxJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUxNDk0MzEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQZlQ1ZWlJZ3VFQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMTQ5WiIsInVwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjE0OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMTQ5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MTQ5NDMxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dC8xNTUyNTgxNTA1MTQ5NDMxL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUGZUNWVpSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUxNDk0MzEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0LzE1NTI1ODE1MDUxNDk0MzEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQZlQ1ZWlJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUxNDk0MzEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0LzE1NTI1ODE1MDUxNDk0MzEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUGZUNWVpSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MTQ5NDMxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dC8xNTUyNTgxNTA1MTQ5NDMxL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUGZUNWVpSWd1RUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4NiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNjLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2MudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTI1Nzc4NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMcWk3T2lJZ3VFQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMjU3WiIsInVwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjI1N1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMjU3WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDYy50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xxaTdPaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2MudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xxaTdPaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxjLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MjU3Nzg2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0LzE1NTI1ODE1MDUyNTc3ODYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNjLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTHFpN09pSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDYy50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0xxaTdPaUlndUVDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDZC50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNkLnR4dD9nZW5lcmF0aW9uPTE1NTI1ODE1MDUzODE2NDImYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSXJxOCtpSWd1RUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjM4MVoiLCJ1cGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4zODFaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjM4MVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2QudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJcnE4K2lJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNkLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJcnE4K2lJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcZC50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTM4MTY0MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dC8xNTUyNTgxNTA1MzgxNjQyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDZC50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0lycTgraUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2QudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNJcnE4K2lJZ3VFQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjIlNUNlLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMiU1Q2UudHh0P2dlbmVyYXRpb249MTU2NTc0OTk3NjgwNjYwNSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjJcXGUudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTTNwc3BtcGdlUUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU2LjgwNloiLCJ1cGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1Ni44MDZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU2LjgwNloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NjgwNjYwNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dC8xNTY1NzQ5OTc2ODA2NjA1L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTTNwc3BtcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dC8xNTY1NzQ5OTc2ODA2NjA1L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NjgwNjYwNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dC8xNTUyNTgxNTA1Njc2OTIxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTY3NjkyMSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1Njc2OTIxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjY3NloiLCJ1cGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS42NzZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjY3NloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "103b25568087fe31", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%5C\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3080" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl6vCwOxekeDmV_2ttXBzUaDsAynB-9_4liuE0hXdSlliUk-OFmnL6B0mvV0ESor_DdKDWa24-vseV1Rtrbp5Y" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXCIsImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFwiXSwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dD9nZW5lcmF0aW9uPTE1NTI1ODE1MDU2NzY5MjEmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS42NzZaIiwidXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuNjc2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS42NzZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1Njc2OTIxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dC8xNTUyNTgxNTA1Njc2OTIxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQbnNoZW1JZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQbnNoZW1JZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "34862d42d8880a2b", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%5C\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%5Cdir1%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "6230" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmFTf0sCKYCE_BjMehvKW26ZgemWY3pVFU2hLHdMGRoE8cLbBRLqFjMKIHp9bPsxkU3WTeWGCAXJ87lrij9oJc" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcIl0sIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGEudHh0LzE1NTI1ODE1MDUwMTIzNTEiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYS50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNhLnR4dD9nZW5lcmF0aW9uPTE1NTI1ODE1MDUwMTIzNTEmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxhLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTAxMjM1MSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1ArazNlaUlndUVDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4wMTJaIiwidXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMDEyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4wMTJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGEudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUwMTIzNTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGEudHh0LzE1NTI1ODE1MDUwMTIzNTEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2EudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQK2szZWlJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTAxMjM1MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQvMTU1MjU4MTUwNTAxMjM1MS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2EudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1ArazNlaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTAxMjM1MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYS50eHQvMTU1MjU4MTUwNTAxMjM1MS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2EudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQK2szZWlJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGEudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUwMTIzNTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGEudHh0LzE1NTI1ODE1MDUwMTIzNTEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2EudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNQK2szZWlJZ3VFQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYi50eHQvMTU1MjU4MTUwNTE0OTQzMSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNiLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q2IudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTE0OTQzMSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXGIudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MTQ5NDMxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUGZUNWVpSWd1RUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjE0OVoiLCJ1cGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4xNDlaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjE0OVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTE0OTQzMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYi50eHQvMTU1MjU4MTUwNTE0OTQzMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYi50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BmVDVlaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MTQ5NDMxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dC8xNTUyNTgxNTA1MTQ5NDMxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYi50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUGZUNWVpSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MTQ5NDMxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxiLnR4dC8xNTUyNTgxNTA1MTQ5NDMxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYi50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1BmVDVlaUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTE0OTQzMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcYi50eHQvMTU1MjU4MTUwNTE0OTQzMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDYi50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1BmVDVlaUlndUVDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "e689afbe18eeb05a", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%5C\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%5Cdir1%5Csubdir%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "6446" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlhJgju0CVuS6Sdeu2mQiYZcyZP-s68j_iM9sOPOksGdQFmELH3azRpEQkBNj0wYPwDTzE41z17qCmkgvoy8Rw" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxjLnR4dC8xNTUyNTgxNTA1MjU3Nzg2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2MudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDYy50eHQ/Z2VuZXJhdGlvbj0xNTUyNTgxNTA1MjU3Nzg2JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxjLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTI1Nzc4NiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0xxaTdPaUlndUVDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4yNTdaIiwidXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMjU3WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS4yNTdaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTI1Nzc4NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxjLnR4dC8xNTUyNTgxNTA1MjU3Nzg2L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNjLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHFpN09pSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTI1Nzc4NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxjLnR4dC8xNTUyNTgxNTA1MjU3Nzg2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDYy50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHFpN09pSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGMudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUyNTc3ODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQvMTU1MjU4MTUwNTI1Nzc4Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2MudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNMcWk3T2lJZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTI1Nzc4NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxjLnR4dC8xNTUyNTgxNTA1MjU3Nzg2L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNjLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTHFpN09pSWd1RUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcZC50eHQvMTU1MjU4MTUwNTM4MTY0MiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNkLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2QudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTM4MTY0MiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcZC50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUzODE2NDIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNJcnE4K2lJZ3VFQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMzgxWiIsInVwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjM4MVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuMzgxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUzODE2NDIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcZC50eHQvMTU1MjU4MTUwNTM4MTY0Mi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDZC50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0lycTgraUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUzODE2NDIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcZC50eHQvMTU1MjU4MTUwNTM4MTY0Mi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMSU1Q3N1YmRpciU1Q2QudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0lycTgraUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcc3ViZGlyXFxkLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1MzgxNjQyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0LzE1NTI1ODE1MDUzODE2NDIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjElNUNzdWJkaXIlNUNkLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSXJxOCtpSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIxXFxzdWJkaXJcXGQudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDUzODE2NDIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXHN1YmRpclxcZC50eHQvMTU1MjU4MTUwNTM4MTY0Mi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIxJTVDc3ViZGlyJTVDZC50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0lycTgraUlndUVDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "a5cd7275fcd58c0a", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%5C\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%5Cdir2%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3107" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk4d1Dbgkts4g6gljGJtQygA9GZzuscqGktdtfmSkzpUfLjSYDf4DIXh628rNpAtcseOOxLUBfmq73ctmJ6cHk" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjIlNUNlLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMiU1Q2UudHh0P2dlbmVyYXRpb249MTU2NTc0OTk3NjgwNjYwNSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjJcXGUudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTTNwc3BtcGdlUUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU2LjgwNloiLCJ1cGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1Ni44MDZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU2LjgwNloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NjgwNjYwNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dC8xNTY1NzQ5OTc2ODA2NjA1L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTTNwc3BtcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc2ODA2NjA1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dC8xNTY1NzQ5OTc2ODA2NjA1L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NjgwNjYwNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU2NTc0OTk3NjgwNjYwNS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ00zcHNwbXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "8d6cc5e9a180dfb7", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%5C\u0026maxResults=1\u0026pageToken=\u0026prefix=blob-for-delimiters-%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "129" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm1f7uo1IgEVI_5fcCuxLJJ4_f1mRZr_H-gUMl_g76MTvZyFRUX-0X5LHBqdIvjMgUKYhJ_kAOpFCh4zJc6Cr0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNocGliRzlpTFdadmNpMWtaV3hwYldsMFpYSnpMVnhrYVhJeFhBPT0iLCJwcmVmaXhlcyI6WyJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMVxcIl19" } }, { "ID": "68be895fee18f8a5", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%5C\u0026maxResults=1\u0026pageToken=ChpibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXA%3D%3D\u0026prefix=blob-for-delimiters-%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "129" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkYfg33qi4euwfurxsOHiuEDZvZ4uNpVMkJMci0ibYlfllUIx38wXIs-rgQup1dtXwFTGDt_l-OdBA4pGp97E8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNocGliRzlpTFdadmNpMWtaV3hwYldsMFpYSnpMVnhrYVhJeVhBPT0iLCJwcmVmaXhlcyI6WyJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcIl19" } }, { "ID": "c6c288c2417303ea", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%5C\u0026maxResults=1\u0026pageToken=ChpibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIyXA%3D%3D\u0026prefix=blob-for-delimiters-%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3005" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnYCgjknHIw0kXTINu21j40Oms-STLgWNrFwFT1VBZLf11U7JlxNYbGT804INFdzryNz-IzIkAe-2ngLzpm1GI" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dD9nZW5lcmF0aW9uPTE1NTI1ODE1MDU2NzY5MjEmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS42NzZaIiwidXBkYXRlZCI6IjIwMTktMDMtMTRUMTY6Mzg6MjUuNjc2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS42NzZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1Njc2OTIxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dC8xNTUyNTgxNTA1Njc2OTIxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQbnNoZW1JZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQbnNoZW1JZ3VFQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "5df5078ea389e7e2", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-delimiters-%5Cdir2%5Ce.txt?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn6E5Cxkiea_fOGJjrhZBQiNAETqGfJfSnwIhcEffnTsnZqipEHQFEsT414Xa8kKMXrnLn2BPt1hbR_cuIVTj4" ] }, "Body": "" } }, { "ID": "700ed4b0bcd2385c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%5C\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%5C\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3049" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkttPG3btqbsXae40dnFJgRNNwbzOWTqJhOAWsMgy3X2E5Z3bjozgOEEv7a1skL_rgLalUEG12iUFDJIUbbI-c" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjFcXCJdLCJpdGVtcyI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtXFxmLnR4dC8xNTUyNTgxNTA1Njc2OTIxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0P2dlbmVyYXRpb249MTU1MjU4MTUwNTY3NjkyMSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTUyNTgxNTA1Njc2OTIxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjY3NloiLCJ1cGRhdGVkIjoiMjAxOS0wMy0xNFQxNjozODoyNS42NzZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAzLTE0VDE2OjM4OjI1LjY3NloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NTI1ODE1MDU2NzY5MjEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGYudHh0LzE1NTI1ODE1MDU2NzY5MjEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2YudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZi50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1Buc2hlbUlndUVDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU1MjU4MTUwNTY3NjkyMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZi50eHQvMTU1MjU4MTUwNTY3NjkyMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNmLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUG5zaGVtSWd1RUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "bef4f252bca43d8e", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-delimiters-%5Cdir2%5Ce.txt\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3070" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:55 GMT" ], "Etag": [ "CJjPuIGL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlkFQuh5AEWazhs5LJlyHOI1SfC7HvJW8n8LMra14DVWn23Pstt5jOSmMq7L6yh7-tjaGnEzOBAM5st8guQfMQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjJcXGUudHh0LzE1OTE2ODM0NzU5NzQwNDAiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lNUNkaXIyJTVDZS50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSU1Q2RpcjIlNUNlLnR4dD9nZW5lcmF0aW9uPTE1OTE2ODM0NzU5NzQwNDAmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtXFxkaXIyXFxlLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3NTk3NDA0MCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pqUHVJR0w5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxNzo1NS45NzNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTc6NTUuOTczWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxNzo1NS45NzNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjJcXGUudHh0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzU5NzQwNDAiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjJcXGUudHh0LzE1OTE2ODM0NzU5NzQwNDAvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMiU1Q2UudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKalB1SUdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3NTk3NDA0MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU5MTY4MzQ3NTk3NDA0MC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMiU1Q2UudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pqUHVJR0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ3NTk3NDA0MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLVxcZGlyMlxcZS50eHQvMTU5MTY4MzQ3NTk3NDA0MC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMiU1Q2UudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKalB1SUdMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjJcXGUudHh0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzU5NzQwNDAiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy1cXGRpcjJcXGUudHh0LzE1OTE2ODM0NzU5NzQwNDAvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTVDZGlyMiU1Q2UudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKalB1SUdMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestListDelimiters/fwdslash.replay000066400000000000000000003334371367004507500314100ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCRNFl9+P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "e67e959064c05430", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "18498" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmO2jpRDeVcg3f5ulHiRLjXB6tIzLOWDSgxZowaEaf2ZMcnnj2-I_GT_WMjtzt5fuRoZHhGurZ0AbYlfG4SG8I" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0LzE1NDk2NjA5NDA1NTQ4MTgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYS50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZhLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NDA1NTQ4MTgmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDA1NTQ4MTgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNNS2tpZStJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjAuNTU0WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIwLjU1NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjAuNTU0WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MDU1NDgxOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0LzE1NDk2NjA5NDA1NTQ4MTgvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmEudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNS2tpZStJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDA1NTQ4MTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dC8xNTQ5NjYwOTQwNTU0ODE4L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTUtraWUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MDU1NDgxOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0LzE1NDk2NjA5NDA1NTQ4MTgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZhLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTUtraWUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MDU1NDgxOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0LzE1NDk2NjA5NDA1NTQ4MTgvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmEudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNS2tpZStJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0LzE1NDk2NjA5NDEwOTk5NjIiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZiLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NDEwOTk5NjImYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDEwOTk5NjIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMckhxdStJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjEuMDk5WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIxLjA5OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjEuMDk5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTA5OTk2MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0LzE1NDk2NjA5NDEwOTk5NjIvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmIudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNMckhxdStJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDEwOTk5NjIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dC8xNTQ5NjYwOTQxMDk5OTYyL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYi50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHJIcXUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTA5OTk2MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0LzE1NDk2NjA5NDEwOTk5NjIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZiLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTHJIcXUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTA5OTk2MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0LzE1NDk2NjA5NDEwOTk5NjIvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmIudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNMckhxdStJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmMudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGYy50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTQxNTYwNDE3JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ09IVXh1K0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMS41NTlaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjEuNTU5WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMS41NTlaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZjLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGYy50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2MudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDE1NjA0MTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQvMTU0OTY2MDk0MTU2MDQxNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmMudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNPSFV4dStJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZjLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZkLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmQudHh0P2dlbmVyYXRpb249MTU0OTY2MDk0MjIyMTY1OCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOcUM3KytJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjIuMjIxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIyLjIyMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjIuMjIxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGZC50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmQudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9kLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQyMjIxNjU4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0LzE1NDk2NjA5NDIyMjE2NTgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZkLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTnFDNysrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGZC50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU2NTc0OTk3NTM4MzUwNCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjIlMkZlLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMiUyRmUudHh0P2dlbmVyYXRpb249MTU2NTc0OTk3NTM4MzUwNCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NTM4MzUwNCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ05ENzI1aXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1NS4zODJaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTUuMzgyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1NS4zODJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc1MzgzNTA0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU2NTc0OTk3NTM4MzUwNC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIyJTJGZS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ05ENzI1aXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NTM4MzUwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0LzE1NjU3NDk5NzUzODM1MDQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjIlMkZlLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNORDcyNWlwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc1MzgzNTA0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU2NTc0OTk3NTM4MzUwNC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMiUyRmUudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNORDcyNWlwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc1MzgzNTA0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU2NTc0OTk3NTM4MzUwNC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIyJTJGZS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ05ENzI1aXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZi50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTQzNDA1MjA4JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0ppaHQvQ0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMy40MDNaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjMuNDAzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMy40MDNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQzNDA1MjA4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ppaHQvQ0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQzNDA1MjA4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "834aee7a619ea315", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "18498" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmK9kAM5nKzbMqiMw98UVeW8hlfeF3Lu_PhvrLc4Lx8UEZVIu823PBDC1aJIShGKyjhCyYhnEiPlntJXJORdOs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0LzE1NDk2NjA5NDA1NTQ4MTgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYS50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZhLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NDA1NTQ4MTgmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDA1NTQ4MTgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNNS2tpZStJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjAuNTU0WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIwLjU1NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjAuNTU0WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MDU1NDgxOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0LzE1NDk2NjA5NDA1NTQ4MTgvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmEudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNS2tpZStJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDA1NTQ4MTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dC8xNTQ5NjYwOTQwNTU0ODE4L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTUtraWUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MDU1NDgxOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0LzE1NDk2NjA5NDA1NTQ4MTgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZhLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTUtraWUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MDU1NDgxOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0LzE1NDk2NjA5NDA1NTQ4MTgvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmEudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNS2tpZStJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0LzE1NDk2NjA5NDEwOTk5NjIiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZiLnR4dD9nZW5lcmF0aW9uPTE1NDk2NjA5NDEwOTk5NjImYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDEwOTk5NjIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMckhxdStJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjEuMDk5WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIxLjA5OVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjEuMDk5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTA5OTk2MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0LzE1NDk2NjA5NDEwOTk5NjIvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmIudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNMckhxdStJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDEwOTk5NjIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dC8xNTQ5NjYwOTQxMDk5OTYyL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYi50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHJIcXUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTA5OTk2MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0LzE1NDk2NjA5NDEwOTk5NjIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZiLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTHJIcXUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTA5OTk2MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0LzE1NDk2NjA5NDEwOTk5NjIvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmIudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNMckhxdStJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmMudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGYy50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTQxNTYwNDE3JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ09IVXh1K0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMS41NTlaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjEuNTU5WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMS41NTlaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZjLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGYy50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2MudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDE1NjA0MTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQvMTU0OTY2MDk0MTU2MDQxNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmMudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNPSFV4dStJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZjLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZkLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmQudHh0P2dlbmVyYXRpb249MTU0OTY2MDk0MjIyMTY1OCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOcUM3KytJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjIuMjIxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIyLjIyMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjIuMjIxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGZC50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmQudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9kLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQyMjIxNjU4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0LzE1NDk2NjA5NDIyMjE2NTgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZkLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTnFDNysrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGZC50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU2NTc0OTk3NTM4MzUwNCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjIlMkZlLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMiUyRmUudHh0P2dlbmVyYXRpb249MTU2NTc0OTk3NTM4MzUwNCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NTM4MzUwNCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ05ENzI1aXBnZVFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1NS4zODJaIiwidXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTUuMzgyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wOC0xNFQwMjozMjo1NS4zODJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc1MzgzNTA0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU2NTc0OTk3NTM4MzUwNC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIyJTJGZS50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ05ENzI1aXBnZVFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NTM4MzUwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0LzE1NjU3NDk5NzUzODM1MDQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjIlMkZlLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNORDcyNWlwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc1MzgzNTA0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU2NTc0OTk3NTM4MzUwNC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMiUyRmUudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNORDcyNWlwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImdlbmVyYXRpb24iOiIxNTY1NzQ5OTc1MzgzNTA0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU2NTc0OTk3NTM4MzUwNC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIyJTJGZS50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ05ENzI1aXBnZVFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZi50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTQzNDA1MjA4JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0ppaHQvQ0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMy40MDNaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjMuNDAzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMy40MDNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQzNDA1MjA4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ppaHQvQ0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQzNDA1MjA4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "8c40f7c4a552d06b", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3066" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl5wKk9gi2LsoPjdunNkgxUogZoD8naBAs2JZsSrqN5D6Dj5c_yECSpyTsmCLBE-S1cerLgUz-vQDnMR8CmdEk" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS8iLCJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLyJdLCJpdGVtcyI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZi50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTQzNDA1MjA4JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0ppaHQvQ0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMy40MDNaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjMuNDAzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMy40MDNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQzNDA1MjA4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ppaHQvQ0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQzNDA1MjA4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0LzE1NDk2NjA5NDM0MDUyMDgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "799a9eb24d410d62", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%2Fdir1%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "6187" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUklOy_NdGKLMjXMsJes1X8_Ln2KnRXVQBgekdjHxlDpQk16PKmdc869UzUNFgh29SvEmz1YSaPCM4VoyvrJxrE" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvIl0sIml0ZW1zIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dC8xNTQ5NjYwOTQwNTU0ODE4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmEudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYS50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTQwNTU0ODE4JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQwNTU0ODE4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTUtraWUrSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIwLjU1NFoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMC41NTRaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIwLjU1NFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDA1NTQ4MTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dC8xNTQ5NjYwOTQwNTU0ODE4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZhLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTUtraWUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQwNTU0ODE4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQvMTU0OTY2MDk0MDU1NDgxOC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmEudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01La2llK0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDA1NTQ4MTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dC8xNTQ5NjYwOTQwNTU0ODE4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYS50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01La2llK0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDA1NTQ4MTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dC8xNTQ5NjYwOTQwNTU0ODE4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZhLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTUtraWUrSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dC8xNTQ5NjYwOTQxMDk5OTYyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmIudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYi50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTQxMDk5OTYyJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQxMDk5OTYyIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTHJIcXUrSXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIxLjA5OVoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMS4wOTlaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIxLjA5OVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDEwOTk5NjIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dC8xNTQ5NjYwOTQxMDk5OTYyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZiLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTHJIcXUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQxMDk5OTYyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQvMTU0OTY2MDk0MTA5OTk2Mi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRmIudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0xySHF1K0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDEwOTk5NjIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dC8xNTQ5NjYwOTQxMDk5OTYyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGYi50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0xySHF1K0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDEwOTk5NjIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dC8xNTQ5NjYwOTQxMDk5OTYyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZiLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTHJIcXUrSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "c50d0a822273cfd9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%2Fdir1%2Fsubdir%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "6386" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnmGjxFPJcDb9CscCiaWIh4jwkmr139EVJerApMDMDdnxrZGctZyshVuRZ77DJ3GMl_w4SsQpsh1JgMtFR1iR0" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmMudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGYy50eHQ/Z2VuZXJhdGlvbj0xNTQ5NjYwOTQxNTYwNDE3JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dCIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ09IVXh1K0lyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMS41NTlaIiwidXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjEuNTU5WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOFQyMToyMjoyMS41NTlaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZjLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGYy50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2MudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDE1NjA0MTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQvMTU0OTY2MDk0MTU2MDQxNy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmMudHh0L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNPSFV4dStJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MTU2MDQxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dC8xNTQ5NjYwOTQxNTYwNDE3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZjLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT0hVeHUrSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZkLnR4dCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmQudHh0P2dlbmVyYXRpb249MTU0OTY2MDk0MjIyMTY1OCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOcUM3KytJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjIuMjIxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIyLjIyMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjIuMjIxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGZC50eHQvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMSUyRnN1YmRpciUyRmQudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9kLnR4dCIsImdlbmVyYXRpb24iOiIxNTQ5NjYwOTQyMjIxNjU4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0LzE1NDk2NjA5NDIyMjE2NTgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjElMkZzdWJkaXIlMkZkLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTnFDNysrSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDIyMjE2NTgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQvMTU0OTY2MDk0MjIyMTY1OC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIxJTJGc3ViZGlyJTJGZC50eHQvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ05xQzcrK0lyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19XX0=" } }, { "ID": "b844dd45f02ce7eb", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%2Fdir2%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3087" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlrKgqvKMljKmjm28FfGgvzlSVKjiEjl230X2zXv7xdtp2vK9Xa2jNUpDICRvP9kX8MNbKeGC1kZx6zCCehhcg" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0LzE1NjU3NDk5NzUzODM1MDQiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIyJTJGZS50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjIlMkZlLnR4dD9nZW5lcmF0aW9uPTE1NjU3NDk5NzUzODM1MDQmYWx0PW1lZGlhIiwibmFtZSI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzUzODM1MDQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNORDcyNWlwZ2VRQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTUuMzgyWiIsInVwZGF0ZWQiOiIyMDE5LTA4LTE0VDAyOjMyOjU1LjM4MloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDgtMTRUMDI6MzI6NTUuMzgyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NTM4MzUwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0LzE1NjU3NDk5NzUzODM1MDQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMiUyRmUudHh0L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNORDcyNWlwZ2VRQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NjU3NDk5NzUzODM1MDQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dC8xNTY1NzQ5OTc1MzgzNTA0L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIyJTJGZS50eHQvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTkQ3MjVpcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NTM4MzUwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0LzE1NjU3NDk5NzUzODM1MDQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjIlMkZlLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTkQ3MjVpcGdlUUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQiLCJnZW5lcmF0aW9uIjoiMTU2NTc0OTk3NTM4MzUwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0LzE1NjU3NDk5NzUzODM1MDQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMiUyRmUudHh0L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNORDcyNWlwZ2VRQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "282cf09832749452", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1\u0026pageToken=\u0026prefix=blob-for-delimiters-%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "127" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUny7ks0iFgi16pl9PmrxZ1vhcw7bZE6ICkgOErqszcn9vgLMzHkTGkiJ3HzIXPJZLk5Wkx68bUaKA1T20_3kC4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNocGliRzlpTFdadmNpMWtaV3hwYldsMFpYSnpMUzlrYVhJeEx3PT0iLCJwcmVmaXhlcyI6WyJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxLyJdfQ==" } }, { "ID": "030ce7d9f6f07fe4", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1\u0026pageToken=ChpibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxLw%3D%3D\u0026prefix=blob-for-delimiters-%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "127" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnJ-VHMUbgZfRwwcJJqmb7UB_WcTSHBFv4ljnPgm1kry_HFlXSDFcfSMSZD3iYcWDe0bLJaDY7DgB9zMF7bSto" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwibmV4dFBhZ2VUb2tlbiI6IkNocGliRzlpTFdadmNpMWtaV3hwYldsMFpYSnpMUzlrYVhJeUx3PT0iLCJwcmVmaXhlcyI6WyJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLyJdfQ==" } }, { "ID": "a17804248a729ffd", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1\u0026pageToken=ChpibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLw%3D%3D\u0026prefix=blob-for-delimiters-%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2995" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm9WQcHMAv53WXghbkIvqIV0zunJ9mMEC0Ytsnltx1jJBascvWN6qPLp00CT_qnQNGezukhiRgx3tSTy2QWQak" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0P2dlbmVyYXRpb249MTU0OTY2MDk0MzQwNTIwOCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDM0MDUyMDgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjMuNDAzWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIzLjQwM1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjMuNDAzWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDM0MDUyMDgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQvMTU0OTY2MDk0MzQwNTIwOC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSmlodC9DSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSmlodC9DSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDM0MDUyMDgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQvMTU0OTY2MDk0MzQwNTIwOC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSmlodC9DSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "8883cc3a215b7801", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-delimiters-%2Fdir2%2Fe.txt?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlApF2engstTshE4ngAqxvHN70Jdpttwn5tRuzTea7mfPrhznLwfdytwCfy4CB2JPitgUXhGHSoio7-pGYDpVs" ] }, "Body": "" } }, { "ID": "02ce4503d4f1d9a0", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=%2F\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-delimiters-%2F\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3037" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkS3H8aJMvKkWa3hCmKTQ0_HUvOOv-lL4eNG-Lqfe66bOCycCPp39WsJdXOTp9-rLUNPthM745NakzjIJC5fkA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwicHJlZml4ZXMiOlsiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS8iXSwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZi50eHQiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmYudHh0P2dlbmVyYXRpb249MTU0OTY2MDk0MzQwNTIwOCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDM0MDUyMDgiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjMuNDAzWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA4VDIxOjIyOjIzLjQwM1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDhUMjE6MjI6MjMuNDAzWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDM0MDUyMDgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQvMTU0OTY2MDk0MzQwNTIwOC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSmlodC9DSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKaWh0L0NJcmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQiLCJnZW5lcmF0aW9uIjoiMTU0OTY2MDk0MzQwNTIwOCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dC8xNTQ5NjYwOTQzNDA1MjA4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSmlodC9DSXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NjA5NDM0MDUyMDgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQvMTU0OTY2MDk0MzQwNTIwOC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZmLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSmlodC9DSXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX1dfQ==" } }, { "ID": "865462b8b8e6ad9d", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-delimiters-%2Fdir2%2Fe.txt\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0In0K", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3050" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:54 GMT" ], "Etag": [ "CMH0+YCL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmadYpeUpG8x0PYOWqxn_SCM6u6Uzp4nNwP7LcxjUQQLC_yYfeePjFOnH-O10kPtHmdzLmjoB6HP_Ba1hTolwA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dC8xNTkxNjgzNDc0OTQ2NjI1Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMiUyRmUudHh0IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIyJTJGZS50eHQ/Z2VuZXJhdGlvbj0xNTkxNjgzNDc0OTQ2NjI1JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc0OTQ2NjI1IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTUgwK1lDTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjU0Ljk0NloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxNzo1NC45NDZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE3OjU0Ljk0NloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzQ5NDY2MjUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dC8xNTkxNjgzNDc0OTQ2NjI1L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjIlMkZlLnR4dC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTUgwK1lDTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDc0OTQ2NjI1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQvMTU5MTY4MzQ3NDk0NjYyNS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLWRlbGltaXRlcnMtJTJGZGlyMiUyRmUudHh0L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01IMCtZQ0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzQ5NDY2MjUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dC8xNTkxNjgzNDc0OTQ2NjI1L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItZGVsaW1pdGVycy0lMkZkaXIyJTJGZS50eHQvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01IMCtZQ0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0NzQ5NDY2MjUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dC8xNTkxNjgzNDc0OTQ2NjI1L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1kZWxpbWl0ZXJzLSUyRmRpcjIlMkZlLnR4dC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTUgwK1lDTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestListWeirdKeys.replay000066400000000000000000004606061367004507500274010ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCRIY375/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "8cbde67d2f28de91", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=list-weirdkeys-\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "56718" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:53 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmPtbHkINwpdEM_l8TQLfK2CvTtqvzvuLs06O5-AlYW1GSkVf2byHWfG96T0AJcs7uXd7CC-xOz22CrtKSFNh8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZi8xNTQ5NjcxMDA2NzcxOTI1Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTAwJTAxJTAyJTAzJTA0JTA1JTA2JTA3JTA4JTA5X18weGFfXyUwQiUwQ19fMHhkX18lMEUlMEY/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA2NzcxOTI1JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjc3MTkyNSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ05XMWdxK3VyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi43NzFaIiwidXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuNzcxWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi43NzFaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjc3MTkyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZi8xNTQ5NjcxMDA2NzcxOTI1L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lMDAlMDElMDIlMDMlMDQlMDUlMDYlMDclMDglMDlfXzB4YV9fJTBCJTBDX18weGRfXyUwRSUwRi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTlcxZ3ErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjc3MTkyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZi8xNTQ5NjcxMDA2NzcxOTI1L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTAwJTAxJTAyJTAzJTA0JTA1JTA2JTA3JTA4JTA5X18weGFfXyUwQiUwQ19fMHhkX18lMEUlMEYvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTlcxZ3ErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLVx1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY3NzE5MjUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYvMTU0OTY3MTAwNjc3MTkyNS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNOVzFncSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjc3MTkyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZi8xNTQ5NjcxMDA2NzcxOTI1L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lMDAlMDElMDIlMDMlMDQlMDUlMDYlMDclMDglMDlfXzB4YV9fJTBCJTBDX18weGRfXyUwRSUwRi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTlcxZ3ErdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmLzE1NDk2NzEwMDc5NDU1MTEiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGP2dlbmVyYXRpb249MTU0OTY3MTAwNzk0NTUxMSZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3OTQ1NTExIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS2VHeXErdXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3Ljk0NVoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNy45NDVaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3Ljk0NVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzk0NTUxMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU0OTY3MTAwNzk0NTUxMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLZUd5cSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzk0NTUxMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU0OTY3MTAwNzk0NTUxMS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSUxMCUxMSUxMiUxMyUxNCUxNSUxNiUxNyUxOCUxOSUxQSUxQiUxQyUxRCUxRSUxRi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLZUd5cSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc5NDU1MTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmLzE1NDk2NzEwMDc5NDU1MTEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUYvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tlR3lxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzk0NTUxMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU0OTY3MTAwNzk0NTUxMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLZUd5cSt1cmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0gIVwiIyQlJicoKSorLC0uLy8xNTQ5NjcxMDA3MzkyMTE2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSUyMCElMjIlMjMkJTI1JicoKSolMkIsLS4lMkYiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGP2dlbmVyYXRpb249MTU0OTY3MTAwNzM5MjExNiZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczOTIxMTYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQU2lxSyt1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMzkxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjM5MVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMzkxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLSAhXCIjJCUmJygpKissLS4vIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczOTIxMTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8vMTU0OTY3MTAwNzM5MjExNi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUFNpcUsrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzM5MjExNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0gIVwiIyQlJicoKSorLC0uLy8xNTQ5NjcxMDA3MzkyMTE2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQU2lxSyt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzM5MjExNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0gIVwiIyQlJicoKSorLC0uLy8xNTQ5NjcxMDA3MzkyMTE2L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRi9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUFNpcUsrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLSAhXCIjJCUmJygpKissLS4vIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczOTIxMTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8vMTU0OTY3MTAwNzM5MjExNi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUFNpcUsrdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcLzE1NDk2NzEwMDc3NDAyMjQiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1QyIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUM/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA3NzQwMjI0JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy0uLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc3NDAyMjQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNNREN2YSt1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNzM5WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjczOVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNzM5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3NzQwMjI0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTQ5NjcxMDA3NzQwMjI0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLiU1Q2ZvbyU1Qy4uJTVDYmFyJTVDLi4lNUMuLiU1Q2Jhei4uJTVDL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNREN2YSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0uLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzc0MDIyNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwvMTU0OTY3MTAwNzc0MDIyNC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUMvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTURDdmErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3NzQwMjI0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTQ5NjcxMDA3NzQwMjI0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1Qy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTURDdmErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3NzQwMjI0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTQ5NjcxMDA3NzQwMjI0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLiU1Q2ZvbyU1Qy4uJTVDYmFyJTVDLi4lNUMuLiU1Q2Jhei4uJTVDL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNREN2YSt1cmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJhei8xNTQ5NjcxMDA2NDI3NjIzIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi4lNUNmb28lNUMlNUNiYXIlNUMlNUMlNUNiYXo/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA2NDI3NjIzJmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJheiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjQyNzYyMyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ09lejdhNnVyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi40MjdaIiwidXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuNDI3WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi40MjdaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjQyNzYyMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJhei8xNTQ5NjcxMDA2NDI3NjIzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLiU1Q2ZvbyU1QyU1Q2JhciU1QyU1QyU1Q2Jhei9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT2V6N2E2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjQyNzYyMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJhei8xNTQ5NjcxMDA2NDI3NjIzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi4lNUNmb28lNUMlNUNiYXIlNUMlNUMlNUNiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT2V6N2E2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY0Mjc2MjMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXovMTU0OTY3MTAwNjQyNzYyMy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNPZXo3YTZ1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjQyNzYyMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJhei8xNTQ5NjcxMDA2NDI3NjIzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLiU1Q2ZvbyU1QyU1Q2JhciU1QyU1QyU1Q2Jhei9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT2V6N2E2dXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTQ5NjcxMDA3MDk0MzY4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uX18weDJmX19mb28lMkYuLl9fMHgyZl9fYmFyJTJGLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA3MDk0MzY4JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3MDk0MzY4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDT0NNbHErdXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjA5M1oiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNy4wOTNaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjA5M1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDcwOTQzNjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTQ5NjcxMDA3MDk0MzY4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vJTJGLi5fXzB4MmZfX2JhciUyRi4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0NNbHErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXyIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3MDk0MzY4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLS4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vMTU0OTY3MTAwNzA5NDM2OC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uX18weDJmX19mb28lMkYuLl9fMHgyZl9fYmFyJTJGLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ09DTWxxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDcwOTQzNjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTQ5NjcxMDA3MDk0MzY4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ09DTWxxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDcwOTQzNjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTQ5NjcxMDA3MDk0MzY4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vJTJGLi5fXzB4MmZfX2JhciUyRi4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT0NNbHErdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtMTIzNDUvMTU0OTY3MTAwNzMxMjY4MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0xMjM0NSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLTEyMzQ1P2dlbmVyYXRpb249MTU0OTY3MTAwNzMxMjY4MSZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtMTIzNDUiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczMTI2ODEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLbTJvNit1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMzEyWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjMxMloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMzEyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTEyMzQ1IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczMTI2ODEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtMTIzNDUvMTU0OTY3MTAwNzMxMjY4MS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtMTIzNDUvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ttMm82K3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTEyMzQ1IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczMTI2ODEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtMTIzNDUvMTU0OTY3MTAwNzMxMjY4MS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLTEyMzQ1L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ttMm82K3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0xMjM0NSIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3MzEyNjgxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLTEyMzQ1LzE1NDk2NzEwMDczMTI2ODEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0xMjM0NS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS20ybzYrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTEyMzQ1IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczMTI2ODEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtMTIzNDUvMTU0OTY3MTAwNzMxMjY4MS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtMTIzNDUvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0ttMm82K3VyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLTo7XHUwMDNjPVx1MDAzZT8vMTU0OTY3MTAwODA2NjMxNyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0Y/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA4MDY2MzE3JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA4MDY2MzE3IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSTIyMGErdXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA4LjA2NVoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowOC4wNjVaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA4LjA2NVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDgwNjYzMTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtOjtcdTAwM2M9XHUwMDNlPy8xNTQ5NjcxMDA4MDY2MzE3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0kyMjBhK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTo7XHUwMDNjPVx1MDAzZT8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwODA2NjMxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/LzE1NDk2NzEwMDgwNjYzMTcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSTIyMGErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTo7XHUwMDNjPVx1MDAzZT8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwODA2NjMxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/LzE1NDk2NzEwMDgwNjYzMTcvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0kyMjBhK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDgwNjYzMTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtOjtcdTAwM2M9XHUwMDNlPy8xNTQ5NjcxMDA4MDY2MzE3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0kyMjBhK3VyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLUAvMTU0OTY3MTAwNzUwMjE0MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1AIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtQD9nZW5lcmF0aW9uPTE1NDk2NzEwMDc1MDIxNDEmYWx0PW1lZGlhIiwibmFtZSI6Imxpc3Qtd2VpcmRrZXlzLUAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc1MDIxNDEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMMytycSt1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNTAxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjUwMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNTAxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLUAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzUwMjE0MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1ALzE1NDk2NzEwMDc1MDIxNDEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLUAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0wzK3JxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLUAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzUwMjE0MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1ALzE1NDk2NzEwMDc1MDIxNDEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1AL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0wzK3JxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1AIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc1MDIxNDEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtQC8xNTQ5NjcxMDA3NTAyMTQxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtQC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTDMrcnErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLUAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzUwMjE0MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1ALzE1NDk2NzEwMDc1MDIxNDEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLUAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0wzK3JxK3VyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLVtcXF1eXy8xNTQ5NjcxMDA2MTEzMzA0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU1QiU1QyU1RCU1RV8iLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lNUIlNUMlNUQlNUVfP2dlbmVyYXRpb249MTU0OTY3MTAwNjExMzMwNCZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtW1xcXV5fIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2MTEzMzA0IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSmljMnE2dXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjExMloiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi4xMTJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjExMloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1bXFxdXl8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjExMzMwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1bXFxdXl8vMTU0OTY3MTAwNjExMzMwNC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTVCJTVDJTVEJTVFXy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSmljMnE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtW1xcXV5fIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDYxMTMzMDQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtW1xcXV5fLzE1NDk2NzEwMDYxMTMzMDQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lNUIlNUMlNUQlNUVfL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ppYzJxNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1bXFxdXl8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjExMzMwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1bXFxdXl8vMTU0OTY3MTAwNjExMzMwNC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU1QiU1QyU1RCU1RV8vYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0ppYzJxNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1bXFxdXl8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjExMzMwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1bXFxdXl8vMTU0OTY3MTAwNjExMzMwNC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTVCJTVDJTVEJTVFXy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSmljMnE2dXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtYC8xNTQ5NjcxMDA4MTYzMTY1Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MD9nZW5lcmF0aW9uPTE1NDk2NzEwMDgxNjMxNjUmYWx0PW1lZGlhIiwibmFtZSI6Imxpc3Qtd2VpcmRrZXlzLWAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDgxNjMxNjUiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOMnExNit1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDguMTYyWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA4LjE2MloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDguMTYyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwODE2MzE2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1gLzE1NDk2NzEwMDgxNjMxNjUvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTjJxMTYrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtYCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA4MTYzMTY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWAvMTU0OTY3MTAwODE2MzE2NS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOMnExNit1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtYCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA4MTYzMTY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWAvMTU0OTY3MTAwODE2MzE2NS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTjJxMTYrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwODE2MzE2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1gLzE1NDk2NzEwMDgxNjMxNjUvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTjJxMTYrdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXovMTU0OTY3MTAwNzIwMzYwMCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjBiYXIlMjBiYXoiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjBiYXIlMjBiYXo/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA3MjAzNjAwJmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy1mb28gYmFyIGJheiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzIwMzYwMCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pEaW5LK3VyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNy4yMDNaIiwidXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMjAzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNy4yMDNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzIwMzYwMCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhei8xNTQ5NjcxMDA3MjAzNjAwL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjBiYXIlMjBiYXovYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pEaW5LK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvbyBiYXIgYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDcyMDM2MDAiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXovMTU0OTY3MTAwNzIwMzYwMC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyMGJhciUyMGJhei9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKRGluSyt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzIwMzYwMCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhei8xNTQ5NjcxMDA3MjAzNjAwL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTIwYmFyJTIwYmF6L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKRGluSyt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzIwMzYwMCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhei8xNTQ5NjcxMDA3MjAzNjAwL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjBiYXIlMjBiYXovYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pEaW5LK3VyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvb1wiYmFyXCJiYXovMTU0OTY3MTAwNjU1MjI4OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXoiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXo/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA2NTUyMjg4JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2NTUyMjg4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDT0NCOWE2dXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjU1MVoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi41NTFaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjU1MVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY1NTIyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vXCJiYXJcImJhei8xNTQ5NjcxMDA2NTUyMjg4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ09DQjlhNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvb1wiYmFyXCJiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjU1MjI4OCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6LzE1NDk2NzEwMDY1NTIyODgvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0NCOWE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvb1wiYmFyXCJiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjU1MjI4OCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6LzE1NDk2NzEwMDY1NTIyODgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ09DQjlhNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY1NTIyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vXCJiYXJcImJhei8xNTQ5NjcxMDA2NTUyMjg4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXovYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ09DQjlhNnVyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6LzE1NDk2NzEwMDc2MzMxODYiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6P2dlbmVyYXRpb249MTU0OTY3MTAwNzYzMzE4NiZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtZm9vLy9iYXIvLy9iYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc2MzMxODYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTCt0cSt1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNjMyWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjYzMloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNjMyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc2MzMxODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vLy9iYXIvLy9iYXovMTU0OTY3MTAwNzYzMzE4Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTCt0cSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb28vL2Jhci8vL2JheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3NjMzMTg2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6LzE1NDk2NzEwMDc2MzMxODYvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMkYlMkZiYXIlMkYlMkYlMkZiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDS0wrdHErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc2MzMxODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vLy9iYXIvLy9iYXovMTU0OTY3MTAwNzYzMzE4Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRiUyRmJhciUyRiUyRiUyRmJhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS0wrdHErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc2MzMxODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vLy9iYXIvLy9iYXovMTU0OTY3MTAwNzYzMzE4Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLTCt0cSt1cmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28vYmFyL2Jhei8xNTQ5NjcxMDA1OTkyNjcxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRmJhciUyRmJheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRmJhciUyRmJhej9nZW5lcmF0aW9uPTE1NDk2NzEwMDU5OTI2NzEmYWx0PW1lZGlhIiwibmFtZSI6Imxpc3Qtd2VpcmRrZXlzLWZvby9iYXIvYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA1OTkyNjcxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTi90MHE2dXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA1Ljk5MloiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNS45OTJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA1Ljk5MloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA1OTkyNjcxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby9iYXIvYmF6LzE1NDk2NzEwMDU5OTI2NzEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRmJhciUyRmJhei9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTi90MHE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vL2Jhci9iYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNTk5MjY3MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28vYmFyL2Jhei8xNTQ5NjcxMDA1OTkyNjcxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGYmFyJTJGYmF6L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ04vdDBxNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA1OTkyNjcxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby9iYXIvYmF6LzE1NDk2NzEwMDU5OTI2NzEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMkZiYXIlMkZiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ04vdDBxNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA1OTkyNjcxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby9iYXIvYmF6LzE1NDk2NzEwMDU5OTI2NzEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRmJhciUyRmJhei9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTi90MHE2dXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vXFxiYXJcXGJhei8xNTQ5NjcxMDA2MzIyMzYxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2JheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhej9nZW5lcmF0aW9uPTE1NDk2NzEwMDYzMjIzNjEmYWx0PW1lZGlhIiwibmFtZSI6Imxpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDYzMjIzNjEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMbjk1cTZ1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuMzIxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjMyMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuMzIxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjMyMjM2MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb29cXGJhclxcYmF6LzE1NDk2NzEwMDYzMjIzNjEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhei9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTG45NXE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vXFxiYXJcXGJheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2MzIyMzYxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXovMTU0OTY3MTAwNjMyMjM2MS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhei9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNMbjk1cTZ1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vXFxiYXJcXGJheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2MzIyMzYxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXovMTU0OTY3MTAwNjMyMjM2MS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTG45NXE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjMyMjM2MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb29cXGJhclxcYmF6LzE1NDk2NzEwMDYzMjIzNjEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhei9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTG45NXE2dXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMte3x9flx1MDA3Zi8xNTQ5NjcxMDA2ODc3MTE3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU3QiU3QyU3RH4lN0YiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lN0IlN0MlN0R+JTdGP2dlbmVyYXRpb249MTU0OTY3MTAwNjg3NzExNyZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMte3x9flx1MDA3ZiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjg3NzExNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0wzcmlLK3VyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi44NzZaIiwidXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuODc2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi44NzZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMte3x9flx1MDA3ZiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2ODc3MTE3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLXt8fX5cdTAwN2YvMTU0OTY3MTAwNjg3NzExNy9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTdCJTdDJTdEfiU3Ri9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTDNyaUsrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMte3x9flx1MDA3ZiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2ODc3MTE3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLXt8fX5cdTAwN2YvMTU0OTY3MTAwNjg3NzExNy9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU3QiU3QyU3RH4lN0YvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTDNyaUsrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLXt8fX5cdTAwN2YiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjg3NzExNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy17fH1+XHUwMDdmLzE1NDk2NzEwMDY4NzcxMTcvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lN0IlN0MlN0R+JTdGL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNMM3JpSyt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMte3x9flx1MDA3ZiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2ODc3MTE3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLXt8fX5cdTAwN2YvMTU0OTY3MTAwNjg3NzExNy91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTdCJTdDJTdEfiU3Ri9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTDNyaUsrdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMt4pi64pi64pi6LzE1NDk2NzEwMDY2Njc3MTYiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBP2dlbmVyYXRpb249MTU0OTY3MTAwNjY2NzcxNiZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMt4pi64pi64pi6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2NjY3NzE2IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTVNIL0s2dXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjY2N1oiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi42NjdaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjY2N1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy3imLrimLrimLoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjY2NzcxNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy3imLrimLrimLovMTU0OTY3MTAwNjY2NzcxNi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNU0gvSzZ1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy3imLrimLrimLoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjY2NzcxNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy3imLrimLrimLovMTU0OTY3MTAwNjY2NzcxNi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSVFMiU5OCVCQSVFMiU5OCVCQSVFMiU5OCVCQS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNU0gvSzZ1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMt4pi64pi64pi6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY2Njc3MTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMt4pi64pi64pi6LzE1NDk2NzEwMDY2Njc3MTYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lRTIlOTglQkElRTIlOTglQkElRTIlOTglQkEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01TSC9LNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy3imLrimLrimLoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjY2NzcxNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy3imLrimLrimLovMTU0OTY3MTAwNjY2NzcxNi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNU0gvSzZ1cmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "e9a9d6141143a9c2", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=list-weirdkeys-\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "56718" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:17:53 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkfAmJ9va0zyoZSZlAB-y5NV83mPhJKjEsVlRkgDRkUuO6-991-pIGDa-R75dYU8Lgv402mJYmQ4LsMX6uA_Ao" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZi8xNTQ5NjcxMDA2NzcxOTI1Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTAwJTAxJTAyJTAzJTA0JTA1JTA2JTA3JTA4JTA5X18weGFfXyUwQiUwQ19fMHhkX18lMEUlMEY/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA2NzcxOTI1JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjc3MTkyNSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ05XMWdxK3VyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi43NzFaIiwidXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuNzcxWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi43NzFaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjc3MTkyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZi8xNTQ5NjcxMDA2NzcxOTI1L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lMDAlMDElMDIlMDMlMDQlMDUlMDYlMDclMDglMDlfXzB4YV9fJTBCJTBDX18weGRfXyUwRSUwRi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTlcxZ3ErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjc3MTkyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZi8xNTQ5NjcxMDA2NzcxOTI1L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTAwJTAxJTAyJTAzJTA0JTA1JTA2JTA3JTA4JTA5X18weGFfXyUwQiUwQ19fMHhkX18lMEUlMEYvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTlcxZ3ErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLVx1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRfXzB4YV9fXHUwMDBiXGZfXzB4ZF9fXHUwMDBlXHUwMDBmIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY3NzE5MjUiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYvMTU0OTY3MTAwNjc3MTkyNS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOV9fMHhhX18lMEIlMENfXzB4ZF9fJTBFJTBGL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNOVzFncSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtXHUwMDAwXHUwMDAxXHUwMDAyXHUwMDAzXHUwMDA0XHUwMDA1XHUwMDA2XHUwMDA3XGJcdF9fMHhhX19cdTAwMGJcZl9fMHhkX19cdTAwMGVcdTAwMGYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjc3MTkyNSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0X18weGFfX1x1MDAwYlxmX18weGRfX1x1MDAwZVx1MDAwZi8xNTQ5NjcxMDA2NzcxOTI1L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lMDAlMDElMDIlMDMlMDQlMDUlMDYlMDclMDglMDlfXzB4YV9fJTBCJTBDX18weGRfXyUwRSUwRi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTlcxZ3ErdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmLzE1NDk2NzEwMDc5NDU1MTEiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGP2dlbmVyYXRpb249MTU0OTY3MTAwNzk0NTUxMSZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3OTQ1NTExIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDS2VHeXErdXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3Ljk0NVoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNy45NDVaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3Ljk0NVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzk0NTUxMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU0OTY3MTAwNzk0NTUxMS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLZUd5cSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzk0NTUxMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU0OTY3MTAwNzk0NTUxMS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSUxMCUxMSUxMiUxMyUxNCUxNSUxNiUxNyUxOCUxOSUxQSUxQiUxQyUxRCUxRSUxRi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLZUd5cSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc5NDU1MTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFhXHUwMDFiXHUwMDFjXHUwMDFkXHUwMDFlXHUwMDFmLzE1NDk2NzEwMDc5NDU1MTEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUYvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tlR3lxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzk0NTUxMSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1cdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYvMTU0OTY3MTAwNzk0NTUxMS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTEwJTExJTEyJTEzJTE0JTE1JTE2JTE3JTE4JTE5JTFBJTFCJTFDJTFEJTFFJTFGL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLZUd5cSt1cmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0gIVwiIyQlJicoKSorLC0uLy8xNTQ5NjcxMDA3MzkyMTE2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSUyMCElMjIlMjMkJTI1JicoKSolMkIsLS4lMkYiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lMjAhJTIyJTIzJCUyNSYnKCkqJTJCLC0uJTJGP2dlbmVyYXRpb249MTU0OTY3MTAwNzM5MjExNiZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczOTIxMTYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQU2lxSyt1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMzkxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjM5MVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMzkxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLSAhXCIjJCUmJygpKissLS4vIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczOTIxMTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8vMTU0OTY3MTAwNzM5MjExNi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUFNpcUsrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzM5MjExNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0gIVwiIyQlJicoKSorLC0uLy8xNTQ5NjcxMDA3MzkyMTE2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQU2lxSyt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzM5MjExNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0gIVwiIyQlJicoKSorLC0uLy8xNTQ5NjcxMDA3MzkyMTE2L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRi9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUFNpcUsrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLSAhXCIjJCUmJygpKissLS4vIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczOTIxMTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtICFcIiMkJSYnKCkqKywtLi8vMTU0OTY3MTAwNzM5MjExNi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTIwISUyMiUyMyQlMjUmJygpKiUyQiwtLiUyRi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUFNpcUsrdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcLi5cXGJhclxcLi5cXC4uXFxiYXouLlxcLzE1NDk2NzEwMDc3NDAyMjQiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1QyIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUM/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA3NzQwMjI0JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy0uLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc3NDAyMjQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNNREN2YSt1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNzM5WiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjczOVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNzM5WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3NzQwMjI0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTQ5NjcxMDA3NzQwMjI0L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLiU1Q2ZvbyU1Qy4uJTVDYmFyJTVDLi4lNUMuLiU1Q2Jhei4uJTVDL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNREN2YSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0uLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzc0MDIyNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwvMTU0OTY3MTAwNzc0MDIyNC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUMvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTURDdmErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3NzQwMjI0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTQ5NjcxMDA3NzQwMjI0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1Qy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTURDdmErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3NzQwMjI0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXC8xNTQ5NjcxMDA3NzQwMjI0L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLiU1Q2ZvbyU1Qy4uJTVDYmFyJTVDLi4lNUMuLiU1Q2Jhei4uJTVDL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNREN2YSt1cmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJhei8xNTQ5NjcxMDA2NDI3NjIzIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi4lNUNmb28lNUMlNUNiYXIlNUMlNUMlNUNiYXo/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA2NDI3NjIzJmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJheiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjQyNzYyMyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ09lejdhNnVyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi40MjdaIiwidXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuNDI3WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi40MjdaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjQyNzYyMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJhei8xNTQ5NjcxMDA2NDI3NjIzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLiU1Q2ZvbyU1QyU1Q2JhciU1QyU1QyU1Q2Jhei9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT2V6N2E2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjQyNzYyMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJhei8xNTQ5NjcxMDA2NDI3NjIzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi4lNUNmb28lNUMlNUNiYXIlNUMlNUMlNUNiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT2V6N2E2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLS4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY0Mjc2MjMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXovMTU0OTY3MTAwNjQyNzYyMy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNPZXo3YTZ1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjQyNzYyMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy0uLlxcZm9vXFxcXGJhclxcXFxcXGJhei8xNTQ5NjcxMDA2NDI3NjIzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLiU1Q2ZvbyU1QyU1Q2JhciU1QyU1QyU1Q2Jhei9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT2V6N2E2dXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTQ5NjcxMDA3MDk0MzY4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uX18weDJmX19mb28lMkYuLl9fMHgyZl9fYmFyJTJGLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA3MDk0MzY4JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3MDk0MzY4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDT0NNbHErdXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjA5M1oiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNy4wOTNaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjA5M1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDcwOTQzNjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTQ5NjcxMDA3MDk0MzY4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vJTJGLi5fXzB4MmZfX2JhciUyRi4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0NNbHErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXyIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3MDk0MzY4IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLS4uX18weDJmX19mb28vLi5fXzB4MmZfX2Jhci8uLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vMTU0OTY3MTAwNzA5NDM2OC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLS4uX18weDJmX19mb28lMkYuLl9fMHgyZl9fYmFyJTJGLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ09DTWxxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDcwOTQzNjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTQ5NjcxMDA3MDk0MzY4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2ZvbyUyRi4uX18weDJmX19iYXIlMkYuLl9fMHgyZl9fLi5fXzB4MmZfX2Jhei4uX18weDJmX18vYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ09DTWxxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDcwOTQzNjgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtLi5fXzB4MmZfX2Zvby8uLl9fMHgyZl9fYmFyLy4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy8xNTQ5NjcxMDA3MDk0MzY4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vJTJGLi5fXzB4MmZfX2JhciUyRi4uX18weDJmX18uLl9fMHgyZl9fYmF6Li5fXzB4MmZfXy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDT0NNbHErdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtMTIzNDUvMTU0OTY3MTAwNzMxMjY4MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0xMjM0NSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLTEyMzQ1P2dlbmVyYXRpb249MTU0OTY3MTAwNzMxMjY4MSZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtMTIzNDUiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczMTI2ODEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLbTJvNit1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMzEyWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjMxMloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMzEyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTEyMzQ1IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczMTI2ODEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtMTIzNDUvMTU0OTY3MTAwNzMxMjY4MS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtMTIzNDUvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ttMm82K3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTEyMzQ1IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczMTI2ODEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtMTIzNDUvMTU0OTY3MTAwNzMxMjY4MS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLTEyMzQ1L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ttMm82K3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy0xMjM0NSIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3MzEyNjgxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLTEyMzQ1LzE1NDk2NzEwMDczMTI2ODEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0xMjM0NS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS20ybzYrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTEyMzQ1IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDczMTI2ODEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtMTIzNDUvMTU0OTY3MTAwNzMxMjY4MS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtMTIzNDUvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0ttMm82K3VyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLTo7XHUwMDNjPVx1MDAzZT8vMTU0OTY3MTAwODA2NjMxNyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0Y/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA4MDY2MzE3JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA4MDY2MzE3IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSTIyMGErdXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA4LjA2NVoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowOC4wNjVaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA4LjA2NVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDgwNjYzMTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtOjtcdTAwM2M9XHUwMDNlPy8xNTQ5NjcxMDA4MDY2MzE3L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0kyMjBhK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTo7XHUwMDNjPVx1MDAzZT8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwODA2NjMxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/LzE1NDk2NzEwMDgwNjYzMTcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSTIyMGErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLTo7XHUwMDNjPVx1MDAzZT8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwODA2NjMxNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/LzE1NDk2NzEwMDgwNjYzMTcvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0kyMjBhK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy06O1x1MDAzYz1cdTAwM2U/IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDgwNjYzMTciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtOjtcdTAwM2M9XHUwMDNlPy8xNTQ5NjcxMDA4MDY2MzE3L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy06OyUzQz0lM0UlM0YvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0kyMjBhK3VyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLUAvMTU0OTY3MTAwNzUwMjE0MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1AIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtQD9nZW5lcmF0aW9uPTE1NDk2NzEwMDc1MDIxNDEmYWx0PW1lZGlhIiwibmFtZSI6Imxpc3Qtd2VpcmRrZXlzLUAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc1MDIxNDEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMMytycSt1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNTAxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjUwMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNTAxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLUAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzUwMjE0MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1ALzE1NDk2NzEwMDc1MDIxNDEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLUAvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0wzK3JxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLUAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzUwMjE0MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1ALzE1NDk2NzEwMDc1MDIxNDEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1AL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0wzK3JxK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1AIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc1MDIxNDEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtQC8xNTQ5NjcxMDA3NTAyMTQxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtQC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTDMrcnErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLUAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzUwMjE0MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1ALzE1NDk2NzEwMDc1MDIxNDEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLUAvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0wzK3JxK3VyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLVtcXF1eXy8xNTQ5NjcxMDA2MTEzMzA0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU1QiU1QyU1RCU1RV8iLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lNUIlNUMlNUQlNUVfP2dlbmVyYXRpb249MTU0OTY3MTAwNjExMzMwNCZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtW1xcXV5fIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2MTEzMzA0IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDSmljMnE2dXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjExMloiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi4xMTJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjExMloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1bXFxdXl8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjExMzMwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1bXFxdXl8vMTU0OTY3MTAwNjExMzMwNC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTVCJTVDJTVEJTVFXy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSmljMnE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtW1xcXV5fIiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDYxMTMzMDQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtW1xcXV5fLzE1NDk2NzEwMDYxMTMzMDQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lNUIlNUMlNUQlNUVfL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0ppYzJxNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1bXFxdXl8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjExMzMwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1bXFxdXl8vMTU0OTY3MTAwNjExMzMwNC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU1QiU1QyU1RCU1RV8vYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0ppYzJxNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1bXFxdXl8iLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjExMzMwNCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1bXFxdXl8vMTU0OTY3MTAwNjExMzMwNC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTVCJTVDJTVEJTVFXy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSmljMnE2dXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtYC8xNTQ5NjcxMDA4MTYzMTY1Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MCIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MD9nZW5lcmF0aW9uPTE1NDk2NzEwMDgxNjMxNjUmYWx0PW1lZGlhIiwibmFtZSI6Imxpc3Qtd2VpcmRrZXlzLWAiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDgxNjMxNjUiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOMnExNit1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDguMTYyWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA4LjE2MloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDguMTYyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwODE2MzE2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1gLzE1NDk2NzEwMDgxNjMxNjUvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MC9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTjJxMTYrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtYCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA4MTYzMTY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWAvMTU0OTY3MTAwODE2MzE2NS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MC9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOMnExNit1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtYCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA4MTYzMTY1IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWAvMTU0OTY3MTAwODE2MzE2NS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MC9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTjJxMTYrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWAiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwODE2MzE2NSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1gLzE1NDk2NzEwMDgxNjMxNjUvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU2MC9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTjJxMTYrdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXovMTU0OTY3MTAwNzIwMzYwMCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjBiYXIlMjBiYXoiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjBiYXIlMjBiYXo/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA3MjAzNjAwJmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy1mb28gYmFyIGJheiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzIwMzYwMCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0pEaW5LK3VyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNy4yMDNaIiwidXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuMjAzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNy4yMDNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzIwMzYwMCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhei8xNTQ5NjcxMDA3MjAzNjAwL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjBiYXIlMjBiYXovYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pEaW5LK3VyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvbyBiYXIgYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDcyMDM2MDAiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXovMTU0OTY3MTAwNzIwMzYwMC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyMGJhciUyMGJhei9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNKRGluSyt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzIwMzYwMCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhei8xNTQ5NjcxMDA3MjAzNjAwL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTIwYmFyJTIwYmF6L2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKRGluSyt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vIGJhciBiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNzIwMzYwMCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhei8xNTQ5NjcxMDA3MjAzNjAwL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjBiYXIlMjBiYXovYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pEaW5LK3VyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvb1wiYmFyXCJiYXovMTU0OTY3MTAwNjU1MjI4OCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXoiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXo/Z2VuZXJhdGlvbj0xNTQ5NjcxMDA2NTUyMjg4JmFsdD1tZWRpYSIsIm5hbWUiOiJsaXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2NTUyMjg4IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDT0NCOWE2dXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjU1MVoiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi41NTFaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjU1MVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY1NTIyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vXCJiYXJcImJhei8xNTQ5NjcxMDA2NTUyMjg4L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ09DQjlhNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvb1wiYmFyXCJiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjU1MjI4OCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6LzE1NDk2NzEwMDY1NTIyODgvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDT0NCOWE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvb1wiYmFyXCJiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjU1MjI4OCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6LzE1NDk2NzEwMDY1NTIyODgvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ09DQjlhNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb29cImJhclwiYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY1NTIyODgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vXCJiYXJcImJhei8xNTQ5NjcxMDA2NTUyMjg4L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMjJiYXIlMjJiYXovYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ09DQjlhNnVyZUFDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6LzE1NDk2NzEwMDc2MzMxODYiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6IiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6P2dlbmVyYXRpb249MTU0OTY3MTAwNzYzMzE4NiZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMtZm9vLy9iYXIvLy9iYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc2MzMxODYiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLTCt0cSt1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNjMyWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA3LjYzMloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDcuNjMyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc2MzMxODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vLy9iYXIvLy9iYXovMTU0OTY3MTAwNzYzMzE4Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6L2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLTCt0cSt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb28vL2Jhci8vL2JheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA3NjMzMTg2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6LzE1NDk2NzEwMDc2MzMxODYvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMkYlMkZiYXIlMkYlMkYlMkZiYXovYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDS0wrdHErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc2MzMxODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vLy9iYXIvLy9iYXovMTU0OTY3MTAwNzYzMzE4Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRiUyRmJhciUyRiUyRiUyRmJhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDS0wrdHErdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvby8vYmFyLy8vYmF6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDc2MzMxODYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vLy9iYXIvLy9iYXovMTU0OTY3MTAwNzYzMzE4Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6L2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLTCt0cSt1cmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28vYmFyL2Jhei8xNTQ5NjcxMDA1OTkyNjcxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRmJhciUyRmJheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRmJhciUyRmJhej9nZW5lcmF0aW9uPTE1NDk2NzEwMDU5OTI2NzEmYWx0PW1lZGlhIiwibmFtZSI6Imxpc3Qtd2VpcmRrZXlzLWZvby9iYXIvYmF6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA1OTkyNjcxIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTi90MHE2dXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA1Ljk5MloiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNS45OTJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA1Ljk5MloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA1OTkyNjcxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby9iYXIvYmF6LzE1NDk2NzEwMDU5OTI2NzEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRmJhciUyRmJhei9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTi90MHE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vL2Jhci9iYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNTk5MjY3MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb28vYmFyL2Jhei8xNTQ5NjcxMDA1OTkyNjcxL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtZm9vJTJGYmFyJTJGYmF6L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ04vdDBxNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA1OTkyNjcxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby9iYXIvYmF6LzE1NDk2NzEwMDU5OTI2NzEvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy1mb28lMkZiYXIlMkZiYXovYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ04vdDBxNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy1mb28vYmFyL2JheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA1OTkyNjcxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvby9iYXIvYmF6LzE1NDk2NzEwMDU5OTI2NzEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyUyRmJhciUyRmJhei9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTi90MHE2dXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMtZm9vXFxiYXJcXGJhei8xNTQ5NjcxMDA2MzIyMzYxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2JheiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhej9nZW5lcmF0aW9uPTE1NDk2NzEwMDYzMjIzNjEmYWx0PW1lZGlhIiwibmFtZSI6Imxpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXoiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDYzMjIzNjEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNMbjk1cTZ1cmVBQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuMzIxWiIsInVwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjMyMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuMzIxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjMyMjM2MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb29cXGJhclxcYmF6LzE1NDk2NzEwMDYzMjIzNjEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhei9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTG45NXE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vXFxiYXJcXGJheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2MzIyMzYxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXovMTU0OTY3MTAwNjMyMjM2MS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhei9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNMbjk1cTZ1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMtZm9vXFxiYXJcXGJheiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2MzIyMzYxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXovMTU0OTY3MTAwNjMyMjM2MS9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhei9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTG45NXE2dXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLWZvb1xcYmFyXFxiYXoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjMyMjM2MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy1mb29cXGJhclxcYmF6LzE1NDk2NzEwMDYzMjIzNjEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLWZvbyU1Q2JhciU1Q2Jhei9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTG45NXE2dXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMte3x9flx1MDA3Zi8xNTQ5NjcxMDA2ODc3MTE3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU3QiU3QyU3RH4lN0YiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lN0IlN0MlN0R+JTdGP2dlbmVyYXRpb249MTU0OTY3MTAwNjg3NzExNyZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMte3x9flx1MDA3ZiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjg3NzExNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ0wzcmlLK3VyZUFDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi44NzZaIiwidXBkYXRlZCI6IjIwMTktMDItMDlUMDA6MTA6MDYuODc2WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi44NzZaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMte3x9flx1MDA3ZiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2ODc3MTE3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLXt8fX5cdTAwN2YvMTU0OTY3MTAwNjg3NzExNy9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTdCJTdDJTdEfiU3Ri9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTDNyaUsrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMte3x9flx1MDA3ZiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2ODc3MTE3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLXt8fX5cdTAwN2YvMTU0OTY3MTAwNjg3NzExNy9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSU3QiU3QyU3RH4lN0YvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDTDNyaUsrdXJlQUNFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6Imxpc3Qtd2VpcmRrZXlzLXt8fX5cdTAwN2YiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjg3NzExNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy17fH1+XHUwMDdmLzE1NDk2NzEwMDY4NzcxMTcvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lN0IlN0MlN0R+JTdGL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNMM3JpSyt1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMte3x9flx1MDA3ZiIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2ODc3MTE3IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2xpc3Qtd2VpcmRrZXlzLXt8fX5cdTAwN2YvMTU0OTY3MTAwNjg3NzExNy91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJTdCJTdDJTdEfiU3Ri9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDTDNyaUsrdXJlQUNFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMt4pi64pi64pi6LzE1NDk2NzEwMDY2Njc3MTYiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBIiwibWVkaWFMaW5rIjoiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2Rvd25sb2FkL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBP2dlbmVyYXRpb249MTU0OTY3MTAwNjY2NzcxNiZhbHQ9bWVkaWEiLCJuYW1lIjoibGlzdC13ZWlyZGtleXMt4pi64pi64pi6IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTQ5NjcxMDA2NjY3NzE2IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDTVNIL0s2dXJlQUNFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjY2N1oiLCJ1cGRhdGVkIjoiMjAxOS0wMi0wOVQwMDoxMDowNi42NjdaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDE5LTAyLTA5VDAwOjEwOjA2LjY2N1oiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy3imLrimLrimLoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjY2NzcxNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy3imLrimLrimLovMTU0OTY3MTAwNjY2NzcxNi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNU0gvSzZ1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy3imLrimLrimLoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjY2NzcxNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy3imLrimLrimLovMTU0OTY3MTAwNjY2NzcxNi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2xpc3Qtd2VpcmRrZXlzLSVFMiU5OCVCQSVFMiU5OCVCQSVFMiU5OCVCQS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNU0gvSzZ1cmVBQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoibGlzdC13ZWlyZGtleXMt4pi64pi64pi6IiwiZ2VuZXJhdGlvbiI6IjE1NDk2NzEwMDY2Njc3MTYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvbGlzdC13ZWlyZGtleXMt4pi64pi64pi6LzE1NDk2NzEwMDY2Njc3MTYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9saXN0LXdlaXJka2V5cy0lRTIlOTglQkElRTIlOTglQkElRTIlOTglQkEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01TSC9LNnVyZUFDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJsaXN0LXdlaXJka2V5cy3imLrimLrimLoiLCJnZW5lcmF0aW9uIjoiMTU0OTY3MTAwNjY2NzcxNiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9saXN0LXdlaXJka2V5cy3imLrimLrimLovMTU0OTY3MTAwNjY2NzcxNi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vbGlzdC13ZWlyZGtleXMtJUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNU0gvSzZ1cmVBQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMD5.replay000066400000000000000000001116201367004507500252110ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCfHuKEaf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "63c734b8d701d922", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-md5-aaa\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJibG9iLWZvci1tZDUtYWFhIn0K", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2786" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Etag": [ "CP69hIeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkU610B4sdwQEMZMFmxEY_2CPu8XXzXKp-1L2l2fjcvLdPWsH2lku63Q_caWVp97yyBIpl0Uhx0z6ykXwtEGjs" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWFhYS8xNTkxNjgzNDg3NzAyNzgyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1hYWEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYWFhP2dlbmVyYXRpb249MTU5MTY4MzQ4NzcwMjc4MiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWQ1LWFhYSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NzcwMjc4MiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1A2OWhJZUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43MDJaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDcuNzAyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43MDJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWFhYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzAyNzgyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1hYWEvMTU5MTY4MzQ4NzcwMjc4Mi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWFhYS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUDY5aEllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWFhYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzAyNzgyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1hYWEvMTU5MTY4MzQ4NzcwMjc4Mi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1hYWEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUDY5aEllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1kNS1hYWEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NzcwMjc4MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZDUtYWFhLzE1OTE2ODM0ODc3MDI3ODIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYWFhL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQNjloSWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWFhYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzAyNzgyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1hYWEvMTU5MTY4MzQ4NzcwMjc4Mi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWFhYS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUDY5aEllTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "bc5f7d5266a530bb", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-md5-bbb\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6ImFmcXJZbWcxQXBWVkRlZlZoN3d5UFE9PSIsIm5hbWUiOiJibG9iLWZvci1tZDUtYmJiIn0K", "Z29vZGJ5ZQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2786" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Etag": [ "CILViIeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkwYiAwTRBwAag_3b-JFFLxsAcXtQhlNVKrix0pfRdtSRdxqMX4BFYd3bV1VGnGNNhT6Rbv_CHj17_M5CMuuKw" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWJiYi8xNTkxNjgzNDg3NzcxMjY2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1iYmIiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYmJiP2dlbmVyYXRpb249MTU5MTY4MzQ4Nzc3MTI2NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWQ1LWJiYiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4Nzc3MTI2NiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjciLCJtZDVIYXNoIjoiYWZxclltZzFBcFZWRGVmVmg3d3lQUT09IiwiY3JjMzJjIjoieGxkMnNnPT0iLCJldGFnIjoiQ0lMVmlJZUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43NzFaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDcuNzcxWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43NzFaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWJiYiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzcxMjY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1iYmIvMTU5MTY4MzQ4Nzc3MTI2Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWJiYi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSUxWaUllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWJiYiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzcxMjY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1iYmIvMTU5MTY4MzQ4Nzc3MTI2Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1iYmIvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSUxWaUllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1kNS1iYmIiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4Nzc3MTI2NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZDUtYmJiLzE1OTE2ODM0ODc3NzEyNjYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYmJiL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNJTFZpSWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWJiYiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzcxMjY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1iYmIvMTU5MTY4MzQ4Nzc3MTI2Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWJiYi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSUxWaUllTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "09e015ec3c34f4cc", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-md5-aaa?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2786" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Etag": [ "CP69hIeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnQQ8kAhSp-wfjndvoPoRRw_73l6cUAPEKEY399JQaA5tKJsnYMH3CNBvNo75CnjGBUSWCQs0S1JQorRd3vZBM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWFhYS8xNTkxNjgzNDg3NzAyNzgyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1hYWEiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYWFhP2dlbmVyYXRpb249MTU5MTY4MzQ4NzcwMjc4MiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWQ1LWFhYSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NzcwMjc4MiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjUiLCJtZDVIYXNoIjoiWFVGQUtyeExLbmE1Y1oyUkVCZkZrZz09IiwiY3JjMzJjIjoibW5HN1RBPT0iLCJldGFnIjoiQ1A2OWhJZUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43MDJaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDcuNzAyWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43MDJaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWFhYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzAyNzgyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1hYWEvMTU5MTY4MzQ4NzcwMjc4Mi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWFhYS9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUDY5aEllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWFhYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzAyNzgyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1hYWEvMTU5MTY4MzQ4NzcwMjc4Mi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1hYWEvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDUDY5aEllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1kNS1hYWEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NzcwMjc4MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZDUtYWFhLzE1OTE2ODM0ODc3MDI3ODIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYWFhL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNQNjloSWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWFhYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzAyNzgyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1hYWEvMTU5MTY4MzQ4NzcwMjc4Mi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWFhYS9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDUDY5aEllTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "317e96340654482a", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-md5-bbb?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2786" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Etag": [ "CILViIeL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkfX7rIvazYHJHx-UPRwfANLlH4k8mXU3iafXqm3NTTRpZpf8Phk4XE8Fa7mRfTjxuykew4k3OvlkQqiVXVi7Y" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWJiYi8xNTkxNjgzNDg3NzcxMjY2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1iYmIiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYmJiP2dlbmVyYXRpb249MTU5MTY4MzQ4Nzc3MTI2NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWQ1LWJiYiIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4Nzc3MTI2NiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjciLCJtZDVIYXNoIjoiYWZxclltZzFBcFZWRGVmVmg3d3lQUT09IiwiY3JjMzJjIjoieGxkMnNnPT0iLCJldGFnIjoiQ0lMVmlJZUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43NzFaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDcuNzcxWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43NzFaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWJiYiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzcxMjY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1iYmIvMTU5MTY4MzQ4Nzc3MTI2Ni9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWJiYi9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSUxWaUllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWJiYiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzcxMjY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1iYmIvMTU5MTY4MzQ4Nzc3MTI2Ni9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1iYmIvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSUxWaUllTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1kNS1iYmIiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4Nzc3MTI2NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZDUtYmJiLzE1OTE2ODM0ODc3NzEyNjYvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYmJiL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNJTFZpSWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWJiYiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzcxMjY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1iYmIvMTU5MTY4MzQ4Nzc3MTI2Ni91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWJiYi9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSUxWaUllTDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "3c11a749b571dba9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026delimiter=\u0026maxResults=1000\u0026pageToken=\u0026prefix=blob-for-md5-\u0026prettyPrint=false\u0026projection=full\u0026versions=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "5610" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnxHOxdjBjaIfwOGLt5a3fF0G2RI5K2YfYE3Kx0fHg1trbqbURSJbIWe3M6rVbRN-H1BWlozy_6d7uWGlTdNXM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3RzIiwiaXRlbXMiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZDUtYWFhLzE1OTE2ODM0ODc3MDI3ODIiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWFhYSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1hYWE/Z2VuZXJhdGlvbj0xNTkxNjgzNDg3NzAyNzgyJmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1tZDUtYWFhIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzAyNzgyIiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNSIsIm1kNUhhc2giOiJYVUZBS3J4TEtuYTVjWjJSRUJmRmtnPT0iLCJjcmMzMmMiOiJtbkc3VEE9PSIsImV0YWciOiJDUDY5aEllTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA3LjcwMloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43MDJaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA3LjcwMloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZDUtYWFhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODc3MDI3ODIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWFhYS8xNTkxNjgzNDg3NzAyNzgyL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYWFhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQNjloSWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZDUtYWFhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODc3MDI3ODIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWFhYS8xNTkxNjgzNDg3NzAyNzgyL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWFhYS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQNjloSWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWFhYSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzAyNzgyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1hYWEvMTU5MTY4MzQ4NzcwMjc4Mi9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1hYWEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1A2OWhJZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZDUtYWFhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODc3MDI3ODIiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWFhYS8xNTkxNjgzNDg3NzAyNzgyL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYWFhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNQNjloSWVMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZDUtYmJiLzE1OTE2ODM0ODc3NzEyNjYiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWJiYiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1iYmI/Z2VuZXJhdGlvbj0xNTkxNjgzNDg3NzcxMjY2JmFsdD1tZWRpYSIsIm5hbWUiOiJibG9iLWZvci1tZDUtYmJiIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzcxMjY2IiwibWV0YWdlbmVyYXRpb24iOiIxIiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNyIsIm1kNUhhc2giOiJhZnFyWW1nMUFwVlZEZWZWaDd3eVBRPT0iLCJjcmMzMmMiOiJ4bGQyc2c9PSIsImV0YWciOiJDSUxWaUllTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA3Ljc3MVoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODowNy43NzFaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA3Ljc3MVoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZDUtYmJiIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODc3NzEyNjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWJiYi8xNTkxNjgzNDg3NzcxMjY2L3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYmJiL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJTFZpSWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZDUtYmJiIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODc3NzEyNjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWJiYi8xNTkxNjgzNDg3NzcxMjY2L3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWQ1LWJiYi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJTFZpSWVMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWQ1LWJiYiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3NzcxMjY2IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1kNS1iYmIvMTU5MTY4MzQ4Nzc3MTI2Ni9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1kNS1iYmIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0lMVmlJZUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZDUtYmJiIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODc3NzEyNjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWQ1LWJiYi8xNTkxNjgzNDg3NzcxMjY2L3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZDUtYmJiL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNJTFZpSWVMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fV19" } }, { "ID": "8a3ea67dc9c9dd57", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-md5-bbb?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmW_28-Ri2M6fN9wXMC71cCK0zPtrrQl-dB_vtDMu2iIG6UuXwzxjrg8FAZKN2pWgqFwZmf52JR_dD4XCHmSyA" ] }, "Body": "" } }, { "ID": "d7363f48a08775fe", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-md5-aaa?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:08 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk7QQvvcSAwoJe-cnQYaIjdCMXiBFWgdRAcZRY181T45yRYTJu02_Rqcdb2xl6-y73XevODi9MuJBKJlV3x0S8" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata/000077500000000000000000000000001367004507500251255ustar00rootroot00000000000000duplicate_case-insensitive_key_fails.replay000066400000000000000000000013201367004507500356110ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSCeCOhEA/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": null }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata/empty.replay000066400000000000000000000343111367004507500275030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCdML3Okf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "669e4ac9430d6027", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-metadata\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm5hbWUiOiJibG9iLWZvci1tZXRhZGF0YSJ9Cg==", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2802" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Etag": [ "CK7wnIaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkOqALlUQhx1AdnAL4H637GuWYtsBEVcG-ABMZ5-X00iOnA9YxC3TEEZCGNlzlfBLvWPxf7n72DssdpCma_BVw" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjAwNTI5NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4NjAwNTI5NCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYwMDUyOTQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLN3duSWFMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuMDA1WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA2LjAwNVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuMDA1WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1ldGFkYXRhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYwMDUyOTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjAwNTI5NC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0s3d25JYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1ldGFkYXRhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYwMDUyOTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjAwNTI5NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0s3d25JYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2MDA1Mjk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODYwMDUyOTQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSzd3bklhTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1ldGFkYXRhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYwMDUyOTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjAwNTI5NC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0s3d25JYUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "a8245d6d4fb673c8", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2802" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Etag": [ "CK7wnIaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmJiG3IU6wERMBiREfRjzoSE7eWcRZ4XyNlOhiSAqd-v9G3XPbZ8ktdvqRv0YcFe6_g5WS2xTf3Ei7jSCCJCrQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjAwNTI5NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4NjAwNTI5NCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYwMDUyOTQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNLN3duSWFMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuMDA1WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA2LjAwNVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuMDA1WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1ldGFkYXRhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYwMDUyOTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjAwNTI5NC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0s3d25JYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1ldGFkYXRhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYwMDUyOTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjAwNTI5NC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0s3d25JYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2MDA1Mjk0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODYwMDUyOTQvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSzd3bklhTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLW1ldGFkYXRhIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYwMDUyOTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjAwNTI5NC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0s3d25JYUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "578f2f360c7990fa", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnT8kgDM_ekzjUeVZhM9pAPzHS7sMtyDFwiJUQDJ2Er5nTaf8oX3yZE0XaD26xNUNjrGP7M9s7AjKDxKsRomxM" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata/empty_key_fails.replay000066400000000000000000000013201367004507500315230ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCeCNsw7f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": null }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata/non-utf8_metadata_key.replay000066400000000000000000000013201367004507500325250ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCfHsmLd/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": null }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata/non-utf8_metadata_value.replay000066400000000000000000000013201367004507500330510ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCfHtbd4/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": null }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata/valid_metadata.replay000066400000000000000000000347311367004507500313120ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCeCPN2BP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "0acfca502f9f5cde", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-metadata\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm1ldGFkYXRhIjp7ImtleV9hIjoidmFsdWUtYSIsImtleV9iIjoidmFsdWUtYiIsImtleV9jIjoidkFsVWUtYyJ9LCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2869" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Etag": [ "CIvIsYaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkfyQC8vtGVIkKUtXYwDtGThQgcpzAhBovfNMySzYzTt4lR0CFB48JenmvmxuU85WP_ZWrpxj-FXweJ-VtQIBc" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjM0NDIwMyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4NjM0NDIwMyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYzNDQyMDMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNJdklzWWFMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuMzQzWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA2LjM0M1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuMzQzWiIsIm1ldGFkYXRhIjp7ImtleV9hIjoidmFsdWUtYSIsImtleV9iIjoidmFsdWUtYiIsImtleV9jIjoidkFsVWUtYyJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2MzQ0MjAzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODYzNDQyMDMvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJdklzWWFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2MzQ0MjAzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODYzNDQyMDMvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJdklzWWFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NjM0NDIwMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZXRhZGF0YS8xNTkxNjgzNDg2MzQ0MjAzL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0l2SXNZYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2MzQ0MjAzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODYzNDQyMDMvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNJdklzWWFMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "5d326c5b9402917e", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2869" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Etag": [ "CIvIsYaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUllwFO9bj4ix1O21Oz_5X1pOQg2SJNR_0dlUtb6FHMcn44mSYLvCo7YUdls0M5gKJ2rec1o8p-eFmAO6V3WN84" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjM0NDIwMyIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4NjM0NDIwMyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODYzNDQyMDMiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNJdklzWWFMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuMzQzWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA2LjM0M1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuMzQzWiIsIm1ldGFkYXRhIjp7ImtleV9hIjoidmFsdWUtYSIsImtleV9iIjoidmFsdWUtYiIsImtleV9jIjoidkFsVWUtYyJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2MzQ0MjAzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODYzNDQyMDMvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJdklzWWFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2MzQ0MjAzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODYzNDQyMDMvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNJdklzWWFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NjM0NDIwMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZXRhZGF0YS8xNTkxNjgzNDg2MzQ0MjAzL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0l2SXNZYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2MzQ0MjAzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODYzNDQyMDMvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNJdklzWWFMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "2829b1a7294e0532", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn_Sl3XlL0ckA96MLnIlEJzI6ojq7C1UhjV1vUSArSMjyZkyzBOQSZx3maG3v_RZVxHYPwWXBGluIHRaR0DX6Q" ] }, "Body": "" } } ] }valid_metadata_with_content_type.replay000066400000000000000000000343651367004507500350640ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSCeMUizTf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "03ff14da19732a83", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-metadata\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluIiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2812" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Etag": [ "CPKh2YaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmfS_WUFxUiQ2f6QTV-9abM21U6qtqKrs6H_2N42OEDWCDmXqICUrpEelUsemh2Hm5dBK1FIrO-VG16hz7bnOI" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4Njk5NDY3NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4Njk5NDY3NCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODY5OTQ2NzQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW4iLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQS2gyWWFMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuOTk0WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA2Ljk5NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuOTk0WiIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2OTk0Njc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY5OTQ2NzQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQS2gyWWFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2OTk0Njc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY5OTQ2NzQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQS2gyWWFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4Njk5NDY3NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZXRhZGF0YS8xNTkxNjgzNDg2OTk0Njc0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1BLaDJZYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2OTk0Njc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY5OTQ2NzQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNQS2gyWWFMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "81d528236b3f9a0f", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2812" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Etag": [ "CPKh2YaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnR8aekuQRU05IRAeoXAG2ZX3NkYlweQeWEQoGeOmRERQ95Cnn2JN9M-XfurtPt8PoCE1tBmoZNOTqgRNKPLxk" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4Njk5NDY3NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4Njk5NDY3NCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODY5OTQ2NzQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW4iLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNQS2gyWWFMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuOTk0WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA2Ljk5NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuOTk0WiIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2OTk0Njc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY5OTQ2NzQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQS2gyWWFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2OTk0Njc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY5OTQ2NzQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNQS2gyWWFMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4Njk5NDY3NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZXRhZGF0YS8xNTkxNjgzNDg2OTk0Njc0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ1BLaDJZYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2OTk0Njc0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY5OTQ2NzQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNQS2gyWWFMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "9225181c056e4c02", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkYoRVIlHEZGo_0krZ47M967vVzweIRhJEoerSfXbg5XA07GF1gAbwZf7j-Ylzs1aviGNR8sOgz0b6ty8OtEg0" ] }, "Body": "" } } ] }valid_metadata_with_empty_body.replay000066400000000000000000000344611367004507500345210ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSCeHY/lU/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "a4f616d158cbe19b", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-metadata\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEifQo=", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2827" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Etag": [ "COyvxoaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlT5t91A7iozhBf1V_IQ4mviGvFNs2wz4phdBNHEZi1F45iBAC1sl3gWIsiqY0yREEq-GR1eriswhjODkhkxZo" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjY4NTE2NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4NjY4NTE2NCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODY2ODUxNjQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNPeXZ4b2FMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuNjg0WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA2LjY4NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuNjg0WiIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2Njg1MTY0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY2ODUxNjQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPeXZ4b2FMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2Njg1MTY0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY2ODUxNjQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPeXZ4b2FMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NjY4NTE2NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZXRhZGF0YS8xNTkxNjgzNDg2Njg1MTY0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ095dnhvYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2Njg1MTY0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY2ODUxNjQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNPeXZ4b2FMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "3823813647fff05f", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2827" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Etag": [ "COyvxoaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmqd-lUUfEbs8RTpm0Itga7CUHoH-hPmRX1xh6pIpkJAkzh2_Q3Eu1tovmuAUjx0fq2Saa0vzWgNSHF2QG9O1s" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NjY4NTE2NCIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4NjY4NTE2NCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODY2ODUxNjQiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNPeXZ4b2FMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuNjg0WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA2LjY4NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDYuNjg0WiIsIm1ldGFkYXRhIjp7ImZvbyI6ImJhciJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2Njg1MTY0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY2ODUxNjQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPeXZ4b2FMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2Njg1MTY0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY2ODUxNjQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNPeXZ4b2FMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NjY4NTE2NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZXRhZGF0YS8xNTkxNjgzNDg2Njg1MTY0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ095dnhvYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg2Njg1MTY0IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODY2ODUxNjQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNPeXZ4b2FMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "ab0ec7bc42de5b4c", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:06 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmUhKp45XQAies-FD88M3iGWOhsjjMKoXkIR37w9IJ2NlQC1tZL9WCCSbsEH3IDkqxZkKAym9Lo6fxKTVRRgig" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestMetadata/weird_metadata_keys.replay000066400000000000000000000432551367004507500323610ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCfCMydv/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "9e09ef2c124458b2", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-metadata\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsIm1ldGFkYXRhIjp7Ilx1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1x1MDAwOFx0XG5cdTAwMGJcdTAwMGNcclx1MDAwZVx1MDAwZiI6Ilx1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1x1MDAwOFx0XG5cdTAwMGJcdTAwMGNcclx1MDAwZVx1MDAwZiIsIlx1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiI6Ilx1MDAxMFx1MDAxMVx1MDAxMlx1MDAxM1x1MDAxNFx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFx1MDAxOVx1MDAxYVx1MDAxYlx1MDAxY1x1MDAxZFx1MDAxZVx1MDAxZiIsIiAhXCIjJCVcdTAwMjYnKCkqKywtLi8iOiIgIVwiIyQlXHUwMDI2JygpKissLS4vIiwiLi4vZm9vLy4uL2Jhci8uLi8uLi9iYXouLi8iOiIuLi9mb28vLi4vYmFyLy4uLy4uL2Jhei4uLyIsIi4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCI6Ii4uXFxmb29cXC4uXFxiYXJcXC4uXFwuLlxcYmF6Li5cXCIsIi4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IjoiLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCIxMjM0NSI6IjEyMzQ1IiwiOjtcdTAwM2M9XHUwMDNlPyI6Ijo7XHUwMDNjPVx1MDAzZT8iLCJAIjoiQCIsIltcXF1eXyI6IltcXF1eXyIsImAiOiJgIiwiZm9vIGJhciBiYXoiOiJmb28gYmFyIGJheiIsImZvb1wiYmFyXCJiYXoiOiJmb29cImJhclwiYmF6IiwiZm9vLy9iYXIvLy9iYXoiOiJmb28vL2Jhci8vL2JheiIsImZvby9iYXIvYmF6IjoiZm9vL2Jhci9iYXoiLCJmb29cXGJhclxcYmF6IjoiZm9vXFxiYXJcXGJheiIsInt8fX5/Ijoie3x9fn8iLCLimLrimLrimLoiOiLimLrimLrimLoifSwibmFtZSI6ImJsb2ItZm9yLW1ldGFkYXRhIn0K", "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "3685" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Etag": [ "CNeS7oaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnerH__PdnVGuhXarBt1nHOudKBqMHf4QJmxIU_OgXLwwahJckEmRDeeIovQg5pyyWNpLdfLOS4bi8Dq7r1DuQ" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NzMzNjc5MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4NzMzNjc5MSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODczMzY3OTEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOZVM3b2FMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDcuMzM2WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA3LjMzNloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDcuMzM2WiIsIm1ldGFkYXRhIjp7IiAhXCIjJCUmJygpKissLS4vIjoiICFcIiMkJSYnKCkqKywtLi8iLCI6O1x1MDAzYz1cdTAwM2U/IjoiOjtcdTAwM2M9XHUwMDNlPyIsIi4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IjoiLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiOiJcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCIuLi9mb28vLi4vYmFyLy4uLy4uL2Jhei4uLyI6Ii4uL2Zvby8uLi9iYXIvLi4vLi4vYmF6Li4vIiwiW1xcXV5fIjoiW1xcXV5fIiwiQCI6IkAiLCLimLrimLrimLoiOiLimLrimLrimLoiLCJ7fH1+XHUwMDdmIjoie3x9flx1MDA3ZiIsImZvbyBiYXIgYmF6IjoiZm9vIGJhciBiYXoiLCJmb28vYmFyL2JheiI6ImZvby9iYXIvYmF6IiwiZm9vLy9iYXIvLy9iYXoiOiJmb28vL2Jhci8vL2JheiIsIjEyMzQ1IjoiMTIzNDUiLCIuLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwiOiIuLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwiLCJgIjoiYCIsIlx1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRcblx1MDAwYlxmXHJcdTAwMGVcdTAwMGYiOiJcdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0XG5cdTAwMGJcZlxyXHUwMDBlXHUwMDBmIiwiZm9vXCJiYXJcImJheiI6ImZvb1wiYmFyXCJiYXoiLCJmb29cXGJhclxcYmF6IjoiZm9vXFxiYXJcXGJheiJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3MzM2NzkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODczMzY3OTEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOZVM3b2FMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3MzM2NzkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODczMzY3OTEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOZVM3b2FMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NzMzNjc5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZXRhZGF0YS8xNTkxNjgzNDg3MzM2NzkxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ05lUzdvYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3MzM2NzkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODczMzY3OTEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNOZVM3b2FMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "d596d9f5bfbe520c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "3685" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Etag": [ "CNeS7oaL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlugbBR31AFO9cy5EtX3mU6EzpFGcbnyX-PVRr-NFkgz23hwBN-I8Awy72o815xHaO3pfhBUhk1E-ncGp_p0Hg" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItbWV0YWRhdGEvMTU5MTY4MzQ4NzMzNjc5MSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YSIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhP2dlbmVyYXRpb249MTU5MTY4MzQ4NzMzNjc5MSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM0ODczMzY3OTEiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiI1IiwibWQ1SGFzaCI6IlhVRkFLcnhMS25hNWNaMlJFQmZGa2c9PSIsImNyYzMyYyI6Im1uRzdUQT09IiwiZXRhZyI6IkNOZVM3b2FMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDcuMzM2WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjA3LjMzNloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MDcuMzM2WiIsIm1ldGFkYXRhIjp7IiAhXCIjJCUmJygpKissLS4vIjoiICFcIiMkJSYnKCkqKywtLi8iLCI6O1x1MDAzYz1cdTAwM2U/IjoiOjtcdTAwM2M9XHUwMDNlPyIsIi4uXFxmb29cXFxcYmFyXFxcXFxcYmF6IjoiLi5cXGZvb1xcXFxiYXJcXFxcXFxiYXoiLCJcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiOiJcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMWFcdTAwMWJcdTAwMWNcdTAwMWRcdTAwMWVcdTAwMWYiLCIuLi9mb28vLi4vYmFyLy4uLy4uL2Jhei4uLyI6Ii4uL2Zvby8uLi9iYXIvLi4vLi4vYmF6Li4vIiwiW1xcXV5fIjoiW1xcXV5fIiwiQCI6IkAiLCLimLrimLrimLoiOiLimLrimLrimLoiLCJ7fH1+XHUwMDdmIjoie3x9flx1MDA3ZiIsImZvbyBiYXIgYmF6IjoiZm9vIGJhciBiYXoiLCJmb28vYmFyL2JheiI6ImZvby9iYXIvYmF6IiwiZm9vLy9iYXIvLy9iYXoiOiJmb28vL2Jhci8vL2JheiIsIjEyMzQ1IjoiMTIzNDUiLCIuLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwiOiIuLlxcZm9vXFwuLlxcYmFyXFwuLlxcLi5cXGJhei4uXFwiLCJgIjoiYCIsIlx1MDAwMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlx1MDAwN1xiXHRcblx1MDAwYlxmXHJcdTAwMGVcdTAwMGYiOiJcdTAwMDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcdTAwMDdcYlx0XG5cdTAwMGJcZlxyXHUwMDBlXHUwMDBmIiwiZm9vXCJiYXJcImJheiI6ImZvb1wiYmFyXCJiYXoiLCJmb29cXGJhclxcYmF6IjoiZm9vXFxiYXJcXGJheiJ9LCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3MzM2NzkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODczMzY3OTEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOZVM3b2FMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3MzM2NzkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODczMzY3OTEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1tZXRhZGF0YS9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNOZVM3b2FMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItbWV0YWRhdGEiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzQ4NzMzNjc5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1tZXRhZGF0YS8xNTkxNjgzNDg3MzM2NzkxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItbWV0YWRhdGEvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ05lUzdvYUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1tZXRhZGF0YSIsImdlbmVyYXRpb24iOiIxNTkxNjgzNDg3MzM2NzkxIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLW1ldGFkYXRhLzE1OTE2ODM0ODczMzY3OTEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLW1ldGFkYXRhL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNOZVM3b2FMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "caafa3945302c85c", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-metadata?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:07 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmBA4lPn00hqapUZBW9wRlenoJrQSAqLRezv8rG55uR7bE8t4m3Gi7xqne9h49edcHvv_rfNiHfUIZgTQDMrqM" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestRead/000077500000000000000000000000001367004507500242605ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestRead/length_0_read.replay000066400000000000000000000256401367004507500302000ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSEIK1zHq/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "3fa388f1c8de8485", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsIm5hbWUiOiJibG9iLWZvci1yZWFkaW5nIn0K", "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:52 GMT" ], "Etag": [ "CMG7mrmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkVq3VPOfOSphb5aq8Nv-9-BqWxQlx4pk9vipP1tvPvhBvGrwwSWkChKZFyLMAY1hfX1jfmTz8XOY-gEpL1dvM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTkyOTIwNTEzIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU5MjkyMDUxMyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MjkyMDUxMyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjI3IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsImNyYzMyYyI6Ik1vVm02UT09IiwiZXRhZyI6IkNNRzdtcm1MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTIuOTIwWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjUyLjkyMFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTIuOTIwWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MjkyMDUxMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTI5MjA1MTMvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01HN21ybUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MjkyMDUxMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTI5MjA1MTMvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01HN21ybUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1OTI5MjA1MTMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTkyOTIwNTEzL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTUc3bXJtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MjkyMDUxMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTI5MjA1MTMvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ01HN21ybUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "99de5a6eed75235b", "Request": { "Method": "HEAD", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:52 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:52 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683592920513" ], "X-Goog-Hash": [ "crc32c=MoVm6Q==", "md5=PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "27" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlEHJ4hQuqzIEgAd9nlXteASo17w1nD5Lgxhq5sCi2YNLRZsZtVxYbkg_h5Wxr1TCgQmvwHAiN0qlAhUHpx2pM" ] }, "Body": "" } }, { "ID": "f3d19410f10de90e", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmZ-cWVcFqnjcdVQYDhBpAt-HfxZ8CQ1mMAvjZHjJW6lD8DSM9TebRrxRhsh7lusJufKwAV2sji0sRxcnjAf68" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestRead/negative_offset_fails.replay000066400000000000000000000013201367004507500320200ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSEIK0+pyP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": null }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestRead/read_a_part_in_middle.replay000066400000000000000000000260511367004507500317470ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSEJGxHeqP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "38f19d892796042f", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsIm5hbWUiOiJibG9iLWZvci1yZWFkaW5nIn0K", "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Etag": [ "CMmeyLmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkjqplsM0tH5-UKCqdzbzx5IZ-OpBWta6FJMsLJ7q9z3Yin6w0XVNTM-nrKPSiaj2Lly5InmfuquEFGc_YwDgM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTkzNjcwNDczIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU5MzY3MDQ3MyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MzY3MDQ3MyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjI3IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsImNyYzMyYyI6Ik1vVm02UT09IiwiZXRhZyI6IkNNbWV5TG1MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTMuNjcwWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjUzLjY3MFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTMuNjcwWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MzY3MDQ3MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTM2NzA0NzMvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01tZXlMbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MzY3MDQ3MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTM2NzA0NzMvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01tZXlMbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1OTM2NzA0NzMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTkzNjcwNDczL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTW1leUxtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MzY3MDQ3MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTM2NzA0NzMvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ01tZXlMbUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "e70e3cf7e03cc87b", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Range": [ "bytes=10-14" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "5" ], "Content-Range": [ "bytes 10-14/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683593670473" ], "X-Goog-Hash": [ "crc32c=MoVm6Q==", "md5=PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "27" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlxi96nBRcctG3CHf-TC_x6Tuuw2R46ymVwjVsX4NkNjlIJxZfEQbEgGrESAnKl1QXgZVrpDE2O4N0NEYZtFQA" ] }, "Body": "a2xtbm8=" } }, { "ID": "d3e834fd50537f08", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk8h4tTN-XLUKjP9XVJF_lz6fMCXSgQ6A5wXFjoHueqYLZo1K4a-X-47xgmovrwcDiWsaghcIzm1MBLK9_SRis" ] }, "Body": "" } } ] }read_from_positive_offset_to_end.replay000066400000000000000000000260701367004507500342020ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestRead{ "Initial": "AQAAAA7WcSEJA3/qgf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "d4f4b82b2d9c1bd1", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsIm5hbWUiOiJibG9iLWZvci1yZWFkaW5nIn0K", "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Etag": [ "CM79rrmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlO8kcKe1R1bkWu749qL35RWD7hVCj2nrgr4L52SwdBLw0eY03DSKYK8p5Jz4CVNkBqgYFXfe4croG_Cn-MO3M" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTkzMjU2NjU0Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU5MzI1NjY1NCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MzI1NjY1NCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjI3IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsImNyYzMyYyI6Ik1vVm02UT09IiwiZXRhZyI6IkNNNzlycm1MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTMuMjU2WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjUzLjI1NloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTMuMjU2WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MzI1NjY1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTMyNTY2NTQvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ003OXJybUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MzI1NjY1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTMyNTY2NTQvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ003OXJybUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1OTMyNTY2NTQiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTkzMjU2NjU0L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTTc5cnJtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MzI1NjY1NCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTMyNTY2NTQvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ003OXJybUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "2752ad03953e49c9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Range": [ "bytes=10-" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "17" ], "Content-Range": [ "bytes 10-26/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683593256654" ], "X-Goog-Hash": [ "crc32c=MoVm6Q==", "md5=PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "27" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUki4ds3kRdfiIxXCNoiOdNAK2Ulfy9-6IGFdkB0YwxMLZLdxBrs1-V5HNWEcYc6IwJfduE95msQh_sl-OF6Bas" ] }, "Body": "a2xtbm9wcXVyc3R1dnd4eXo=" } }, { "ID": "c0e217c9f706e145", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:53 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkVCmXWhVsEHqWZXO81SHtJvtJxGKeAkaLYV3VnT_NZvDG0nSIU1XkloHvlmTPC0saPbgrOjHxF9-lu3vX62nE" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestRead/read_in_full.replay000066400000000000000000000260021367004507500301210ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSEJMeINtP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "299c0d9b0e5ee981", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsIm5hbWUiOiJibG9iLWZvci1yZWFkaW5nIn0K", "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:54 GMT" ], "Etag": [ "CPvX3bmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnTY070G-UOu7_6tQAkllpBHlBhhkZZ4VA6aqHM9CFc3CLtYHOQ_pPmR9yBDLGM0V274SxxuR_-UP6mkQczXaU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTk0MDIxODgzIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU5NDAyMTg4MyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5NDAyMTg4MyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjI3IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsImNyYzMyYyI6Ik1vVm02UT09IiwiZXRhZyI6IkNQdlgzYm1MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTQuMDIxWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjU0LjAyMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTQuMDIxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5NDAyMTg4MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTQwMjE4ODMvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1B2WDNibUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5NDAyMTg4MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTQwMjE4ODMvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1B2WDNibUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1OTQwMjE4ODMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTk0MDIxODgzL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUHZYM2JtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5NDAyMTg4MyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTQwMjE4ODMvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1B2WDNibUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "0e1f6cd757194581", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:54 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:54 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683594021883" ], "X-Goog-Hash": [ "crc32c=MoVm6Q==", "md5=PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "27" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl70RJR721msvoL96vEqkDjIyyHyzUzMFjNGZrlrybt0lhCLSlNJ0gg_pf6Cqj0BdjKMBd56780C08vXKFHaVw" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "5dacb78260483cf5", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:54 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnCUDxSUxIfuGpAY8GPu9I_SWCCYOx2M0nE9LJmPQORUt2Vs2-2wJq1Ec004MunWQm0Bdjr5Gi93GvNNzfylsc" ] }, "Body": "" } } ] }read_in_full_with_negative_length_not_-1.replay000066400000000000000000000260021367004507500354750ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestRead{ "Initial": "AQAAAA7WcSEKDDPOlP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "008eee4250fb9e21", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsIm5hbWUiOiJibG9iLWZvci1yZWFkaW5nIn0K", "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:54 GMT" ], "Etag": [ "CJHr9LmL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnVgwgjlDs-GtCKyu2YrA3Jlqi55Z2XsjIKqLLOyL2RHWGI5HttY1BC0K3ejIiwwU8cgxQgwwWWOiVD2d8RMgY" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTk0NDAxMTY5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU5NDQwMTE2OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5NDQwMTE2OSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjI3IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsImNyYzMyYyI6Ik1vVm02UT09IiwiZXRhZyI6IkNKSHI5TG1MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTQuNDAwWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjU0LjQwMFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTQuNDAwWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5NDQwMTE2OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTQ0MDExNjkvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pIcjlMbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5NDQwMTE2OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTQ0MDExNjkvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pIcjlMbUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1OTQ0MDExNjkiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTk0NDAxMTY5L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSkhyOUxtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5NDQwMTE2OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTQ0MDExNjkvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pIcjlMbUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "6ca2f8a9f3cceba9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:54 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:54 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683594401169" ], "X-Goog-Hash": [ "crc32c=MoVm6Q==", "md5=PflsWr6X8pZ9OAEIcAMKXw==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "27" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnb_-JdJl2u4B5X0_IuLqWC7N1GNMrL1oP64Uo-ASd6p7R-YJZK9_c0VX3GNp2jAOXoGhTvRJE3TxaPdWXKh8Q" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "2d0f490781e48641", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:54 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn0Rt1YMjCQn4pbyC-Mo8Y0GtIC81UagBQRv2Y37xc4dhPJ4FNFR-Vvcj0qtSxp9ulJs37WCrQvyWd0V_bIYuo" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestRead/read_of_nonexistent_key_fails.replay000066400000000000000000000250731367004507500335700ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSEIA1E7wf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "c663e3e3fec82f25", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsIm5hbWUiOiJibG9iLWZvci1yZWFkaW5nIn0K", "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:52 GMT" ], "Etag": [ "CMGrg7mL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUk2go-mH0cYwJELs50IiO3JR9HinQEgroKXrddhCr3Mzu2XF1qPXZXhdLk0H3u1MRwwnTX6_QYghW1LNnVeRS8" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTkyNTQxNjMzIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU5MjU0MTYzMyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MjU0MTYzMyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjI3IiwibWQ1SGFzaCI6IlBmbHNXcjZYOHBaOU9BRUljQU1LWHc9PSIsImNyYzMyYyI6Ik1vVm02UT09IiwiZXRhZyI6IkNNR3JnN21MOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTIuNTQxWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjUyLjU0MVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6NTIuNTQxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MjU0MTYzMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTI1NDE2MzMvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01Hcmc3bUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MjU0MTYzMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTI1NDE2MzMvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01Hcmc3bUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1OTI1NDE2MzMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTkyNTQxNjMzL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTUdyZzdtTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU5MjU0MTYzMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1OTI1NDE2MzMvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ01Hcmc3bUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "005d32ce8354f448", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "206" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:52 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUl43W4FV29p6Ubys-rWTnQiaTsZsh-Zp3nKhWNdginsCMp7Erh23-QS4hzgJ6ahlmmu7UmbFM1i_RZXUDneoZs" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9rZXktZG9lcy1ub3QtZXhpc3Q8L0RldGFpbHM+PC9FcnJvcj4=" } }, { "ID": "1c33ac573ffff73e", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:52 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkc456qfy9z0gIvVSqutC_rUiOcFC5gng3dilMi0NNc0lu_V4PoKgIsg6cu3cUoGu52zjIGaGiDMyw9yFYBZYs" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestSignedURL.replay000066400000000000000000001077601367004507500264320ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCrBReBUP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "88567a7506c4d720", "Request": { "Method": "PUT", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Content-Length": [ "322" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:19 GMT" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlFyJX2-7-s0Nk7H9q2ix-_Dhi_R6pHsjcuBg2c5DVEdnR2VzrkIj7cZUQKnito-uMide5VaVrUN5q78U-XGoo" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5QVVQKCgoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "86e2c7ff8a62d144", "Request": { "Method": "PUT", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Content-Length": [ "322" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:19 GMT" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUkiaGJZgGt6W7LRLUn_9SYN6ZtOucyKJktiq_g0IEYi-YsgEfIJAPneo7PnyiLsHCWGDU1Km4XPYZI1j1T3y7k" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5QVVQKCgoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "a8ea29f104dd8d88", "Request": { "Method": "PUT", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Content-Length": [ "0" ], "Content-Type": [ "text/html; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "UploadServer" ], "Vary": [ "Origin" ], "X-Goog-Generation": [ "1591683499780967" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnVswgsMPwAKXpGOx6kILICfHze__FFwEB5Ct4btKCAlqqh-gQ_AKJqoMF4NLyt9s5lPVwXG_9RcR0fHAIDksc" ] }, "Body": "" } }, { "ID": "1877ed13e85698e6", "Request": { "Method": "PUT", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Content-Length": [ "346" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:20 GMT" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUndYPXabx67XFUMGHDzxNOSjdB8oV3CWC8hQDclkOpY9gBK2pV7oOdSMFg--7WY0B1rZMD96VJzN6DWGSUIapM" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5QVVQKCmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "d844578069bdbb49", "Request": { "Method": "PUT", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Content-Length": [ "322" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:20 GMT" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUkrTEnnn2Yaqpdnq5n9VdnHxgOUGLfABqLgHSle_cy7MyFwQJOAgNjoo3tEwuzXxMJNLG-6L4MR3j4axg5rcLc" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5QVVQKCgoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "ce3460b00b603072", "Request": { "Method": "PUT", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Content-Length": [ "0" ], "Content-Type": [ "text/html; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:20 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "UploadServer" ], "Vary": [ "Origin" ], "X-Goog-Generation": [ "1591683500567964" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmxSx-zW8zsS2sgsLtFn3LZkLuNYSpo0IPajy2XkxoSVCNwRmSi8dlRLXVsbc20deyVRf_JktYl8iDJNuTZ7fw" ] }, "Body": "" } }, { "ID": "38e5a0c97807c8ef", "Request": { "Method": "PUT", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Content-Length": [ "346" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:20 GMT" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUnwzRJj9IemqfI9AeLwidmB1HCixvXW-4czyRNImApbqaBnkd6O1M8E_mR4dYponWVhTlt54rDXQt3hF6Vnyzk" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5QVVQKCmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "c0bb77f29bd53a80", "Request": { "Method": "PUT", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Content-Length": [ "0" ], "Content-Type": [ "text/html; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:21 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "UploadServer" ], "Vary": [ "Origin" ], "X-Goog-Generation": [ "1591683501051636" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlDJjkTK2RW_Bz1pzJrdfqoQfnIqKo7ER6dgxX5ewzIStSsrdn2mH9zLZpS07ncj6LYUodzjElNe_zK5ssLhW0" ] }, "Body": "" } }, { "ID": "9c4b3b9c0dd6ab0e", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "322" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:21 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUnGSlcNUaPnX44qLsXohiJXWGU7PzXkHlwU7XgpVuUIs4_dIm7AS4L2w_P8UimAgKyZM-mSEL-beZSDGp7jR2M" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5HRVQKCgoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "3dcc9c9ed331332b", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "322" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:21 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUkSWZMZ4RJo4pztoQH2ewhUrb9Rc_3uvPVYH0PmA4U9s4JhY-3PtwJiEwQZeoYcD548DlWTCJ3hohL1Nd-VId8" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5HRVQKCgoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "f422e4ce52d2fbfb", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "223" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:22 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUk7lO3BN3clouGzKxLn07CNX3i6JvyWBV4tpTlprbITM61ctLat6qoky9flfxt3D99milEoIE_0Uf2SFpmtPfs" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+QWNjZXNzRGVuaWVkPC9Db2RlPjxNZXNzYWdlPkFjY2VzcyBkZW5pZWQuPC9NZXNzYWdlPjxEZXRhaWxzPkFub255bW91cyBjYWxsZXIgZG9lcyBub3QgaGF2ZSBzdG9yYWdlLm9iamVjdHMuZ2V0IGFjY2VzcyB0byB0aGUgR29vZ2xlIENsb3VkIFN0b3JhZ2Ugb2JqZWN0LjwvRGV0YWlscz48L0Vycm9yPg==" } }, { "ID": "571dddec80979f92", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "11" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:18:22 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:21 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683501051636" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnaWynUIo5nKJLmI0wHWSOmy5bL1rYtWR14bzcdsprjTDH1fiPeTElDEb6zQbcLppAPFr9xvBkVUmcx0zOYr78" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "973af33d9d0a86a6", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "325" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:22 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlfyorK3_Y3nT4POHYj_ePqetAwqNc7krW8yr1AVuWihgCDpHooTQgBQSXxwYvED3kx2cVeLRtuWO81Viai71k" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5ERUxFVEUKCgoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "39a7a6afdbf6d211", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "325" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:22 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUl3ygmf3nnUNz2MDCELTa2mNYRyBsjvDrm8Xld0bZJ6zf8b857ndi9I8JJA1-J9tYCWVnuuzRUHB-MOsS_p5SA" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+U2lnbmF0dXJlRG9lc05vdE1hdGNoPC9Db2RlPjxNZXNzYWdlPlRoZSByZXF1ZXN0IHNpZ25hdHVyZSB3ZSBjYWxjdWxhdGVkIGRvZXMgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgeW91IHByb3ZpZGVkLiBDaGVjayB5b3VyIEdvb2dsZSBzZWNyZXQga2V5IGFuZCBzaWduaW5nIG1ldGhvZC48L01lc3NhZ2U+PFN0cmluZ1RvU2lnbj5ERUxFVEUKCgoxNTkxNjg3MDk5Ci9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXNpZ25pbmc8L1N0cmluZ1RvU2lnbj48L0Vycm9yPg==" } }, { "ID": "864503765c214386", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkWuFAWw9qyjHGROPiAxmSXrD9wbW-xhf20r5B-WyuAvqPVAfkKq662DmNyEz2-VGgkJ-Z-2H_TYWZQCJO_bsE" ] }, "Body": "" } }, { "ID": "2e84115848ad9db5", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-signing?Expires=CLEARED\u0026GoogleAccessId=storage-updater%40go-cloud-test-216917.iam.gserviceaccount.com\u0026Signature=CLEARED", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "Go-http-client/1.1" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "204" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:23 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlhFrOuPc9SLqpGzzAqp5fY38UHv6maf7du3ssMBMYMn-zGz_FDiRPuuTg8eB7Fk40djLEPccmf1xg60ITSj8M" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1zaWduaW5nPC9EZXRhaWxzPjwvRXJyb3I+" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite/000077500000000000000000000000001367004507500244775ustar00rootroot00000000000000ContentType_is_discovered_if_not_provided.replay000066400000000000000000000667011367004507500362600ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSDtLgC96P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "09d05a8d1c98e827", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyJ9Cg==", "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2788" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Etag": [ "CKOMrKyL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlHY2OrMZvI-1wOqf8Hy9L8u6P58J7yoz7cAwYm0rBpNXu4WGWqbvbH2xxVmmyW5f7Y9OfZwMkS0XczVd0BIsU" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY1OTQ2NDAzIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2NTk0NjQwMyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NTk0NjQwMyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Iiwic3RvcmFnZUNsYXNzIjoiUkVHSU9OQUwiLCJzaXplIjoiNjM1NCIsIm1kNUhhc2giOiJEMnA4bi9QVDEzQzQ5L29ad3E0WjBBPT0iLCJjcmMzMmMiOiJ0ZHdyZ1E9PSIsImV0YWciOiJDS09Nckt5TDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjI1Ljk0NloiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxOToyNS45NDZaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjI1Ljk0NloiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1NjU5NDY0MDMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY1OTQ2NDAzL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT01yS3lMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1NjU5NDY0MDMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY1OTQ2NDAzL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNLT01yS3lMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY1OTQ2NDAzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NTk0NjQwMy9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ0tPTXJLeUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1NjU5NDY0MDMiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY1OTQ2NDAzL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNLT01yS3lMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fQ==" } }, { "ID": "0a25ee2b58238331", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "6354" ], "Content-Type": [ "text/html; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683565946403" ], "X-Goog-Hash": [ "crc32c=tdwrgQ==", "md5=D2p8n/PT13C49/oZwq4Z0A==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "6354" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkIc5xf9s63vWd5v8OQXOguuE1P4YDNytJSSTsVVAlh0A7Sopu6qbz8WojjCkeFbkBBN1AQzAAeGX9fExfV1UM" ] }, "Body": "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" } }, { "ID": "53adecd5f5b7d65b", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkX0vNK2UYFlc7sHTcJJMZ1THNh5RqhlF8IW8oHF6CMVHZ9SN9WsAdnkcwOtNlel_Bl8F_0VF-xsjPCrMj3SCQ" ] }, "Body": "" } } ] }Content_md5_did_not_match,_blob_existed.replay000066400000000000000000000257521367004507500355030ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSDvDMgztv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "474f7c767c8372e5", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6ImRIOUIvU2NQN0J1Q3ZnTU13YzFJQVE9PSIsIm5hbWUiOiJibG9iLWZvci1yZWFkaW5nIn0K", "ZXhpc3RpbmcgY29udGVudA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Etag": [ "CJrzhK2L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl5zfGMszdpzHV13FegVR1kOzoUplh-slVekiAnLOiEVEa5_AmBlpjOzGBM0ntVHydJT83wTHze7rl8aZlHQZA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY3NDAxMzcwIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2NzQwMTM3MCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NzQwMTM3MCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjE2IiwibWQ1SGFzaCI6ImRIOUIvU2NQN0J1Q3ZnTU13YzFJQVE9PSIsImNyYzMyYyI6Incvci9YQT09IiwiZXRhZyI6IkNKcnpoSzJMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjcuNDAxWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjI3LjQwMVoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjcuNDAxWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NzQwMTM3MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njc0MDEzNzAvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pyemhLMkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NzQwMTM3MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njc0MDEzNzAvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0pyemhLMkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1Njc0MDEzNzAiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY3NDAxMzcwL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDSnJ6aEsyTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NzQwMTM3MCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njc0MDEzNzAvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0pyemhLMkw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "d807a7456ccda08c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "16" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Etag": [ "\"747f41fd270fec1b82be030cc1cd4801\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683567401370" ], "X-Goog-Hash": [ "crc32c=w/r/XA==", "md5=dH9B/ScP7BuCvgMMwc1IAQ==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "16" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnaPUpqjNjktGIPeKMBK9VwJ9sjEZu5CaP4TCLPYP3L9N-GTCn_rmQfjqaitFMnrqgJTH6n2jHbu1bOMn8KqHw" ] }, "Body": "ZXhpc3RpbmcgY29udGVudA==" } }, { "ID": "fc0da8730d711b33", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkQiNeYBTxSuAB2M1oVWJ4jAYC4Ykh8vnOU51vw36RiAZwnaZDYq2KVnBB7S8x7QE0PPPIjD2_go35U5ZIujew" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite/Content_md5_did_not_match.replay000066400000000000000000000052611367004507500327540ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSDuOqsLfv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "5d73c315e9c6c3f9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "204" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlsUHtZTewc0dZBvdM08We6b6peU-XVE-ZP5txRoIozwuzEsmt-TUIjerg6oZDQcN6-RkMJFQlJMzBibfO1SPc" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nPC9EZXRhaWxzPjwvRXJyb3I+" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite/Content_md5_match.replay000066400000000000000000000257321367004507500312610ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSDuHwJm6/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "d50525591e960613", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsIm5hbWUiOiJibG9iLWZvci1yZWFkaW5nIn0K", "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Etag": [ "CMqU3qyL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmlplPEJJ5iFLaA-3mhfUhiNqD8Hn0ecFSyTHmdu84A7wc-co8ufvyFLxN79bTpS_ip9PyO41kJQjLX0golV9Y" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY2NzY2NjY2Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2Njc2NjY2NiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2Njc2NjY2NiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsImNyYzMyYyI6InlaUmxxZz09IiwiZXRhZyI6IkNNcVUzcXlMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjYuNzY2WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjI2Ljc2NloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjYuNzY2WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2Njc2NjY2NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjY3NjY2NjYvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01xVTNxeUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2Njc2NjY2NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjY3NjY2NjYvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01xVTNxeUw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1NjY3NjY2NjYiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY2NzY2NjY2L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTXFVM3F5TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2Njc2NjY2NiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjY3NjY2NjYvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ01xVTNxeUw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "76acfd450031a174", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683566766666" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkb6Xm8ap96OAE7kRXCkhsRv-BX3OlC-q1LFtlCtqKxQRU4HUxyOs0VhU510OBHgCYeSH6j0XvmrZMsLtHKcpM" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "c204ccd3155da01e", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmpqM6h0De2H1H5u-FbKM8ET0KdwfGdoaK5KQxZvKBrTPxXfCNmv-20v2ABLaefCVmU7kd1e1GXJdgW0l8qWEI" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite/a_large_jpg_file.replay000066400000000000000000003356551367004507500311670ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSDvOp2Wcv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "1a920ce930256a91", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2775" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:28 GMT" ], "Etag": [ "CN/ctK2L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkpCAsz4qHCc0yWngizW-CtkxyJjQ_UEIRPC0q6nzO5HhBo-vN7V7rQ85q0Q6HYR3w1tpiHL5-VzHQTxYLo69I" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY4MTg0OTI3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2ODE4NDkyNyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2ODE4NDkyNyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiaW1hZ2UvanBlZyIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjM4NDMwIiwibWQ1SGFzaCI6Ill0US9vZzV3djZIOXNpVVEwY0JnMGc9PSIsImNyYzMyYyI6IitEWE5MUT09IiwiZXRhZyI6IkNOL2N0SzJMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjguMTg0WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjI4LjE4NFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjguMTg0WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2ODE4NDkyNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjgxODQ5MjcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ04vY3RLMkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2ODE4NDkyNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjgxODQ5MjcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ04vY3RLMkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1NjgxODQ5MjciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY4MTg0OTI3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTi9jdEsyTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2ODE4NDkyNyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjgxODQ5MjcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ04vY3RLMkw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "dfb9102a315687bd", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:19:28 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:28 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683568184927" ], "X-Goog-Hash": [ "crc32c=+DXNLQ==", "md5=YtQ/og5wv6H9siUQ0cBg0g==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "38430" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm8nSVYB4xlTpRYWZSLhebDZG1v-WkcDykQLzpz_FEv8kbRdezyyHugDPTx2q0nseq95cz86qWI3WIIQyMwpNw" ] }, "Body": "/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAH0A+gDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKDRzQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFMkkSJS7sFUdSTQA+iq/wBth3Fd65xnGamV1YZByKAHUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAAGBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFNd1QEsQAOpNADqKwr3xhoVg+y41O2jbjgyDv0qXSfE+ka2hfT76GcA7TtbkH6UAbFFICD0NLQAUUUUAFFGRRQAUUmaTcPWgB1FN3j1FKWA7igAZgqknoK8H+InjWbVNZfSLB7zCtsWOA43sD349vf8ACvV/Getx6H4Wvb9tx2R4G3sTwDXm3wm8OQS2cmuXRWe6uJGdXcElBnpzQBg23w/8ZzWx1VdRe2ugQ8VqJTwPQt612HgDx3qt/q02haxAqXlumWIBBbnuO3avTFjQRYwOBXjscsQ+O935TNkxBWA4Gdo6468etAHtkbbkBp9RQf6sfSpaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAzzRRRQAUUUhIHU0ALRTd6+op2QaACiiigAooooAKKKSgBaKKKACiiigAooooAKKKKACkzzS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAjHCk+leGfFLx1Lcu+jaeWVt+C5yuSO3PHPrXtWoXAtrCaYnARCa+f/CsVpr/AMTrm4kh27GJH/TQjvQBteDPhLb3lrDqOuhppZIx+5YkY5zzg81ual8Jbe0/03wzdy6bfpkptfcjcdDnJ/KvTII0hhAHAAqG21S0unZIpkZkOGAPSgDzjw58R7iz1FNC8URi11PzCgbGFcdiPY9K9PhuEmQMjAgjNeY/GDwuuraL/adoyx31mCwbpuTuMiuK0r4u3dn4dWK2t/PvEUKzHO1T0+tAH0M0iqMkiqN7rVhYQmS5uooVHJLuAAK8bt9b8b+I51tSk1sHhwxQfu8nnduAz07Z61sxfDDU7u1SS91udpjy6uisufUZHB/GgDrbvx5pdtG0yTfaI1++0QyE6dfzFY//AAtrRxbzvtuGkjJxEqZLc4GCOOfrUtn8KdFifzLjzbgk5Ikbg57YHaujtPB+iWciywWECSKMbggzigDz+/8AjEpkENhp879N7MCpXjJ4I7fWs+38ZeM9TZpNP064G9SYy8W5Poc4A7cjNewLo1gq4FrCBnOAg61Zjto4wAqKAOmBQB5E918S4oTO0NvgA5QqWJ54IA6fmaW3uPiUbIl4UM8pUpkj5Fzzn3wf0r2DYuMYFARR2FAHjEuieP8AVdMeO+lhk8zG23lVQFI65I/+vUdnYfELSVjgiht4oUXhLeNNuc/d59QeuO1e17B6UFAe1AHkJ1P4kral5LW3B3bQvl7mJ9eD07Dp71xOneIbnS/HtzfavpzQXHypcm35AY45Oe2PSvpQxqR0FUP7HsvPkmFvGJJDl22DLfWgDldD+JWg6mgCzvC27afPQqAc9CwyM/jXaQXUU6bkdWHqDmuO8Q/DTStaVmiZ7Nnbe4twArtggMR689f8K4dPCPjvwlqAbR7yXUbJWBWIyhV285BDd/cUAe35FLXmWj/FKKG6+xeI7cabMuMlycZ98jjPNei2l9b30KTW0qyRsMqynINAFiiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkJAHNDMFUk14/8Svik2ku+j6Q2b8nYxGcqT6Y70AdX4z+I+l+E0WJmE94+QkKHOD746V5i+vfEfxvI0mnIdOt1YDumee2eTWt4E+Hd3qdxFrPibdNPnekbnOOc5P8AhXssNjDCiqiABemBQB4LeeGPiNpdp9rbV5rnaQzJFKxbaBzycelbPgv4k6hFd29lrMwlE+7bIy4KlTjHGc+tezmNSuCARXm/xA8HW0Wh3OraVFFb3to5vC2OHI5bd+FAHpEUgkjV1OQRmn1zHgjXBrfh2zuiyF3jBYIcgHvXT0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUCigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDm/HAu/8AhGLr7Jy+35lClsr36V4F4V1P+yvHscqPuieQq+8EHBPvX09KgkQowyCMGvCvif4Hk066XW9LgJgiO6ZUYIUHc5oA9vgkE1sD1BFeF+LdS1Dwd4s8+CSRoZpCxYrhR7H1r0jwf4lh1Tw/bzLICdoUgsD04NR+JfCFr4ihfdEjyEEpuJ2nPrigCDw74ms/F2nK6uCRw6MO/wBK85tLaDwf8UrnT57Um01Ah4eBjJI7exroPCngHWfC3irfAXksHHzlnGB9PU/hXoeueD9M8Q/ZpL2FvPt23wzRsVdD7EUAatlbxrEpRQBjjAq6BUdtCIIEjBJCgDJ6mpaACiiigAooooAKKKKACiiigAooooAKTaKWigDmPFnhKz1+xYmygmukH7vzRgH2J9K8ut18VfDAtcmyku9IL5ljik3LCM9VHX8694qOWFJkKOoKngg0AYnhrxXpvifTY72wuFkVuGXoynuCOxrf615l4h+H13pt1Jrng2b7Dfg7pLVR+5n9iOgPvT/C/wAUoL27Ok65bHS9WiKpJDKRhiRxtNAHpVFRxyrIqkHORUlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVa/keOxnaLmURsUGcZOOOaAPNfix4/Gh6c+l6dMpv5/kyhyUB6/Q1zfw5+Hvk3S6xrDia4kXKIQSFzzk5715idahtvFM97rllNc3CSNiLO75857mtS/8AiP4k1W+SbSEmtYYQFjRTlQfU9j+NAH1NbNFHGFUjgVP5qk4Br5k0i6+J2syzPb3txFIcYUqFTBHXNbF/YfEnwzbNrl7rxniiw0sSMSAM+mAMc0AfQqnNRXltFd2c1vMu6KVCjqe4IwRWT4T1pdd8P2t9n5pE+b69622+6aAPHfhQyaTr+r6MVdHimb5cgrgMRwevQDrXsleFWVw9l8b9SSGDejNyzM3yBgDkDpyT+le4RSB0BHTFAEtFFFABRRRQAUUUUAFFFFABSb1zjIzXGePfHEXhayEEGJNQnGIowRkZ4Bx1PPavJp7nxvcvJqckOooWVZPMVDwvU4xyOO2B0oA+jcg0V4l4d+KN3pl3Fb6zPFd2Uj7Eu425QcD5hjOM8ZNeyWV/b39vHPbyrJG43KVOcigCzRRRQAUUUUAFFFFABQM45oooAKKKKACiijFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACMcKTXkvxX8cPpsf9iWNsZ7q4jOcgNt/4Dg5rr/GfjO28Lae0hTz7huEhVwGOe/Nee/D7wzceINduvFOsRyM0r/6OJjk7fXGPyxQBw2gp4m8Hz2zzwsIZz54DcKOuVx2r6D8Oa7bavYQTxkB3UNs3AkfXFR+KPCNt4j0OWwfZG5H7qUpkxt6iub8HfDm88MysTdpIdy/OAQWUHoc0AekqB1xwafSKMACloAKKKKACiiigAprNtHNQXN5DbRs8jgBQTXk/ib4nHzZLPSZvtN0GwIYoWLNg84PT/P4UAeszXkNuheWRVAGck4rIu/FemWgQyXMY3HH3xgcZ5ryo6J498TuiNs0q0YjIaUvJj/P0rorH4M6SrmW/uru9Z1AkE0nBPqMcigDoJviT4bhKhtTg2scAq2f5fStey8UaTfQiWC+hlQ91auePwm8KnP/ABLEyV2n526enWqFz8GNAaN0s3u7TcAMxTH8+c0Ad/FqdrM5RJkZ1ALKGyRmrSyK3Qg14xqnwl8QQSxz6T4ou96YUGWRgQmOmRwfyrNtPGPi/wAATxw+KIzdWJcr5wIZwBnBOPXjrQB73RWFoXifTtds457KdZFYZ6YrcBB6UALRRRQAhFcJ49+Hdl4rtvtEP+j6nD80M6Hbkjs3qK7ykIzQB5R4E8Z3sOoyeGPEMMkGp254ZyMSDtg9+Oc16Y+o2kKAyzxp0HzMBzXnvxb8L3F5ow1zSJHh1PTyZQ0fV1A5B+grzz4e+H38d2klze63dvMshEyMxJz26nGPwoA9guviV4dtZpInumby+rJEzL+YFRzfE/w5FKsYuJZCcZ8uJm2k9jgdam0L4f6Nom54YmllY5LytuPTFaR8JaOZXm+wwiRyCzBcE4II/kKADRvFuk65G72dyGCMVIYFTkdeDWzHPFKMo6kH0NcNq3wt0W6gdrKN7O5bJEsUjDJPrz0rjLHwd448Jy3UtnqsdxCpXyoSSxcDtg8LQB7gKK8x0T4pQrNFYa7by2V8ZPJIdMBnx25OByOtekwXEdxGHjYEHmgCWiiigAooooAKKKKACop4EnQqyg5GOalooA4w/D3QU1c3rWELvJnJdQ3P49K37fRbC0j2Q20SKOgVQBVy9uBbWrykZCjNeHax8ZNdu76Wy0DSVkkRmBcqzAAH0GKAPZha28N0SgVc8kCuU+JGrWVn4N1SNp4RNJAyohkClieOK4C3n+J/iLT3hZ1t1n+UyeRtKg475+tOh+Ceu6iqHWvEUsgUAbFLNx+JoAr/AAv8fW+neGja3swQ20nVmABB5rvY/i74edMO86ZztYxHDfTFZGkfArSLOM/apnncjjtiuug+G/huGFY/7LtzjqdnJ/GgD551/wAW3f8Awnd/renxXAjlOFDcE4AwenT2r0X4ffFu8vNTTSfEVutrLJgRSlSgY+hB716oPCejKBixiyvQlc15x8Z9MtLfw/aXcapFcRXAMbKBu6HPHftQB7DG4kQOpyD0p1c74L1JdT8M2M6ur7ohyvTI4NdFQAUUUUAFFFFABRRQelAHhHjRbfVPi5psMkhZVlAIC4K7e3X1HoK9straMQKAoxivEviXbxaX8QLK+l3ojyK4kCA7TkdDn869ig1W2h0xLiWZFiCbixPbGaAMzXPAWga4h+1WSh+MPESjDGccj6mvJdO1zUvhd4wk0vVJrm40eXLRyMdwRScAj+tdzqXxp8KWbvGLiWR1BxsjPzEehryHxr42/wCEs1azbStMupkjyNkiEs+e3HbvQB9M6Xq9pq1lHdWkySxSKCrKcgiru9c4yM18ueHrr4hWmbDR7C6tY2zKUlQquTzwx/lXXaXp/wATpA1zdPtfj5GlGT/hQB7o0iKOWA+ppv2mHOPNTJ7bhXicvhrx9NObi9kNwrc7DKCI/YAde361Wm8MeLZFP+hlkzgMu4MuAexP+c0Ae7+bGf41/OnBgehFeFjSPFltNvlhvmhUqMRTMMdOncioodZ8RaYRFNdarHwSEADgEDOORn8M96APeqK8LtPilrxkSGYwCQrv2zRMm0e/ua6nTfig77Beaa7DgGS2bzByM5xjNAHpdFc7pnjXRNUYRxXqJKf+WcvyN+RrfSVJEDI4ZT0INAD6O9FFAATiiikJA70ALRWXqHiLSdLLC8v4IioywZxkD1I9KXT9f0vVP+PK+gmOM4RwePWgDTooBzRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWXr+s2+haRPf3LAJGucE9T6CtMnAzXivxZ11tV1a18PWe+TDBpFRScseAOv40AUfD+lTePPF82ramubVCNsbgMCOw9OPpXt9nZx2kKxxqFUAAADpXO+CfDkPh/R0hXl3O52xjJNdZQAmDmloooAKKKKACiiigAqlql9Hp1jJcybiqDkKuTVwkKCT0FeR/EfxfcXV3F4e0O6zcXLbGePDAdiCCD/kUAZN/wCI9V8feJZNG0WdodNjH76dAQR0zyRj1GPavRvC/gbS/DlikVvCrPnc0rqNzH1zVfwF4Pg8M6UIgTJPJ880p/iau0AxQA1Y1UABQKfRRQAYooqGS6gibDyKp9CaAJsVla34e07X7NrbULWOeMjow6e4q7He28rFUlViOuDnFTggjigDwTVvhz4g8BiTVfCt956oWJgeL5tp984OPwrrfhv8R28Ro1jqqRW+pxHDRA/f9wK9MkjWRSrAEHgg14P8QdHk8F+L7LxHpqxpDJIA0YQD6gdOtAHvKtuAPrTqzdGvl1HTYLlCdsiBgD15FaVABRRRQAySNZEKsMg14TfwN8NvifHIg26Vq0pdnx91jnK+mM4Ne8E4ryv46WLXXgoTxKDLbzrJnbkgdyD2oA9OtpVlhRgc5GanriPhjrX9s+ELO4aQvIF2Mx6kjiu3oAKjlhWUEEdqkoPFAHnfjz4f2OtW73xkliniG7zIkBbAHbHNc58PPGFxp+tTeG9SnMsasRaXDnHmqOwzn1r1y5vII0bzXVVA5LHAr56+JNsPDnjTT9SslIidlKOvRSDyue/rz69aAPo5G3qD606sjw5qMeqaNb3URJSRAwJrXoAKKKKACiiigBAc0tFFAFbUI5JLGZIQpkKELuOBXh3wndYvFmtabc7fO8zeFYc5BINe8P8AcOOteFJatofxw3hfLivSJAAf73X9aAPdFjVVACin4pFOQDUN1KYbaWRQSVUsAO/FAEjyIn3iBVG81zTrBS11ewQgcnfIBXzh4h8b+KNf197SK+e0j3lFjU7dpH6nGOtdDYfCaS/ijudR1qeYnDlVUDJ7gk5yKAOz1z41eHNOLw2bvf3A4CRDg/jXnkms+Lfibqf2eO3+yWBYqf3WVVfUk9T0/wDrVn6r4RtPCfj/AEvZt+wTSKhDqXOT65GBzivofTLWCGBPLRQMdhQBB4S0NtA0SCyaUysg5Y1vZAqB50RCSwGBXG+LPGkOjWMsguFj2jO88ge31NAHaS3UMK7nkAHua5/UfHvh3Sw/2jUoA6ZygbJ4ryG2m8U+O939mh7ezJ+a4uMjPsq9xXf+HfhjpOnW0RuIlubnO6SWZAxY49xwPpQBHN8aPD6k+Rb6hcjGf3VuTn/PP5Vp23xS8MzwCSW7kt2xuMc8LowHrjHT36V0UGhWFsoEVvGvrtQDNU9a8JaPrsCRahYwzKhyu5RkcY4PUUAWNK8UaPrW7+z7+CfacNscEj6itOS4jijLs4CgZJJ7V4V4u+HVl4WE2r6Nq8mmyKMxopPJx0zye1cTB428aeLbVNEgnlcr8ssiDLOM9WIHHTtQB1/xj+IOkalZLpVhH9qm35EwyAuCRx69PpXLaJoni/x7NaQXc9zHp6KoYlWRCAPTuceld34P+DjJNb3+uXUk86YYIrEgY6ZJ5/CvZrWyhtYwkaKoA4AFAHlenfAvRIh/pFxcOOcgEKCCc449Oa9A0zwlpOlIgtrSJSi7Q+3LY+vWt2igCAWsS8BAB9KlVAO1OozQAmB6UYHpS0UAJtB6io3toZCC8asR0yKlooA5rUfAuh6lcG4kt2jmJyXicqc4x2rm7v4R2hG+x1S7gnByGZtw/Hpnv3716TSDmgDya/8Ah3rJRxFdLKcD95Kfm4HGMDP+etY2nah4x8JsZbi1urm3UBXjPzIuDjIORj6V7nUFzaQXcLRTxJIjdVYZFAHlA+NsEF6IbuzZEwFJCk/N39gOnevSdI8QWGs6el5aXCSRN3U5xXC+NvhtHqjJLYfut/EgXAI989ef6V5Ott4s8Naw3hjTdQjuTdgB4kcv5fr6Y/OgD3XxP8RNL8PObcCS6u8f6qIcLxkbieBXmVx4x8ceMb1k0ZZLe23gDyU28d8sc812nhr4W6Xa20c+qxte3jANI0zs4yPQE13ltbWtogSNEQKOmMAUAeMWfwc1XUpEutY1yVpicsMb+vXkn+lZPibwXP8ADyS1vrPVbpYDwSqA5YHOCMgdK+hYriCVikUiMy8EA5Irj/im0cfgm6aRcncojwoOGz15B96ANPwTq11rHh6C6u12uw44xx27mukrlfh/A9v4UtY5EVCF4CnII9eAP5V1VABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSc59qAFooooAKKKKACiiigAooooAqahdJZ2cszkBUUkk15R4Mg/4STxdf6424xiQqFKbVyMY4z1/Kui+KmpT23h2W2gKDzxsYnOcHrjHSrPw60ZdI8PQRhQHb53Oc5J96AO0jQIoApxOBmgUY5oAWiiigAopOc0tABRRRQBn63ci00e6mJj+WM4EjbQTj1rxz4W6NJrOv3fiO7WM7mKRbVHH+feu2+Ld4bXwZMBHG+9guHzx9MEc1Z+G+mLp3hKxQRorNGGbb0JPNAHYxoEXAFOxz1paKACiiigDL13U10vTZZ2YDapPNeAya/rHjTxI+n2N09umCfMychRxxj616F8YL2W20CfbIEwuef4vYVz/wAOpdG07w6l9LeReaylmZ35XuR1oA841lfEvgzxFFanVy0sieYpVyARngH8q9J+H3xdm1C6+xawYxtGBIhwD065NeOeO/EUfiTxfNewybrYYSLdkAKPr0qnpDSWt7bnywQScYbryMGgD7bjdZEDKQQRkEVxfxS0WHVvBN6XQGW3QzRt02kVueFJZJvDlm8ow5jGQauavbQXml3NvcIrwyRsrq3QgigDjPhTqp1HwrbBiN0WU4AxgdOhPavQa8I+Dxex1a7sFuEkiDHYglDYXPXivdh0oAWs7WNasdEsZLy/uI4YkBOWOM47D1NaDHAJrwDxdcXPjz4iHSFYrZ2WV2FhgHPLEevTFAGzqPxqvri3E+heG7q5g3bTNIDt/DaP61yPij4keJdX0a50+/0IQRXKmMSbGyT3IB/Hv2r2/RNNstO0+G0hRVjiAAHrir17ptld25SaBHVieCOh9aAPHPhd8QtP063h0S7gkt5VYIHCcEn1A5Fe8RSCRAw7186/EDwQnhvVDrsChLNSoCxMcq3bg/QdK9l8C6s+s+F7K8dSrPGMg9/egDqKyfEeprpGjXF2zbQi5zWtXEfFSC4n8F3KW5+Y4zzjigDxXxDq3inxL52oAyw6cD5aNGTgehIzyCa4bU77VIZDb3k8m1lD7AeGB75966q48ciw8Ox6R9nDRyQiMhSQyMD1+hri9S1D7b5UqhVZE2YBycDj9aAPpv4Oagt34MtEVyxjyrcjr+dek15F8C7Ka28JiWZcedIWXjHHT+leu0AFFFFABRRRQAUUUUAFeR/Fy0bT9V0XXoY8eU5ilcYz1BX3PU165XC/Fuy+2eAbxhnMLLINoyeuP60Adfpl0t5psE6nIdAaluU3wOvPIxxXCfCPWxqvg+3RnJkg/dtnrxXfuMqRQB8eeNLJ9L12+cMFkt7xl256huc4/D9a6ew+J3i06Y89lo6PaQx4eRkbHAPOcit34reFmg8Y22rLBFLaXWEdXYcyZxyD2x6e9Fzf65daFLYWGgW9laeSY3a4k2AAjnAx2H8qAOGtb3xR438T2d1MGlEbJKViPyqoOMgZ69a9g8WeO5PDYs9NtPKlvZgAyOx3L6YA7nPWsb4PNaPplxAGVp4JWViMHjPrXn/xL1WWH4gXE7xIzQN5akkg4HTvigC9rHxB8VaBf+Tc38d15iBpIj/B7AjHvVnwvYaj8Q9fS+1NSunxkFYP4WI9fWvP7O0u9c1t+EaR2BkLHjH+RX058PvD66Vo8AZFD4GcUAdbpelwWFtHHFGEVRjaBWkAAMDigDA4paACuN8beO7XwtaeXGonvnB2RBgNvuf8O9a3inxHb+GdEn1CcFyg+SNfvOx6AV8/WcepeOteuLmOEy3EjL5ssg2rGM5A4OfyoAzb0+IPHOrNLKJ23Z89yfkiXP3QO3Tp717p4A8E2XhnR1ihiJdzuZ2AySfU1c8L+DrHRtNWD7OhJO6Q4J3N68k11kcaRqFVcAdB6UAKqhRgDFOorE8SeKdM8L6c15qM4jQfdXqXPoB60AbLOqAlmAArifEHxO0TR5TbW7PqF7natvajexPpx0ric+KfifetOlzPpWgZxHEpKvMvckg85rvPDnw70Xw+Ee3tVMw5MrElifxNAHOP4w8fajI/9neF47WNV3gXbks49iMAH2rPufEvxVtQssvh+3cAfMIjuz+TZzXsSxIowFFKY1JyQKAPH4vjHdaazReINDurORDgkKSCfyrtfDvxC0LxHEDZ3aeaesTHDj8K6Sawtp1IkhVs9ciuE1X4R6HcM1zpYk029GSk0DkAH/dzigD0BJ436MKkr5+Os+KvAXiu3ttenlnsGJVLnPyOOMZHY/417XomvWetWaT2sySKw6qc0Aa1FFFABRRRQBw/xK8Wjw5oyW9uUa/uzsiRienc8c1mfD7wU+nvLrWpYa/uuTxwg64Gcmum1nwXpuua7Z6peoZHtfuIWO3PqRVnxLcSad4fuGtreaWQLhUhByPy7UAYnirx1baLK1hbI0t1tyzKQREMdSM8/SvLYtR8RatqLz3V5ESzhYvNl2q6/wC7yMnPTPatbw58Mv8AhI5zrWqQzWrSSEm2cnp+hFdNL8JrCKB/sckgZnDAO5wv0oA6Pwnoh02JriY5nlUBjuzgAdM964v4iXuoeIvE9n4c0uPzIIWDXDldwVscZ9MCur8Ua5F4L8IlizNNtEMA5ZmfHFZPww8PtbWMusXiyfb79vMl8zg/l2oA73S7c22nwxMAGVACBxVygDFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFBz2ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKQnAzQAtFFIehoA8j+KMd1qOr2NhDCH3Nkhmxx+dekaDaiz0uCAY+RAP0ryv4nGX/hI9IljRWj8/BwOc5H5V61pf8Ax4xk+goAv0UA5ooAKKKKACiiigAooooA80+MshXw7bKFDbpwMbAx/wDrV2XhtFj0W1RcYEajj6Vz/wAU4oz4RlmktoZjGw2+b/CfUe9X/Ad+L7wxZSblY+WAdvTigDqqKKKACiiigDiviR4VTxPoDQiOR5UPGyQJx3znjFfLeseHLnQbuSO5RpIgzKAHwwIOORX2yRmue1bwXomsySSXVmheT77AAFvxoA+NYrP5opUO5sj92BuOa9P+HPw7v9X1aLVL6F4bYPkApjOOePSvb7P4deHrSbetjG+37gYZ2109vaw2sQjhjVEHQKMCgBbeEQQrGowAMCo9QkSKwnkfOxY2Jx6YqzWJ4s1CHTPDl7czyrGixHk+vpxQB4/8IAlx4o1WaNsRpIwiDDJZSfX8K943BUyTgDqa8b+EFhJFDPeSs3znKq3JAPI5zzVj4g+O7xrkeHdAUy3U+Y5GUZx2IHpj6UAdT4n+I2kaFA4VzcyjK7IumcZxu6flmvCNRuPFUeuN4l0rw/cWkc56rGZC2fX/APUK9e8HfDDTLGwguNRt1ub0/vGaTkKevA/E16JHp9vHEI1jUKOgAoA8d0HxjqMUKi/huBdbctE8YTp/KtmT4iNLbSRxeRDOB0d84+uK7vUPDWmajzPZxOQD1Xr9ao2ngnRreR5P7PtvNcYZljxkUAeE+MvEK6pFLA95LqFzKoAjQYii56jjn617N8NLZrPwjYxSkbxGMjPSqviT4W6LrVqVigS2nUYjkjXla4PRPEOr+AddbStXQGAyEq2f9YpOAw6gHjpkUAe+jpVW/sYtQtWgmUFT2IyKWxu1vLVJl6OMgelWc0AeJeJvgdBfX013ZzkNK5YpkIFznpwe9cLrngay8KaHHDcxxtrN3KURPMDMieoXv6cetfSut6raaNpFzf3kgSGFSSSQM+3NeH+EBdePvHUmuXkSG3hYhI2G7YoztA464Oc5/pQB6x4B0uHTPC1lDDGUXywcHrzya6qo4IlhhVFAAUYAFSUAFFFFABRRRQAUUUUAFQXkC3NnLCyqwdCuCM9qnoPSgDxH4SSHTPE+taQ6vEySbhE+Mr+XFe29q8Q8SN/winxntbyOVxb6gAZVJ4BORxx0yPevbIXEkSsO4oA8++L1oJvCDXAVQ0EgbcewPB/nXD2fhHSbnRLS/wBW165MEZEjxyXAK57g/wAuK9h8W2B1Lw1f2qHDvC2364yK+fvDEOkarbXH9vSMyW2WUtOQBnqCAeuR+vtQBtaTrOk6J8Sha6GEktL1AjJbgAIwHU/lWV8V9GW18QNrE1s09tKgA2gkI3Oc8/SpIry01fxHpx8I6LO0Vq582QAKrDPU/TrzXQ/FuSWDw40bYVnUjGPzoA5H4S6TLqmqG5C/ulfLkqCD7V9IWdqlrH8q4z79K8o+CdtCNBWVRyxORjpzXsDOQvt60AWBTC4+b2FVJL1Ily7AAVzHiXxna6VoF9dLIFkjjbZ0OW+lAHmPjO+vPHPxDbSLFRLY2eEcknCt3OM8/iK9W8LeF7bRLbEMYDNy5AxmvN/g9plxI95rOoFlkvJCyqc4xk817fCFCDGKAJdvHFLQKDQBl+INdtPD2kT6jeNiOIZxnlj2A968S8K6ZqPxJ8Tv4h1ku+mo5EFu5ynXgAZ6Ditzx/d/8Jr40tvCVm5NvaMJLx19f7v4f1r0vw7oVroenpa2sYSNRwPegC/ZWENnGEiRVUDAAGAKt0UhYAckUALR3pokU9CD+NOoAKKKKAMvXdFtNc0qexu4leKVCpBFeCSrq3wo8RKsJa40x3AAkJ+QZ/lX0fXHfELw1Hr2gy/JukjXIGOooA3dD1eDWNNiuYXDB1ycHoa1K8K+E/iSbS9en8N37MFOWgL9cZ6GvdQcjNABRRRQAU1kVxhgCO4NOooAQKFGAAKpatqlpo+ny3t7MsUMalmZjir1cV4z8GXPi+7tYpbxoLGDLbUGSzHjnnH060AeO+Pdd1DxRP8A27H50VhYufsymEFAM4DE55Jx36V6R8MfHttr2nJazMiXsfyug4z7iu007wxp2maSNPgt08kLtKlevrmvD/G/hOX4d+IrTW9FaSOzdyTGgJ2nOSCfQ0AfRQIIyKWud8IeJLbxJosF7A3DLyDjKnuDXQigBaKKKACiiigAooooAKTvS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAYooooAKQ9KWkPQ4oA8p+KER/tLRpASo+0c7VyfWvStN/484sN/CO1edfFaNo7SyuFk2vFPuBLAf8A167DwlNLLpMQlkEhA4YelAHRUUUUAFFFFABRRRQAUUUUAY/ifTV1Xw9eWjRmQtGdqrjJPbGeK86+FWoy2kt5o1yJQ8EmR5iBcZ7cfhXrhGRivF/iNp8nhDxBbeJbESRwyuRP5fOW9/rj6UAe0KdwzS1zXhXxRZ+INOjnt36qCVPUV0uaACiiigAooooAKKKKACvIfjJrjzxWvhuyaRprlszLF1C9uMc+uPavRvEGv2eg6ZNd3UqosakjJxk+lfPmhy6j8QPHf9qyNK0UUoxj5cLngfSgD03RLCbwt4LmuBExuIoSThMlsAgHArifhht1fxlfahcyyyPHlsSnjcTzgHpXtxsEn0uS2dcq6bSD0rwXXNM1X4c+I4NbgSSYSZN4GcFWUkdB2Pt7UAfRUIGwYPGKmrkfDPjjRdesY5LO/hdyoLR7huX2Ircm1uwt0LzXUaIBklmAxQBpUV5re/GzwraX5tRPLIB1mRMoPTmr/h34maPr+9UuYkkUn5d3UevNAHdHGK8I+OTJDrOkSLG5fDBnHCquR37fX2r0HWviRoWlWjyLqNpLKpwUE44+uM/lXhHiHxZH4x8dW15eMDptsAI3RSuR75HqaAPozwk06+H7UXMwlcoDvxjIqzrfiTTNAtPP1C7jgQ8DceW9gO9eLP8AFfV7uX7DoFjHFGija8rZd+3yjpSxeDfEviy7tbrVrgyZOWVmJQDqeM4BwcYAxQBoXWp6j8WNZeyspZ7XQIGwzKoPnng5Ofr79K9Y0DQLXQ7JYLeNQepIUDJ7nApdC0Gz0W0WG1gSNRzhRitigAooooAKKKKACiiigAooooAKKO9FAHlvxksHXTbTVE2f6PKC27OcjpjA+td34avl1HQrS4V1bfGCSp4zjmmeK9P/ALS8OXkIClwm5d0Yfkc9DxXG/CLVml0a402YAS2czIQD2/pQB6POgeNge4r5W8Q6Jp+l/ES5s5jLLbzzbmiVyig57k9e9fVcgJQ7etfPXxU0yWy8YfblTEbqG+Xg479/XNAHsnhnRbDT9NjS0hREK547nrnPeuP+MfhufU/C8lxbAmSD5iAccZGf0zXZ+DLoXvhqynByWiGeMVt3NulzA8UgyrAjFAHlXwckhPhtYhgSox344zzXomr38en24kkYKGOMnoK8sjM/gX4gS27tEumXpBRVwNnYEj6it74ka3pw8Kuk1ygkJDxKG+YkZweo4z9elAHBalquufETxHdWFhcz2WlWhKl4iQ0pzjr+dYOq/C7U4pEgs7uYhz+881sgj6d6m+G/jSw0PWbiDUJVSC7ffHIpyqE9Q3pXvNvLY6msN3a3Mbqw+UqQVagD57jvPGHgFh9te4+z7R5ZiQvEOehz0r2bwD8RrPxPH5DsI7tFBZOua6vULWxlsGW4jjZcfMGAxjvXzppd3aL8TpE0SJo7Vpx+7GUAOec4yMZoA+pVYMOKralcrZ6dcXDttEcbNn6D8afasWgQnrjmuN+LV89n4AvtkojaVkjB9csOP0oA5X4SWH2681PX5iWmu5my2zAIBPSvYRhVznAFcZ8NrJbTwlYoFAPlhjjuTXYzgtA6gZJUjrigDkPE3jqz01Ta2dzA964by1Ykgkdsj34rgb/WPFuo2VvLNJOEkILJaJuXBPdsfpivO/HUs+l+IZ0k8ouHYIyqcsOnOeKl0b4matpOiQqUimCsQc5+YDoPY/SgDes/iNrGl+I/ImnuGskc71kGWUZ6gDBwMdK958Oa9ba9psdzbzCTI54wQfcdq+NdT1mTWNflv58hZHLbOoUGvbvgtq0gPkuVCynjjrxxjigD3WigdKKACmuoZSD0NOpD0oA+cvGbJoXxbsbiByjtKoZuMYPFfQtlL5tpG+c5UV89fGtVXxbBNG2243KoVRnPIINe7eG3Z9GtixO7y1znr0oA2KKKKACiiigAooooAMjOM81l+IdKGs6FeWGdpmiZAwxxkVqUUAfOfw21O68J+Mn0G83QxO7JscgDcDwR65r6JikEkYYHORXhvxk8NvpuoR+JrVz5gYFUCDhgcn3NeleAtbOu+GrW8dBHI6AugOcHvQB1dFFFABRRRQAUYxRRQAUUUUAFFFFABRRRQAUUCigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooPSgDz34rWiXPhp3Eqo8Tq4JXPetDwBdC40K2bdlig3cY/SpfG1mb3wzqETAH92xGcdcVzvwx1JTp8FoxBkQYJ3g5oA9PooFFABRRRQAUUUUAFFFFABVW+sob63aGeNZEbqrDINWqKAPDPEHg/UPAesNrfhoS/ZWy00G75R9FA6V3fhPx/Ya1bJ50ghuMfOjHofr0rsri3juI2R1DAjBB715rr3w1b7c99o5t4ZpOGDIRge2Dj9KAPTEmjkUFHUg+hp+R614kqeN9HeKKGykdR8pZZiRj3pD4+8T2N60U2nSsq5BPPJ/GgD27Io3D1rxVvi7fRK/2jS3DKORG27Jzjr+tRz/FTUZYGFtbOJ84VNnA4/vZ65NAHtM11DAuZJFUe5rmta8d6RpNu8k1wFUA8txkjsPU15ZDf+OPEMa3kQjt/mICzIxJXjkD/APVWh4b+Heo6hqDXviV/tknVA4IVPoM0Ac/qVzqvxL1weTI66ZFINsbKBuP0NeveDPCkOhaeF+zrFK2d5AHzcnmtrTNCsdOQC3t44yBj5VArVAA6UAIq4GKpalpNlq1v5F7bRzx/3XXIq/RQB4d8RfhPpVnpl1rOm28ySRDeYbchRj1HHbFeJw2T3dzaeZcu6TuAElcjd6+o6n9a+2J4lmiZHUMrDBB7188a94Z02w+IX2ax08ukcqsIlB2xs2Dnjtx06UAa/wDwo7RnslkhuLmNzgsd2eO4HpXA6Z8OIta1iaCwvybaNjlzndgHoQQPzr6L1e9XTPCN3ckf6qBjgE56e1ef/DLQsPcagzNIJCdrOoBz36cnt1oA898EeBdP1Dxze6XqMTSxWpIGZB8xDegr3qH4ceHFVR/Z6BRztUkL+Q+tee6BaJZfGO+CMz7pSWIUbVyM4Jx1r3EdKAMu38O6XasGhsoEYcAiMZ9K0kiRBhVAHsKfRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA2RBJGyHowwa8T8Pr/AMIp8Wp9KiMgguwSS4zuPUYPsK9urxT4qRDSPHeg6xDGVZ5AHcHAPIH8sUAe1A5WvMfjHooufDyanFbwyzWjZPmHGV9M5FekWcnm2kb+qg1neKdObVvDOo2MePMmt3VM/wB7HH60AYfw3uUl8KWjJkKV6Z7967M8ivGvg9q/lW8mizNtlgdvkPHfng89TXsg5X8O1AHiHxq1SEPaxR2iG7RxiVlG5Bntn1qh4R+FEeqQW99r1xcXTMAyQPISqDqB71Q8eadLJ8VYoL0vOkrxlW2cFc9DgEHnive9KtkitY1RQAoGMelAHC6z8ItF1VFMUP2V17w/LmuZtvhLr+hyl9I1yVU2kbM4wexH6V7mAKMA0AeFX3gTx3rkE8F/rZFucKqtnLDB5O09efyri/D1g/gDxqLPXrdM+Z+7nIwMHHzAntX1OYwe1ebfGTSLa48I/a3jXzYJkKv3UE46igDv9NuUubNJI2VlIyCD1rz742XGzwhHGIg+Zw5J52gd8fjU3wtuZf7GMDRukKN+6Ehydp5pnxasp7rw+xjRpFQEkHbtHB5we/T/AD1AOp8Hbf8AhHbLAH+pX7vTpXQ9RXBfC+/e88I2O+QSSKoVmxjOOK76gDwn4z+BNS1C/wD7YsLT7UDGI9qhiynvwOPxNeFXlpqFq4tbiylt2iXDqUIPPc190socYYZrkPEXw28P+JJZJbu02zOMNJGxUn0Jx1/GgD4/sd32sKkIdmGMNX0L8F9AniWfUJ7fy0ZsRluWbGcn9T9a6DTfgr4b02YyJHM2eu+TOB6V6FY6fb6fbpBbxLHGgwFUYAoAtUUUUAFNY4Uk9BTqp6rdLZaZcXDZwiEnFAHzv46Da38ULK0jZiZJgeuRtB9vpX0LpUPk2iLjGFFeBeCI/wDhIfifdXjqGSzVsOpyCxP696+hbWPy4VBOeO9AE9FFFABRRRQAUUUUAFFFFAGbrulwaxo9zZTxq6yIQAw4Bxwa8n+Et3Jo2saj4duE2SRyGRDn7w6GvajXjnjWOPwp8SNN1wQsLe7BSVk3Yz79qAPYgcilqvZXEdzaxzRsCjqCCKsUAFFFFABRRRQAUUUUAFFFFABRRjmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKAc0UAFFFFABRRRQAUUUUAcx4sndNKu0RAT5ZIz9K4D4SyedFI8gj84SnJCkMfrmu88WuV066ZRkqmQM15b8KGuBrF5OwJSSXGc5GcmgD3sdKWmocoKdQAUUUUAFFFFABRRRQAUUUUAFIQDS0UAMaFGHKiqs2m28v3olJHTirtFAGM/h2xfrbx/lSxeHbCI5W3jUn0UVsUUAU4tPhhUBUAx6VZWJVPAFPooAKKKKACiiigAPIrznxR4Y1xtdbVdIKyFlz5TSEAMBxxnmvRefWloA8c1HRPiHqtjLY3L2ogniIfaq8HGNvuD17Yz36V1vgTwpc+GdDW1uZVkk+8SOxPOPf0zXa4FB6GgDxfQ4tnxg1ElSZGkJbKbdoxkYPft+dezqflFeR6TcxH4wasvlksBjzDn0HHP0x+FeozajbWluZbiZIkXqzsAP1oAu0Vwd98W/C1nM0S3pnK/eaFCyjr3/AA7VLpfxQ8N6kqEXqxF32Kso2kn6envQB29FRQzx3EayRMGVhkEd6loAKKKKACiiigAooooAKKKKACiiigArhfirpMeoeDri68oPPZ4mjwuWHrjiu6qjrMJuNHu4lfYzRNhtu7Bx6d6AMPwBria54XtZ1I3qgR19GFdSwypFeO/BLUvk1TS9+5YLgsp6ZyT2r2OgD5+80+F/i41nPvWOW5d48NwRJyM/nXvVs/mQqeua8V+MsX9k+KdI1yEojqRvZhuztPpj0NeuaFex3+mwzxtuR1DA4xQB5z8ZPDN/eJY65pURe6siS2xdzYHIxx65/OpPBfxW0i+05ItUuobO9iXbMkp2jI4PWvU5YlmjZHAKkcg14l8TfBnhzRbKTU4NPUXkz/KsZKj1JwCKAPUbfxloFyF8jVrNy3ACzKea2UuYpACrr+deC+HPhbZa/wCGob3dLZ3cy71YMWHXIJB/lWN4hk8W/DzW9OWPWptQixvMOSflGAcg5wDQB9M7ga4P4u7T4CuuMv5ke0Zxk7x/9eubsPjno4IivbO9t5ApPMYIJHbg1znijxZffEkxWWlWcyafG4Ylg2ZmHbjpjNAHoPw2i8rRYFdt8pHzHIPP4V1+tWEd/p0sL5wQQcHFZfg3SptM0WCC4ULIi845/nXTlQRzQB4n4N1mXwj4sl8O6gsiwTyM1rLK2c+2e9e1RyK6ggjpXCeOvCY1e03wuyXEZ3xupxyO2fWuV8K/ES/0WV9O8UAgRfKk4jPzdOD70Ae0UVU0/UbbUrVLi2lWSNxkMpyDVugAopCM0tABRRSE4oAUnAryj4weK/7P0mSxglKyMMHGO4+tdf4x8TR6FYHZMFuCCQNueB36182XKXnxB8ZQ21mHZHbEsyg4x3PPTjtQB6Z8DtFZdMudSYbDdPkADoBXtqABQB0FYXhXQY9A0iGziHyIoUZrfoAKKKKACiiigAooooAKKKKACuJ+KOhLrfg25VYEkmhxJGWbG3HU5+ldtVTU0Mmm3KL1aNgMru7enegDmfhxqX2/wnZklS0a+W23kZHHBrsa8h+D+puZ9V0x2/497liq7duAT6dBXrw6UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFHagDjPGd7b2VvN9oLbTExwBngCuV+E2mo9hJd+WVEkxZM9evemfFnV2hBsxcbDKMKofBb1GB1rpPhjaiDwzbsHlfeN2ZVw3PtQB3YGBiloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApG+6aWo5shGIOAAc0AfOOp+KtQT4j6ymgQxzTSSbfMyxxjjGDx1Hb1rck8BeKvE0cEuqamXz8xV84U56AduKvfD2ztLzxbq99GdrySsGRmD55PINexxxIqqQOgoA87034V2NuwNzcTzKQCRuI55z0NaGr/DnRL2waKO2W2mVT5c8Q2lD1z+YrtyQv4V5/8AETx9YeH9JubSC6zqcqFIkVd2Ce59KAM34TeIL+8ju9JvJjP9icxiQgAnkjGB2GOteqDkV5Z8HdDmsdBN1OiLLO5c7VwfxOa9ToAKMc5oooAKZLKsMLyucKilifQCn1U1S3+16XdW5yRLCyEDGTkY70AeeW+seI/FM017pmoJZWyTFBCUB3KDwTnkEg/qPStPwJ4rutRnudI1Vw+p2rsJCq4BGeORwa8fk13xH4f0290dUS2MUuZZwuGUFh0PTjpxXs3gXw8ml28l48rTXN2RLJISeTj0J4zQB2tFFBGRigAooooAKbIu6Mr6inUUAeDac0nhT4zzWjs6W1zgICMBs9PXgYx2r3dG3ICO9eI/G2xmsNV03XreFgUdFeXOBkNwP0r13QL4ahotrdA58yNW/MUAcZ8YNNW48NR3oCbreTBZlzhW4P8ASovhRrq32jtYkYktTtJHQ57j05zxXa+JrBdS8PXtsVDFoiVBz94cjp7gV4t8K7oWXjK5s8ALPCHyWJJYHB+v1oA9+rxT4pw/2v4007THIEbKE+YE4JOSwHA/nXtanIFch488H/8ACT6Uy2xhgv05juWTLL7Aj2zQBo6JbQ2OlwW8WAsahcAdhXkfxLunm+I+l28UgHlhGGxcuGycjA9RWLr2s/EH4cQRW1xdxXNs7FY53G4sfTk5o8Faf4k8TeMYtZ1GJ8CQOZJIAOMEYHHFAHuNnoNjd2ym4tIZCy4O+MHI961LPRrGwjKWttFEpOdqIFH6VZtYjHCqnqBU9ACAAAAcYpaKKAGuiyLtYZFcH4x8FpqKm6tYF+0KwORxkZHX8BXfUhAIwRQB4Jpeq+IPA3nCGNbuwLFhb5IeP1Ht616J4e+Juh615MRuFguHH+rkYAhvT610up6Bp2rWr293axyI/XI5/OuGv/g5otzG4iaeMliwxKeCRjP8vyoA9GiuYpV3I4I9ql3DPWvJLX4eeK9IumbT/EDeSVCiOZmbA46e/v8A/rqvLoPxLt2VYtRRw2QX8zJXPc54/SgD1i61Ozs1Zri4jjCjJ3MBgV5t4s+N2haKWttNzqN2QQPJ5RT2ye/4Vhv8G9X1b5tT1uUO77ppASzP7e3Wuw8N/CTw54fWORLJJ7pP+W03zHPr6D8KAPII/D/jT4jX732pJ9jtZ2DYZcHb7D6ete4+C/BVj4X0yOCCEBhyWPJJrpYLGKDkLk9s9qs4oAUcCiiigAooooAKKKKACiiigAooooAKa4yhHqKdQelAHi/g+wm0v4parGXQBwSETAGM8ZUV7OvQV5neutj8YkYqpNzagZL9Me2P8a9LQ5UUAOooooABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRXEohgZ2OAB1qWsXxBqMVlYyuzj5FLMO+PpQB8+/Ee+m1nxzBbQXhCq4Ux7yVUjuR75r3rwegXQLXoT5Y5AwK8K8NxR+LfG89+ke1FmAJKYORkjBGR0HevoywhEFskargAUAW6KKKACiiigAooo5zQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+JrlrXw3qEyffWB9v1xxWtXM+P7lbXwbqEjBDiPgPjGe1AHAeAtX0vRdIlubyVYWkmI+Zskk8nqa6a/+Keg6fa+c0xePgIUIO7Iz2PT/AANea2Pw21XxLbrNHqMVvaS/MFQu2MgBhjOOfr9K7rSPgxodl5TTB5nQ7yWxy2APTgcZAoAwNV+K+sa0VsfDekss0vy+dMwZR16bT/XrS+APh1dPqq63rayPcEhiLhdzbiOTkn1/GvWLLw9p1gQ0FqiMBjcBzWmqKvQAUAR29vHboEjUKo6AVNRRQAUUUUAFI33T9KWkb7poA+cPGEMraz4ykjjZo28tUkAxuIIyOTzjmvb/AAazP4Y09mXDG3QkZ9hXifiuCWzbxRbzxiMS3UKKAdy7C+QRgcen+Fe8eH0SLR7dEwVWNQD68UAatFFFABRRRQAUUUUAcZ8T/DreIfBd3DCm64iHmRD1I/GqHwi1t9U8JxQSxlJbQ+S2RgnHqPWu+miWaF43UMrKQQe9eRfD5Z/D3j7V9HuI/JincyQoBwQD19qAPX3UMpU9D1r5w15JfCvxHdIo2iQTboiicBCc4yMDnPT2r6Rrx740aPmG21OPeGJ8pynrzg4HXr+lAHqWk3QurKOQc7lBq8RkV518MvEBvtBt1mYCRV2uD6ivQxKpXduGPWgDxP49QJONGhOR87tuzx2HSvU/DNpHBpFsq84jHP4V5P8AF51uvHWi2zIzxqq7xztwzH0H9a9l0iNYrCJEXChQAKAL9FFFABRRRQAUUUUAFFFFABijAoooAMUUUUAFB5FFFABRRRQAUUUUAFFFFAARRRRQAUUUUAFIaCM0UAeS/EEyWPxF8P3/AJR8tj5YbHGSeefyr1W2bdAp9q82+LANvcaDftGWihuwHIXkA4744r0TT3WWyidehUEUAW6KKKACiigUAFGaKTNAC0Ug6UtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIehrx34u6ndadpDWtvLB5l2+0/OAwHtmvYZGCoSTgYrwTxVKviz4nW1la2rSfZAUmcqQAPfIoA7D4W+HZNM0GFrhU8xgG+UDH4Yr0tRgYqjpVqtrZxxqOFUAVfFAC0UUUAFFFFABRRRQAUUUUAFFFFABRR0ooAKKKKACiiigAooooAKKKKACiiigAooooAK87+LFwjaRaae0TOLqbBYcBcDucEc9K9EryT4izw3viuztJ3k8qBA21T/GTx9e3pQB3nhawhstHgiiXamMgFcda36oaTG0dhErkltozmr9ABRRRQAUUUUAFFFFABTX4U/SlJAqveXMdtaSzOQFRCxP0FAHy34/vp08ba9pzOssVxKnlNjJQqwOOO/WvobwHK83hPT2kYM4hUMcY5AxXzx4ysZpdM/t6VAJJ9T52gjIK5GD+Fe+fDtfs/hSyRpPMLRhg315oA7KikDBuhpaACiiigAooooAK8Y8asnhr4r6bqqytEt4mJMKADjjk17PXnXxa0eO50SPU87ZLPJyIt5YHBxntyKAO+s51ubSKZTkOoIrm/H2mPqnhXUYY3ZHWEspUZPA549xkVP4Eu/tvhGwm3ht0QOcVu3MQlhdD0ZSDQB8s+CtAl1m8vI7TVrvT7qKT5WhkbH1xxkV3cWseOPAFwh1tjrWiD5WniXMiL6kdfrnP1rD0W1Xwv8V3sVkDxyllyOMt1/OveYkjuYFDKCD3xQB4B4h8YaT4w8YaPdWhkMcYVZdyYMZ3cZzwB+NfRGmEfYo8HIwK8G+JXh+10zxto88EUEUNwwEgWPbvweSccGvd9KwLGLGMbRjFAF6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDy/41hf8AhHrNyrELcrkqM12/hh1l0K0kXODEvXr0rkfjDZJdeF0d5lj8qdW+aIuPTnHT61v+CJkn8LWRhlVh5YG4A4P580AdRRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGD4w1VdH8N3l2WAKRkj59pP0ODzXCfDTS/PuLzVyXzdsG2tL5hHfn0PNZ/xW8RzX2rWvh7T5kZmfM2wZKgds9sntXpfhexNppMCuPn2DcffFAG4q4UCnUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFIWAGScCgMCODQAd6WiigAooooAZK4jjZ2OABkmvEReLrnje8v1dvIEnlcKGBGQP7xwcdx6V6d441X+yPCl7cq4SXYVjJGfmPt3rzbwDYzTamnKMuVllbaoPfGBjI6/5yaAPZrZdsCD2qamoMKBTqACiiigAooprOqKWYgAckmgBxOK5XxV40s/D1odrxSXLYEaM2FznHJ/zmuf8eePpbLy9K0SJLu6ugyK6PwhHY8fXj2rD0H4d3WuSi+8UlZHkXm3jyoB9yMUAVL34rX11dNBEyhAwQfZ87z7gdSMc8VkeIPEHjjWorqx0y3vXgKhWcw7fMUqR8vPAJ59a9osfCOj2USJDp9uoTG392CfzrZW0iXogoA+Y20rxdqnh86I2g3SpuWRDIAoRsk5yQOPb3rV/wCEm+IPha0gtLrSPLjwAjRJuA7fw5/Kvoj7NED9wUPaxOPmUH60AeB+G/i3rUd2sOqxMdkgSTfGYwR7ZGN3fBx1r3DSdZtNXtFuLaZHUgE7WBxkZ7VW1fwxpms6fJZ3dsjpJycDBB9QfWvKrvTPEPwvupb6zke+0IFfMiyWdBnBOPp7gUAe4UVheGfE1h4l05buylDqeozyp9DW7QAUUUUAFZ+tWLajot3aJKY3ljKq4AJU9jg1oUHpQB5X8I9Suo47/RrwtvtJiqZXAx6CvVOoryHxYsvhT4g6ZqsTWdtZ3L+VIRlWfd1yBwcHv9K9YgmE0IZTnIoA+e/jLZ3WkeL7TULGUxzSMHiOM4PQ9vWtLw98UtX0iFF8VaZJDakYjvIIiUY+/wCFb/xwtF/sbTtRa28429wcrkdxnnjkce1bHg2yttX8JWRuoIZAUBKFQVBx6HNAHm/jLxRZeLdU0W50y5ZofOZH38BSMYO0ivetIBGnwgtuIUDPrXinxM0Sw03XNMjsLS2t8/OdgVcYOc4yD29+le06Kc6ZAc9UBoA0aKKKACiiigAooooAKKKKAADFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUfSiigDzz4xO0fgtyqb8zIGG7Ax6k1Z+F8jP4TtQzqzKCp2n/OayvjRGZtBs4hgbp8klsdB9ak+D6NH4bKFw+2VuQc96APS6KKKACik5zxS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFVdRuls7CadzhUQsTkD+dWq5/xlfJp/hi9ncxhQhB8w4Bz2oA8k8F2yeKvHWpalcbpVgm/d73BK/gBg/WvdbdAkSgDHFeQ/BeGWTT7i7eCOKOR8LsGA2O+MV7Eq4AoAdRRRQAUUUUAFFFFABRRRQAUUUjEKpJoAWiqkWo20t09ssqGZBlk3cgVJdXUdpbSTyECONSzEnGBQBPRXO6N4y0vXBKbSUERyGMnPUj09RW4J49mSwxQAT3MNsm+aRUUdSxwBXOap4/0DS7d5pb+JwvQRtuLH0HrXnfxJ8RKPEKadNqTQ25AdlESkBcY69T+Vc79r8JCxVhO1yrEny/s+GJ5HpwPpQB2v8AwuqzlvUWK1YwyPsUscHHqeMAV6NZ6zb3VolwsiFGGQQeK+avtr6lo9zb6d4ftlaAlppiuxVAPB4Pp710vgPw5eeIdPQ399J9mic7YY5flP4D3z3oA9suPE2k2wbzb6AMoyy+YMj61x918TJZbsw6ZpjXSbgBIGJyCOuAOnar1j4C0+2uHmkkml34JRn+U857dR7Gt9LSzsYRHBDGgHACqABQBwe7xv4gs5J7i7XTLdSWCRIVkwB7/wBa1Pht4ludV01oL6ZpbiJuWbOWUnjtWxrniHR9BsWe+vYow3CpnczE+gHJrgPhc8S6/fwwF9hYn51AJGeD7fjQB7SORS0i/dFLQAUUUjHapJ7UAeV/GG+YwWenoVy5LEOpwc8demeTwa0vhzpX2O3MmYzvUNhMHb14Jx/n2rj9fnbXvHM91JDG8MJEEK/aVUuOTnrkfQjnPWvXdAtVttLgVYwmEAxnP60Aa1FFFACEgDJqJbiJujg/jVbWdP8A7U0m4sxK0RlQqHUnKn8K8O07w/dW+t3WjT6xe2OoRHfFJDMQrrnjIxgmgD3ozoELkgKOa8l8T+NtT8Q6tN4e8MxB40Pl3VySRgcggEdOnXNc54u1LxHoiJpdvrD6ks6hWikwJFP+8uDg4713/wAP9Bj0/Q4M2yQzOoeXGTljyeTzQBB4S8AQaXOLy8PnXjc7j0Ukc4H9a9EhhWNQAB60yJFUnjBqyuMUAKBgYFFFFABRRRQAVFNbxzxtHIoZWGCD3FS0UAeSa1pl18O/EA13TC/9iXMoF9arjERI4dc9s4GK9L07U4L+zS5jkVkdQwINS6jYwahZS21xEkkcilWVhkEV8/SXmveEtYuPC+nXiRoZMQGXn5W6YGM/5NAH0Bc6la2ah7ieOJMgbnYKOenWn2t/bXoY28ySBTg7TnBrw7VtBvpNLfUPEWtXE8MKgvChChm7AfnW18GrGa2tby7cSJHcy5RWYkY9RkUAewUUDpRQB5/8WvD8Gs+FWnaKdp7RvMiaDll9eO44q98PNdj1vwvbTAneqhXzwcjrXVX1nDf2ctrcRrJFIu1kYcEV5J4KR/CPjXU/D0sEkcUrmW3kLYUr6AE/XpQBv/GOVY/A8j7CZPNCoAMnkEVZ+GULR+DrFGCg7OgBGD+Nch8YNWGpXWn6BbqZn3ec6xjcQ38PGc9M/nXpfhayNrotspi8tigLITyDQB5f8bLVxf6RMArLlh8wBxzz29xXqnhaWOXQrVoirL5ajKnjgVwPxwQf2HZOygospzxk9Mjt/hXXfD9ETwpZLGyFfLH3elAHV0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUmKAPNPjMsT+G7fdnzFmDIApPI9x0pnwfR00B1K7V85sEfxCofjXPGmj2IberCYkOvbirvwgj2+E4yQd29ixLZyc9aAPR6WkxS0AFFFFABQaKKAAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXm/wAWlZtDcpH5jKjfKS2PrxxXo5615l8YHm/sZUhWVmPVVk2oR/tY5NAFv4Tqi+DrLbt+6f516EK80+EOf+ERt8ED5jwAeOenNelgcUALRRRQAUUUUAFFFFABRRmomuIk3bnA28nJoAlqOZgIzzWBf+NNIs96JP58qruKRAnA9Sewrkrz4g3+t2EQ8PabPLLOxUuVIWMDuSwAIP8AWgDP0W6ki+MupxeYTGYQcE59Oa9N1VPP0e6Qoj5jI2vjB4714Jol/feHviy8OrzJJJd91YkDPTrz+Fe/b1msmBPDLz9KAPmbTfFcvhbV7y1SwWacy71WBvl/QH07V2tm3jfxnEgmzp1ky5ASQo2fw5I9jXOaBollB8T763uIZfLVmMPnemete2WWraRaQiM3tshTjBkAx+tAHhPjbwTNot3DLPPJco4DMztkgjPrk11HwxsdPf7VaTWcBuYHJWYrkspJ55q38S9d0rXLGW10lDeX0Q+eWGLcI17/ADdK4nwbe6ydQaPTGVJLpELO7AcLwcZB54oA9O0yytbXxXrWmiNAtyqzLhcDBG0/qKx9G1vSvCGuXkN/qJhP/PGViR16qCO/tWYbPxNp/jHTNT1W9iaGV/s+Y1yQDkgE4Gc/StDWdN0qXx5BLewLJI7BQZMkYwMYAXHX1JoA3n+I91qkgi8OaNdagp+UXGNkO76+lT2/g/xHrMjSa7r8qwSEs1paDywB/d3dcf410YutM0PT/MnmgtoVzjOFHr0rJk+KvhqEER3M0zBchYoGO76cUAaGn+APD+kuJrXT4VkXkOwLEfQnOK5HQVTTfipq1qN7ediRSx+6MZ49smr8nxM1G+UnR/C+pXK54dwEUj15rl77UbmHx9puoahbyw3EqKWgXDFeSPT0x0PagD3RDlRTqhtn8yBT7VNQAVm67qEel6Ld3chQCOMkb3CAnsMngVpV5j8VNf8AIW10qEh2d1aZNxUhe3Qjg4OaAOQ8FRDUPEELgPsLmVcOGKduuD2K9MV7zAgSJVHQCuD8BaZDFEZgT8p2IrDhAOwJFd+OnFAC0UUUAFcV468M/wBq2RvrQtFqNspaF0bGT1wfUZArtazddkEGi3kpO0JCzZ9MCgDxPwhZyax4imk1W3mN1j995uDHnjgD8K9cvb2PQtFuLxkysETPtHHQZrz74YWNu9qdSgYv57YzwMY7bQOPzNdj41uFg8GalJJvCLAc7CAfzNAHG2fxusJ0klu9Kv4Ykk2NJGnmJn/eFdBp3xc8L3UzwNf+QV53XCGNT9Ca4X4UGCw8Jahf6gFW2EzOWYZOBjr610X/AAn/AIFv3CSXds2cDEsOPzyKAOoHxQ8JZCnXLMN6b/fHWrI+IvhYrIw1uy2oQCfOGMkZ4PfofyrFtrTwXc22YrfSWik9FjIPf/Cnf2J4JtY5J/selRqWy5KIBkcf5+tAFuf4seD7eTy21q3d/wDpmC4/MAiptG+JOha7q406xlleRh8r+SwU98Zxx+NRWemeH95WwgsVdeqxIufxxXC6dMy/Fq6tYGMO2UElTlXGwcY7d/zoA9xByKKZEcoM0+gAI4rxT40aS9vPZ6xbrl9wUgJkgqcjB9TyK9rrhfilaNdeFHERAmWRSjZxjsee3BNAHnD67/wnc1jpNlvWBU33RIHJIIA/D1Br2Dw9pkWnWMUEYCrGoVceleH/AA2ntLTxhc2yyjM8e9ADu7/MCfXJPbtX0HYY8v1IoAvDpRRRQAVx3jTwPF4pNvcLcSW11bEmORDz/OuxooA838IfC+HSJTfavMb/AFElSJpDu2hegGf516MqBFwo4p1FAHnvxYtPtXhyFt23y51xlAQSeOc9B/jVX4Q30s2jTQNtaOGUqhXAAHoAO1dL4/sxeeD75TH5m1d4X6enofeuE+DUuXvI4mYwrtABHT29PyoA9iooooAKKKKACiiobm6hs7d553EcSDLMe1AE1FVbLULbUIRLbSrIh6EHNOvbyDT7SW7upVigiUs7t0AFAFiiqWnarZatAJrG5jnjPdDmrtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUdqAPF/jleNBJpcaumCWZk4J+uDXbfDe0a28JWYdcOyBiMdM1wHxlVo/ENjcu0fleSUwRk59eOccivTPA0bx+FrFXOWES8jPp780AdLRRRQAhApaMZooATvS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVwfxMtJrnSAVV/JXPmOjhSo+pI/ka7snArnvF9rb3+gzxT7igG7Cru6e2DQBw3wauBJpt1EpxGkxCLvLEfia9aByOteEfCDUxbaxqGmSSEYkJVPTBxjNe6xnKA+tAD6KKTGKAFooqOdmSF2RC7AZCjvQBX1DU7TTLdprqZI0UZJJrgr74waZHOLbTrC7vrgttCRgc/1/SvOtUE3iTxrfQeIdRksbVGJjV2UfLnkZ6dq7Gz8R+DfDQW3h8vzM8vDHuJx3LAUAS3XiXx5qzltL0ZrOM/dNwVXH1ByT+n40yPwn4kvZmk1zxISjAhooolGR25I/pU4+IjXpcaVpF/cKoBSQQfKx9Ac+9Z6aB4z8SytJqN4dMtpD/q4SPM2+nGf50AXDpHgnwlHvu3i8wNuPnSF2Lf7vr+FWU8ZtdkQeH9Du7xFUfP5flIue3zY/StPSPhrotjJHcTxPeXQOfOuWLnP0PArso7WKJcKgH0FAHz9438NavJbp4iurGODU42DmKIl1I4611nhb4paPcaSYr68WG4iUKVY5LHHbjn0xivRNYtoprZw2MY/CvMtW8GeFJ2FzfS28Euc4QhS/Hp1oA4Oy0uXx18QdRvIr27istxCSAkNj0Gegr17RfhpoFpaos1kty3UtcZck+vNYGjap4X8N7IrF5WL5YADG4/jj2rbuPFfiC4AbR9CeSFhlXmO3I+mRQBa8Z6Tb2vgy9t7CBIBswPLVVCjue1eN+DtThXxDYCOVwI2MZQnqCOpI4659K9HvdI8Z+IbVk1G+t7GM4HlRKSGGDnPPvXjd9oKaL4mls4L5N1uPMGS3BHJBwP5UAel+O/GWku1rp9tOkk9tcI7gAEdcYBPf6VY8c21w8NtqFsVRyiv5knKoQR6DI/Ouc8vwld+C57lvsS6iyNIN8g37/bJyPapdQ+IGlXPgizgku5ftS7VkRODx9QQelAHaeGfh/a6hHb6prN5c6lcyKr4mc+Wp68L/jXodro1jZoFhtoox/sIBXl+h/FPRLDS7azg+23lwsagKkeWbnHU4FS3XxcvJJ0j07QLiXcQBubJ6c8KCOPrQB6p5ESJwuBjHSvJvigbaz1/RJ0cPcyEoITHv3DI5HzDHWhfEXxC1qW3gg08WAlJ3zGHIC4HPJODz6c1b0T4Uyyat/aviTUJdRuQcxrIxIQ/Xj9AKAPTdLZmsIS3UoM4GO1XajhiWGJY14CjAqSgCG6uI7W1lnlYJHGpZmPYCvn24vT4o8Xz6izE/vSIIyu0FQMDkjn1/HivQ/in4ol0bS4rS0lCz3DEMuAcpg5HPTPSs/4aWAKyu8SiMgMnyjofw9jQB2vhvTG0+wijdmb5QTuYsQfxroBTEUKoA6U+gAoopkjlFyBn6UAPrnPHM8UPg/UvOdkR4ShZU3EZ46d+tb/AJq4PPSuE+Kt3Evg6VXmMcZkUO69QM9vf8qAIvh1ZPbeGrUSPIzkE5k4JGfTtxXQ+JNF/t/QrnTS4jM67QxBO0+vas/wxIkGj2sfm7isa8k9eK6MXETqPn/I0AeM51r4cyHT59Pn1XSHBc3EKEsgx90j/PWqXhqLTPGfjiW7+wwrZRw+WiPb435554xkf4V2/wASfEAsdJjtLcxtdX7+Qis3OD1PHPt269RWx4A0KDSNGijVVL9SwAyc80ARx/DPw6hEn9nQjb91RkAV538QtK8G6DIJZdPieeQlvLDN859AAe9e63MyQwMzEAAc14qLW28X+OzfyBHsrFikasvV88k888jrQBwnh3ULXTddj1WTZpflg7bS1gZ3de4Zj9K7vwDBdav48v8AXZrWWNJC3lF4tuFyMDkdce9ekRaZpRbcbaAnGCSgrRtmtYeECLjgYxQBrJ90U6qa3kQHLjripPtcIGd4x9aALFZet2y3ljJASV3DIYHkEcg1NLqlumR5i7h2z0rC1fXI442+Yb8AqM9KAPm3SZF0bxcrAqlzbam0ZPHKscdvx7mvqzSpBJao4OcqDXybPJ9o+JUplYbZLzzPlXgnqBX1P4dk/wBAjz/dFAG5RRRQAUUUUAFFFFAFe9hFxaSwkAh1K4PuK8Z+HuoDRvGGoaTcmPJk2qQ+45Hp6D+Ve2kDrXgviBTp/wARr2Wa4hzHIjxiRMMwPIUEKc9x+VAHvSnKg0tVdOuVvNPgnT7roGFWqACiiigArm/HNy9t4XuDHEZTIQhQMQxB9Md66SuR+Icbv4ZZgsZCSqx8xsDrjrketAFD4d232fTW2zq5X5CgUKBj6d/xNVfi7qjWvgt7UqfMvJFjAABHBzznp0rU8A2wTSFm2Ro0h+ZYzlVxxgHJ44rj/jFdS3GpaXpUUe5TmThsHOcD69KANf4R6fdW+kNc3U4kebAwFAwBx1HWvTK5jwNAYfDlqpQKQg4H+TXT0AFBFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSH1oA8T+MqouvaazJbFShDF8l+vtz+NereHih0e2ZM7TGvX6V5h8aIpFvtLnSKN1ZthLqeOfyr0zw1ltDtsjB8sdPpQBtUd+lNA29B1p1ABRRSUALRRRnjmgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgurqG0geaeVY41GWZiABU5rwj4wa/dXepR6PbyuIN6q8aKQWPc5yOPwNAGx4w+LWyb+z/DLRXE4JEs+Cwj6dB3znr0rhxrHjHUUkZ9Yvyzj7hhUJg+5AH4Cuv8LfDwS20LXcKRQjDBAoDk+7D/APXXp1jotlp9qIoYlUfnzigD5z8Gi80j4g2y3VxuLyfMzIVLkj3HT3r6ftW3QKfUV478VtLj06+0vXreGMGCZRK5YcDPYGvU9DvY7vTYJUZWDoDwfagDWooooAD0pMcYpaKAPEviz4Yij1O11QFdpkBcSMcdeevQV1nhbwzoMUYubWygDSLnzMbiQeSMmuj8VaFb67pEtvNgHGQ3oa8e8JX+tJd3ujaZfW5WGQj5uGUZwSvUUAe3w21rBHtVEA9B2qG81Ww0+ESXFzBEvq7gVwI8NavNI0d5rdw8EmAYwSQVyCRmtGHwVolr5kl2RMjYOJmGF9/8aALl18QLfyS2mWNzf9iyKVXPpkiqwv8Axlq1xsSG3021I5dxvk/AZon8WeF9AgaCKWMmM48m3TJz2GBxzXN3vxWuZ9W+waFost0+4AOc4YevA4Ge5oA3JPB+oXasuoa5cyK3UKzLx6dcUyDwPoNpGBM7yhQBiaclfrgnHWsWO0+IfiC5lF2ttYWrjG0sSR7jac5+pp9l8Ir1rZ4b7XLl0LDITIBwc85JoA2pNY8IaBCR9otcx5+VDvbjHHH1H51i3fxStrlGh0Cwe6udp2qyt17cAHP510Fh8JPDtoYzJbvcFOnnyFuevTpXV6f4d03TVAtbOGED+4gFAHjsl18UdaAEFrHZxbeRLhCx7+4rgvEXgXVrDVVn1u9jfdhpJizMOegG4V9ZeSn90Vk6x4ds9XUCaJMgbd20Eken0oA+XbbRPDlvbD7Zfme5Afb5KjYcDjr7j8aqaUthBZXcd1pU0jg5glVScg8AcYyPx719KWnw50KCOVJLOOTzl2yZUDcPoOKcPhv4eimgkgsUi8kggISAR6Edx/hQBx3wz8K29zZPd3+mQFyf3TPGNwU846dK9UttKtLVQsVvGgHQKoAqa3tYrZQkMaogGAFHAqxQBGIY1OQuKdwCB3pxooAKraheR6fYy3UxIjiUs2Bk4FWa8o+K3ifJTQLRgZWIknBYqCvOBke4z+FAHD3d+njLxnLqcgmMcbKsCgj5QM8EZ/XNe7aHYR29mjrGFZlG49z9TXC+BvDENvOlylq8cW3I3OOp9ABwK9QjQKuO1ADhwKWiigBCcDNee+MPiMvh/Uo7GK0M0kgIyX2gcZ/pXoTfdNeJ6pa/2z8UDHgPHbgvknIDdP8AOaAMK+17x8JprmVZhbyDMaoGPr2U8dR37Vy+qXvjjWbGa0ZmmhdvnUfxcdOeR34r6YttIgeGNpY1JxyDUg0W1D/LDGM+goA+aLN/H9jbpFGs4xEMblx5ft78fWtiLXfH0VwjCCd45F2urqMocHnPf2r6EOmW5/5ZLgjrikGmwbcbF46cUAfKF3qPiTU/FVvDfmZ7mIkxgpjHuBX0x4ZhuodKgEoIYICQTzXAzWUP/C6yko+VLQFBt4J+ufrxXrsEYEahQABQByPj7Urmx8MXssDhJFjPNeK6NofjR9EtpNNMcSF/Mz0J69a9S+Msktt4OlaEZy6hsHB69v0q/wDDvbdeFLORkIJXJDdc0Aed/wBjfEt7YPJdRZcD5QOR9SPp+tUy/wARLOZYzpd1LKON6sChHQd/xr6ISCPGAoxT/s0eANo4oA8Js7/4lNEY5fD0JZl4LSbdv15q5DefEWKMJNpER7ZWQADj0z/WvbFgRf4RTvLT+6PyoA8JudW8c2r7W0BpQevlycZzXP694s1l4pIbzQbyKQowRmhbHTnJHBr6UaCNhyi/lWVqenwPA++IMu0kj2oA+SrQ30fiG01K3hKOyCQlssuemDnp0r2fw58Tkt4xBqto1s69XU71PuMVS8Gx6drV3qcEcI8gTYVJFBPI5FdXd/DjRbiPzFs0VwSQUJXn14oA67TPENnqFss0NwjoTjIP+cVso4dcg5ryWXwheaPbtJpt1KSSDsOOfqa7nwnqMt3pyLcLiZRhqAOjooooAKKKKAAjNeUfFvSHMdpqkEKtNG2xpCGJA4I6ds16vXI/Ea2a58I3Zjj3vEBIFyB0PuMH6UAWPAmof2j4Ws5eM7AOPaumry34RaqG02TTnJ82JskFcbQexHY+1epUAFFFFABXPeNI5ZfDF2I7eOf5clHJHA7jHJP4iuhqte2iXtpJbuAVcEHIzigDkvh/qIuvDsLi3MK5ICBiQADgYzziuL+I3max44sbWCN3+yBASgY7SxyT6DitGK08X+Ebqa3srAajZs+UkMxyoJ9McU3w14O1O71+bVNbt385nbLeeQp5zwuM45xgntQB6RoVkLHSoIB0VABWnTI02IFHQCn0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABQelFFAHjvxwQQw6ZdFJXIkIAV/l455Fd74Ju1u/DVnMq4DRg4Ncn8cNPmufCUV1Ark28uWKdlI5P+fWr3wm1JL7wjbAbgYhsO45PHrQB6HSZ5xQKWgAoopMc0AKfakIBHPNLRQAUUUUAFFFGaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK828beBr3VdSj1TTzB58TBgZFyQB1AFek0UAeOx+PtbsporOXRXEiD96VGR+h4/GqsnjfxRqTuLeMWq7tuBAzsOevQ/yr2GXTLKWTzHtozIP4tozQmnW0WPLhRfooFAHher+G9f8bRyo9zOIkXhrkEbj6hVwMj3rY+E3iGaC4m8O33Fxa/KuZd+QOPWvYvs8YHCgV4j440O98HeMIfEGjx3LQ3JJuBFGGVfrigD3FG3AEU6ua8I+JIfEOkx3MeVb7ro3BVvSuloAKKKKAGsoYEEZB6ivHPEGg6loPi+XVdF04NCRl1xhMHk7RnrmvZaaUU9QDQB4TcQfEbX7mGSFBaQN95CxRQPww3b9a1D8KdY1VE/tPXHAXHyxK5Hb+8x9K9iEarjCgYpcAUAcBYfCTw1atulshcNxkynIOPbpXXWOh6fp0ax2tpDCijAEaAVpUYoAYI0AwBin4oooAO1FFFABRRRQAho60tFABRRRQAUUVXu7uKzt3mmcIiDJJoApeINZh0PR7m/l5ESZC56nsPzrxjQ9Hu/GHi+bVL5JGCnzFkU4UHsFIzkD19qb4g1m58fa3JFbS7LS2YJsGSeTxwOpPH0r1bwl4fGkWYLyySSOASXxx7dPrQBuWVosECKFwQMVcoooAKMUUUAMmbZCzHoBmvIPCPl3fxB1KdVfjJwWyFye49eK9P8AEF/Fpui3VxNIqKqHlumfSvIPhFP9p1jVZWDbnl3FuMHnnpwKAPcEA28UtIn3RSlgo5NABikbgU0zJn7wp2QQDQB4/wDEMTaF4/0TXEJMMw+zPnO1ee/1DcdOler2T74FPqAa474q2P2nwXPOhZZbR1nR1AJGOp59q3PCuppqOg2VxGxdZIVO4jGeOtAHP/Fm2abwXeSAHbFsY7Dhh84yQas/Di0S38K2UaoUCoDtLbsZ56961vGNi+o+EtVt42KyPbvtI6ggZ/pWd8NmR/B9g6xGMGPBB7kcZ/HrQB2KjApaKKACikyKWgAqlqcRlsJkUgMyMBn6Vdqrftts5W9EJ/SgDwT4TK0eu6gjAgo5UhjXvEaAQ7cdq8O+Dn+k6jqlwY8K8xwce9e7oMR4oA5vxX+48NXswk8po49wcdiKh8B3Au9DgmLByRyao/E+/ay8FagVYAsmOe+fSmfCuPyfCdqVZiGG7a2cjPbmgD0KigdKKACiiigAqvfWyXdnNA6grIhUg98irFB6UAfPvhidvDHjiS0mkliHnmJlcEKeeAOTzXv8T74w2eteI/FfSYNH1qHWVlECS8gsxI8z2UeuBz+NeieANei1zwzaXCS+YdgVj/tDrQB1tFFFABRRRQAhUN1FAUDpS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAc546sH1HwfqVvGxVjEWyD6c4/SvMPgtqRNxeWRLbVwwDBvpxkmva7uPzrWWPOCylcjtXz54EaXR/iTcW01wCzyOjKAASc5BNAH0SvSlpkZyo9MU+gAooooAKQjNLRmgAooooAOlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+I9Gg13Q7mwuE3pKhGM457VrUY4oA+c/BfiGXwF4hvNH1RrnyUIGWT7p+p7V9A2N7Fe20c0TBkdQQR3Fcj478BW3iW1ee1SKHUgPknaMNnHIB9q5Hwb4svdG19PDusTOZvuqHQjn2JPT/ADxQB7PRUcUqyJkGpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqte3sFhbSXFxKscUalmZjgAUASXFxHbQvLKwVEGWJPQV4H418Xaj4u8Q22l6Y8kdirMroCVYtnHzDg+nFL45+INx4kv4NM0iO5k04uVmaIOhJz6gdOD+ddd8N/Cr2gnuriMxrI2FgOcLjvzzQBpfD/wAGR6FYh5Ubz5Tufcc5x0/Cu/CgDApEUKoAGMU6gAooooAKKKKAMPxcJD4avPKkEbbPvHtXl3wbtDDPqEhlEpaYkkZwDk5xXo3jiWQ+Gr6CKJpJHhYqB3IHFcJ8G45Psl28vMhmJcbQMN34FAHrk0yW1s8shwiKWJz2FePajrmveLfGFzpukai1rZRxDLREOOfUjoecjB7V69eQtPZTRKcMyFQcZ7V4n4R1a28I+JtTstbZbWW4lBjkdcKevBP+cfhQAzW9D8VeEbVNSk8TXVxaRuoKc888Z56Z6+tet+GtTOqaHa3LSpI0iAlkOQT7VU1q/wBPfw7dSyTKYREzblIPAGeOtcp8HWnOhzNuU2jTsYAo4A/T+VAHomrWq3ul3Ns4VlkjZSGGRyMVwPwnuh/Yk9gH3LaTNEDjjHbsOPwr0lhlTXlfhaVLD4k6/pkXl+S7B1WM8KRwRjHB5HQmgD1G5iW4tniblXUgj1BrjPhur2Wm3WlzzCR7S5kRcEcLuOOB0rtVwYwfavOI86N8WpY12+VfweZtwAdw6njrQB6ZWdrOtWWh2LXd7JsjX8Savo25Qa4D4qC8/sMPDFGYF5llOMoM9skdf6d6AKFt4/1nWLm4bTNN821jDeW6xs24joMkgc/pir+k/EbfeW1hrGn3VldTyGNd8TBCeoGff8a2vCsNmuhWgtFUReWMAdq534ovbLosKji6SUSwlACysvOee3r9aAPRUkEi5HSsjxXP9l8K6rP/AM87SVumeimn+HbmS90O0uJV2vJErMPQkVS8cyNF4N1hlOCLSTB9PlNAHl/wMgB0+5kKEO0uc8jPHpXuJ+Vc15D8F4VGhM4i2lnI3HOWAr1xs+TnvQB5p8X5RH4QuEL4yR1HXmtP4YMW8J2I5BEYBB7Vz/xjmK+HBGzEb3AI7n6cGun+HSGLw7aoChQINpXjjFAHbY4paKKACiiigAooooA4/wCIegnWfDzNDEJLm2y8SEAgnvwa85+EesSWmtX2jysE+YyKm3b7HA7c/Wvc5oxLEyH+IYr5/wDFulXHgnxqNZtgxUsgLbc71P3iTwBQB9AowZQQadWXoWpQ6ppkN1A4aORQwI961KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAQjIxXh2qA2fxnhR7ss7Hcq7AAqkdM17lXzt8X0u0+I+n/2WwW7mVVU4OQ2cfyoA99W9giiDPIqjHc4qW3u4LoboZUcf7JzXjWn/DDVNaTz/Emv3s5PIhjkKoo9KVtJf4Y+I9ObTr6eXT76TypbeZ87T6g496APa6KjhbfEr+ozUlAAeKTrS0Y5oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKO3FAAfeuC8f+Ax4jNtqVjItvqVo25JMZ3L1wa7wccUYoA8h8H+OtU0/Vjo/ih4I2ztjn+4GPHBzXrFtdw3MSvFIrqehU5Fc34u8Ead4lspA9tD9q6q7L3968tutY8SfC55be5MU+mn5rchcKvP3R/nvQB77RXO+EfESeI9Dt79MjzFGQRjBroqACiiigAooooAKKKKACijtSbh3oAWioZbqKEZdgB6k1mX3ifSNORnu9QtoQoyQ8gBoA2aY8qRjLMAK8t1T406YJJodGs7nUnjBLPGu1B+J5x+FcVrV34x8YQXb3V+2m28OcWseUJOM4zxu498UAer+KPiToPhlCs9yJrn+GCH5nP19PxrxzXfFeqeOb+Czu9Ri0+ynkA+xrLhth/vY5yfetT4baDp955iTwv52AxaVQTID33YJro/HfgJ5bSPUdGRUuoCp8uMY3gf4A0AbfhHwdBpUcJR1EaA4RR97Pqe9d/DEsaAKBj2rzH4a+LZdVR7a9lthMpwsaONwA7Yr1FDkAjFADqKKKACiiigAooooA434kSLF4Q1Bvl3NCUGWCjJ9zXM/ByPy9FIDpJ8331B5+tbHxZvUsvCFw7xrIGO3axIz+VUfhKmNJY+V5cZclFB4UegoA9MByOKy9Y8OaVrtv5Oo2UNwm4Nh1zyK1Fp1AHk198FbW5u2Carcx2Mjl2tx0HOcL2A7dOleiaHodroWmQ2Nom2KJQoHetXFGKAGkcGvI4oxZ/HC+KBV+0W6ltxJJOByOMdvXtXrrdK8lvrdrr40F2KqsFuuMMAxyPzI5oA9WiOYwDivKvH7f2d8SvCt4MJ5pkhZy2MjI4/8eNeqQ/6sD2rx34zSKPEXhbEsYeOd2AJIOcpj8OKAPYbVt8Kn2pmoWEGpWMtpcorxSrtZSAR+tRaS5axi3HLbRk1foA8v03wz4r8JXd0unNb32nytujikfZ5XHOB2zz+NUJtG8X+KdWifVbOOysiSrxq4J25POcZz36d69fIB6ik2gHOKAK9larZ2scCKAkahQB2Fc18Rbz7F4H1SVwOYtg43ZyQOnfrXXVwPxbVpPA1zGhjDeYmC/Tr+v0oApfCazW28LWxXb8/zHb78/hXo7DKHPFcf4BhWLw7ZqoAUIDjGO1di/Kc9PegDxn4zNGBYpIygFuVZsA+h/Miu38CxsuhwK2wsqgZQmuA+NLLLqOj242lmf7uRzyBXpnhCLZo8A8sIdgyBQB0g6UtIOlLQAUUhz2pec+1ABRRRQAVynj7Rf7X8N3KRopl24BKk/wAufeurpCoIwQDQB4x8NNcudA1Q+GNVZExnysuCc9x1r2dWDDINebfEnwxFcaadTsmhtLq2PmCQ7UyRyDk8DmsvwL8VrW8MelatOF1FTtYqMo2O+RxQB69RUUM6TKGRgRjqKloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAIbqdLa2kmc4VFJJzXzlpl7F4s+M0l4VHkwkugycjHHOa734y+OLPRtCm0eOUtfXIGYwP4M85PavFPBcXiW51C4k8MWu15WAaZ8N5Y9MmgD6Y1zxHpvhnRjc3soGOEjU5Zz6Ad64nQNC1fxtrUXiPXyYbeM/6LZquMLnILe/frSaR8Jrm/u11DxVqc1/OGDJHvIVPYV6vZ2sdpbrFGMKowPpQBNGuyNVxjAp9JgdaWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAry341yxx+F4oXQN50wUg+nWvUq8h+M80qTaOgO1GlIzvZf1H+FAG98MbSK38LW8cb7geT8wPX3FbHifVNW0SIXdlbC7g6OnAMY9c9xWL8Mk8rS5sNuXzTgiXzM/jWp8RtSOm+C9RnRdzmPYBkjrx2oA8+0T4620kc66tbvFMpwPJXcP51pQ/GzTmUM8ZXPCocFjjrnB47cYrK+FHh6C7spZLq1Rmb74kGck8967+T4Y+FZpzO+kQGQnJwCB+WcUAYH/C5tMMiFIS8JxudW5XIzyKuWvxa0ie9MTB1jwT5nYfX0rQk+FnhKRNraNBz/dyP1Bqm/wc8JPgNYSFR0H2mTj/AMeoA1U+IegSSpGL2MblLAswA49zWRd/GTwpatsF20jdD5abgD25HFKnwd8J7gWsGIUbQDO/TrzzzWhH8MfCqQpF/ZMJCnOSSTn65oA5K4+NaXhMOiaRc3UxOEMmEX3z9BWKviz4laope1isokcEqNvvwOfwr2K38NaXbBRFZxLtORhRWgtnCmNsYGKAPnibTfHHiC4SHVr6+kgYgukEe1VyPwz2/OrVp8I52mEksPnBehdmBP1BBFfQC20S9EFPEarnAHNAHnnhv4bWWnWXlXSCYMPmRhx34x0xya6q78P2s+mTWQhQRyJtxt46Vt4ooA+f7ayv/h54x23Twva3IBZlkKKuSBkKele1WlxFeQKyOrqwBBByDWF8QPCMXiTSHeO2SS+hQ+ST/Lr/ADryTwz421HwhdXFprZvQI2IdJEDZ5xweMfmRxQB03i7Rm8I+J4vENjAxtZJAZ9spyGOc4XGMHjnNeo+H9TTVdLguowQsqBgG61414y+JVj4h05dJ0lLuSaV1DMEwAM8jGcn6e1ereDNPGmeHrW3UMAEHBBGD347fSgDpqKQHNLQAUUUA5oAKKKDQB5d8Y7/AMnw9Cik4kl2/KMk8HpyK0fhlaNb+HomfdlxnkYrA+M8wj061QjAably5G0Y6iup+HWz/hHbfYxZcZzQB2oGBS0dqKACiiigBkjhUYnoBXlPhvfrPxC1rVD5bRRyG3RkOfukY/ka0vij4wj0jTRpVo4bUrzCJGOwJxnpVr4feHl0HRokKf6RKA8zddzkcnNAHbJhYyelfP3xkvTfeNrWGEyuljbgyBOiszDHfnqO1e5avqcOkaXc39y+2GCMyMfYV8vHWJNY183kqP5moXZnYIfuop+XPtn3/hoA+oPDrbtJtzz/AKscEYxxWvWR4dDrpNuJCC4QZwcjpWvQAUUUUAITgZNeZ/GuZk8AzbGKt50eGHY5r0xvunNeX/GCUzeG5LXA2E5x7gUAbvw7Yy+FtPdydzQLuBHtXYv9yuW8CR+V4asVCbP3K8fhXTynCE+1AHiXxMFvJ450pZIpGKgAYbAOTzXrmgxLHYRqoKgDjNeJeNbqaf4tWtuJFEaou7Jwe5H64r3LSc/Yoic/dFAGjRRRQAUUd6KACiiigApCcUtch8QPGEPhTQmmLETyHbHhd2PqMigDzn4veJ5bu4bSYWk+zJwUQ43sM9+T1H04rm9J+E92fDaarMkjXTjzDAnDBcduDz3xit74eeGJfF2sy+J9ZQsqvi2jI2huepXJ9u9e2kRWtuxYqscY5zxigDwDQPGXiDwXGyXEcuoaYkm1ssd8Ptz/APq+le4eHfFOn+IrBLqzmDA8FTwVPoRXj3jIHxZrc8dhGbaEfKJEPzSkd9vcVRvPA3iHwcbS+0m+mUkbpnjjdgTjqyjIP40AfRYIPQ0teM+D/i23nrp3iQrDcY4nwArfUDocV6xY6raajCkttMkqOMhkbINAF6ikDA9DS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTXYKhJPSlJwK8u+KfxHttAsm0ewIuNTuVKbEbmMHucd/SgDyr4k3/8AwlvxHWxstr7XEOPLAz65IPP6V9AeD/DltoWi29tHEqbUGcDqa88+Dvglra0fWtRgYXU5yokXBUV7QiBVAHSgBcYpaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArjviJ4YbxFoX+jxB7y3YSRYA3HHUAnpmuxooA+eND8eXPhO5ayudNlhjMzNNHIeUJ64PcDHpS+MfGzeOHh03T4m+wo4Msjgjce46jGPfrXvU+l2VyzNNbRSFhglkByKz4PCml2lx51tbrAS+91iG1XPuKAMrwH4dTRNIQDfuf5jubOPTHtXY01VCDCjAp1ABRRRQAUUUUAFFFBoAKKKKACiiigAPNc5rvgrQtfmSfULBJpU4BJI49ODXR0UAcBZfDHQbS8S7FnskVy6qJDgZ46fStDW/GWleG0iSVy5ZtuF7Duam8Z+JrXQdJmMlwYZ2Q+XhC3NYPhjwlHeJHquqg3E0igpHIvES9cAeueaAJ5viro8chjEdwTtVlYptU7unJ6fjU1l8S9LuGYTn7NGrbPMdxgn/PrWjrGmaVZ6a8k9rG0cI3AFecgYGMflXlCeCG8bu18IRp0AI8oqN24eu3oO2KAPQ5Piz4WilMX9oKxDFdwBxkenHP1HFVZfizpS2UV1HBcywyMRuRRgY9zXIX3wk02x01pjfuJflJluDnBAxwBjnFVPDmh6Ba3cfm6nLcsrMzI6bUZyeoBGfwFAHrmkeM9I1oL9luQWPRDwa6IMHFePax4ORAt/ody0LwfOYwzNk9eBng11/gnxC+q2EgmlSSSFyhZQQD+fegDkPjikv8AZVvsTcsjEOTjaBj+db3wpYDwrZxhydsYPPoaPipGlx4ZmXIDhSVwMnPtWH4H8XaVYaPZW8lyiyrEqsAp/oKAPYRS1zdt4y0eV2j+2orL1D5X+f1rQj8QabMf3d7A30cUAalQXcy29s8rttVFLEnsKpXeu2NpEZJbmNUHcsK8q8R+L73xfI+m6QG+ylgC4I2svct/QUAVbCJPGHj+81h1ka0tyogDD5D23Zz7V6vZuxiUqCFA4I71ieGNEWy0uO3djlQATk5JrS1zWLLw9pE17dyCOC3jLE9z6CgDhvjF4oistC/sSNt15qLKgjU8hN3JP16fjXlngfSxdaxOfJaSRR5UAldcjtk/TAxVVdWPibxnc6zeFwS+63i3btpH3RjqQOOldt4DtHXX7uzeQSSo6uXKksOmevA6e9AHuOhWv2PTLe3yT5cYXJPtWpVS1KpEoyM4q0CCKAFooooARuleSfGKbZpcMO1h50oUMDjBz1r1osOfavI/ivcR3Os6Dp6fO5nMjgdAg9fx/lQB3XhbbHpUEa5+RAP0rXvZlW2ZmOB+Vcbpuvw21gXWWMckBc8gjrXM+MfiPb2VqUiuYmlbIEQyxb8ulAHLeIJI7740wIJjtUIQFUnkf5/WvoHTwFtkyOa+dfA2kalrfi19beF4lZg+5c4bkdz9OlfRtpGy26buDjmgC1RRRQAUUUUAFFFFACE4rwD4i6nPc+Njpk1yfKlmSNleAYVOcYznPJ64/SvoCvOPiB4GbVLuPW7Qb7uEjcrn+Edlz0oA6vRba203SoooEVUVflCgD8q4jx74whknk0eC8SKEIfPkjAkYt3QDt/n3rL1P4h6lp+k3FsmmtFdJGNrO2RzxkAc+ntWL4F8EarrZS71gSC0di5jYjD85zggn+VAHcfDvTYNjzwRbISdwzbmMnPPf+lejeUhXaVBHvUNjZQ2NskEKBUUYAA6VZoA5TxF8P9E8Rw+XdWwQ7t2+L5Tnvn1rzK+8F+LPAU8l74ene6t2bHlld5Cj2xx+Fe8UhUHrQB45oHxheAC28SafNZXAbaG28MR14PSvRdH8W6RrKqbO9jkLDcFDcge47VJrfhTSNetmgvrKKQMMZ2jI+hry3xD8HpbGeS+8O3LxOoBjiiAVwe/Pf6cUAe2BgRkHNLXzraeNvG/hW98vVy91bg874vmB9OAK9E0P4vaBqUaC5uBay45WXgfnQB6NRWXp+v6ZqW4Wd7BPtxny3BxWmGU9CKAFooooAKKKCcUAFFJketGR60ALRSZFMeeNBlnUD60ASUhIHWuV1j4ieGNGjka61e13IM7EkDM3sAO9eX6h8QvFHjbWF0Xw3ANOtpAS0zEO+z1P936daANv4pfEG7sLiLRPDt4BqEjYl2JuaMUzwF8MJYr/APt7xBJ9qv3+Zc8qufb1rX8DfDGLQ5Dfam4u9QZtxlOT/OvSkQIgUDAFADIYEhUKigKO1S0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRzmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopCcUtABRRRQAU122oW9BmnVBeRvLZzRxuUdkIDDqDQB5lp8Fx4p8X315c3E62dpN5aW8i4DEE/pz0r0y3iWJMKAMdK8j8L6zd+FtVudO1oBFlmLrOzg4JOMHvj0r1iC9ilQMrqQQORQBxXjm4N/qlhoUYyJn3z8sMIPp9O9dZZWkdvaoiIqoqjAAxgCuN8Y3KaX4o03VH2+WcxyPgZAJAHcevvXa2lzHPbIVYEEfnQB5l4quJ9cuL3yrhktrBirwKSBIVIJJJHH1FcBJcajd+Rc2cX/EvjGwOriVl9eSK9A8TB9A8STNc29t/Z2qN5X7r72ccEr375PTj8+O3aj4aWa0gtTc2Vw37uZSXVQcBQF3dvY+lAHT/DvV5r+7u7OZxIygPvyvzA9OAOOK2NGt5dL8cXlksyCCZTOkWQOvXAznrnnHeoPh5ol3psM1zfCLfJ90LGFIX0J71Jb36ah8SJ/LlXybWFRuCg7jzkZ9OaAOm1/w8uuaVcWc6qyyqeT2rx+7+D9ylwxhu2hBPygZIB+mc174L2FU5kX865PxH448P6KB9puPNm7RxJuJ59enb17UAeZD4deKEDbLq0kj6BZEznHrnr0qhrGna1oVm8+oQWqLtz8km3OOcAd+nSusm8da3rl39h0S1jhLtt84kOV5644GMZp+l+AtZ1TWTe65M2ApUIspcN055zgcdPegDymLRvEPie6DWlvKsIPzHc3AP8J/Lt717D4K8HS6HGjTA+a2N/J5Nd3pui2mlRiGKJIlJ4CjqT1NWb26ttPTzZpUjTbuJY4GB1NAFa7voNKtWnuZUijQZZ3OAPqa+ePHnje88YasttbRFtMtpOEjyzSEH7/A6f5711/jHV9T+IGoDw9oihLIMHmmZseYAcg4646H8RXUeD/hpFpGJ70pPcFt2SgO04xwev8A+vpQB4pothrVpfw3jaTclQWIl8snGe9dRb6xq2k3dxc/ZngncAnMf3+ccYPJ5r6CTTIEIXy12g56U+TSLWfiSFGGeMigDxS2+JOpQuqTz26sUVtsgZTk9QePpXS2XxNYRRNLJBLuXLbGHHX361383hrTbhcS2sLfVBWXP8PPDc+7fpVsdxyfkHNAGMfihZQSBbhkXI6hhjP1qRPirocinZcKSOvP6fyp1x8IPCk5UnTVUr02Ow/rUSfB3w0kBiWKZFJz8spz+dAEsnxM8PvF/wAhCJWY4wxwRXifjnxLHdeL4ryxnW8hVSqKhO7cc55/pXqOpfBHTJgDaXM0XB+V8MD9as+HfhLpmjNHLOi3EyfKrMv3aAPJNB0rxV4kLQ2pNnCW+Z5Mg47gc16f4d+EFhZqsl9/pM27cSxOM/jXpdppNtaALFGigdgK0FUUAZunaNbadGqQxKgxwAK1BwMUYpaACiiigAooooAKKKKACggEYIyKKKAKUukafNMJntIWlAxuKDNWY4UiGEUAe1SUUAFFFFABRRRQAUhANLRQBTu9Ms70AXFvHJg5G5Qa8z8SfCKzup3udPjjA2sPKcexxhuufrXrFFAHy5N4Q1TR1WSGa806dDiRmf5XGOMMMYPPT/Ctm21vx3pKCdNRW4BbcUl4IBOOjV9A3Vha3sLRXECSxt1V1yDWO/gzQ5GJOn2/IwcoORQB5tb/ABY1vTmA1fTbdo1GZHhlGV6Dkc+tS6h8c9Oj025VLaVbwDCRv0I9c12E3w10Sa5LNAPJP/LIcDPrx35rB8QfC3Sk069ubaFDKsDBN8QbHH0yTQB1PgTxHL4l8O29/NEEdx0Gfz5rqeK88+E11NN4St/O270Jj4GOAcV6GfXvQB498UfGGo+GfFFj9gDuSikxjJDDOMdcD69ax5PjN4jjuWtx4fiSULkBpi3b2wP1qv8AFbF58RrO1QkOYFQEHBGSeR713Wk/CzQjpQW4tS00q5kkLksTj1PNAHn83xT8Y3SsVOn2cT5UMQSQfz61yl/qeu6nEkl34kv5mlXKW0CuN2Tj1xg+tfQ1j8PdAsYfLSwhcFs5dQT9PpWrH4Z0iOUSrYQBwRg7BxigDwnwz8HL7U5o7jUkSGA4bY65Yggcdua9t8P+ENJ8Ow7LCyihz95lHJ+prfSNUGFAAp1ACAADApaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSY4xS0UAc5r3hHTdaBea3UuevbPvx3rirjwjr2hzJLpupXrwg8Q53BQBxnJ79+K9YprIGUgjOaAPDNb1PxBf6fd2OqaNHdIn3HZgjZ52nGeO361m+FPibPokq2OqWF3FZLgJK53CMHoM+le8XOl21yuJoUfnPIrndf+Hmia/DHHc2igocq68Ef4/jQBFff2X4y0MqsqTwyqMNG344yOledXmkeJ/D8cQsXV4FYhvNcuuOMfTv0FbFx8OdV8O2bHw9qV6SPuw71C+vPT6cVjw6x8QLOTypdLS7jTAPnL5bN+vP4CgCOLxX4xuLVo30nZBICPOtkZic5HHPHY5pdC+H+orElxcRsWn3NNH9oZX5IIPoCKlPjrxDbMRP4aZIwCQAG3NgjoMe/61YPxTvYYVkOjqrM5QI7spJGAQRt96AEl+G+pSyKqXcqxA5xLKSxXGNucfr798c7enfC/To5TJetLO4AVNzk7FByFHtmqB+LhjSLzdDuE81tm8uMA8jnj2NSN8Vbsp5MHh27e8JIKg/JtHG4NjkcelAHotlpNvbRqqRKu3oQKvuYYEyzBVAySeAK8oHjrxjeSE2egpFEEDATElm57Y+uaqQ6H4v8asH166uLKzddptY22fXp1/H1oA6rxF8R9HsyyadINQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" } }, { "ID": "750b9cccab5805a7", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:28 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnjZBtzHY-xQsslNX6DpcTHqzAZyhpqNoNnz-A8aubSVvlkA6eEcq8DYNWKLW-hIqzk5Vctb7WMlmfLPH0lmH4" ] }, "Body": "" } } ] }a_large_jpg_file_written_in_two_chunks.replay000066400000000000000000003500151367004507500356010ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSDwFv4PBv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "18f23c9c44838d54", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2775" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:28 GMT" ], "Etag": [ "CMPYza2L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkGjCtXK_DlXzdtgiijrLZfPXfPdve4bBrwpSVV_PQI8RHB2poPfqFLMqkxGzkXehd8EGfv0lya7WZbBhcIdRM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY4NTkzOTg3Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2ODU5Mzk4NyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2ODU5Mzk4NyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiaW1hZ2UvanBlZyIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjM4NDMwIiwibWQ1SGFzaCI6Ill0US9vZzV3djZIOXNpVVEwY0JnMGc9PSIsImNyYzMyYyI6IitEWE5MUT09IiwiZXRhZyI6IkNNUFl6YTJMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjguNTkzWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjI4LjU5M1oiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjguNTkzWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2ODU5Mzk4NyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njg1OTM5ODcvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01QWXphMkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2ODU5Mzk4NyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njg1OTM5ODcvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ01QWXphMkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1Njg1OTM5ODciLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY4NTkzOTg3L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTVBZemEyTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2ODU5Mzk4NyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njg1OTM5ODcvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ01QWXphMkw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "99ec20a13439b78c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:19:28 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:28 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683568593987" ], "X-Goog-Hash": [ "crc32c=+DXNLQ==", "md5=YtQ/og5wv6H9siUQ0cBg0g==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "38430" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUl4PQL89x6R0epXq2Yg6CeX00nzI6VaGnRjoDfgZZIxct2pb5zzdOd47QO1e46lEuonoBxpKapqCAKBA4T4dDM" ] }, "Body": "/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAH0A+gDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKDRzQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFMkkSJS7sFUdSTQA+iq/wBth3Fd65xnGamV1YZByKAHUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAAGBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFNd1QEsQAOpNADqKwr3xhoVg+y41O2jbjgyDv0qXSfE+ka2hfT76GcA7TtbkH6UAbFFICD0NLQAUUUUAFFGRRQAUUmaTcPWgB1FN3j1FKWA7igAZgqknoK8H+InjWbVNZfSLB7zCtsWOA43sD349vf8ACvV/Getx6H4Wvb9tx2R4G3sTwDXm3wm8OQS2cmuXRWe6uJGdXcElBnpzQBg23w/8ZzWx1VdRe2ugQ8VqJTwPQt612HgDx3qt/q02haxAqXlumWIBBbnuO3avTFjQRYwOBXjscsQ+O935TNkxBWA4Gdo6468etAHtkbbkBp9RQf6sfSpaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAzzRRRQAUUUhIHU0ALRTd6+op2QaACiiigAooooAKKKSgBaKKKACiiigAooooAKKKKACkzzS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAjHCk+leGfFLx1Lcu+jaeWVt+C5yuSO3PHPrXtWoXAtrCaYnARCa+f/CsVpr/AMTrm4kh27GJH/TQjvQBteDPhLb3lrDqOuhppZIx+5YkY5zzg81ual8Jbe0/03wzdy6bfpkptfcjcdDnJ/KvTII0hhAHAAqG21S0unZIpkZkOGAPSgDzjw58R7iz1FNC8URi11PzCgbGFcdiPY9K9PhuEmQMjAgjNeY/GDwuuraL/adoyx31mCwbpuTuMiuK0r4u3dn4dWK2t/PvEUKzHO1T0+tAH0M0iqMkiqN7rVhYQmS5uooVHJLuAAK8bt9b8b+I51tSk1sHhwxQfu8nnduAz07Z61sxfDDU7u1SS91udpjy6uisufUZHB/GgDrbvx5pdtG0yTfaI1++0QyE6dfzFY//AAtrRxbzvtuGkjJxEqZLc4GCOOfrUtn8KdFifzLjzbgk5Ikbg57YHaujtPB+iWciywWECSKMbggzigDz+/8AjEpkENhp879N7MCpXjJ4I7fWs+38ZeM9TZpNP064G9SYy8W5Poc4A7cjNewLo1gq4FrCBnOAg61Zjto4wAqKAOmBQB5E918S4oTO0NvgA5QqWJ54IA6fmaW3uPiUbIl4UM8pUpkj5Fzzn3wf0r2DYuMYFARR2FAHjEuieP8AVdMeO+lhk8zG23lVQFI65I/+vUdnYfELSVjgiht4oUXhLeNNuc/d59QeuO1e17B6UFAe1AHkJ1P4kral5LW3B3bQvl7mJ9eD07Dp71xOneIbnS/HtzfavpzQXHypcm35AY45Oe2PSvpQxqR0FUP7HsvPkmFvGJJDl22DLfWgDldD+JWg6mgCzvC27afPQqAc9CwyM/jXaQXUU6bkdWHqDmuO8Q/DTStaVmiZ7Nnbe4twArtggMR689f8K4dPCPjvwlqAbR7yXUbJWBWIyhV285BDd/cUAe35FLXmWj/FKKG6+xeI7cabMuMlycZ98jjPNei2l9b30KTW0qyRsMqynINAFiiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkJAHNDMFUk14/8Svik2ku+j6Q2b8nYxGcqT6Y70AdX4z+I+l+E0WJmE94+QkKHOD746V5i+vfEfxvI0mnIdOt1YDumee2eTWt4E+Hd3qdxFrPibdNPnekbnOOc5P8AhXssNjDCiqiABemBQB4LeeGPiNpdp9rbV5rnaQzJFKxbaBzycelbPgv4k6hFd29lrMwlE+7bIy4KlTjHGc+tezmNSuCARXm/xA8HW0Wh3OraVFFb3to5vC2OHI5bd+FAHpEUgkjV1OQRmn1zHgjXBrfh2zuiyF3jBYIcgHvXT0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUCigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDm/HAu/8AhGLr7Jy+35lClsr36V4F4V1P+yvHscqPuieQq+8EHBPvX09KgkQowyCMGvCvif4Hk066XW9LgJgiO6ZUYIUHc5oA9vgkE1sD1BFeF+LdS1Dwd4s8+CSRoZpCxYrhR7H1r0jwf4lh1Tw/bzLICdoUgsD04NR+JfCFr4ihfdEjyEEpuJ2nPrigCDw74ms/F2nK6uCRw6MO/wBK85tLaDwf8UrnT57Um01Ah4eBjJI7exroPCngHWfC3irfAXksHHzlnGB9PU/hXoeueD9M8Q/ZpL2FvPt23wzRsVdD7EUAatlbxrEpRQBjjAq6BUdtCIIEjBJCgDJ6mpaACiiigAooooAKKKKACiiigAooooAKTaKWigDmPFnhKz1+xYmygmukH7vzRgH2J9K8ut18VfDAtcmyku9IL5ljik3LCM9VHX8694qOWFJkKOoKngg0AYnhrxXpvifTY72wuFkVuGXoynuCOxrf615l4h+H13pt1Jrng2b7Dfg7pLVR+5n9iOgPvT/C/wAUoL27Ok65bHS9WiKpJDKRhiRxtNAHpVFRxyrIqkHORUlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVa/keOxnaLmURsUGcZOOOaAPNfix4/Gh6c+l6dMpv5/kyhyUB6/Q1zfw5+Hvk3S6xrDia4kXKIQSFzzk5715idahtvFM97rllNc3CSNiLO75857mtS/8AiP4k1W+SbSEmtYYQFjRTlQfU9j+NAH1NbNFHGFUjgVP5qk4Br5k0i6+J2syzPb3txFIcYUqFTBHXNbF/YfEnwzbNrl7rxniiw0sSMSAM+mAMc0AfQqnNRXltFd2c1vMu6KVCjqe4IwRWT4T1pdd8P2t9n5pE+b69622+6aAPHfhQyaTr+r6MVdHimb5cgrgMRwevQDrXsleFWVw9l8b9SSGDejNyzM3yBgDkDpyT+le4RSB0BHTFAEtFFFABRRRQAUUUUAFFFFABSb1zjIzXGePfHEXhayEEGJNQnGIowRkZ4Bx1PPavJp7nxvcvJqckOooWVZPMVDwvU4xyOO2B0oA+jcg0V4l4d+KN3pl3Fb6zPFd2Uj7Eu425QcD5hjOM8ZNeyWV/b39vHPbyrJG43KVOcigCzRRRQAUUUUAFFFFABQM45oooAKKKKACiijFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACMcKTXkvxX8cPpsf9iWNsZ7q4jOcgNt/4Dg5rr/GfjO28Lae0hTz7huEhVwGOe/Nee/D7wzceINduvFOsRyM0r/6OJjk7fXGPyxQBw2gp4m8Hz2zzwsIZz54DcKOuVx2r6D8Oa7bavYQTxkB3UNs3AkfXFR+KPCNt4j0OWwfZG5H7qUpkxt6iub8HfDm88MysTdpIdy/OAQWUHoc0AekqB1xwafSKMACloAKKKKACiiigAprNtHNQXN5DbRs8jgBQTXk/ib4nHzZLPSZvtN0GwIYoWLNg84PT/P4UAeszXkNuheWRVAGck4rIu/FemWgQyXMY3HH3xgcZ5ryo6J498TuiNs0q0YjIaUvJj/P0rorH4M6SrmW/uru9Z1AkE0nBPqMcigDoJviT4bhKhtTg2scAq2f5fStey8UaTfQiWC+hlQ91auePwm8KnP/ABLEyV2n526enWqFz8GNAaN0s3u7TcAMxTH8+c0Ad/FqdrM5RJkZ1ALKGyRmrSyK3Qg14xqnwl8QQSxz6T4ou96YUGWRgQmOmRwfyrNtPGPi/wAATxw+KIzdWJcr5wIZwBnBOPXjrQB73RWFoXifTtds457KdZFYZ6YrcBB6UALRRRQAhFcJ49+Hdl4rtvtEP+j6nD80M6Hbkjs3qK7ykIzQB5R4E8Z3sOoyeGPEMMkGp254ZyMSDtg9+Oc16Y+o2kKAyzxp0HzMBzXnvxb8L3F5ow1zSJHh1PTyZQ0fV1A5B+grzz4e+H38d2klze63dvMshEyMxJz26nGPwoA9guviV4dtZpInumby+rJEzL+YFRzfE/w5FKsYuJZCcZ8uJm2k9jgdam0L4f6Nom54YmllY5LytuPTFaR8JaOZXm+wwiRyCzBcE4II/kKADRvFuk65G72dyGCMVIYFTkdeDWzHPFKMo6kH0NcNq3wt0W6gdrKN7O5bJEsUjDJPrz0rjLHwd448Jy3UtnqsdxCpXyoSSxcDtg8LQB7gKK8x0T4pQrNFYa7by2V8ZPJIdMBnx25OByOtekwXEdxGHjYEHmgCWiiigAooooAKKKKACop4EnQqyg5GOalooA4w/D3QU1c3rWELvJnJdQ3P49K37fRbC0j2Q20SKOgVQBVy9uBbWrykZCjNeHax8ZNdu76Wy0DSVkkRmBcqzAAH0GKAPZha28N0SgVc8kCuU+JGrWVn4N1SNp4RNJAyohkClieOK4C3n+J/iLT3hZ1t1n+UyeRtKg475+tOh+Ceu6iqHWvEUsgUAbFLNx+JoAr/AAv8fW+neGja3swQ20nVmABB5rvY/i74edMO86ZztYxHDfTFZGkfArSLOM/apnncjjtiuug+G/huGFY/7LtzjqdnJ/GgD551/wAW3f8Awnd/renxXAjlOFDcE4AwenT2r0X4ffFu8vNTTSfEVutrLJgRSlSgY+hB716oPCejKBixiyvQlc15x8Z9MtLfw/aXcapFcRXAMbKBu6HPHftQB7DG4kQOpyD0p1c74L1JdT8M2M6ur7ohyvTI4NdFQAUUUUAFFFFABRRQelAHhHjRbfVPi5psMkhZVlAIC4K7e3X1HoK9straMQKAoxivEviXbxaX8QLK+l3ojyK4kCA7TkdDn869ig1W2h0xLiWZFiCbixPbGaAMzXPAWga4h+1WSh+MPESjDGccj6mvJdO1zUvhd4wk0vVJrm40eXLRyMdwRScAj+tdzqXxp8KWbvGLiWR1BxsjPzEehryHxr42/wCEs1azbStMupkjyNkiEs+e3HbvQB9M6Xq9pq1lHdWkySxSKCrKcgiru9c4yM18ueHrr4hWmbDR7C6tY2zKUlQquTzwx/lXXaXp/wATpA1zdPtfj5GlGT/hQB7o0iKOWA+ppv2mHOPNTJ7bhXicvhrx9NObi9kNwrc7DKCI/YAde361Wm8MeLZFP+hlkzgMu4MuAexP+c0Ae7+bGf41/OnBgehFeFjSPFltNvlhvmhUqMRTMMdOncioodZ8RaYRFNdarHwSEADgEDOORn8M96APeqK8LtPilrxkSGYwCQrv2zRMm0e/ua6nTfig77Beaa7DgGS2bzByM5xjNAHpdFc7pnjXRNUYRxXqJKf+WcvyN+RrfSVJEDI4ZT0INAD6O9FFAATiiikJA70ALRWXqHiLSdLLC8v4IioywZxkD1I9KXT9f0vVP+PK+gmOM4RwePWgDTooBzRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWXr+s2+haRPf3LAJGucE9T6CtMnAzXivxZ11tV1a18PWe+TDBpFRScseAOv40AUfD+lTePPF82ramubVCNsbgMCOw9OPpXt9nZx2kKxxqFUAAADpXO+CfDkPh/R0hXl3O52xjJNdZQAmDmloooAKKKKACiiigAqlql9Hp1jJcybiqDkKuTVwkKCT0FeR/EfxfcXV3F4e0O6zcXLbGePDAdiCCD/kUAZN/wCI9V8feJZNG0WdodNjH76dAQR0zyRj1GPavRvC/gbS/DlikVvCrPnc0rqNzH1zVfwF4Pg8M6UIgTJPJ880p/iau0AxQA1Y1UABQKfRRQAYooqGS6gibDyKp9CaAJsVla34e07X7NrbULWOeMjow6e4q7He28rFUlViOuDnFTggjigDwTVvhz4g8BiTVfCt956oWJgeL5tp984OPwrrfhv8R28Ro1jqqRW+pxHDRA/f9wK9MkjWRSrAEHgg14P8QdHk8F+L7LxHpqxpDJIA0YQD6gdOtAHvKtuAPrTqzdGvl1HTYLlCdsiBgD15FaVABRRRQAySNZEKsMg14TfwN8NvifHIg26Vq0pdnx91jnK+mM4Ne8E4ryv46WLXXgoTxKDLbzrJnbkgdyD2oA9OtpVlhRgc5GanriPhjrX9s+ELO4aQvIF2Mx6kjiu3oAKjlhWUEEdqkoPFAHnfjz4f2OtW73xkliniG7zIkBbAHbHNc58PPGFxp+tTeG9SnMsasRaXDnHmqOwzn1r1y5vII0bzXVVA5LHAr56+JNsPDnjTT9SslIidlKOvRSDyue/rz69aAPo5G3qD606sjw5qMeqaNb3URJSRAwJrXoAKKKKACiiigBAc0tFFAFbUI5JLGZIQpkKELuOBXh3wndYvFmtabc7fO8zeFYc5BINe8P8AcOOteFJatofxw3hfLivSJAAf73X9aAPdFjVVACin4pFOQDUN1KYbaWRQSVUsAO/FAEjyIn3iBVG81zTrBS11ewQgcnfIBXzh4h8b+KNf197SK+e0j3lFjU7dpH6nGOtdDYfCaS/ijudR1qeYnDlVUDJ7gk5yKAOz1z41eHNOLw2bvf3A4CRDg/jXnkms+Lfibqf2eO3+yWBYqf3WVVfUk9T0/wDrVn6r4RtPCfj/AEvZt+wTSKhDqXOT65GBzivofTLWCGBPLRQMdhQBB4S0NtA0SCyaUysg5Y1vZAqB50RCSwGBXG+LPGkOjWMsguFj2jO88ge31NAHaS3UMK7nkAHua5/UfHvh3Sw/2jUoA6ZygbJ4ryG2m8U+O939mh7ezJ+a4uMjPsq9xXf+HfhjpOnW0RuIlubnO6SWZAxY49xwPpQBHN8aPD6k+Rb6hcjGf3VuTn/PP5Vp23xS8MzwCSW7kt2xuMc8LowHrjHT36V0UGhWFsoEVvGvrtQDNU9a8JaPrsCRahYwzKhyu5RkcY4PUUAWNK8UaPrW7+z7+CfacNscEj6itOS4jijLs4CgZJJ7V4V4u+HVl4WE2r6Nq8mmyKMxopPJx0zye1cTB428aeLbVNEgnlcr8ssiDLOM9WIHHTtQB1/xj+IOkalZLpVhH9qm35EwyAuCRx69PpXLaJoni/x7NaQXc9zHp6KoYlWRCAPTuceld34P+DjJNb3+uXUk86YYIrEgY6ZJ5/CvZrWyhtYwkaKoA4AFAHlenfAvRIh/pFxcOOcgEKCCc449Oa9A0zwlpOlIgtrSJSi7Q+3LY+vWt2igCAWsS8BAB9KlVAO1OozQAmB6UYHpS0UAJtB6io3toZCC8asR0yKlooA5rUfAuh6lcG4kt2jmJyXicqc4x2rm7v4R2hG+x1S7gnByGZtw/Hpnv3716TSDmgDya/8Ah3rJRxFdLKcD95Kfm4HGMDP+etY2nah4x8JsZbi1urm3UBXjPzIuDjIORj6V7nUFzaQXcLRTxJIjdVYZFAHlA+NsEF6IbuzZEwFJCk/N39gOnevSdI8QWGs6el5aXCSRN3U5xXC+NvhtHqjJLYfut/EgXAI989ef6V5Ott4s8Naw3hjTdQjuTdgB4kcv5fr6Y/OgD3XxP8RNL8PObcCS6u8f6qIcLxkbieBXmVx4x8ceMb1k0ZZLe23gDyU28d8sc812nhr4W6Xa20c+qxte3jANI0zs4yPQE13ltbWtogSNEQKOmMAUAeMWfwc1XUpEutY1yVpicsMb+vXkn+lZPibwXP8ADyS1vrPVbpYDwSqA5YHOCMgdK+hYriCVikUiMy8EA5Irj/im0cfgm6aRcncojwoOGz15B96ANPwTq11rHh6C6u12uw44xx27mukrlfh/A9v4UtY5EVCF4CnII9eAP5V1VABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSc59qAFooooAKKKKACiiigAooooAqahdJZ2cszkBUUkk15R4Mg/4STxdf6424xiQqFKbVyMY4z1/Kui+KmpT23h2W2gKDzxsYnOcHrjHSrPw60ZdI8PQRhQHb53Oc5J96AO0jQIoApxOBmgUY5oAWiiigAopOc0tABRRRQBn63ci00e6mJj+WM4EjbQTj1rxz4W6NJrOv3fiO7WM7mKRbVHH+feu2+Ld4bXwZMBHG+9guHzx9MEc1Z+G+mLp3hKxQRorNGGbb0JPNAHYxoEXAFOxz1paKACiiigDL13U10vTZZ2YDapPNeAya/rHjTxI+n2N09umCfMychRxxj616F8YL2W20CfbIEwuef4vYVz/wAOpdG07w6l9LeReaylmZ35XuR1oA841lfEvgzxFFanVy0sieYpVyARngH8q9J+H3xdm1C6+xawYxtGBIhwD065NeOeO/EUfiTxfNewybrYYSLdkAKPr0qnpDSWt7bnywQScYbryMGgD7bjdZEDKQQRkEVxfxS0WHVvBN6XQGW3QzRt02kVueFJZJvDlm8ow5jGQauavbQXml3NvcIrwyRsrq3QgigDjPhTqp1HwrbBiN0WU4AxgdOhPavQa8I+Dxex1a7sFuEkiDHYglDYXPXivdh0oAWs7WNasdEsZLy/uI4YkBOWOM47D1NaDHAJrwDxdcXPjz4iHSFYrZ2WV2FhgHPLEevTFAGzqPxqvri3E+heG7q5g3bTNIDt/DaP61yPij4keJdX0a50+/0IQRXKmMSbGyT3IB/Hv2r2/RNNstO0+G0hRVjiAAHrir17ptld25SaBHVieCOh9aAPHPhd8QtP063h0S7gkt5VYIHCcEn1A5Fe8RSCRAw7186/EDwQnhvVDrsChLNSoCxMcq3bg/QdK9l8C6s+s+F7K8dSrPGMg9/egDqKyfEeprpGjXF2zbQi5zWtXEfFSC4n8F3KW5+Y4zzjigDxXxDq3inxL52oAyw6cD5aNGTgehIzyCa4bU77VIZDb3k8m1lD7AeGB75966q48ciw8Ox6R9nDRyQiMhSQyMD1+hri9S1D7b5UqhVZE2YBycDj9aAPpv4Oagt34MtEVyxjyrcjr+dek15F8C7Ka28JiWZcedIWXjHHT+leu0AFFFFABRRRQAUUUUAFeR/Fy0bT9V0XXoY8eU5ilcYz1BX3PU165XC/Fuy+2eAbxhnMLLINoyeuP60Adfpl0t5psE6nIdAaluU3wOvPIxxXCfCPWxqvg+3RnJkg/dtnrxXfuMqRQB8eeNLJ9L12+cMFkt7xl256huc4/D9a6ew+J3i06Y89lo6PaQx4eRkbHAPOcit34reFmg8Y22rLBFLaXWEdXYcyZxyD2x6e9Fzf65daFLYWGgW9laeSY3a4k2AAjnAx2H8qAOGtb3xR438T2d1MGlEbJKViPyqoOMgZ69a9g8WeO5PDYs9NtPKlvZgAyOx3L6YA7nPWsb4PNaPplxAGVp4JWViMHjPrXn/xL1WWH4gXE7xIzQN5akkg4HTvigC9rHxB8VaBf+Tc38d15iBpIj/B7AjHvVnwvYaj8Q9fS+1NSunxkFYP4WI9fWvP7O0u9c1t+EaR2BkLHjH+RX058PvD66Vo8AZFD4GcUAdbpelwWFtHHFGEVRjaBWkAAMDigDA4paACuN8beO7XwtaeXGonvnB2RBgNvuf8O9a3inxHb+GdEn1CcFyg+SNfvOx6AV8/WcepeOteuLmOEy3EjL5ssg2rGM5A4OfyoAzb0+IPHOrNLKJ23Z89yfkiXP3QO3Tp717p4A8E2XhnR1ihiJdzuZ2AySfU1c8L+DrHRtNWD7OhJO6Q4J3N68k11kcaRqFVcAdB6UAKqhRgDFOorE8SeKdM8L6c15qM4jQfdXqXPoB60AbLOqAlmAArifEHxO0TR5TbW7PqF7natvajexPpx0ric+KfifetOlzPpWgZxHEpKvMvckg85rvPDnw70Xw+Ee3tVMw5MrElifxNAHOP4w8fajI/9neF47WNV3gXbks49iMAH2rPufEvxVtQssvh+3cAfMIjuz+TZzXsSxIowFFKY1JyQKAPH4vjHdaazReINDurORDgkKSCfyrtfDvxC0LxHEDZ3aeaesTHDj8K6Sawtp1IkhVs9ciuE1X4R6HcM1zpYk029GSk0DkAH/dzigD0BJ436MKkr5+Os+KvAXiu3ttenlnsGJVLnPyOOMZHY/417XomvWetWaT2sySKw6qc0Aa1FFFABRRRQBw/xK8Wjw5oyW9uUa/uzsiRienc8c1mfD7wU+nvLrWpYa/uuTxwg64Gcmum1nwXpuua7Z6peoZHtfuIWO3PqRVnxLcSad4fuGtreaWQLhUhByPy7UAYnirx1baLK1hbI0t1tyzKQREMdSM8/SvLYtR8RatqLz3V5ESzhYvNl2q6/wC7yMnPTPatbw58Mv8AhI5zrWqQzWrSSEm2cnp+hFdNL8JrCKB/sckgZnDAO5wv0oA6Pwnoh02JriY5nlUBjuzgAdM964v4iXuoeIvE9n4c0uPzIIWDXDldwVscZ9MCur8Ua5F4L8IlizNNtEMA5ZmfHFZPww8PtbWMusXiyfb79vMl8zg/l2oA73S7c22nwxMAGVACBxVygDFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFBz2ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKQnAzQAtFFIehoA8j+KMd1qOr2NhDCH3Nkhmxx+dekaDaiz0uCAY+RAP0ryv4nGX/hI9IljRWj8/BwOc5H5V61pf8Ax4xk+goAv0UA5ooAKKKKACiiigAooooA80+MshXw7bKFDbpwMbAx/wDrV2XhtFj0W1RcYEajj6Vz/wAU4oz4RlmktoZjGw2+b/CfUe9X/Ad+L7wxZSblY+WAdvTigDqqKKKACiiigDiviR4VTxPoDQiOR5UPGyQJx3znjFfLeseHLnQbuSO5RpIgzKAHwwIOORX2yRmue1bwXomsySSXVmheT77AAFvxoA+NYrP5opUO5sj92BuOa9P+HPw7v9X1aLVL6F4bYPkApjOOePSvb7P4deHrSbetjG+37gYZ2109vaw2sQjhjVEHQKMCgBbeEQQrGowAMCo9QkSKwnkfOxY2Jx6YqzWJ4s1CHTPDl7czyrGixHk+vpxQB4/8IAlx4o1WaNsRpIwiDDJZSfX8K943BUyTgDqa8b+EFhJFDPeSs3znKq3JAPI5zzVj4g+O7xrkeHdAUy3U+Y5GUZx2IHpj6UAdT4n+I2kaFA4VzcyjK7IumcZxu6flmvCNRuPFUeuN4l0rw/cWkc56rGZC2fX/APUK9e8HfDDTLGwguNRt1ub0/vGaTkKevA/E16JHp9vHEI1jUKOgAoA8d0HxjqMUKi/huBdbctE8YTp/KtmT4iNLbSRxeRDOB0d84+uK7vUPDWmajzPZxOQD1Xr9ao2ngnRreR5P7PtvNcYZljxkUAeE+MvEK6pFLA95LqFzKoAjQYii56jjn617N8NLZrPwjYxSkbxGMjPSqviT4W6LrVqVigS2nUYjkjXla4PRPEOr+AddbStXQGAyEq2f9YpOAw6gHjpkUAe+jpVW/sYtQtWgmUFT2IyKWxu1vLVJl6OMgelWc0AeJeJvgdBfX013ZzkNK5YpkIFznpwe9cLrngay8KaHHDcxxtrN3KURPMDMieoXv6cetfSut6raaNpFzf3kgSGFSSSQM+3NeH+EBdePvHUmuXkSG3hYhI2G7YoztA464Oc5/pQB6x4B0uHTPC1lDDGUXywcHrzya6qo4IlhhVFAAUYAFSUAFFFFABRRRQAUUUUAFQXkC3NnLCyqwdCuCM9qnoPSgDxH4SSHTPE+taQ6vEySbhE+Mr+XFe29q8Q8SN/winxntbyOVxb6gAZVJ4BORxx0yPevbIXEkSsO4oA8++L1oJvCDXAVQ0EgbcewPB/nXD2fhHSbnRLS/wBW165MEZEjxyXAK57g/wAuK9h8W2B1Lw1f2qHDvC2364yK+fvDEOkarbXH9vSMyW2WUtOQBnqCAeuR+vtQBtaTrOk6J8Sha6GEktL1AjJbgAIwHU/lWV8V9GW18QNrE1s09tKgA2gkI3Oc8/SpIry01fxHpx8I6LO0Vq582QAKrDPU/TrzXQ/FuSWDw40bYVnUjGPzoA5H4S6TLqmqG5C/ulfLkqCD7V9IWdqlrH8q4z79K8o+CdtCNBWVRyxORjpzXsDOQvt60AWBTC4+b2FVJL1Ily7AAVzHiXxna6VoF9dLIFkjjbZ0OW+lAHmPjO+vPHPxDbSLFRLY2eEcknCt3OM8/iK9W8LeF7bRLbEMYDNy5AxmvN/g9plxI95rOoFlkvJCyqc4xk817fCFCDGKAJdvHFLQKDQBl+INdtPD2kT6jeNiOIZxnlj2A968S8K6ZqPxJ8Tv4h1ku+mo5EFu5ynXgAZ6Ditzx/d/8Jr40tvCVm5NvaMJLx19f7v4f1r0vw7oVroenpa2sYSNRwPegC/ZWENnGEiRVUDAAGAKt0UhYAckUALR3pokU9CD+NOoAKKKKAMvXdFtNc0qexu4leKVCpBFeCSrq3wo8RKsJa40x3AAkJ+QZ/lX0fXHfELw1Hr2gy/JukjXIGOooA3dD1eDWNNiuYXDB1ycHoa1K8K+E/iSbS9en8N37MFOWgL9cZ6GvdQcjNABRRRQAU1kVxhgCO4NOooAQKFGAAKpatqlpo+ny3t7MsUMalmZjir1cV4z8GXPi+7tYpbxoLGDLbUGSzHjnnH060AeO+Pdd1DxRP8A27H50VhYufsymEFAM4DE55Jx36V6R8MfHttr2nJazMiXsfyug4z7iu007wxp2maSNPgt08kLtKlevrmvD/G/hOX4d+IrTW9FaSOzdyTGgJ2nOSCfQ0AfRQIIyKWud8IeJLbxJosF7A3DLyDjKnuDXQigBaKKKACiiigAooooAKTvS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAYooooAKQ9KWkPQ4oA8p+KER/tLRpASo+0c7VyfWvStN/484sN/CO1edfFaNo7SyuFk2vFPuBLAf8A167DwlNLLpMQlkEhA4YelAHRUUUUAFFFFABRRRQAUUUUAY/ifTV1Xw9eWjRmQtGdqrjJPbGeK86+FWoy2kt5o1yJQ8EmR5iBcZ7cfhXrhGRivF/iNp8nhDxBbeJbESRwyuRP5fOW9/rj6UAe0KdwzS1zXhXxRZ+INOjnt36qCVPUV0uaACiiigAooooAKKKKACvIfjJrjzxWvhuyaRprlszLF1C9uMc+uPavRvEGv2eg6ZNd3UqosakjJxk+lfPmhy6j8QPHf9qyNK0UUoxj5cLngfSgD03RLCbwt4LmuBExuIoSThMlsAgHArifhht1fxlfahcyyyPHlsSnjcTzgHpXtxsEn0uS2dcq6bSD0rwXXNM1X4c+I4NbgSSYSZN4GcFWUkdB2Pt7UAfRUIGwYPGKmrkfDPjjRdesY5LO/hdyoLR7huX2Ircm1uwt0LzXUaIBklmAxQBpUV5re/GzwraX5tRPLIB1mRMoPTmr/h34maPr+9UuYkkUn5d3UevNAHdHGK8I+OTJDrOkSLG5fDBnHCquR37fX2r0HWviRoWlWjyLqNpLKpwUE44+uM/lXhHiHxZH4x8dW15eMDptsAI3RSuR75HqaAPozwk06+H7UXMwlcoDvxjIqzrfiTTNAtPP1C7jgQ8DceW9gO9eLP8AFfV7uX7DoFjHFGija8rZd+3yjpSxeDfEviy7tbrVrgyZOWVmJQDqeM4BwcYAxQBoXWp6j8WNZeyspZ7XQIGwzKoPnng5Ofr79K9Y0DQLXQ7JYLeNQepIUDJ7nApdC0Gz0W0WG1gSNRzhRitigAooooAKKKKACiiigAooooAKKO9FAHlvxksHXTbTVE2f6PKC27OcjpjA+td34avl1HQrS4V1bfGCSp4zjmmeK9P/ALS8OXkIClwm5d0Yfkc9DxXG/CLVml0a402YAS2czIQD2/pQB6POgeNge4r5W8Q6Jp+l/ES5s5jLLbzzbmiVyig57k9e9fVcgJQ7etfPXxU0yWy8YfblTEbqG+Xg479/XNAHsnhnRbDT9NjS0hREK547nrnPeuP+MfhufU/C8lxbAmSD5iAccZGf0zXZ+DLoXvhqynByWiGeMVt3NulzA8UgyrAjFAHlXwckhPhtYhgSox344zzXomr38en24kkYKGOMnoK8sjM/gX4gS27tEumXpBRVwNnYEj6it74ka3pw8Kuk1ygkJDxKG+YkZweo4z9elAHBalquufETxHdWFhcz2WlWhKl4iQ0pzjr+dYOq/C7U4pEgs7uYhz+881sgj6d6m+G/jSw0PWbiDUJVSC7ffHIpyqE9Q3pXvNvLY6msN3a3Mbqw+UqQVagD57jvPGHgFh9te4+z7R5ZiQvEOehz0r2bwD8RrPxPH5DsI7tFBZOua6vULWxlsGW4jjZcfMGAxjvXzppd3aL8TpE0SJo7Vpx+7GUAOec4yMZoA+pVYMOKralcrZ6dcXDttEcbNn6D8afasWgQnrjmuN+LV89n4AvtkojaVkjB9csOP0oA5X4SWH2681PX5iWmu5my2zAIBPSvYRhVznAFcZ8NrJbTwlYoFAPlhjjuTXYzgtA6gZJUjrigDkPE3jqz01Ta2dzA964by1Ykgkdsj34rgb/WPFuo2VvLNJOEkILJaJuXBPdsfpivO/HUs+l+IZ0k8ouHYIyqcsOnOeKl0b4matpOiQqUimCsQc5+YDoPY/SgDes/iNrGl+I/ImnuGskc71kGWUZ6gDBwMdK958Oa9ba9psdzbzCTI54wQfcdq+NdT1mTWNflv58hZHLbOoUGvbvgtq0gPkuVCynjjrxxjigD3WigdKKACmuoZSD0NOpD0oA+cvGbJoXxbsbiByjtKoZuMYPFfQtlL5tpG+c5UV89fGtVXxbBNG2243KoVRnPIINe7eG3Z9GtixO7y1znr0oA2KKKKACiiigAooooAMjOM81l+IdKGs6FeWGdpmiZAwxxkVqUUAfOfw21O68J+Mn0G83QxO7JscgDcDwR65r6JikEkYYHORXhvxk8NvpuoR+JrVz5gYFUCDhgcn3NeleAtbOu+GrW8dBHI6AugOcHvQB1dFFFABRRRQAUYxRRQAUUUUAFFFFABRRRQAUUCigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooPSgDz34rWiXPhp3Eqo8Tq4JXPetDwBdC40K2bdlig3cY/SpfG1mb3wzqETAH92xGcdcVzvwx1JTp8FoxBkQYJ3g5oA9PooFFABRRRQAUUUUAFFFFABVW+sob63aGeNZEbqrDINWqKAPDPEHg/UPAesNrfhoS/ZWy00G75R9FA6V3fhPx/Ya1bJ50ghuMfOjHofr0rsri3juI2R1DAjBB715rr3w1b7c99o5t4ZpOGDIRge2Dj9KAPTEmjkUFHUg+hp+R614kqeN9HeKKGykdR8pZZiRj3pD4+8T2N60U2nSsq5BPPJ/GgD27Io3D1rxVvi7fRK/2jS3DKORG27Jzjr+tRz/FTUZYGFtbOJ84VNnA4/vZ65NAHtM11DAuZJFUe5rmta8d6RpNu8k1wFUA8txkjsPU15ZDf+OPEMa3kQjt/mICzIxJXjkD/APVWh4b+Heo6hqDXviV/tknVA4IVPoM0Ac/qVzqvxL1weTI66ZFINsbKBuP0NeveDPCkOhaeF+zrFK2d5AHzcnmtrTNCsdOQC3t44yBj5VArVAA6UAIq4GKpalpNlq1v5F7bRzx/3XXIq/RQB4d8RfhPpVnpl1rOm28ySRDeYbchRj1HHbFeJw2T3dzaeZcu6TuAElcjd6+o6n9a+2J4lmiZHUMrDBB7188a94Z02w+IX2ax08ukcqsIlB2xs2Dnjtx06UAa/wDwo7RnslkhuLmNzgsd2eO4HpXA6Z8OIta1iaCwvybaNjlzndgHoQQPzr6L1e9XTPCN3ckf6qBjgE56e1ef/DLQsPcagzNIJCdrOoBz36cnt1oA898EeBdP1Dxze6XqMTSxWpIGZB8xDegr3qH4ceHFVR/Z6BRztUkL+Q+tee6BaJZfGO+CMz7pSWIUbVyM4Jx1r3EdKAMu38O6XasGhsoEYcAiMZ9K0kiRBhVAHsKfRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA2RBJGyHowwa8T8Pr/AMIp8Wp9KiMgguwSS4zuPUYPsK9urxT4qRDSPHeg6xDGVZ5AHcHAPIH8sUAe1A5WvMfjHooufDyanFbwyzWjZPmHGV9M5FekWcnm2kb+qg1neKdObVvDOo2MePMmt3VM/wB7HH60AYfw3uUl8KWjJkKV6Z7967M8ivGvg9q/lW8mizNtlgdvkPHfng89TXsg5X8O1AHiHxq1SEPaxR2iG7RxiVlG5Bntn1qh4R+FEeqQW99r1xcXTMAyQPISqDqB71Q8eadLJ8VYoL0vOkrxlW2cFc9DgEHnive9KtkitY1RQAoGMelAHC6z8ItF1VFMUP2V17w/LmuZtvhLr+hyl9I1yVU2kbM4wexH6V7mAKMA0AeFX3gTx3rkE8F/rZFucKqtnLDB5O09efyri/D1g/gDxqLPXrdM+Z+7nIwMHHzAntX1OYwe1ebfGTSLa48I/a3jXzYJkKv3UE46igDv9NuUubNJI2VlIyCD1rz742XGzwhHGIg+Zw5J52gd8fjU3wtuZf7GMDRukKN+6Ehydp5pnxasp7rw+xjRpFQEkHbtHB5we/T/AD1AOp8Hbf8AhHbLAH+pX7vTpXQ9RXBfC+/e88I2O+QSSKoVmxjOOK76gDwn4z+BNS1C/wD7YsLT7UDGI9qhiynvwOPxNeFXlpqFq4tbiylt2iXDqUIPPc190socYYZrkPEXw28P+JJZJbu02zOMNJGxUn0Jx1/GgD4/sd32sKkIdmGMNX0L8F9AniWfUJ7fy0ZsRluWbGcn9T9a6DTfgr4b02YyJHM2eu+TOB6V6FY6fb6fbpBbxLHGgwFUYAoAtUUUUAFNY4Uk9BTqp6rdLZaZcXDZwiEnFAHzv46Da38ULK0jZiZJgeuRtB9vpX0LpUPk2iLjGFFeBeCI/wDhIfifdXjqGSzVsOpyCxP696+hbWPy4VBOeO9AE9FFFABRRRQAUUUUAFFFFAGbrulwaxo9zZTxq6yIQAw4Bxwa8n+Et3Jo2saj4duE2SRyGRDn7w6GvajXjnjWOPwp8SNN1wQsLe7BSVk3Yz79qAPYgcilqvZXEdzaxzRsCjqCCKsUAFFFFABRRRQAUUUUAFFFFABRRjmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKAc0UAFFFFABRRRQAUUUUAcx4sndNKu0RAT5ZIz9K4D4SyedFI8gj84SnJCkMfrmu88WuV066ZRkqmQM15b8KGuBrF5OwJSSXGc5GcmgD3sdKWmocoKdQAUUUUAFFFFABRRRQAUUUUAFIQDS0UAMaFGHKiqs2m28v3olJHTirtFAGM/h2xfrbx/lSxeHbCI5W3jUn0UVsUUAU4tPhhUBUAx6VZWJVPAFPooAKKKKACiiigAPIrznxR4Y1xtdbVdIKyFlz5TSEAMBxxnmvRefWloA8c1HRPiHqtjLY3L2ogniIfaq8HGNvuD17Yz36V1vgTwpc+GdDW1uZVkk+8SOxPOPf0zXa4FB6GgDxfQ4tnxg1ElSZGkJbKbdoxkYPft+dezqflFeR6TcxH4wasvlksBjzDn0HHP0x+FeozajbWluZbiZIkXqzsAP1oAu0Vwd98W/C1nM0S3pnK/eaFCyjr3/AA7VLpfxQ8N6kqEXqxF32Kso2kn6envQB29FRQzx3EayRMGVhkEd6loAKKKKACiiigAooooAKKKKACiiigArhfirpMeoeDri68oPPZ4mjwuWHrjiu6qjrMJuNHu4lfYzRNhtu7Bx6d6AMPwBria54XtZ1I3qgR19GFdSwypFeO/BLUvk1TS9+5YLgsp6ZyT2r2OgD5+80+F/i41nPvWOW5d48NwRJyM/nXvVs/mQqeua8V+MsX9k+KdI1yEojqRvZhuztPpj0NeuaFex3+mwzxtuR1DA4xQB5z8ZPDN/eJY65pURe6siS2xdzYHIxx65/OpPBfxW0i+05ItUuobO9iXbMkp2jI4PWvU5YlmjZHAKkcg14l8TfBnhzRbKTU4NPUXkz/KsZKj1JwCKAPUbfxloFyF8jVrNy3ACzKea2UuYpACrr+deC+HPhbZa/wCGob3dLZ3cy71YMWHXIJB/lWN4hk8W/DzW9OWPWptQixvMOSflGAcg5wDQB9M7ga4P4u7T4CuuMv5ke0Zxk7x/9eubsPjno4IivbO9t5ApPMYIJHbg1znijxZffEkxWWlWcyafG4Ylg2ZmHbjpjNAHoPw2i8rRYFdt8pHzHIPP4V1+tWEd/p0sL5wQQcHFZfg3SptM0WCC4ULIi845/nXTlQRzQB4n4N1mXwj4sl8O6gsiwTyM1rLK2c+2e9e1RyK6ggjpXCeOvCY1e03wuyXEZ3xupxyO2fWuV8K/ES/0WV9O8UAgRfKk4jPzdOD70Ae0UVU0/UbbUrVLi2lWSNxkMpyDVugAopCM0tABRRSE4oAUnAryj4weK/7P0mSxglKyMMHGO4+tdf4x8TR6FYHZMFuCCQNueB36182XKXnxB8ZQ21mHZHbEsyg4x3PPTjtQB6Z8DtFZdMudSYbDdPkADoBXtqABQB0FYXhXQY9A0iGziHyIoUZrfoAKKKKACiiigAooooAKKKKACuJ+KOhLrfg25VYEkmhxJGWbG3HU5+ldtVTU0Mmm3KL1aNgMru7enegDmfhxqX2/wnZklS0a+W23kZHHBrsa8h+D+puZ9V0x2/497liq7duAT6dBXrw6UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFHagDjPGd7b2VvN9oLbTExwBngCuV+E2mo9hJd+WVEkxZM9evemfFnV2hBsxcbDKMKofBb1GB1rpPhjaiDwzbsHlfeN2ZVw3PtQB3YGBiloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApG+6aWo5shGIOAAc0AfOOp+KtQT4j6ymgQxzTSSbfMyxxjjGDx1Hb1rck8BeKvE0cEuqamXz8xV84U56AduKvfD2ztLzxbq99GdrySsGRmD55PINexxxIqqQOgoA87034V2NuwNzcTzKQCRuI55z0NaGr/DnRL2waKO2W2mVT5c8Q2lD1z+YrtyQv4V5/8AETx9YeH9JubSC6zqcqFIkVd2Ce59KAM34TeIL+8ju9JvJjP9icxiQgAnkjGB2GOteqDkV5Z8HdDmsdBN1OiLLO5c7VwfxOa9ToAKMc5oooAKZLKsMLyucKilifQCn1U1S3+16XdW5yRLCyEDGTkY70AeeW+seI/FM017pmoJZWyTFBCUB3KDwTnkEg/qPStPwJ4rutRnudI1Vw+p2rsJCq4BGeORwa8fk13xH4f0290dUS2MUuZZwuGUFh0PTjpxXs3gXw8ml28l48rTXN2RLJISeTj0J4zQB2tFFBGRigAooooAKbIu6Mr6inUUAeDac0nhT4zzWjs6W1zgICMBs9PXgYx2r3dG3ICO9eI/G2xmsNV03XreFgUdFeXOBkNwP0r13QL4ahotrdA58yNW/MUAcZ8YNNW48NR3oCbreTBZlzhW4P8ASovhRrq32jtYkYktTtJHQ57j05zxXa+JrBdS8PXtsVDFoiVBz94cjp7gV4t8K7oWXjK5s8ALPCHyWJJYHB+v1oA9+rxT4pw/2v4007THIEbKE+YE4JOSwHA/nXtanIFch488H/8ACT6Uy2xhgv05juWTLL7Aj2zQBo6JbQ2OlwW8WAsahcAdhXkfxLunm+I+l28UgHlhGGxcuGycjA9RWLr2s/EH4cQRW1xdxXNs7FY53G4sfTk5o8Faf4k8TeMYtZ1GJ8CQOZJIAOMEYHHFAHuNnoNjd2ym4tIZCy4O+MHI961LPRrGwjKWttFEpOdqIFH6VZtYjHCqnqBU9ACAAAAcYpaKKAGuiyLtYZFcH4x8FpqKm6tYF+0KwORxkZHX8BXfUhAIwRQB4Jpeq+IPA3nCGNbuwLFhb5IeP1Ht616J4e+Juh615MRuFguHH+rkYAhvT610up6Bp2rWr293axyI/XI5/OuGv/g5otzG4iaeMliwxKeCRjP8vyoA9GiuYpV3I4I9ql3DPWvJLX4eeK9IumbT/EDeSVCiOZmbA46e/v8A/rqvLoPxLt2VYtRRw2QX8zJXPc54/SgD1i61Ozs1Zri4jjCjJ3MBgV5t4s+N2haKWttNzqN2QQPJ5RT2ye/4Vhv8G9X1b5tT1uUO77ppASzP7e3Wuw8N/CTw54fWORLJJ7pP+W03zHPr6D8KAPII/D/jT4jX732pJ9jtZ2DYZcHb7D6ete4+C/BVj4X0yOCCEBhyWPJJrpYLGKDkLk9s9qs4oAUcCiiigAooooAKKKKACiiigAooooAKa4yhHqKdQelAHi/g+wm0v4parGXQBwSETAGM8ZUV7OvQV5neutj8YkYqpNzagZL9Me2P8a9LQ5UUAOooooABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRXEohgZ2OAB1qWsXxBqMVlYyuzj5FLMO+PpQB8+/Ee+m1nxzBbQXhCq4Ux7yVUjuR75r3rwegXQLXoT5Y5AwK8K8NxR+LfG89+ke1FmAJKYORkjBGR0HevoywhEFskargAUAW6KKKACiiigAooo5zQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+JrlrXw3qEyffWB9v1xxWtXM+P7lbXwbqEjBDiPgPjGe1AHAeAtX0vRdIlubyVYWkmI+Zskk8nqa6a/+Keg6fa+c0xePgIUIO7Iz2PT/AANea2Pw21XxLbrNHqMVvaS/MFQu2MgBhjOOfr9K7rSPgxodl5TTB5nQ7yWxy2APTgcZAoAwNV+K+sa0VsfDekss0vy+dMwZR16bT/XrS+APh1dPqq63rayPcEhiLhdzbiOTkn1/GvWLLw9p1gQ0FqiMBjcBzWmqKvQAUAR29vHboEjUKo6AVNRRQAUUUUAFI33T9KWkb7poA+cPGEMraz4ykjjZo28tUkAxuIIyOTzjmvb/AAazP4Y09mXDG3QkZ9hXifiuCWzbxRbzxiMS3UKKAdy7C+QRgcen+Fe8eH0SLR7dEwVWNQD68UAatFFFABRRRQAUUUUAcZ8T/DreIfBd3DCm64iHmRD1I/GqHwi1t9U8JxQSxlJbQ+S2RgnHqPWu+miWaF43UMrKQQe9eRfD5Z/D3j7V9HuI/JincyQoBwQD19qAPX3UMpU9D1r5w15JfCvxHdIo2iQTboiicBCc4yMDnPT2r6Rrx740aPmG21OPeGJ8pynrzg4HXr+lAHqWk3QurKOQc7lBq8RkV518MvEBvtBt1mYCRV2uD6ivQxKpXduGPWgDxP49QJONGhOR87tuzx2HSvU/DNpHBpFsq84jHP4V5P8AF51uvHWi2zIzxqq7xztwzH0H9a9l0iNYrCJEXChQAKAL9FFFABRRRQAUUUUAFFFFABijAoooAMUUUUAFB5FFFABRRRQAUUUUAFFFFAARRRRQAUUUUAFIaCM0UAeS/EEyWPxF8P3/AJR8tj5YbHGSeefyr1W2bdAp9q82+LANvcaDftGWihuwHIXkA4744r0TT3WWyidehUEUAW6KKKACiigUAFGaKTNAC0Ug6UtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIehrx34u6ndadpDWtvLB5l2+0/OAwHtmvYZGCoSTgYrwTxVKviz4nW1la2rSfZAUmcqQAPfIoA7D4W+HZNM0GFrhU8xgG+UDH4Yr0tRgYqjpVqtrZxxqOFUAVfFAC0UUUAFFFFABRRRQAUUUUAFFFFABRR0ooAKKKKACiiigAooooAKKKKACiiigAooooAK87+LFwjaRaae0TOLqbBYcBcDucEc9K9EryT4izw3viuztJ3k8qBA21T/GTx9e3pQB3nhawhstHgiiXamMgFcda36oaTG0dhErkltozmr9ABRRRQAUUUUAFFFFABTX4U/SlJAqveXMdtaSzOQFRCxP0FAHy34/vp08ba9pzOssVxKnlNjJQqwOOO/WvobwHK83hPT2kYM4hUMcY5AxXzx4ysZpdM/t6VAJJ9T52gjIK5GD+Fe+fDtfs/hSyRpPMLRhg315oA7KikDBuhpaACiiigAooooAK8Y8asnhr4r6bqqytEt4mJMKADjjk17PXnXxa0eO50SPU87ZLPJyIt5YHBxntyKAO+s51ubSKZTkOoIrm/H2mPqnhXUYY3ZHWEspUZPA549xkVP4Eu/tvhGwm3ht0QOcVu3MQlhdD0ZSDQB8s+CtAl1m8vI7TVrvT7qKT5WhkbH1xxkV3cWseOPAFwh1tjrWiD5WniXMiL6kdfrnP1rD0W1Xwv8V3sVkDxyllyOMt1/OveYkjuYFDKCD3xQB4B4h8YaT4w8YaPdWhkMcYVZdyYMZ3cZzwB+NfRGmEfYo8HIwK8G+JXh+10zxto88EUEUNwwEgWPbvweSccGvd9KwLGLGMbRjFAF6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDy/41hf8AhHrNyrELcrkqM12/hh1l0K0kXODEvXr0rkfjDZJdeF0d5lj8qdW+aIuPTnHT61v+CJkn8LWRhlVh5YG4A4P580AdRRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGD4w1VdH8N3l2WAKRkj59pP0ODzXCfDTS/PuLzVyXzdsG2tL5hHfn0PNZ/xW8RzX2rWvh7T5kZmfM2wZKgds9sntXpfhexNppMCuPn2DcffFAG4q4UCnUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFIWAGScCgMCODQAd6WiigAooooAZK4jjZ2OABkmvEReLrnje8v1dvIEnlcKGBGQP7xwcdx6V6d441X+yPCl7cq4SXYVjJGfmPt3rzbwDYzTamnKMuVllbaoPfGBjI6/5yaAPZrZdsCD2qamoMKBTqACiiigAooprOqKWYgAckmgBxOK5XxV40s/D1odrxSXLYEaM2FznHJ/zmuf8eePpbLy9K0SJLu6ugyK6PwhHY8fXj2rD0H4d3WuSi+8UlZHkXm3jyoB9yMUAVL34rX11dNBEyhAwQfZ87z7gdSMc8VkeIPEHjjWorqx0y3vXgKhWcw7fMUqR8vPAJ59a9osfCOj2USJDp9uoTG392CfzrZW0iXogoA+Y20rxdqnh86I2g3SpuWRDIAoRsk5yQOPb3rV/wCEm+IPha0gtLrSPLjwAjRJuA7fw5/Kvoj7NED9wUPaxOPmUH60AeB+G/i3rUd2sOqxMdkgSTfGYwR7ZGN3fBx1r3DSdZtNXtFuLaZHUgE7WBxkZ7VW1fwxpms6fJZ3dsjpJycDBB9QfWvKrvTPEPwvupb6zke+0IFfMiyWdBnBOPp7gUAe4UVheGfE1h4l05buylDqeozyp9DW7QAUUUUAFZ+tWLajot3aJKY3ljKq4AJU9jg1oUHpQB5X8I9Suo47/RrwtvtJiqZXAx6CvVOoryHxYsvhT4g6ZqsTWdtZ3L+VIRlWfd1yBwcHv9K9YgmE0IZTnIoA+e/jLZ3WkeL7TULGUxzSMHiOM4PQ9vWtLw98UtX0iFF8VaZJDakYjvIIiUY+/wCFb/xwtF/sbTtRa28429wcrkdxnnjkce1bHg2yttX8JWRuoIZAUBKFQVBx6HNAHm/jLxRZeLdU0W50y5ZofOZH38BSMYO0ivetIBGnwgtuIUDPrXinxM0Sw03XNMjsLS2t8/OdgVcYOc4yD29+le06Kc6ZAc9UBoA0aKKKACiiigAooooAKKKKAADFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUfSiigDzz4xO0fgtyqb8zIGG7Ax6k1Z+F8jP4TtQzqzKCp2n/OayvjRGZtBs4hgbp8klsdB9ak+D6NH4bKFw+2VuQc96APS6KKKACik5zxS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFVdRuls7CadzhUQsTkD+dWq5/xlfJp/hi9ncxhQhB8w4Bz2oA8k8F2yeKvHWpalcbpVgm/d73BK/gBg/WvdbdAkSgDHFeQ/BeGWTT7i7eCOKOR8LsGA2O+MV7Eq4AoAdRRRQAUUUUAFFFFABRRRQAUUUjEKpJoAWiqkWo20t09ssqGZBlk3cgVJdXUdpbSTyECONSzEnGBQBPRXO6N4y0vXBKbSUERyGMnPUj09RW4J49mSwxQAT3MNsm+aRUUdSxwBXOap4/0DS7d5pb+JwvQRtuLH0HrXnfxJ8RKPEKadNqTQ25AdlESkBcY69T+Vc79r8JCxVhO1yrEny/s+GJ5HpwPpQB2v8AwuqzlvUWK1YwyPsUscHHqeMAV6NZ6zb3VolwsiFGGQQeK+avtr6lo9zb6d4ftlaAlppiuxVAPB4Pp710vgPw5eeIdPQ399J9mic7YY5flP4D3z3oA9suPE2k2wbzb6AMoyy+YMj61x918TJZbsw6ZpjXSbgBIGJyCOuAOnar1j4C0+2uHmkkml34JRn+U857dR7Gt9LSzsYRHBDGgHACqABQBwe7xv4gs5J7i7XTLdSWCRIVkwB7/wBa1Pht4ludV01oL6ZpbiJuWbOWUnjtWxrniHR9BsWe+vYow3CpnczE+gHJrgPhc8S6/fwwF9hYn51AJGeD7fjQB7SORS0i/dFLQAUUUjHapJ7UAeV/GG+YwWenoVy5LEOpwc8demeTwa0vhzpX2O3MmYzvUNhMHb14Jx/n2rj9fnbXvHM91JDG8MJEEK/aVUuOTnrkfQjnPWvXdAtVttLgVYwmEAxnP60Aa1FFFACEgDJqJbiJujg/jVbWdP8A7U0m4sxK0RlQqHUnKn8K8O07w/dW+t3WjT6xe2OoRHfFJDMQrrnjIxgmgD3ozoELkgKOa8l8T+NtT8Q6tN4e8MxB40Pl3VySRgcggEdOnXNc54u1LxHoiJpdvrD6ks6hWikwJFP+8uDg4713/wAP9Bj0/Q4M2yQzOoeXGTljyeTzQBB4S8AQaXOLy8PnXjc7j0Ukc4H9a9EhhWNQAB60yJFUnjBqyuMUAKBgYFFFFABRRRQAVFNbxzxtHIoZWGCD3FS0UAeSa1pl18O/EA13TC/9iXMoF9arjERI4dc9s4GK9L07U4L+zS5jkVkdQwINS6jYwahZS21xEkkcilWVhkEV8/SXmveEtYuPC+nXiRoZMQGXn5W6YGM/5NAH0Bc6la2ah7ieOJMgbnYKOenWn2t/bXoY28ySBTg7TnBrw7VtBvpNLfUPEWtXE8MKgvChChm7AfnW18GrGa2tby7cSJHcy5RWYkY9RkUAewUUDpRQB5/8WvD8Gs+FWnaKdp7RvMiaDll9eO44q98PNdj1vwvbTAneqhXzwcjrXVX1nDf2ctrcRrJFIu1kYcEV5J4KR/CPjXU/D0sEkcUrmW3kLYUr6AE/XpQBv/GOVY/A8j7CZPNCoAMnkEVZ+GULR+DrFGCg7OgBGD+Nch8YNWGpXWn6BbqZn3ec6xjcQ38PGc9M/nXpfhayNrotspi8tigLITyDQB5f8bLVxf6RMArLlh8wBxzz29xXqnhaWOXQrVoirL5ajKnjgVwPxwQf2HZOygospzxk9Mjt/hXXfD9ETwpZLGyFfLH3elAHV0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUmKAPNPjMsT+G7fdnzFmDIApPI9x0pnwfR00B1K7V85sEfxCofjXPGmj2IberCYkOvbirvwgj2+E4yQd29ixLZyc9aAPR6WkxS0AFFFFABQaKKAAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXm/wAWlZtDcpH5jKjfKS2PrxxXo5615l8YHm/sZUhWVmPVVk2oR/tY5NAFv4Tqi+DrLbt+6f516EK80+EOf+ERt8ED5jwAeOenNelgcUALRRRQAUUUUAFFFFABRRmomuIk3bnA28nJoAlqOZgIzzWBf+NNIs96JP58qruKRAnA9Sewrkrz4g3+t2EQ8PabPLLOxUuVIWMDuSwAIP8AWgDP0W6ki+MupxeYTGYQcE59Oa9N1VPP0e6Qoj5jI2vjB4714Jol/feHviy8OrzJJJd91YkDPTrz+Fe/b1msmBPDLz9KAPmbTfFcvhbV7y1SwWacy71WBvl/QH07V2tm3jfxnEgmzp1ky5ASQo2fw5I9jXOaBollB8T763uIZfLVmMPnemete2WWraRaQiM3tshTjBkAx+tAHhPjbwTNot3DLPPJco4DMztkgjPrk11HwxsdPf7VaTWcBuYHJWYrkspJ55q38S9d0rXLGW10lDeX0Q+eWGLcI17/ADdK4nwbe6ydQaPTGVJLpELO7AcLwcZB54oA9O0yytbXxXrWmiNAtyqzLhcDBG0/qKx9G1vSvCGuXkN/qJhP/PGViR16qCO/tWYbPxNp/jHTNT1W9iaGV/s+Y1yQDkgE4Gc/StDWdN0qXx5BLewLJI7BQZMkYwMYAXHX1JoA3n+I91qkgi8OaNdagp+UXGNkO76+lT2/g/xHrMjSa7r8qwSEs1paDywB/d3dcf410YutM0PT/MnmgtoVzjOFHr0rJk+KvhqEER3M0zBchYoGO76cUAaGn+APD+kuJrXT4VkXkOwLEfQnOK5HQVTTfipq1qN7ediRSx+6MZ49smr8nxM1G+UnR/C+pXK54dwEUj15rl77UbmHx9puoahbyw3EqKWgXDFeSPT0x0PagD3RDlRTqhtn8yBT7VNQAVm67qEel6Ld3chQCOMkb3CAnsMngVpV5j8VNf8AIW10qEh2d1aZNxUhe3Qjg4OaAOQ8FRDUPEELgPsLmVcOGKduuD2K9MV7zAgSJVHQCuD8BaZDFEZgT8p2IrDhAOwJFd+OnFAC0UUUAFcV468M/wBq2RvrQtFqNspaF0bGT1wfUZArtazddkEGi3kpO0JCzZ9MCgDxPwhZyax4imk1W3mN1j995uDHnjgD8K9cvb2PQtFuLxkysETPtHHQZrz74YWNu9qdSgYv57YzwMY7bQOPzNdj41uFg8GalJJvCLAc7CAfzNAHG2fxusJ0klu9Kv4Ykk2NJGnmJn/eFdBp3xc8L3UzwNf+QV53XCGNT9Ca4X4UGCw8Jahf6gFW2EzOWYZOBjr610X/AAn/AIFv3CSXds2cDEsOPzyKAOoHxQ8JZCnXLMN6b/fHWrI+IvhYrIw1uy2oQCfOGMkZ4PfofyrFtrTwXc22YrfSWik9FjIPf/Cnf2J4JtY5J/selRqWy5KIBkcf5+tAFuf4seD7eTy21q3d/wDpmC4/MAiptG+JOha7q406xlleRh8r+SwU98Zxx+NRWemeH95WwgsVdeqxIufxxXC6dMy/Fq6tYGMO2UElTlXGwcY7d/zoA9xByKKZEcoM0+gAI4rxT40aS9vPZ6xbrl9wUgJkgqcjB9TyK9rrhfilaNdeFHERAmWRSjZxjsee3BNAHnD67/wnc1jpNlvWBU33RIHJIIA/D1Br2Dw9pkWnWMUEYCrGoVceleH/AA2ntLTxhc2yyjM8e9ADu7/MCfXJPbtX0HYY8v1IoAvDpRRRQAVx3jTwPF4pNvcLcSW11bEmORDz/OuxooA838IfC+HSJTfavMb/AFElSJpDu2hegGf516MqBFwo4p1FAHnvxYtPtXhyFt23y51xlAQSeOc9B/jVX4Q30s2jTQNtaOGUqhXAAHoAO1dL4/sxeeD75TH5m1d4X6enofeuE+DUuXvI4mYwrtABHT29PyoA9iooooAKKKKACiiobm6hs7d553EcSDLMe1AE1FVbLULbUIRLbSrIh6EHNOvbyDT7SW7upVigiUs7t0AFAFiiqWnarZatAJrG5jnjPdDmrtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUdqAPF/jleNBJpcaumCWZk4J+uDXbfDe0a28JWYdcOyBiMdM1wHxlVo/ENjcu0fleSUwRk59eOccivTPA0bx+FrFXOWES8jPp780AdLRRRQAhApaMZooATvS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVwfxMtJrnSAVV/JXPmOjhSo+pI/ka7snArnvF9rb3+gzxT7igG7Cru6e2DQBw3wauBJpt1EpxGkxCLvLEfia9aByOteEfCDUxbaxqGmSSEYkJVPTBxjNe6xnKA+tAD6KKTGKAFooqOdmSF2RC7AZCjvQBX1DU7TTLdprqZI0UZJJrgr74waZHOLbTrC7vrgttCRgc/1/SvOtUE3iTxrfQeIdRksbVGJjV2UfLnkZ6dq7Gz8R+DfDQW3h8vzM8vDHuJx3LAUAS3XiXx5qzltL0ZrOM/dNwVXH1ByT+n40yPwn4kvZmk1zxISjAhooolGR25I/pU4+IjXpcaVpF/cKoBSQQfKx9Ac+9Z6aB4z8SytJqN4dMtpD/q4SPM2+nGf50AXDpHgnwlHvu3i8wNuPnSF2Lf7vr+FWU8ZtdkQeH9Du7xFUfP5flIue3zY/StPSPhrotjJHcTxPeXQOfOuWLnP0PArso7WKJcKgH0FAHz9438NavJbp4iurGODU42DmKIl1I4611nhb4paPcaSYr68WG4iUKVY5LHHbjn0xivRNYtoprZw2MY/CvMtW8GeFJ2FzfS28Euc4QhS/Hp1oA4Oy0uXx18QdRvIr27istxCSAkNj0Gegr17RfhpoFpaos1kty3UtcZck+vNYGjap4X8N7IrF5WL5YADG4/jj2rbuPFfiC4AbR9CeSFhlXmO3I+mRQBa8Z6Tb2vgy9t7CBIBswPLVVCjue1eN+DtThXxDYCOVwI2MZQnqCOpI4659K9HvdI8Z+IbVk1G+t7GM4HlRKSGGDnPPvXjd9oKaL4mls4L5N1uPMGS3BHJBwP5UAel+O/GWku1rp9tOkk9tcI7gAEdcYBPf6VY8c21w8NtqFsVRyiv5knKoQR6DI/Ouc8vwld+C57lvsS6iyNIN8g37/bJyPapdQ+IGlXPgizgku5ftS7VkRODx9QQelAHaeGfh/a6hHb6prN5c6lcyKr4mc+Wp68L/jXodro1jZoFhtoox/sIBXl+h/FPRLDS7azg+23lwsagKkeWbnHU4FS3XxcvJJ0j07QLiXcQBubJ6c8KCOPrQB6p5ESJwuBjHSvJvigbaz1/RJ0cPcyEoITHv3DI5HzDHWhfEXxC1qW3gg08WAlJ3zGHIC4HPJODz6c1b0T4Uyyat/aviTUJdRuQcxrIxIQ/Xj9AKAPTdLZmsIS3UoM4GO1XajhiWGJY14CjAqSgCG6uI7W1lnlYJHGpZmPYCvn24vT4o8Xz6izE/vSIIyu0FQMDkjn1/HivQ/in4ol0bS4rS0lCz3DEMuAcpg5HPTPSs/4aWAKyu8SiMgMnyjofw9jQB2vhvTG0+wijdmb5QTuYsQfxroBTEUKoA6U+gAoopkjlFyBn6UAPrnPHM8UPg/UvOdkR4ShZU3EZ46d+tb/AJq4PPSuE+Kt3Evg6VXmMcZkUO69QM9vf8qAIvh1ZPbeGrUSPIzkE5k4JGfTtxXQ+JNF/t/QrnTS4jM67QxBO0+vas/wxIkGj2sfm7isa8k9eK6MXETqPn/I0AeM51r4cyHT59Pn1XSHBc3EKEsgx90j/PWqXhqLTPGfjiW7+wwrZRw+WiPb435554xkf4V2/wASfEAsdJjtLcxtdX7+Qis3OD1PHPt269RWx4A0KDSNGijVVL9SwAyc80ARx/DPw6hEn9nQjb91RkAV538QtK8G6DIJZdPieeQlvLDN859AAe9e63MyQwMzEAAc14qLW28X+OzfyBHsrFikasvV88k888jrQBwnh3ULXTddj1WTZpflg7bS1gZ3de4Zj9K7vwDBdav48v8AXZrWWNJC3lF4tuFyMDkdce9ekRaZpRbcbaAnGCSgrRtmtYeECLjgYxQBrJ90U6qa3kQHLjripPtcIGd4x9aALFZet2y3ljJASV3DIYHkEcg1NLqlumR5i7h2z0rC1fXI442+Yb8AqM9KAPm3SZF0bxcrAqlzbam0ZPHKscdvx7mvqzSpBJao4OcqDXybPJ9o+JUplYbZLzzPlXgnqBX1P4dk/wBAjz/dFAG5RRRQAUUUUAFFFFAFe9hFxaSwkAh1K4PuK8Z+HuoDRvGGoaTcmPJk2qQ+45Hp6D+Ve2kDrXgviBTp/wARr2Wa4hzHIjxiRMMwPIUEKc9x+VAHvSnKg0tVdOuVvNPgnT7roGFWqACiiigArm/HNy9t4XuDHEZTIQhQMQxB9Md66SuR+Icbv4ZZgsZCSqx8xsDrjrketAFD4d232fTW2zq5X5CgUKBj6d/xNVfi7qjWvgt7UqfMvJFjAABHBzznp0rU8A2wTSFm2Ro0h+ZYzlVxxgHJ44rj/jFdS3GpaXpUUe5TmThsHOcD69KANf4R6fdW+kNc3U4kebAwFAwBx1HWvTK5jwNAYfDlqpQKQg4H+TXT0AFBFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSH1oA8T+MqouvaazJbFShDF8l+vtz+NereHih0e2ZM7TGvX6V5h8aIpFvtLnSKN1ZthLqeOfyr0zw1ltDtsjB8sdPpQBtUd+lNA29B1p1ABRRSUALRRRnjmgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgurqG0geaeVY41GWZiABU5rwj4wa/dXepR6PbyuIN6q8aKQWPc5yOPwNAGx4w+LWyb+z/DLRXE4JEs+Cwj6dB3znr0rhxrHjHUUkZ9Yvyzj7hhUJg+5AH4Cuv8LfDwS20LXcKRQjDBAoDk+7D/APXXp1jotlp9qIoYlUfnzigD5z8Gi80j4g2y3VxuLyfMzIVLkj3HT3r6ftW3QKfUV478VtLj06+0vXreGMGCZRK5YcDPYGvU9DvY7vTYJUZWDoDwfagDWooooAD0pMcYpaKAPEviz4Yij1O11QFdpkBcSMcdeevQV1nhbwzoMUYubWygDSLnzMbiQeSMmuj8VaFb67pEtvNgHGQ3oa8e8JX+tJd3ujaZfW5WGQj5uGUZwSvUUAe3w21rBHtVEA9B2qG81Ww0+ESXFzBEvq7gVwI8NavNI0d5rdw8EmAYwSQVyCRmtGHwVolr5kl2RMjYOJmGF9/8aALl18QLfyS2mWNzf9iyKVXPpkiqwv8Axlq1xsSG3021I5dxvk/AZon8WeF9AgaCKWMmM48m3TJz2GBxzXN3vxWuZ9W+waFost0+4AOc4YevA4Ge5oA3JPB+oXasuoa5cyK3UKzLx6dcUyDwPoNpGBM7yhQBiaclfrgnHWsWO0+IfiC5lF2ttYWrjG0sSR7jac5+pp9l8Ir1rZ4b7XLl0LDITIBwc85JoA2pNY8IaBCR9otcx5+VDvbjHHH1H51i3fxStrlGh0Cwe6udp2qyt17cAHP510Fh8JPDtoYzJbvcFOnnyFuevTpXV6f4d03TVAtbOGED+4gFAHjsl18UdaAEFrHZxbeRLhCx7+4rgvEXgXVrDVVn1u9jfdhpJizMOegG4V9ZeSn90Vk6x4ds9XUCaJMgbd20Eken0oA+XbbRPDlvbD7Zfme5Afb5KjYcDjr7j8aqaUthBZXcd1pU0jg5glVScg8AcYyPx719KWnw50KCOVJLOOTzl2yZUDcPoOKcPhv4eimgkgsUi8kggISAR6Edx/hQBx3wz8K29zZPd3+mQFyf3TPGNwU846dK9UttKtLVQsVvGgHQKoAqa3tYrZQkMaogGAFHAqxQBGIY1OQuKdwCB3pxooAKraheR6fYy3UxIjiUs2Bk4FWa8o+K3ifJTQLRgZWIknBYqCvOBke4z+FAHD3d+njLxnLqcgmMcbKsCgj5QM8EZ/XNe7aHYR29mjrGFZlG49z9TXC+BvDENvOlylq8cW3I3OOp9ABwK9QjQKuO1ADhwKWiigBCcDNee+MPiMvh/Uo7GK0M0kgIyX2gcZ/pXoTfdNeJ6pa/2z8UDHgPHbgvknIDdP8AOaAMK+17x8JprmVZhbyDMaoGPr2U8dR37Vy+qXvjjWbGa0ZmmhdvnUfxcdOeR34r6YttIgeGNpY1JxyDUg0W1D/LDGM+goA+aLN/H9jbpFGs4xEMblx5ft78fWtiLXfH0VwjCCd45F2urqMocHnPf2r6EOmW5/5ZLgjrikGmwbcbF46cUAfKF3qPiTU/FVvDfmZ7mIkxgpjHuBX0x4ZhuodKgEoIYICQTzXAzWUP/C6yko+VLQFBt4J+ufrxXrsEYEahQABQByPj7Urmx8MXssDhJFjPNeK6NofjR9EtpNNMcSF/Mz0J69a9S+Msktt4OlaEZy6hsHB69v0q/wDDvbdeFLORkIJXJDdc0Aed/wBjfEt7YPJdRZcD5QOR9SPp+tUy/wARLOZYzpd1LKON6sChHQd/xr6ISCPGAoxT/s0eANo4oA8Js7/4lNEY5fD0JZl4LSbdv15q5DefEWKMJNpER7ZWQADj0z/WvbFgRf4RTvLT+6PyoA8JudW8c2r7W0BpQevlycZzXP694s1l4pIbzQbyKQowRmhbHTnJHBr6UaCNhyi/lWVqenwPA++IMu0kj2oA+SrQ30fiG01K3hKOyCQlssuemDnp0r2fw58Tkt4xBqto1s69XU71PuMVS8Gx6drV3qcEcI8gTYVJFBPI5FdXd/DjRbiPzFs0VwSQUJXn14oA67TPENnqFss0NwjoTjIP+cVso4dcg5ryWXwheaPbtJpt1KSSDsOOfqa7nwnqMt3pyLcLiZRhqAOjooooAKKKKAAjNeUfFvSHMdpqkEKtNG2xpCGJA4I6ds16vXI/Ea2a58I3Zjj3vEBIFyB0PuMH6UAWPAmof2j4Ws5eM7AOPaumry34RaqG02TTnJ82JskFcbQexHY+1epUAFFFFABXPeNI5ZfDF2I7eOf5clHJHA7jHJP4iuhqte2iXtpJbuAVcEHIzigDkvh/qIuvDsLi3MK5ICBiQADgYzziuL+I3max44sbWCN3+yBASgY7SxyT6DitGK08X+Ebqa3srAajZs+UkMxyoJ9McU3w14O1O71+bVNbt385nbLeeQp5zwuM45xgntQB6RoVkLHSoIB0VABWnTI02IFHQCn0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABQelFFAHjvxwQQw6ZdFJXIkIAV/l455Fd74Ju1u/DVnMq4DRg4Ncn8cNPmufCUV1Ark28uWKdlI5P+fWr3wm1JL7wjbAbgYhsO45PHrQB6HSZ5xQKWgAoopMc0AKfakIBHPNLRQAUUUUAFFFGaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK828beBr3VdSj1TTzB58TBgZFyQB1AFek0UAeOx+PtbsporOXRXEiD96VGR+h4/GqsnjfxRqTuLeMWq7tuBAzsOevQ/yr2GXTLKWTzHtozIP4tozQmnW0WPLhRfooFAHher+G9f8bRyo9zOIkXhrkEbj6hVwMj3rY+E3iGaC4m8O33Fxa/KuZd+QOPWvYvs8YHCgV4j440O98HeMIfEGjx3LQ3JJuBFGGVfrigD3FG3AEU6ua8I+JIfEOkx3MeVb7ro3BVvSuloAKKKKAGsoYEEZB6ivHPEGg6loPi+XVdF04NCRl1xhMHk7RnrmvZaaUU9QDQB4TcQfEbX7mGSFBaQN95CxRQPww3b9a1D8KdY1VE/tPXHAXHyxK5Hb+8x9K9iEarjCgYpcAUAcBYfCTw1atulshcNxkynIOPbpXXWOh6fp0ax2tpDCijAEaAVpUYoAYI0AwBin4oooAO1FFFABRRRQAho60tFABRRRQAUUVXu7uKzt3mmcIiDJJoApeINZh0PR7m/l5ESZC56nsPzrxjQ9Hu/GHi+bVL5JGCnzFkU4UHsFIzkD19qb4g1m58fa3JFbS7LS2YJsGSeTxwOpPH0r1bwl4fGkWYLyySSOASXxx7dPrQBuWVosECKFwQMVcoooAKMUUUAMmbZCzHoBmvIPCPl3fxB1KdVfjJwWyFye49eK9P8AEF/Fpui3VxNIqKqHlumfSvIPhFP9p1jVZWDbnl3FuMHnnpwKAPcEA28UtIn3RSlgo5NABikbgU0zJn7wp2QQDQB4/wDEMTaF4/0TXEJMMw+zPnO1ee/1DcdOler2T74FPqAa474q2P2nwXPOhZZbR1nR1AJGOp59q3PCuppqOg2VxGxdZIVO4jGeOtAHP/Fm2abwXeSAHbFsY7Dhh84yQas/Di0S38K2UaoUCoDtLbsZ56961vGNi+o+EtVt42KyPbvtI6ggZ/pWd8NmR/B9g6xGMGPBB7kcZ/HrQB2KjApaKKACikyKWgAqlqcRlsJkUgMyMBn6Vdqrftts5W9EJ/SgDwT4TK0eu6gjAgo5UhjXvEaAQ7cdq8O+Dn+k6jqlwY8K8xwce9e7oMR4oA5vxX+48NXswk8po49wcdiKh8B3Au9DgmLByRyao/E+/ay8FagVYAsmOe+fSmfCuPyfCdqVZiGG7a2cjPbmgD0KigdKKACiiigAqvfWyXdnNA6grIhUg98irFB6UAfPvhidvDHjiS0mkliHnmJlcEKeeAOTzXv8T74w2eteI/FfSYNH1qHWVlECS8gsxI8z2UeuBz+NeieANei1zwzaXCS+YdgVj/tDrQB1tFFFABRRRQAhUN1FAUDpS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAc546sH1HwfqVvGxVjEWyD6c4/SvMPgtqRNxeWRLbVwwDBvpxkmva7uPzrWWPOCylcjtXz54EaXR/iTcW01wCzyOjKAASc5BNAH0SvSlpkZyo9MU+gAooooAKQjNLRmgAooooAOlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+I9Gg13Q7mwuE3pKhGM457VrUY4oA+c/BfiGXwF4hvNH1RrnyUIGWT7p+p7V9A2N7Fe20c0TBkdQQR3Fcj478BW3iW1ee1SKHUgPknaMNnHIB9q5Hwb4svdG19PDusTOZvuqHQjn2JPT/ADxQB7PRUcUqyJkGpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqte3sFhbSXFxKscUalmZjgAUASXFxHbQvLKwVEGWJPQV4H418Xaj4u8Q22l6Y8kdirMroCVYtnHzDg+nFL45+INx4kv4NM0iO5k04uVmaIOhJz6gdOD+ddd8N/Cr2gnuriMxrI2FgOcLjvzzQBpfD/wAGR6FYh5Ubz5Tufcc5x0/Cu/CgDApEUKoAGMU6gAooooAKKKKAMPxcJD4avPKkEbbPvHtXl3wbtDDPqEhlEpaYkkZwDk5xXo3jiWQ+Gr6CKJpJHhYqB3IHFcJ8G45Psl28vMhmJcbQMN34FAHrk0yW1s8shwiKWJz2FePajrmveLfGFzpukai1rZRxDLREOOfUjoecjB7V69eQtPZTRKcMyFQcZ7V4n4R1a28I+JtTstbZbWW4lBjkdcKevBP+cfhQAzW9D8VeEbVNSk8TXVxaRuoKc888Z56Z6+tet+GtTOqaHa3LSpI0iAlkOQT7VU1q/wBPfw7dSyTKYREzblIPAGeOtcp8HWnOhzNuU2jTsYAo4A/T+VAHomrWq3ul3Ns4VlkjZSGGRyMVwPwnuh/Yk9gH3LaTNEDjjHbsOPwr0lhlTXlfhaVLD4k6/pkXl+S7B1WM8KRwRjHB5HQmgD1G5iW4tniblXUgj1BrjPhur2Wm3WlzzCR7S5kRcEcLuOOB0rtVwYwfavOI86N8WpY12+VfweZtwAdw6njrQB6ZWdrOtWWh2LXd7JsjX8Savo25Qa4D4qC8/sMPDFGYF5llOMoM9skdf6d6AKFt4/1nWLm4bTNN821jDeW6xs24joMkgc/pir+k/EbfeW1hrGn3VldTyGNd8TBCeoGff8a2vCsNmuhWgtFUReWMAdq534ovbLosKji6SUSwlACysvOee3r9aAPRUkEi5HSsjxXP9l8K6rP/AM87SVumeimn+HbmS90O0uJV2vJErMPQkVS8cyNF4N1hlOCLSTB9PlNAHl/wMgB0+5kKEO0uc8jPHpXuJ+Vc15D8F4VGhM4i2lnI3HOWAr1xs+TnvQB5p8X5RH4QuEL4yR1HXmtP4YMW8J2I5BEYBB7Vz/xjmK+HBGzEb3AI7n6cGun+HSGLw7aoChQINpXjjFAHbY4paKKACiiigAooooA4/wCIegnWfDzNDEJLm2y8SEAgnvwa85+EesSWmtX2jysE+YyKm3b7HA7c/Wvc5oxLEyH+IYr5/wDFulXHgnxqNZtgxUsgLbc71P3iTwBQB9AowZQQadWXoWpQ6ppkN1A4aORQwI961KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAQjIxXh2qA2fxnhR7ss7Hcq7AAqkdM17lXzt8X0u0+I+n/2WwW7mVVU4OQ2cfyoA99W9giiDPIqjHc4qW3u4LoboZUcf7JzXjWn/DDVNaTz/Emv3s5PIhjkKoo9KVtJf4Y+I9ObTr6eXT76TypbeZ87T6g496APa6KjhbfEr+ozUlAAeKTrS0Y5oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKO3FAAfeuC8f+Ax4jNtqVjItvqVo25JMZ3L1wa7wccUYoA8h8H+OtU0/Vjo/ih4I2ztjn+4GPHBzXrFtdw3MSvFIrqehU5Fc34u8Ead4lspA9tD9q6q7L3968tutY8SfC55be5MU+mn5rchcKvP3R/nvQB77RXO+EfESeI9Dt79MjzFGQRjBroqACiiigAooooAKKKKACijtSbh3oAWioZbqKEZdgB6k1mX3ifSNORnu9QtoQoyQ8gBoA2aY8qRjLMAK8t1T406YJJodGs7nUnjBLPGu1B+J5x+FcVrV34x8YQXb3V+2m28OcWseUJOM4zxu498UAer+KPiToPhlCs9yJrn+GCH5nP19PxrxzXfFeqeOb+Czu9Ri0+ynkA+xrLhth/vY5yfetT4baDp955iTwv52AxaVQTID33YJro/HfgJ5bSPUdGRUuoCp8uMY3gf4A0AbfhHwdBpUcJR1EaA4RR97Pqe9d/DEsaAKBj2rzH4a+LZdVR7a9lthMpwsaONwA7Yr1FDkAjFADqKKKACiiigAooooA434kSLF4Q1Bvl3NCUGWCjJ9zXM/ByPy9FIDpJ8331B5+tbHxZvUsvCFw7xrIGO3axIz+VUfhKmNJY+V5cZclFB4UegoA9MByOKy9Y8OaVrtv5Oo2UNwm4Nh1zyK1Fp1AHk198FbW5u2Carcx2Mjl2tx0HOcL2A7dOleiaHodroWmQ2Nom2KJQoHetXFGKAGkcGvI4oxZ/HC+KBV+0W6ltxJJOByOMdvXtXrrdK8lvrdrr40F2KqsFuuMMAxyPzI5oA9WiOYwDivKvH7f2d8SvCt4MJ5pkhZy2MjI4/8eNeqQ/6sD2rx34zSKPEXhbEsYeOd2AJIOcpj8OKAPYbVt8Kn2pmoWEGpWMtpcorxSrtZSAR+tRaS5axi3HLbRk1foA8v03wz4r8JXd0unNb32nytujikfZ5XHOB2zz+NUJtG8X+KdWifVbOOysiSrxq4J25POcZz36d69fIB6ik2gHOKAK9larZ2scCKAkahQB2Fc18Rbz7F4H1SVwOYtg43ZyQOnfrXXVwPxbVpPA1zGhjDeYmC/Tr+v0oApfCazW28LWxXb8/zHb78/hXo7DKHPFcf4BhWLw7ZqoAUIDjGO1di/Kc9PegDxn4zNGBYpIygFuVZsA+h/Miu38CxsuhwK2wsqgZQmuA+NLLLqOj242lmf7uRzyBXpnhCLZo8A8sIdgyBQB0g6UtIOlLQAUUhz2pec+1ABRRRQAVynj7Rf7X8N3KRopl24BKk/wAufeurpCoIwQDQB4x8NNcudA1Q+GNVZExnysuCc9x1r2dWDDINebfEnwxFcaadTsmhtLq2PmCQ7UyRyDk8DmsvwL8VrW8MelatOF1FTtYqMo2O+RxQB69RUUM6TKGRgRjqKloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAIbqdLa2kmc4VFJJzXzlpl7F4s+M0l4VHkwkugycjHHOa734y+OLPRtCm0eOUtfXIGYwP4M85PavFPBcXiW51C4k8MWu15WAaZ8N5Y9MmgD6Y1zxHpvhnRjc3soGOEjU5Zz6Ad64nQNC1fxtrUXiPXyYbeM/6LZquMLnILe/frSaR8Jrm/u11DxVqc1/OGDJHvIVPYV6vZ2sdpbrFGMKowPpQBNGuyNVxjAp9JgdaWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAry341yxx+F4oXQN50wUg+nWvUq8h+M80qTaOgO1GlIzvZf1H+FAG98MbSK38LW8cb7geT8wPX3FbHifVNW0SIXdlbC7g6OnAMY9c9xWL8Mk8rS5sNuXzTgiXzM/jWp8RtSOm+C9RnRdzmPYBkjrx2oA8+0T4620kc66tbvFMpwPJXcP51pQ/GzTmUM8ZXPCocFjjrnB47cYrK+FHh6C7spZLq1Rmb74kGck8967+T4Y+FZpzO+kQGQnJwCB+WcUAYH/C5tMMiFIS8JxudW5XIzyKuWvxa0ie9MTB1jwT5nYfX0rQk+FnhKRNraNBz/dyP1Bqm/wc8JPgNYSFR0H2mTj/AMeoA1U+IegSSpGL2MblLAswA49zWRd/GTwpatsF20jdD5abgD25HFKnwd8J7gWsGIUbQDO/TrzzzWhH8MfCqQpF/ZMJCnOSSTn65oA5K4+NaXhMOiaRc3UxOEMmEX3z9BWKviz4laope1isokcEqNvvwOfwr2K38NaXbBRFZxLtORhRWgtnCmNsYGKAPnibTfHHiC4SHVr6+kgYgukEe1VyPwz2/OrVp8I52mEksPnBehdmBP1BBFfQC20S9EFPEarnAHNAHnnhv4bWWnWXlXSCYMPmRhx34x0xya6q78P2s+mTWQhQRyJtxt46Vt4ooA+f7ayv/h54x23Twva3IBZlkKKuSBkKele1WlxFeQKyOrqwBBByDWF8QPCMXiTSHeO2SS+hQ+ST/Lr/ADryTwz421HwhdXFprZvQI2IdJEDZ5xweMfmRxQB03i7Rm8I+J4vENjAxtZJAZ9spyGOc4XGMHjnNeo+H9TTVdLguowQsqBgG61414y+JVj4h05dJ0lLuSaV1DMEwAM8jGcn6e1ereDNPGmeHrW3UMAEHBBGD347fSgDpqKQHNLQAUUUA5oAKKKDQB5d8Y7/AMnw9Cik4kl2/KMk8HpyK0fhlaNb+HomfdlxnkYrA+M8wj061QjAably5G0Y6iup+HWz/hHbfYxZcZzQB2oGBS0dqKACiiigBkjhUYnoBXlPhvfrPxC1rVD5bRRyG3RkOfukY/ka0vij4wj0jTRpVo4bUrzCJGOwJxnpVr4feHl0HRokKf6RKA8zddzkcnNAHbJhYyelfP3xkvTfeNrWGEyuljbgyBOiszDHfnqO1e5avqcOkaXc39y+2GCMyMfYV8vHWJNY183kqP5moXZnYIfuop+XPtn3/hoA+oPDrbtJtzz/AKscEYxxWvWR4dDrpNuJCC4QZwcjpWvQAUUUUAITgZNeZ/GuZk8AzbGKt50eGHY5r0xvunNeX/GCUzeG5LXA2E5x7gUAbvw7Yy+FtPdydzQLuBHtXYv9yuW8CR+V4asVCbP3K8fhXTynCE+1AHiXxMFvJ450pZIpGKgAYbAOTzXrmgxLHYRqoKgDjNeJeNbqaf4tWtuJFEaou7Jwe5H64r3LSc/Yoic/dFAGjRRRQAUUd6KACiiigApCcUtch8QPGEPhTQmmLETyHbHhd2PqMigDzn4veJ5bu4bSYWk+zJwUQ43sM9+T1H04rm9J+E92fDaarMkjXTjzDAnDBcduDz3xit74eeGJfF2sy+J9ZQsqvi2jI2huepXJ9u9e2kRWtuxYqscY5zxigDwDQPGXiDwXGyXEcuoaYkm1ssd8Ptz/APq+le4eHfFOn+IrBLqzmDA8FTwVPoRXj3jIHxZrc8dhGbaEfKJEPzSkd9vcVRvPA3iHwcbS+0m+mUkbpnjjdgTjqyjIP40AfRYIPQ0teM+D/i23nrp3iQrDcY4nwArfUDocV6xY6raajCkttMkqOMhkbINAF6ikDA9DS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTXYKhJPSlJwK8u+KfxHttAsm0ewIuNTuVKbEbmMHucd/SgDyr4k3/8AwlvxHWxstr7XEOPLAz65IPP6V9AeD/DltoWi29tHEqbUGcDqa88+Dvglra0fWtRgYXU5yokXBUV7QiBVAHSgBcYpaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArjviJ4YbxFoX+jxB7y3YSRYA3HHUAnpmuxooA+eND8eXPhO5ayudNlhjMzNNHIeUJ64PcDHpS+MfGzeOHh03T4m+wo4Msjgjce46jGPfrXvU+l2VyzNNbRSFhglkByKz4PCml2lx51tbrAS+91iG1XPuKAMrwH4dTRNIQDfuf5jubOPTHtXY01VCDCjAp1ABRRRQAUUUUAFFFBoAKKKKACiiigAPNc5rvgrQtfmSfULBJpU4BJI49ODXR0UAcBZfDHQbS8S7FnskVy6qJDgZ46fStDW/GWleG0iSVy5ZtuF7Duam8Z+JrXQdJmMlwYZ2Q+XhC3NYPhjwlHeJHquqg3E0igpHIvES9cAeueaAJ5viro8chjEdwTtVlYptU7unJ6fjU1l8S9LuGYTn7NGrbPMdxgn/PrWjrGmaVZ6a8k9rG0cI3AFecgYGMflXlCeCG8bu18IRp0AI8oqN24eu3oO2KAPQ5Piz4WilMX9oKxDFdwBxkenHP1HFVZfizpS2UV1HBcywyMRuRRgY9zXIX3wk02x01pjfuJflJluDnBAxwBjnFVPDmh6Ba3cfm6nLcsrMzI6bUZyeoBGfwFAHrmkeM9I1oL9luQWPRDwa6IMHFePax4ORAt/ody0LwfOYwzNk9eBng11/gnxC+q2EgmlSSSFyhZQQD+fegDkPjikv8AZVvsTcsjEOTjaBj+db3wpYDwrZxhydsYPPoaPipGlx4ZmXIDhSVwMnPtWH4H8XaVYaPZW8lyiyrEqsAp/oKAPYRS1zdt4y0eV2j+2orL1D5X+f1rQj8QabMf3d7A30cUAalQXcy29s8rttVFLEnsKpXeu2NpEZJbmNUHcsK8q8R+L73xfI+m6QG+ylgC4I2svct/QUAVbCJPGHj+81h1ka0tyogDD5D23Zz7V6vZuxiUqCFA4I71ieGNEWy0uO3djlQATk5JrS1zWLLw9pE17dyCOC3jLE9z6CgDhvjF4oistC/sSNt15qLKgjU8hN3JP16fjXlngfSxdaxOfJaSRR5UAldcjtk/TAxVVdWPibxnc6zeFwS+63i3btpH3RjqQOOldt4DtHXX7uzeQSSo6uXKksOmevA6e9AHuOhWv2PTLe3yT5cYXJPtWpVS1KpEoyM4q0CCKAFooooARuleSfGKbZpcMO1h50oUMDjBz1r1osOfavI/ivcR3Os6Dp6fO5nMjgdAg9fx/lQB3XhbbHpUEa5+RAP0rXvZlW2ZmOB+Vcbpuvw21gXWWMckBc8gjrXM+MfiPb2VqUiuYmlbIEQyxb8ulAHLeIJI7740wIJjtUIQFUnkf5/WvoHTwFtkyOa+dfA2kalrfi19beF4lZg+5c4bkdz9OlfRtpGy26buDjmgC1RRRQAUUUUAFFFFACE4rwD4i6nPc+Njpk1yfKlmSNleAYVOcYznPJ64/SvoCvOPiB4GbVLuPW7Qb7uEjcrn+Edlz0oA6vRba203SoooEVUVflCgD8q4jx74whknk0eC8SKEIfPkjAkYt3QDt/n3rL1P4h6lp+k3FsmmtFdJGNrO2RzxkAc+ntWL4F8EarrZS71gSC0di5jYjD85zggn+VAHcfDvTYNjzwRbISdwzbmMnPPf+lejeUhXaVBHvUNjZQ2NskEKBUUYAA6VZoA5TxF8P9E8Rw+XdWwQ7t2+L5Tnvn1rzK+8F+LPAU8l74ene6t2bHlld5Cj2xx+Fe8UhUHrQB45oHxheAC28SafNZXAbaG28MR14PSvRdH8W6RrKqbO9jkLDcFDcge47VJrfhTSNetmgvrKKQMMZ2jI+hry3xD8HpbGeS+8O3LxOoBjiiAVwe/Pf6cUAe2BgRkHNLXzraeNvG/hW98vVy91bg874vmB9OAK9E0P4vaBqUaC5uBay45WXgfnQB6NRWXp+v6ZqW4Wd7BPtxny3BxWmGU9CKAFooooAKKKCcUAFFJketGR60ALRSZFMeeNBlnUD60ASUhIHWuV1j4ieGNGjka61e13IM7EkDM3sAO9eX6h8QvFHjbWF0Xw3ANOtpAS0zEO+z1P936daANv4pfEG7sLiLRPDt4BqEjYl2JuaMUzwF8MJYr/APt7xBJ9qv3+Zc8qufb1rX8DfDGLQ5Dfam4u9QZtxlOT/OvSkQIgUDAFADIYEhUKigKO1S0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRzmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopCcUtABRRRQAU122oW9BmnVBeRvLZzRxuUdkIDDqDQB5lp8Fx4p8X315c3E62dpN5aW8i4DEE/pz0r0y3iWJMKAMdK8j8L6zd+FtVudO1oBFlmLrOzg4JOMHvj0r1iC9ilQMrqQQORQBxXjm4N/qlhoUYyJn3z8sMIPp9O9dZZWkdvaoiIqoqjAAxgCuN8Y3KaX4o03VH2+WcxyPgZAJAHcevvXa2lzHPbIVYEEfnQB5l4quJ9cuL3yrhktrBirwKSBIVIJJJHH1FcBJcajd+Rc2cX/EvjGwOriVl9eSK9A8TB9A8STNc29t/Z2qN5X7r72ccEr375PTj8+O3aj4aWa0gtTc2Vw37uZSXVQcBQF3dvY+lAHT/DvV5r+7u7OZxIygPvyvzA9OAOOK2NGt5dL8cXlksyCCZTOkWQOvXAznrnnHeoPh5ol3psM1zfCLfJ90LGFIX0J71Jb36ah8SJ/LlXybWFRuCg7jzkZ9OaAOm1/w8uuaVcWc6qyyqeT2rx+7+D9ylwxhu2hBPygZIB+mc174L2FU5kX865PxH448P6KB9puPNm7RxJuJ59enb17UAeZD4deKEDbLq0kj6BZEznHrnr0qhrGna1oVm8+oQWqLtz8km3OOcAd+nSusm8da3rl39h0S1jhLtt84kOV5644GMZp+l+AtZ1TWTe65M2ApUIspcN055zgcdPegDymLRvEPie6DWlvKsIPzHc3AP8J/Lt717D4K8HS6HGjTA+a2N/J5Nd3pui2mlRiGKJIlJ4CjqT1NWb26ttPTzZpUjTbuJY4GB1NAFa7voNKtWnuZUijQZZ3OAPqa+ePHnje88YasttbRFtMtpOEjyzSEH7/A6f5711/jHV9T+IGoDw9oihLIMHmmZseYAcg4646H8RXUeD/hpFpGJ70pPcFt2SgO04xwev8A+vpQB4pothrVpfw3jaTclQWIl8snGe9dRb6xq2k3dxc/ZngncAnMf3+ccYPJ5r6CTTIEIXy12g56U+TSLWfiSFGGeMigDxS2+JOpQuqTz26sUVtsgZTk9QePpXS2XxNYRRNLJBLuXLbGHHX361383hrTbhcS2sLfVBWXP8PPDc+7fpVsdxyfkHNAGMfihZQSBbhkXI6hhjP1qRPirocinZcKSOvP6fyp1x8IPCk5UnTVUr02Ow/rUSfB3w0kBiWKZFJz8spz+dAEsnxM8PvF/wAhCJWY4wxwRXifjnxLHdeL4ryxnW8hVSqKhO7cc55/pXqOpfBHTJgDaXM0XB+V8MD9as+HfhLpmjNHLOi3EyfKrMv3aAPJNB0rxV4kLQ2pNnCW+Z5Mg47gc16f4d+EFhZqsl9/pM27cSxOM/jXpdppNtaALFGigdgK0FUUAZunaNbadGqQxKgxwAK1BwMUYpaACiiigAooooAKKKKACggEYIyKKKAKUukafNMJntIWlAxuKDNWY4UiGEUAe1SUUAFFFFABRRRQAUhANLRQBTu9Ms70AXFvHJg5G5Qa8z8SfCKzup3udPjjA2sPKcexxhuufrXrFFAHy5N4Q1TR1WSGa806dDiRmf5XGOMMMYPPT/Ctm21vx3pKCdNRW4BbcUl4IBOOjV9A3Vha3sLRXECSxt1V1yDWO/gzQ5GJOn2/IwcoORQB5tb/ABY1vTmA1fTbdo1GZHhlGV6Dkc+tS6h8c9Oj025VLaVbwDCRv0I9c12E3w10Sa5LNAPJP/LIcDPrx35rB8QfC3Sk069ubaFDKsDBN8QbHH0yTQB1PgTxHL4l8O29/NEEdx0Gfz5rqeK88+E11NN4St/O270Jj4GOAcV6GfXvQB498UfGGo+GfFFj9gDuSikxjJDDOMdcD69ax5PjN4jjuWtx4fiSULkBpi3b2wP1qv8AFbF58RrO1QkOYFQEHBGSeR713Wk/CzQjpQW4tS00q5kkLksTj1PNAHn83xT8Y3SsVOn2cT5UMQSQfz61yl/qeu6nEkl34kv5mlXKW0CuN2Tj1xg+tfQ1j8PdAsYfLSwhcFs5dQT9PpWrH4Z0iOUSrYQBwRg7BxigDwnwz8HL7U5o7jUkSGA4bY65Yggcdua9t8P+ENJ8Ow7LCyihz95lHJ+prfSNUGFAAp1ACAADApaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSY4xS0UAc5r3hHTdaBea3UuevbPvx3rirjwjr2hzJLpupXrwg8Q53BQBxnJ79+K9YprIGUgjOaAPDNb1PxBf6fd2OqaNHdIn3HZgjZ52nGeO361m+FPibPokq2OqWF3FZLgJK53CMHoM+le8XOl21yuJoUfnPIrndf+Hmia/DHHc2igocq68Ef4/jQBFff2X4y0MqsqTwyqMNG344yOledXmkeJ/D8cQsXV4FYhvNcuuOMfTv0FbFx8OdV8O2bHw9qV6SPuw71C+vPT6cVjw6x8QLOTypdLS7jTAPnL5bN+vP4CgCOLxX4xuLVo30nZBICPOtkZic5HHPHY5pdC+H+orElxcRsWn3NNH9oZX5IIPoCKlPjrxDbMRP4aZIwCQAG3NgjoMe/61YPxTvYYVkOjqrM5QI7spJGAQRt96AEl+G+pSyKqXcqxA5xLKSxXGNucfr798c7enfC/To5TJetLO4AVNzk7FByFHtmqB+LhjSLzdDuE81tm8uMA8jnj2NSN8Vbsp5MHh27e8JIKg/JtHG4NjkcelAHotlpNvbRqqRKu3oQKvuYYEyzBVAySeAK8oHjrxjeSE2egpFEEDATElm57Y+uaqQ6H4v8asH166uLKzddptY22fXp1/H1oA6rxF8R9HsyyadINQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" } }, { "ID": "b856ab4fc9357df3", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 429, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "455" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:28 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUn9eqidTMy1WGjENQyT3XVSylxZsiAs_SkkX-jQxhEnJE2MAKk6fDYL4e3GqklD-5-PEekdhMuXavZrZdmGXBQ" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MjksIm1lc3NhZ2UiOiJUaGUgcmF0ZSBvZiBjaGFuZ2UgcmVxdWVzdHMgdG8gdGhlIG9iamVjdCBnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcgZXhjZWVkcyB0aGUgcmF0ZSBsaW1pdC4gUGxlYXNlIHJlZHVjZSB0aGUgcmF0ZSBvZiBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSByZXF1ZXN0cy4iLCJlcnJvcnMiOlt7Im1lc3NhZ2UiOiJUaGUgcmF0ZSBvZiBjaGFuZ2UgcmVxdWVzdHMgdG8gdGhlIG9iamVjdCBnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcgZXhjZWVkcyB0aGUgcmF0ZSBsaW1pdC4gUGxlYXNlIHJlZHVjZSB0aGUgcmF0ZSBvZiBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSByZXF1ZXN0cy4iLCJkb21haW4iOiJ1c2FnZUxpbWl0cyIsInJlYXNvbiI6InJhdGVMaW1pdEV4Y2VlZGVkIn1dfX0=" } }, { "ID": "f843559bc49d4c45", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 429, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "455" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:29 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUmNtE97fNA95dRFJTyzoK0fgxMhFqy8YnU7_9c2IHSR8td77fGoKd85ua6rdaQifOyDYa7qGUaaorJy0svbH0o" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MjksIm1lc3NhZ2UiOiJUaGUgcmF0ZSBvZiBjaGFuZ2UgcmVxdWVzdHMgdG8gdGhlIG9iamVjdCBnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcgZXhjZWVkcyB0aGUgcmF0ZSBsaW1pdC4gUGxlYXNlIHJlZHVjZSB0aGUgcmF0ZSBvZiBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSByZXF1ZXN0cy4iLCJlcnJvcnMiOlt7Im1lc3NhZ2UiOiJUaGUgcmF0ZSBvZiBjaGFuZ2UgcmVxdWVzdHMgdG8gdGhlIG9iamVjdCBnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcgZXhjZWVkcyB0aGUgcmF0ZSBsaW1pdC4gUGxlYXNlIHJlZHVjZSB0aGUgcmF0ZSBvZiBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSByZXF1ZXN0cy4iLCJkb21haW4iOiJ1c2FnZUxpbWl0cyIsInJlYXNvbiI6InJhdGVMaW1pdEV4Y2VlZGVkIn1dfX0=" } }, { "ID": "8f5bb0a8abb33ad4", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:30 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlqG8Q8OB8Rivms1snxcjeNFc7IcZkA_j8Mwp-zXLYENMljV9M1FAc_AKPYg97m5r_xxms7v7TugrWGWnuCmNU" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite/a_small_text_file.replay000066400000000000000000000257021367004507500313760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSDvIrv3m/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "5e777b30daec6697", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibmFtZSI6ImJsb2ItZm9yLXJlYWRpbmcifQo=", "VGhpcyBpcyBhIHRleHQgZmlsZS4=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Etag": [ "CPbEm62L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnawhWKqtqYBO2vAFyz9TgwTzPJSgb-lQZ6txnap5-mm6AbuaXc2Q_bGVplIHYf0X0gJorbh9GQTObiSecp9ZM" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY3NzcyMjc4Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2Nzc3MjI3OCZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2Nzc3MjI3OCIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjIwIiwibWQ1SGFzaCI6IlB6TUpNU3pESmtvVGliTFNZOTdPalE9PSIsImNyYzMyYyI6Im5ITUdVdz09IiwiZXRhZyI6IkNQYkVtNjJMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjcuNzcyWiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE5OjI3Ljc3MloiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjcuNzcyWiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2Nzc3MjI3OCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njc3NzIyNzgvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BiRW02Mkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2Nzc3MjI3OCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njc3NzIyNzgvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ1BiRW02Mkw5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJibG9iLWZvci1yZWFkaW5nIiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1Njc3NzIyNzgiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY3NzcyMjc4L3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDUGJFbTYyTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2Nzc3MjI3OCIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1Njc3NzIyNzgvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ1BiRW02Mkw5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "c32add339afb11dd", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "20" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Etag": [ "\"3f3309312cc3264a1389b2d263dece8d\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683567772278" ], "X-Goog-Hash": [ "crc32c=nHMGUw==", "md5=PzMJMSzDJkoTibLSY97OjQ==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "20" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkOQvd7gE3igCV5_yVztnEFXpCRRgP8FREJUQCHV6BrHOt11VoHzxHa7ETlnGYyr75-lZGQ2XoCthGkhYqt0wk" ] }, "Body": "VGhpcyBpcyBhIHRleHQgZmlsZS4=" } }, { "ID": "1538e60191be5cb3", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:27 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkYK3-uFG3kGoS_kJcmh5TIXYbvRa9kXLeZ3aDfLOG-rFN0D3tGbBW5d8H-_viZTnN2XzDgUglth8Od5xKiDT0" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite/invalid_ContentType_fails.replay000066400000000000000000000052611367004507500330610ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSDtIjD3rP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "039441e0779352b0", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "204" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUkxbVKA05rbYfoBc9yZs4hWqWqDu0ZKQTxXg_u4dTNlqmfAq-wdkAU6ZPpKuUCPfGhNIRyJ6-sHAcTJ1zhNUNQ" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nPC9EZXRhaWxzPjwvRXJyb3I+" } } ] }no_write_then_close_results_in_empty_blob,_blob_existed.replay000066400000000000000000000256101367004507500411550ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSDtDu18s/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "caf4e94feb119d20", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibmFtZSI6ImJsb2ItZm9yLXJlYWRpbmcifQo=", "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2786" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Etag": [ "CISXjKyL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmCNlB6TcNEoBUvwptAEjupwxTcvRzjUAIi4EhdPrzxkBCp3JyUn2R6u8K_u-J6P-TqVXF25OBSri7VUGFDyyA" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY1NDIzNDkyIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2NTQyMzQ5MiZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NTQyMzQ5MiIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjAiLCJtZDVIYXNoIjoiMUIyTTJZOEFzZ1RwZ0FtWTdQaENmZz09IiwiY3JjMzJjIjoiQUFBQUFBPT0iLCJldGFnIjoiQ0lTWGpLeUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxOToyNS40MjNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjUuNDIzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxOToyNS40MjNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY1NDIzNDkyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NTQyMzQ5Mi9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSVNYakt5TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY1NDIzNDkyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NTQyMzQ5Mi9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSVNYakt5TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NTQyMzQ5MiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjU0MjM0OTIvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNJU1hqS3lMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY1NDIzNDkyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NTQyMzQ5Mi91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSVNYakt5TDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "99c9780a2dd76b8c", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683565423492" ], "X-Goog-Hash": [ "crc32c=AAAAAA==", "md5=1B2M2Y8AsgTpgAmY7PhCfg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "0" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkr87LyGZJBqQNX6clyUNb0un7kDMvNfLjNqqz-AlHzzOWDgw6qRdA76ZbOzGzN6LV_N6ckWgznyjGD6c-F6Y4" ] }, "Body": "" } }, { "ID": "277446ffac568d9c", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlHcZdRxcAPSK8BfUTq4dQaZtJz-Tu9ADJjEpcWsQIYT_mE0JyP10TNOFRnr94LS3lmxjE_ie15Ob79I9rQWvE" ] }, "Body": "" } } ] }no_write_then_close_results_in_empty_blob.replay000066400000000000000000000256101367004507500363560ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSDsNkWflf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "5cef5b0e39ed00eb", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibmFtZSI6ImJsb2ItZm9yLXJlYWRpbmcifQo=", "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2786" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Etag": [ "CK2F+KuL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkgQQxGOEGn_jP_tHN6k-3sOzxs7Jjg2sAmGjVjNKmms7rfwJiu7yTwqEU_WXq5dGhQoSoXB8RCgORdqK0cJ-Q" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY1MDkzNTQ5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2NTA5MzU0OSZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NTA5MzU0OSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjAiLCJtZDVIYXNoIjoiMUIyTTJZOEFzZ1RwZ0FtWTdQaENmZz09IiwiY3JjMzJjIjoiQUFBQUFBPT0iLCJldGFnIjoiQ0syRitLdUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxOToyNS4wOTNaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjUuMDkzWiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxOToyNS4wOTNaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY1MDkzNTQ5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NTA5MzU0OS9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSzJGK0t1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY1MDkzNTQ5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NTA5MzU0OS9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSzJGK0t1TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NTA5MzU0OSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjUwOTM1NDkvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNLMkYrS3VMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY1MDkzNTQ5IiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NTA5MzU0OS91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSzJGK0t1TDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "094e356d91291ce3", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683565093549" ], "X-Goog-Hash": [ "crc32c=AAAAAA==", "md5=1B2M2Y8AsgTpgAmY7PhCfg==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "0" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkGxyfNMP2x8U80npjiBs_S0DBf6c5XjMJeUZx3OY2VZNvx8fB1lHqHROFMDy0tqbTduPGPfhi198bQi5O4LlM" ] }, "Body": "" } }, { "ID": "844398faf14a1ded", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:25 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkNwWYVTw9_5_pSYn_88L9NIOIpwTAoRvDc4_UTydpLp5HDJ3cDy-cPShPpnSTYzLrJLByofvC0Lrv0fXlaUJE" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite/write_to_empty_key_fails.replay000066400000000000000000000060201367004507500330130ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSDsEh+Esv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "68640117073ca1aa", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04In0K", "" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "127" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:24 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUm0q82eroiaW9T0HHcHNk4OLr_HR0jmFd9SP1RKG-QRTpFKm-jWOkS6Adj_-HYJkFdhzV2s0u1SSLKj1W4l310" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MDAsIm1lc3NhZ2UiOiJObyBvYmplY3QgbmFtZSIsImVycm9ycyI6W3sibWVzc2FnZSI6Ik5vIG9iamVjdCBuYW1lIiwiZG9tYWluIjoiZ2xvYmFsIiwicmVhc29uIjoicmVxdWlyZWQifV19fQ==" } } ] }write_with_explicit_ContentType_overrides_discovery.replay000066400000000000000000000666411367004507500404460ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSDuB68Nwv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "d2c5f15c6a7e9907", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026name=blob-for-reading\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwibmFtZSI6ImJsb2ItZm9yLXJlYWRpbmcifQo=", "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2780" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Etag": [ "CJ+EwqyL9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUnwqoVICl3mfJDiSd87bkkwOcLuLpVDcMKkqU_UdKYrjxUxnVB1j8_56aOJQqtm01EHoPRvr6oxikNout1bGW4" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvYmxvYi1mb3ItcmVhZGluZy8xNTkxNjgzNTY2MzA1ODIzIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmciLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nP2dlbmVyYXRpb249MTU5MTY4MzU2NjMwNTgyMyZhbHQ9bWVkaWEiLCJuYW1lIjoiYmxvYi1mb3ItcmVhZGluZyIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NjMwNTgyMyIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoiYXBwbGljYXRpb24vanNvbiIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjYzNTQiLCJtZDVIYXNoIjoiRDJwOG4vUFQxM0M0OS9vWndxNFowQT09IiwiY3JjMzJjIjoidGR3cmdRPT0iLCJldGFnIjoiQ0orRXdxeUw5T2tDRUFFPSIsInRpbWVDcmVhdGVkIjoiMjAyMC0wNi0wOVQwNjoxOToyNi4zMDVaIiwidXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTk6MjYuMzA1WiIsInRpbWVTdG9yYWdlQ2xhc3NVcGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxOToyNi4zMDVaIiwiYWNsIjpbeyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY2MzA1ODIzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NjMwNTgyMy9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSitFd3F5TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJvd25lcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY2MzA1ODIzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NjMwNTgyMy9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL2Jsb2ItZm9yLXJlYWRpbmcvYWNsL3Byb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJPV05FUiIsImV0YWciOiJDSitFd3F5TDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJlZGl0b3JzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6ImJsb2ItZm9yLXJlYWRpbmciLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzU2NjMwNTgyMyIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9ibG9iLWZvci1yZWFkaW5nLzE1OTE2ODM1NjYzMDU4MjMvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9ibG9iLWZvci1yZWFkaW5nL2FjbC9wcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiUkVBREVSIiwiZXRhZyI6IkNKK0V3cXlMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6InZpZXdlcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoiYmxvYi1mb3ItcmVhZGluZyIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTY2MzA1ODIzIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L2Jsb2ItZm9yLXJlYWRpbmcvMTU5MTY4MzU2NjMwNTgyMy91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vYmxvYi1mb3ItcmVhZGluZy9hY2wvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsInJvbGUiOiJPV05FUiIsImVtYWlsIjoicnZhbmdlbnRAZ29vZ2xlLmNvbSIsImV0YWciOiJDSitFd3F5TDlPa0NFQUU9In1dLCJvd25lciI6eyJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20ifX0=" } }, { "ID": "642d1bcb9ddbe870", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "6354" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683566305823" ], "X-Goog-Hash": [ "crc32c=tdwrgQ==", "md5=D2p8n/PT13C49/oZwq4Z0A==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "6354" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUn33woPN2SWeZo6b59G4au6SgzEjVN364y0u0XlwSF9XOm8zC41vDjPgwnkhi1FLuC7pIhmX4T5ODh3AX-y2aE" ] }, "Body": "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" } }, { "ID": "7d1411100a36608f", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/blob-for-reading?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:19:26 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUmONe1E6HJMJ0O46BcZe8yVukW7wDve8ydghVjfyR-NZ9Pb-rNaIO-TmMydXlvv8qkrFJsVH_YSu8JokRpPndM" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/gcsblob/testdata/TestOpenBucket/000077500000000000000000000000001367004507500223525ustar00rootroot00000000000000go-cloud-0.20.0/blob/gcsblob/testdata/TestOpenBucket/empty_bucket_name_results_in_error.replay000066400000000000000000000013201367004507500327370ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCwMra9a/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": null }go-cloud-0.20.0/blob/gcsblob/testdata/TestOpenBucket/success.replay000066400000000000000000000013201367004507500252340ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCwMsPcJf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": null }go-cloud-0.20.0/blob/gcsblob/testdata/TestPreconditions.replay000066400000000000000000001034571367004507500243630ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSCxBGIhDf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^Expires$", "^Signature$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^Expires$", "^Signature$" ], "RemoveParams": null }, "Entries": [ { "ID": "47650e1f2ac81856", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026ifGenerationMatch=-999\u0026name=precondition-key\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsIm5hbWUiOiJwcmVjb25kaXRpb24ta2V5In0K", "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 412, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "190" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUnQDTB6zXdJo0TMttzDP0lzOdh57MFFEfXV6z7OH2ebbNfdl6B8zMbtMipH8qLc8qTkWWjmEGEATYZVCF6wvzM" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MTIsIm1lc3NhZ2UiOiJQcmVjb25kaXRpb24gRmFpbGVkIiwiZXJyb3JzIjpbeyJtZXNzYWdlIjoiUHJlY29uZGl0aW9uIEZhaWxlZCIsImRvbWFpbiI6Imdsb2JhbCIsInJlYXNvbiI6ImNvbmRpdGlvbk5vdE1ldCIsImxvY2F0aW9uVHlwZSI6ImhlYWRlciIsImxvY2F0aW9uIjoiSWYtTWF0Y2gifV19fQ==" } }, { "ID": "ae2c1822f801f2bd", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/upload/storage/v1/b/go-cloud-blob-test-bucket/o?alt=json\u0026ifGenerationMatch=0\u0026name=precondition-key\u0026prettyPrint=false\u0026projection=full\u0026uploadType=multipart", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "multipart/related", "BodyParts": [ "eyJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiY29udGVudFR5cGUiOiJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsIm5hbWUiOiJwcmVjb25kaXRpb24ta2V5In0K", "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Etag": [ "CL/Vt4+L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_single_post_uploads" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUllEdLQn__TeAABQao6FjhxWScYTV0HMK8GUADIpOAT97nLUpqr4G5D1r6WeR3amTskI_nOr1M5mW9GKaeEgUE" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvcHJlY29uZGl0aW9uLWtleS8xNTkxNjgzNTA1MzE4NTkxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9wcmVjb25kaXRpb24ta2V5P2dlbmVyYXRpb249MTU5MTY4MzUwNTMxODU5MSZhbHQ9bWVkaWEiLCJuYW1lIjoicHJlY29uZGl0aW9uLWtleSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTMxODU5MSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsImNyYzMyYyI6InlaUmxxZz09IiwiZXRhZyI6IkNML1Z0NCtMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjUuMzE4WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI1LjMxOFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjUuMzE4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InByZWNvbmRpdGlvbi1rZXkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTMxODU5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5LzE1OTE2ODM1MDUzMTg1OTEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0wvVnQ0K0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InByZWNvbmRpdGlvbi1rZXkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTMxODU5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5LzE1OTE2ODM1MDUzMTg1OTEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9wcmVjb25kaXRpb24ta2V5L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0wvVnQ0K0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJwcmVjb25kaXRpb24ta2V5IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDUzMTg1OTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvcHJlY29uZGl0aW9uLWtleS8xNTkxNjgzNTA1MzE4NTkxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vcHJlY29uZGl0aW9uLWtleS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTC9WdDQrTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InByZWNvbmRpdGlvbi1rZXkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTMxODU5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5LzE1OTE2ODM1MDUzMTg1OTEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0wvVnQ0K0w5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "924a5176c0eeb7fe", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/precondition-key?generation=999999", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "204" ], "Content-Type": [ "application/xml; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlyVdbj4ocRPLihSVfY8WcEtbWmJlN8UpqdFQFuDX4MmBn7meXtZNH82k124rNtU9eDt9rB-z4-MukgDxN-LfQ" ] }, "Body": "PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48RXJyb3I+PENvZGU+Tm9TdWNoS2V5PC9Db2RlPjxNZXNzYWdlPlRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0LjwvTWVzc2FnZT48RGV0YWlscz5ObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5PC9EZXRhaWxzPjwvRXJyb3I+" } }, { "ID": "c612b202ddb3fedd", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/precondition-key?alt=json\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0, must-revalidate, no-transform" ], "Content-Length": [ "2787" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Etag": [ "CL/Vt4+L9OkCEAE=" ], "Expires": [ "CLEARED" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlgct-HMsI2ILBHE_qfZKK93Hxv7Lr5XSZB8k33PmexAWWfiTVmOaMV8RbwX0tlJtrWdnuCJ9izWGX6nI6qr1I" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvcHJlY29uZGl0aW9uLWtleS8xNTkxNjgzNTA1MzE4NTkxIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkiLCJtZWRpYUxpbmsiOiJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZG93bmxvYWQvc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9wcmVjb25kaXRpb24ta2V5P2dlbmVyYXRpb249MTU5MTY4MzUwNTMxODU5MSZhbHQ9bWVkaWEiLCJuYW1lIjoicHJlY29uZGl0aW9uLWtleSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTMxODU5MSIsIm1ldGFnZW5lcmF0aW9uIjoiMSIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInN0b3JhZ2VDbGFzcyI6IlJFR0lPTkFMIiwic2l6ZSI6IjExIiwibWQ1SGFzaCI6IlhyWTd1K0FlN3RDVHl5SzdqMXJOd3c9PSIsImNyYzMyYyI6InlaUmxxZz09IiwiZXRhZyI6IkNML1Z0NCtMOU9rQ0VBRT0iLCJ0aW1lQ3JlYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjUuMzE4WiIsInVwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI1LjMxOFoiLCJ0aW1lU3RvcmFnZUNsYXNzVXBkYXRlZCI6IjIwMjAtMDYtMDlUMDY6MTg6MjUuMzE4WiIsImFjbCI6W3sia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InByZWNvbmRpdGlvbi1rZXkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTMxODU5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5LzE1OTE2ODM1MDUzMTg1OTEvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkvYWNsL3Byb2plY3Qtb3duZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0wvVnQ0K0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoib3duZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InByZWNvbmRpdGlvbi1rZXkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTMxODU5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5LzE1OTE2ODM1MDUzMTg1OTEvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9wcmVjb25kaXRpb24ta2V5L2FjbC9wcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5IiwiYnVja2V0IjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldCIsImVudGl0eSI6InByb2plY3QtZWRpdG9ycy04OTI5NDI2MzgxMjkiLCJyb2xlIjoiT1dORVIiLCJldGFnIjoiQ0wvVnQ0K0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoiZWRpdG9ycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJwcmVjb25kaXRpb24ta2V5IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDUzMTg1OTEiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvcHJlY29uZGl0aW9uLWtleS8xNTkxNjgzNTA1MzE4NTkxL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vcHJlY29uZGl0aW9uLWtleS9hY2wvcHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LXZpZXdlcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6IlJFQURFUiIsImV0YWciOiJDTC9WdDQrTDlPa0NFQUU9IiwicHJvamVjdFRlYW0iOnsicHJvamVjdE51bWJlciI6Ijg5Mjk0MjYzODEyOSIsInRlYW0iOiJ2aWV3ZXJzIn19LHsia2luZCI6InN0b3JhZ2Ujb2JqZWN0QWNjZXNzQ29udHJvbCIsIm9iamVjdCI6InByZWNvbmRpdGlvbi1rZXkiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTMxODU5MSIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5LzE1OTE2ODM1MDUzMTg1OTEvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkvYWNsL3VzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJ1c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJyb2xlIjoiT1dORVIiLCJlbWFpbCI6InJ2YW5nZW50QGdvb2dsZS5jb20iLCJldGFnIjoiQ0wvVnQ0K0w5T2tDRUFFPSJ9XSwib3duZXIiOnsiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIn19" } }, { "ID": "f6bd1fef94277ba9", "Request": { "Method": "GET", "URL": "https://storage.googleapis.com/go-cloud-blob-test-bucket/precondition-key?generation=1591683505318591", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "private, max-age=0" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Expires": [ "CLEARED" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Server": [ "UploadServer" ], "X-Goog-Generation": [ "1591683505318591" ], "X-Goog-Hash": [ "crc32c=yZRlqg==", "md5=XrY7u+Ae7tCTyyK7j1rNww==" ], "X-Goog-Metageneration": [ "1" ], "X-Goog-Storage-Class": [ "REGIONAL" ], "X-Goog-Stored-Content-Encoding": [ "identity" ], "X-Goog-Stored-Content-Length": [ "11" ], "X-Guploader-Customer": [ "cloud-storage" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkElQUmYmJZk4HPxpoyqLCV9HRpLwITbgSTjJJEbqy07R9LglPEQjVrwAKjO0g9aEjd2AaXgVX16ZBZzQtunD4" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "5e1de4a365823e66", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/precondition-key/rewriteTo/b/go-cloud-blob-test-bucket/o/precondition-key2?alt=json\u0026ifGenerationMatch=-999\u0026prettyPrint=false\u0026projection=full", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "application/json", "BodyParts": [ "e30K" ] }, "Response": { "StatusCode": 412, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "190" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUlrULHe2tCp5GAZqC9sQCtrv4YRyc05Ol2pDjGFk2V8jktV21KlOqtFgz0UcDvQgbNNW-NUdnXaWKAi4NWFap8" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MTIsIm1lc3NhZ2UiOiJQcmVjb25kaXRpb24gRmFpbGVkIiwiZXJyb3JzIjpbeyJtZXNzYWdlIjoiUHJlY29uZGl0aW9uIEZhaWxlZCIsImRvbWFpbiI6Imdsb2JhbCIsInJlYXNvbiI6ImNvbmRpdGlvbk5vdE1ldCIsImxvY2F0aW9uVHlwZSI6ImhlYWRlciIsImxvY2F0aW9uIjoiSWYtTWF0Y2gifV19fQ==" } }, { "ID": "8337afdd1b63af0e", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/precondition-key/rewriteTo/b/go-cloud-blob-test-bucket/o/precondition-key2?alt=json\u0026prettyPrint=false\u0026projection=full\u0026sourceGeneration=9999999", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "application/json", "BodyParts": [ "e30K" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "215" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "agent_rejected" ], "X-Guploader-Upload-Result": [ "agent_rejected" ], "X-Guploader-Uploadid": [ "AAANsUnrsZ9aB5-CeRUOo6TIEhhSShpxsfP7IvJF_a3ruierc6p0MLxOE5vhV2llL4Jmb85lgwuW1vHFdUrijfGyGRk" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjo0MDQsIm1lc3NhZ2UiOiJObyBzdWNoIG9iamVjdDogZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5IiwiZXJyb3JzIjpbeyJtZXNzYWdlIjoiTm8gc3VjaCBvYmplY3Q6IGdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvcHJlY29uZGl0aW9uLWtleSIsImRvbWFpbiI6Imdsb2JhbCIsInJlYXNvbiI6Im5vdEZvdW5kIn1dfX0=" } }, { "ID": "7baf14b12195e171", "Request": { "Method": "POST", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/precondition-key/rewriteTo/b/go-cloud-blob-test-bucket/o/precondition-key2?alt=json\u0026ifGenerationMatch=0\u0026prettyPrint=false\u0026projection=full\u0026sourceGeneration=1591683505318591", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "application/json", "BodyParts": [ "e30K" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "2906" ], "Content-Type": [ "application/json; charset=UTF-8" ], "Date": [ "Tue, 09 Jun 2020 06:18:25 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUkTnQIaMrUIeA0SKGnz094T2cUHQeqeoV4I-S_P5ezjfsn9K8VAnAzSZwRpUe0-TXZ7JzFCRc-WAhiYjjN6IKw" ] }, "Body": "eyJraW5kIjoic3RvcmFnZSNyZXdyaXRlUmVzcG9uc2UiLCJ0b3RhbEJ5dGVzUmV3cml0dGVuIjoiMTEiLCJvYmplY3RTaXplIjoiMTEiLCJkb25lIjp0cnVlLCJyZXNvdXJjZSI6eyJraW5kIjoic3RvcmFnZSNvYmplY3QiLCJpZCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvcHJlY29uZGl0aW9uLWtleTIvMTU5MTY4MzUwNTk2NTEyMiIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9wcmVjb25kaXRpb24ta2V5MiIsIm1lZGlhTGluayI6Imh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9kb3dubG9hZC9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkyP2dlbmVyYXRpb249MTU5MTY4MzUwNTk2NTEyMiZhbHQ9bWVkaWEiLCJuYW1lIjoicHJlY29uZGl0aW9uLWtleTIiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZ2VuZXJhdGlvbiI6IjE1OTE2ODM1MDU5NjUxMjIiLCJtZXRhZ2VuZXJhdGlvbiI6IjEiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCJzdG9yYWdlQ2xhc3MiOiJSRUdJT05BTCIsInNpemUiOiIxMSIsIm1kNUhhc2giOiJYclk3dStBZTd0Q1R5eUs3ajFyTnd3PT0iLCJjcmMzMmMiOiJ5WlJscWc9PSIsImV0YWciOiJDTUtRMzQrTDlPa0NFQUU9IiwidGltZUNyZWF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI1Ljk2NFoiLCJ1cGRhdGVkIjoiMjAyMC0wNi0wOVQwNjoxODoyNS45NjRaIiwidGltZVN0b3JhZ2VDbGFzc1VwZGF0ZWQiOiIyMDIwLTA2LTA5VDA2OjE4OjI1Ljk2NFoiLCJhY2wiOlt7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJwcmVjb25kaXRpb24ta2V5MiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTA1OTY1MTIyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3ByZWNvbmRpdGlvbi1rZXkyLzE1OTE2ODM1MDU5NjUxMjIvcHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkyL2FjbC9wcm9qZWN0LW93bmVycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC1vd25lcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNS1EzNCtMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6Im93bmVycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJwcmVjb25kaXRpb24ta2V5MiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTA1OTY1MTIyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3ByZWNvbmRpdGlvbi1rZXkyLzE1OTE2ODM1MDU5NjUxMjIvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsInNlbGZMaW5rIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vc3RvcmFnZS92MS9iL2dvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQvby9wcmVjb25kaXRpb24ta2V5Mi9hY2wvcHJvamVjdC1lZGl0b3JzLTg5Mjk0MjYzODEyOSIsImJ1Y2tldCI6ImdvLWNsb3VkLWJsb2ItdGVzdC1idWNrZXQiLCJlbnRpdHkiOiJwcm9qZWN0LWVkaXRvcnMtODkyOTQyNjM4MTI5Iiwicm9sZSI6Ik9XTkVSIiwiZXRhZyI6IkNNS1EzNCtMOU9rQ0VBRT0iLCJwcm9qZWN0VGVhbSI6eyJwcm9qZWN0TnVtYmVyIjoiODkyOTQyNjM4MTI5IiwidGVhbSI6ImVkaXRvcnMifX0seyJraW5kIjoic3RvcmFnZSNvYmplY3RBY2Nlc3NDb250cm9sIiwib2JqZWN0IjoicHJlY29uZGl0aW9uLWtleTIiLCJnZW5lcmF0aW9uIjoiMTU5MTY4MzUwNTk2NTEyMiIsImlkIjoiZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9wcmVjb25kaXRpb24ta2V5Mi8xNTkxNjgzNTA1OTY1MTIyL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJzZWxmTGluayI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3N0b3JhZ2UvdjEvYi9nby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L28vcHJlY29uZGl0aW9uLWtleTIvYWNsL3Byb2plY3Qtdmlld2Vycy04OTI5NDI2MzgxMjkiLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoicHJvamVjdC12aWV3ZXJzLTg5Mjk0MjYzODEyOSIsInJvbGUiOiJSRUFERVIiLCJldGFnIjoiQ01LUTM0K0w5T2tDRUFFPSIsInByb2plY3RUZWFtIjp7InByb2plY3ROdW1iZXIiOiI4OTI5NDI2MzgxMjkiLCJ0ZWFtIjoidmlld2VycyJ9fSx7ImtpbmQiOiJzdG9yYWdlI29iamVjdEFjY2Vzc0NvbnRyb2wiLCJvYmplY3QiOiJwcmVjb25kaXRpb24ta2V5MiIsImdlbmVyYXRpb24iOiIxNTkxNjgzNTA1OTY1MTIyIiwiaWQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0L3ByZWNvbmRpdGlvbi1rZXkyLzE1OTE2ODM1MDU5NjUxMjIvdXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwic2VsZkxpbmsiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9zdG9yYWdlL3YxL2IvZ28tY2xvdWQtYmxvYi10ZXN0LWJ1Y2tldC9vL3ByZWNvbmRpdGlvbi1rZXkyL2FjbC91c2VyLXJ2YW5nZW50QGdvb2dsZS5jb20iLCJidWNrZXQiOiJnby1jbG91ZC1ibG9iLXRlc3QtYnVja2V0IiwiZW50aXR5IjoidXNlci1ydmFuZ2VudEBnb29nbGUuY29tIiwicm9sZSI6Ik9XTkVSIiwiZW1haWwiOiJydmFuZ2VudEBnb29nbGUuY29tIiwiZXRhZyI6IkNNS1EzNCtMOU9rQ0VBRT0ifV0sIm93bmVyIjp7ImVudGl0eSI6InVzZXItcnZhbmdlbnRAZ29vZ2xlLmNvbSJ9fX0=" } }, { "ID": "f44f655a4b3c5b6a", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/precondition-key2?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:26 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUm8Zvq_Dz3um1tb7rAdlqc3ftxEJqLy60yC9ats6pAAJoFX4opSLuBp1OMWT3TJLMHjSzaCDS_OwydNq-4I82w" ] }, "Body": "" } }, { "ID": "78d57dc8f7058909", "Request": { "Method": "DELETE", "URL": "https://storage.googleapis.com/storage/v1/b/go-cloud-blob-test-bucket/o/precondition-key?alt=json\u0026prettyPrint=false", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "google-api-go-client/0.5 go-cloud/blob/0.1.0" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Alt-Svc": [ "h3-27=\":443\"; ma=2592000,h3-25=\":443\"; ma=2592000,h3-T050=\":443\"; ma=2592000,h3-Q050=\":443\"; ma=2592000,h3-Q049=\":443\"; ma=2592000,h3-Q048=\":443\"; ma=2592000,h3-Q046=\":443\"; ma=2592000,h3-Q043=\":443\"; ma=2592000,quic=\":443\"; ma=2592000; v=\"46,43\"" ], "Cache-Control": [ "no-cache, no-store, max-age=0, must-revalidate" ], "Content-Length": [ "0" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:18:26 GMT" ], "Expires": [ "CLEARED" ], "Pragma": [ "no-cache" ], "Server": [ "UploadServer" ], "Vary": [ "Origin", "X-Origin" ], "X-Guploader-Customer": [ "apiary_cloudstorage_metadata" ], "X-Guploader-Request-Result": [ "success" ], "X-Guploader-Upload-Result": [ "success" ], "X-Guploader-Uploadid": [ "AAANsUlNlA83nmw6zL8zOp_UljsxzSxGGgMhv6i71DvDkdhuFnEq39WvcpytphDYzQsKl1Gqu3XtqWAYp4CUKaI8O3g" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/memblob/000077500000000000000000000000001367004507500156445ustar00rootroot00000000000000go-cloud-0.20.0/blob/memblob/example_test.go000066400000000000000000000035271367004507500206740ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memblob_test import ( "context" "fmt" "log" "gocloud.dev/blob" "gocloud.dev/blob/memblob" ) func ExampleOpenBucket() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Create an in-memory bucket. bucket := memblob.OpenBucket(nil) defer bucket.Close() // Now we can use bucket to read or write files to the bucket. err := bucket.WriteAll(ctx, "my-key", []byte("hello world"), nil) if err != nil { log.Fatal(err) } data, err := bucket.ReadAll(ctx, "my-key") if err != nil { log.Fatal(err) } fmt.Println(string(data)) // Output: // hello world } func Example_openBucketFromURL() { // blob.OpenBucket creates a *blob.Bucket from a URL. b, err := blob.OpenBucket(context.Background(), "mem://") if err != nil { log.Fatal(err) } defer b.Close() // Now we can use b to read or write files to the container. ctx := context.Background() err = b.WriteAll(ctx, "my-key", []byte("hello world"), nil) if err != nil { log.Fatal(err) } data, err := b.ReadAll(ctx, "my-key") if err != nil { log.Fatal(err) } fmt.Println(string(data)) // Output: // hello world } go-cloud-0.20.0/blob/memblob/memblob.go000066400000000000000000000223751367004507500176210ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package memblob provides an in-memory blob implementation. // Use OpenBucket to construct a *blob.Bucket. // // URLs // // For blob.OpenBucket memblob registers for the scheme "mem". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // memblob does not support any types for As. package memblob // import "gocloud.dev/blob/memblob" import ( "bytes" "context" "crypto/md5" "errors" "fmt" "hash" "io" "net/url" "sort" "strings" "sync" "time" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/gcerrors" ) const defaultPageSize = 1000 var ( errNotFound = errors.New("blob not found") errNotImplemented = errors.New("not implemented") ) func init() { blob.DefaultURLMux().RegisterBucket(Scheme, &URLOpener{}) } // Scheme is the URL scheme memblob registers its URLOpener under on // blob.DefaultMux. const Scheme = "mem" // URLOpener opens URLs like "mem://". // // No query parameters are supported. type URLOpener struct{} // OpenBucketURL opens a blob.Bucket based on u. func (*URLOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { for param := range u.Query() { return nil, fmt.Errorf("open bucket %v: invalid query parameter %q", u, param) } return OpenBucket(nil), nil } // Options sets options for constructing a *blob.Bucket backed by memory. type Options struct{} type blobEntry struct { Content []byte Attributes *driver.Attributes } type bucket struct { mu sync.Mutex blobs map[string]*blobEntry } // openBucket creates a driver.Bucket backed by memory. func openBucket(_ *Options) driver.Bucket { return &bucket{ blobs: map[string]*blobEntry{}, } } // OpenBucket creates a *blob.Bucket backed by memory. func OpenBucket(opts *Options) *blob.Bucket { return blob.NewBucket(openBucket(opts)) } func (b *bucket) Close() error { return nil } func (b *bucket) ErrorCode(err error) gcerrors.ErrorCode { switch err { case errNotFound: return gcerrors.NotFound case errNotImplemented: return gcerrors.Unimplemented default: return gcerrors.Unknown } } // ListPaged implements driver.ListPaged. // The implementation largely mirrors the one in fileblob. func (b *bucket) ListPaged(ctx context.Context, opts *driver.ListOptions) (*driver.ListPage, error) { b.mu.Lock() defer b.mu.Unlock() // pageToken is a returned NextPageToken, set below; it's the last key of the // previous page. var pageToken string if len(opts.PageToken) > 0 { pageToken = string(opts.PageToken) } pageSize := opts.PageSize if pageSize == 0 { pageSize = defaultPageSize } var keys []string for key := range b.blobs { keys = append(keys, key) } sort.Strings(keys) // If opts.Delimiter != "", lastPrefix contains the last "directory" key we // added. It is used to avoid adding it again; all files in this "directory" // are collapsed to the single directory entry. var lastPrefix string var result driver.ListPage for _, key := range keys { // Skip keys that don't match the Prefix. if !strings.HasPrefix(key, opts.Prefix) { continue } entry := b.blobs[key] obj := &driver.ListObject{ Key: key, ModTime: entry.Attributes.ModTime, Size: entry.Attributes.Size, MD5: entry.Attributes.MD5, } // If using Delimiter, collapse "directories". if opts.Delimiter != "" { // Strip the prefix, which may contain Delimiter. keyWithoutPrefix := key[len(opts.Prefix):] // See if the key still contains Delimiter. // If no, it's a file and we just include it. // If yes, it's a file in a "sub-directory" and we want to collapse // all files in that "sub-directory" into a single "directory" result. if idx := strings.Index(keyWithoutPrefix, opts.Delimiter); idx != -1 { prefix := opts.Prefix + keyWithoutPrefix[0:idx+len(opts.Delimiter)] // We've already included this "directory"; don't add it. if prefix == lastPrefix { continue } // Update the object to be a "directory". obj = &driver.ListObject{ Key: prefix, IsDir: true, } lastPrefix = prefix } } // If there's a pageToken, skip anything before it. if pageToken != "" && obj.Key <= pageToken { continue } // If we've already got a full page of results, set NextPageToken and return. if len(result.Objects) == pageSize { result.NextPageToken = []byte(result.Objects[pageSize-1].Key) return &result, nil } result.Objects = append(result.Objects, obj) } return &result, nil } // As implements driver.As. func (b *bucket) As(i interface{}) bool { return false } // As implements driver.ErrorAs. func (b *bucket) ErrorAs(err error, i interface{}) bool { return false } // Attributes implements driver.Attributes. func (b *bucket) Attributes(ctx context.Context, key string) (*driver.Attributes, error) { b.mu.Lock() defer b.mu.Unlock() entry, found := b.blobs[key] if !found { return nil, errNotFound } return entry.Attributes, nil } // NewRangeReader implements driver.NewRangeReader. func (b *bucket) NewRangeReader(ctx context.Context, key string, offset, length int64, opts *driver.ReaderOptions) (driver.Reader, error) { b.mu.Lock() defer b.mu.Unlock() entry, found := b.blobs[key] if !found { return nil, errNotFound } if opts.BeforeRead != nil { if err := opts.BeforeRead(func(interface{}) bool { return false }); err != nil { return nil, err } } r := bytes.NewReader(entry.Content) if offset > 0 { if _, err := r.Seek(offset, io.SeekStart); err != nil { return nil, err } } var ior io.Reader = r if length >= 0 { ior = io.LimitReader(r, length) } return &reader{ r: ior, attrs: driver.ReaderAttributes{ ContentType: entry.Attributes.ContentType, ModTime: entry.Attributes.ModTime, Size: entry.Attributes.Size, }, }, nil } type reader struct { r io.Reader attrs driver.ReaderAttributes } func (r *reader) Read(p []byte) (int, error) { return r.r.Read(p) } func (r *reader) Close() error { return nil } func (r *reader) Attributes() *driver.ReaderAttributes { return &r.attrs } func (r *reader) As(i interface{}) bool { return false } // NewTypedWriter implements driver.NewTypedWriter. func (b *bucket) NewTypedWriter(ctx context.Context, key string, contentType string, opts *driver.WriterOptions) (driver.Writer, error) { if key == "" { return nil, errors.New("invalid key (empty string)") } b.mu.Lock() defer b.mu.Unlock() if opts.BeforeWrite != nil { if err := opts.BeforeWrite(func(interface{}) bool { return false }); err != nil { return nil, err } } md := map[string]string{} for k, v := range opts.Metadata { md[k] = v } return &writer{ ctx: ctx, b: b, key: key, contentType: contentType, metadata: md, opts: opts, md5hash: md5.New(), }, nil } type writer struct { ctx context.Context b *bucket key string contentType string metadata map[string]string opts *driver.WriterOptions buf bytes.Buffer // We compute the MD5 hash so that we can store it with the file attributes, // not for verification. md5hash hash.Hash } func (w *writer) Write(p []byte) (n int, err error) { if _, err := w.md5hash.Write(p); err != nil { return 0, err } return w.buf.Write(p) } func (w *writer) Close() error { // Check if the write was cancelled. if err := w.ctx.Err(); err != nil { return err } md5sum := w.md5hash.Sum(nil) content := w.buf.Bytes() entry := &blobEntry{ Content: content, Attributes: &driver.Attributes{ CacheControl: w.opts.CacheControl, ContentDisposition: w.opts.ContentDisposition, ContentEncoding: w.opts.ContentEncoding, ContentLanguage: w.opts.ContentLanguage, ContentType: w.contentType, Metadata: w.metadata, Size: int64(len(content)), ModTime: time.Now(), MD5: md5sum, }, } w.b.mu.Lock() defer w.b.mu.Unlock() w.b.blobs[w.key] = entry return nil } // Copy implements driver.Copy. func (b *bucket) Copy(ctx context.Context, dstKey, srcKey string, opts *driver.CopyOptions) error { b.mu.Lock() defer b.mu.Unlock() if opts.BeforeCopy != nil { return opts.BeforeCopy(func(interface{}) bool { return false }) } v := b.blobs[srcKey] if v == nil { return errNotFound } b.blobs[dstKey] = v return nil } // Delete implements driver.Delete. func (b *bucket) Delete(ctx context.Context, key string) error { b.mu.Lock() defer b.mu.Unlock() if b.blobs[key] == nil { return errNotFound } delete(b.blobs, key) return nil } func (b *bucket) SignedURL(ctx context.Context, key string, opts *driver.SignedURLOptions) (string, error) { return "", errNotImplemented } go-cloud-0.20.0/blob/memblob/memblob_test.go000066400000000000000000000044241367004507500206530ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memblob import ( "context" "net/http" "testing" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/blob/drivertest" ) type harness struct { prefix string } func newHarness(ctx context.Context, t *testing.T, prefix string) (drivertest.Harness, error) { return &harness{prefix: prefix}, nil } func (h *harness) HTTPClient() *http.Client { return nil } func (h *harness) MakeDriver(ctx context.Context) (driver.Bucket, error) { drv := openBucket(nil) if h.prefix == "" { return drv, nil } return driver.NewPrefixedBucket(drv, h.prefix), nil } func (h *harness) Close() {} func TestConformance(t *testing.T) { newHarnessNoPrefix := func(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return newHarness(ctx, t, "") } drivertest.RunConformanceTests(t, newHarnessNoPrefix, nil) } func TestConformanceWithPrefix(t *testing.T) { const prefix = "some/prefix/dir/" newHarnessWithPrefix := func(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return newHarness(ctx, t, prefix) } drivertest.RunConformanceTests(t, newHarnessWithPrefix, nil) } func BenchmarkMemblob(b *testing.B) { drivertest.RunBenchmarks(b, OpenBucket(nil)) } func TestOpenBucketFromURL(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"mem://", false}, // With prefix. {"mem://?prefix=foo/bar", false}, // Invalid parameter. {"mem://?param=value", true}, } ctx := context.Background() for _, test := range tests { b, err := blob.OpenBucket(ctx, test.URL) if b != nil { defer b.Close() } if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } } } go-cloud-0.20.0/blob/oc_test.go000066400000000000000000000053171367004507500162240ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package blob_test import ( "context" "testing" "github.com/google/go-cmp/cmp" "go.opencensus.io/stats/view" "go.opencensus.io/tag" "gocloud.dev/blob" "gocloud.dev/blob/memblob" "gocloud.dev/gcerrors" "gocloud.dev/internal/oc" "gocloud.dev/internal/testing/octest" ) func TestOpenCensus(t *testing.T) { ctx := context.Background() te := octest.NewTestExporter(blob.OpenCensusViews) defer te.Unregister() bytes := []byte("foo") b := memblob.OpenBucket(nil) defer b.Close() if err := b.WriteAll(ctx, "key", bytes, nil); err != nil { t.Fatal(err) } if _, err := b.ReadAll(ctx, "key"); err != nil { t.Fatal(err) } if _, err := b.Attributes(ctx, "key"); err != nil { t.Fatal(err) } if err := b.Delete(ctx, "key"); err != nil { t.Fatal(err) } if _, err := b.ReadAll(ctx, "noSuchKey"); err == nil { t.Fatal("got nil, want error") } const driver = "gocloud.dev/blob/memblob" diff := octest.Diff(te.Spans(), te.Counts(), "gocloud.dev/blob", driver, []octest.Call{ {Method: "NewWriter", Code: gcerrors.OK}, {Method: "NewRangeReader", Code: gcerrors.OK}, {Method: "Attributes", Code: gcerrors.OK}, {Method: "Delete", Code: gcerrors.OK}, {Method: "NewRangeReader", Code: gcerrors.NotFound}, }) if diff != "" { t.Error(diff) } // Find and verify the bytes read/written metrics. var sawRead, sawWritten bool tags := []tag.Tag{{Key: oc.ProviderKey, Value: driver}} for !sawRead || !sawWritten { data := <-te.Stats switch data.View.Name { case "gocloud.dev/blob/bytes_read": if sawRead { continue } sawRead = true case "gocloud.dev/blob/bytes_written": if sawWritten { continue } sawWritten = true default: continue } if diff := cmp.Diff(data.Rows[0].Tags, tags, cmp.AllowUnexported(tag.Key{})); diff != "" { t.Errorf("tags for %s: %s", data.View.Name, diff) continue } sd, ok := data.Rows[0].Data.(*view.SumData) if !ok { t.Errorf("%s: data is %T, want SumData", data.View.Name, data.Rows[0].Data) continue } if got := int(sd.Value); got < len(bytes) { t.Errorf("%s: got %d, want at least %d", data.View.Name, got, len(bytes)) } } } go-cloud-0.20.0/blob/s3blob/000077500000000000000000000000001367004507500154135ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/example_test.go000066400000000000000000000036501367004507500204400ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package s3blob_test import ( "context" "log" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "gocloud.dev/blob" "gocloud.dev/blob/s3blob" ) func ExampleOpenBucket() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Establish an AWS session. // See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info. // The region must match the region for "my-bucket". sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-west-1"), }) if err != nil { log.Fatal(err) } // Create a *blob.Bucket. bucket, err := s3blob.OpenBucket(ctx, sess, "my-bucket", nil) if err != nil { log.Fatal(err) } defer bucket.Close() } func Example_openBucketFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/blob/s3blob" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // blob.OpenBucket creates a *blob.Bucket from a URL. bucket, err := blob.OpenBucket(ctx, "s3://my-bucket?region=us-west-1") if err != nil { log.Fatal(err) } defer bucket.Close() } go-cloud-0.20.0/blob/s3blob/s3blob.go000066400000000000000000000512741367004507500171370ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package s3blob provides a blob implementation that uses S3. Use OpenBucket // to construct a *blob.Bucket. // // URLs // // For blob.OpenBucket, s3blob registers for the scheme "s3". // The default URL opener will use an AWS session with the default credentials // and configuration; see https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ // for more details. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Escaping // // Go CDK supports all UTF-8 strings; to make this work with services lacking // full UTF-8 support, strings must be escaped (during writes) and unescaped // (during reads). The following escapes are performed for s3blob: // - Blob keys: ASCII characters 0-31 are escaped to "__0x__". // Additionally, the "/" in "../" and the trailing "/" in "//" are escaped in // the same way. // - Metadata keys: Escaped using URL encoding, then additionally "@:=" are // escaped using "__0x__". These characters were determined by // experimentation. // - Metadata values: Escaped using URL encoding. // // As // // s3blob exposes the following types for As: // - Bucket: *s3.S3 // - Error: awserr.Error // - ListObject: s3.Object for objects, s3.CommonPrefix for "directories" // - ListOptions.BeforeList: *s3.ListObjectsV2Input, or *s3.ListObjectsInput // when Options.UseLegacyList == true. // - Reader: s3.GetObjectOutput // - ReaderOptions.BeforeRead: *s3.GetObjectInput // - Attributes: s3.HeadObjectOutput // - CopyOptions.BeforeCopy: *s3.CopyObjectInput // - WriterOptions.BeforeWrite: *s3manager.UploadInput package s3blob // import "gocloud.dev/blob/s3blob" import ( "context" "encoding/base64" "encoding/hex" "errors" "fmt" "io" "net/http" "net/url" "sort" "strconv" "strings" "sync" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3manager" "github.com/google/wire" gcaws "gocloud.dev/aws" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/escape" ) const defaultPageSize = 1000 func init() { blob.DefaultURLMux().RegisterBucket(Scheme, new(lazySessionOpener)) } // Set holds Wire providers for this package. var Set = wire.NewSet( wire.Struct(new(URLOpener), "ConfigProvider"), ) // lazySessionOpener obtains the AWS session from the environment on the first // call to OpenBucketURL. type lazySessionOpener struct { init sync.Once opener *URLOpener err error } func (o *lazySessionOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { o.init.Do(func() { sess, err := gcaws.NewDefaultSession() if err != nil { o.err = err return } o.opener = &URLOpener{ ConfigProvider: sess, } }) if o.err != nil { return nil, fmt.Errorf("open bucket %v: %v", u, o.err) } return o.opener.OpenBucketURL(ctx, u) } // Scheme is the URL scheme s3blob registers its URLOpener under on // blob.DefaultMux. const Scheme = "s3" // URLOpener opens S3 URLs like "s3://mybucket". // // The URL host is used as the bucket name. // // See gocloud.dev/aws/ConfigFromURLParams for supported query parameters // that affect the default AWS session. type URLOpener struct { // ConfigProvider must be set to a non-nil value. ConfigProvider client.ConfigProvider // Options specifies the options to pass to OpenBucket. Options Options } // OpenBucketURL opens a blob.Bucket based on u. func (o *URLOpener) OpenBucketURL(ctx context.Context, u *url.URL) (*blob.Bucket, error) { configProvider := &gcaws.ConfigOverrider{ Base: o.ConfigProvider, } overrideCfg, err := gcaws.ConfigFromURLParams(u.Query()) if err != nil { return nil, fmt.Errorf("open bucket %v: %v", u, err) } configProvider.Configs = append(configProvider.Configs, overrideCfg) return OpenBucket(ctx, configProvider, u.Host, &o.Options) } // Options sets options for constructing a *blob.Bucket backed by fileblob. type Options struct { // UseLegacyList forces the use of ListObjects instead of ListObjectsV2. // Some S3-compatible services (like CEPH) do not currently support // ListObjectsV2. UseLegacyList bool } // openBucket returns an S3 Bucket. func openBucket(ctx context.Context, sess client.ConfigProvider, bucketName string, opts *Options) (*bucket, error) { if sess == nil { return nil, errors.New("s3blob.OpenBucket: sess is required") } if bucketName == "" { return nil, errors.New("s3blob.OpenBucket: bucketName is required") } if opts == nil { opts = &Options{} } return &bucket{ name: bucketName, client: s3.New(sess), useLegacyList: opts.UseLegacyList, }, nil } // OpenBucket returns a *blob.Bucket backed by S3. // AWS buckets are bound to a region; sess must have been created using an // aws.Config with Region set to the right region for bucketName. // See the package documentation for an example. func OpenBucket(ctx context.Context, sess client.ConfigProvider, bucketName string, opts *Options) (*blob.Bucket, error) { drv, err := openBucket(ctx, sess, bucketName, opts) if err != nil { return nil, err } return blob.NewBucket(drv), nil } // reader reads an S3 object. It implements io.ReadCloser. type reader struct { body io.ReadCloser attrs driver.ReaderAttributes raw *s3.GetObjectOutput } func (r *reader) Read(p []byte) (int, error) { return r.body.Read(p) } // Close closes the reader itself. It must be called when done reading. func (r *reader) Close() error { return r.body.Close() } func (r *reader) As(i interface{}) bool { p, ok := i.(*s3.GetObjectOutput) if !ok { return false } *p = *r.raw return true } func (r *reader) Attributes() *driver.ReaderAttributes { return &r.attrs } // writer writes an S3 object, it implements io.WriteCloser. type writer struct { w *io.PipeWriter // created when the first byte is written ctx context.Context uploader *s3manager.Uploader req *s3manager.UploadInput donec chan struct{} // closed when done writing // The following fields will be written before donec closes: err error } // Write appends p to w. User must call Close to close the w after done writing. func (w *writer) Write(p []byte) (int, error) { // Avoid opening the pipe for a zero-length write; // the concrete can do these for empty blobs. if len(p) == 0 { return 0, nil } if w.w == nil { // We'll write into pw and use pr as an io.Reader for the // Upload call to S3. pr, pw := io.Pipe() w.w = pw if err := w.open(pr); err != nil { return 0, err } } select { case <-w.donec: return 0, w.err default: } return w.w.Write(p) } // pr may be nil if we're Closing and no data was written. func (w *writer) open(pr *io.PipeReader) error { go func() { defer close(w.donec) if pr == nil { // AWS doesn't like a nil Body. w.req.Body = http.NoBody } else { w.req.Body = pr } _, err := w.uploader.UploadWithContext(w.ctx, w.req) if err != nil { w.err = err if pr != nil { pr.CloseWithError(err) } return } }() return nil } // Close completes the writer and closes it. Any error occurring during write // will be returned. If a writer is closed before any Write is called, Close // will create an empty file at the given key. func (w *writer) Close() error { if w.w == nil { // We never got any bytes written. We'll write an http.NoBody. w.open(nil) } else if err := w.w.Close(); err != nil { return err } <-w.donec return w.err } // bucket represents an S3 bucket and handles read, write and delete operations. type bucket struct { name string client *s3.S3 useLegacyList bool } func (b *bucket) Close() error { return nil } func (b *bucket) ErrorCode(err error) gcerrors.ErrorCode { e, ok := err.(awserr.Error) if !ok { return gcerrors.Unknown } switch { case e.Code() == "NoSuchKey" || e.Code() == "NotFound" || e.Code() == s3.ErrCodeObjectNotInActiveTierError: return gcerrors.NotFound default: return gcerrors.Unknown } } // ListPaged implements driver.ListPaged. func (b *bucket) ListPaged(ctx context.Context, opts *driver.ListOptions) (*driver.ListPage, error) { pageSize := opts.PageSize if pageSize == 0 { pageSize = defaultPageSize } in := &s3.ListObjectsV2Input{ Bucket: aws.String(b.name), MaxKeys: aws.Int64(int64(pageSize)), } if len(opts.PageToken) > 0 { in.ContinuationToken = aws.String(string(opts.PageToken)) } if opts.Prefix != "" { in.Prefix = aws.String(escapeKey(opts.Prefix)) } if opts.Delimiter != "" { in.Delimiter = aws.String(escapeKey(opts.Delimiter)) } resp, err := b.listObjects(ctx, in, opts) if err != nil { return nil, err } page := driver.ListPage{} if resp.NextContinuationToken != nil { page.NextPageToken = []byte(*resp.NextContinuationToken) } if n := len(resp.Contents) + len(resp.CommonPrefixes); n > 0 { page.Objects = make([]*driver.ListObject, n) for i, obj := range resp.Contents { obj := obj page.Objects[i] = &driver.ListObject{ Key: unescapeKey(aws.StringValue(obj.Key)), ModTime: *obj.LastModified, Size: *obj.Size, MD5: eTagToMD5(obj.ETag), AsFunc: func(i interface{}) bool { p, ok := i.(*s3.Object) if !ok { return false } *p = *obj return true }, } } for i, prefix := range resp.CommonPrefixes { prefix := prefix page.Objects[i+len(resp.Contents)] = &driver.ListObject{ Key: unescapeKey(aws.StringValue(prefix.Prefix)), IsDir: true, AsFunc: func(i interface{}) bool { p, ok := i.(*s3.CommonPrefix) if !ok { return false } *p = *prefix return true }, } } if len(resp.Contents) > 0 && len(resp.CommonPrefixes) > 0 { // S3 gives us blobs and "directories" in separate lists; sort them. sort.Slice(page.Objects, func(i, j int) bool { return page.Objects[i].Key < page.Objects[j].Key }) } } return &page, nil } func (b *bucket) listObjects(ctx context.Context, in *s3.ListObjectsV2Input, opts *driver.ListOptions) (*s3.ListObjectsV2Output, error) { if !b.useLegacyList { if opts.BeforeList != nil { asFunc := func(i interface{}) bool { p, ok := i.(**s3.ListObjectsV2Input) if !ok { return false } *p = in return true } if err := opts.BeforeList(asFunc); err != nil { return nil, err } } return b.client.ListObjectsV2WithContext(ctx, in) } // Use the legacy ListObjects request. legacyIn := &s3.ListObjectsInput{ Bucket: in.Bucket, Delimiter: in.Delimiter, EncodingType: in.EncodingType, Marker: in.ContinuationToken, MaxKeys: in.MaxKeys, Prefix: in.Prefix, RequestPayer: in.RequestPayer, } if opts.BeforeList != nil { asFunc := func(i interface{}) bool { p, ok := i.(**s3.ListObjectsInput) if !ok { return false } *p = legacyIn return true } if err := opts.BeforeList(asFunc); err != nil { return nil, err } } legacyResp, err := b.client.ListObjectsWithContext(ctx, legacyIn) if err != nil { return nil, err } var nextContinuationToken *string if legacyResp.NextMarker != nil { nextContinuationToken = legacyResp.NextMarker } else if aws.BoolValue(legacyResp.IsTruncated) { nextContinuationToken = aws.String(aws.StringValue(legacyResp.Contents[len(legacyResp.Contents)-1].Key)) } return &s3.ListObjectsV2Output{ CommonPrefixes: legacyResp.CommonPrefixes, Contents: legacyResp.Contents, NextContinuationToken: nextContinuationToken, }, nil } // As implements driver.As. func (b *bucket) As(i interface{}) bool { p, ok := i.(**s3.S3) if !ok { return false } *p = b.client return true } // As implements driver.ErrorAs. func (b *bucket) ErrorAs(err error, i interface{}) bool { switch v := err.(type) { case awserr.Error: if p, ok := i.(*awserr.Error); ok { *p = v return true } } return false } // Attributes implements driver.Attributes. func (b *bucket) Attributes(ctx context.Context, key string) (*driver.Attributes, error) { key = escapeKey(key) in := &s3.HeadObjectInput{ Bucket: aws.String(b.name), Key: aws.String(key), } resp, err := b.client.HeadObjectWithContext(ctx, in) if err != nil { return nil, err } md := make(map[string]string, len(resp.Metadata)) for k, v := range resp.Metadata { // See the package comments for more details on escaping of metadata // keys & values. md[escape.HexUnescape(escape.URLUnescape(k))] = escape.URLUnescape(aws.StringValue(v)) } return &driver.Attributes{ CacheControl: aws.StringValue(resp.CacheControl), ContentDisposition: aws.StringValue(resp.ContentDisposition), ContentEncoding: aws.StringValue(resp.ContentEncoding), ContentLanguage: aws.StringValue(resp.ContentLanguage), ContentType: aws.StringValue(resp.ContentType), Metadata: md, ModTime: aws.TimeValue(resp.LastModified), Size: aws.Int64Value(resp.ContentLength), MD5: eTagToMD5(resp.ETag), AsFunc: func(i interface{}) bool { p, ok := i.(*s3.HeadObjectOutput) if !ok { return false } *p = *resp return true }, }, nil } // NewRangeReader implements driver.NewRangeReader. func (b *bucket) NewRangeReader(ctx context.Context, key string, offset, length int64, opts *driver.ReaderOptions) (driver.Reader, error) { key = escapeKey(key) in := &s3.GetObjectInput{ Bucket: aws.String(b.name), Key: aws.String(key), } if offset > 0 && length < 0 { in.Range = aws.String(fmt.Sprintf("bytes=%d-", offset)) } else if length == 0 { // AWS doesn't support a zero-length read; we'll read 1 byte and then // ignore it in favor of http.NoBody below. in.Range = aws.String(fmt.Sprintf("bytes=%d-%d", offset, offset)) } else if length >= 0 { in.Range = aws.String(fmt.Sprintf("bytes=%d-%d", offset, offset+length-1)) } if opts.BeforeRead != nil { asFunc := func(i interface{}) bool { if p, ok := i.(**s3.GetObjectInput); ok { *p = in return true } return false } if err := opts.BeforeRead(asFunc); err != nil { return nil, err } } resp, err := b.client.GetObjectWithContext(ctx, in) if err != nil { return nil, err } body := resp.Body if length == 0 { body = http.NoBody } return &reader{ body: body, attrs: driver.ReaderAttributes{ ContentType: aws.StringValue(resp.ContentType), ModTime: aws.TimeValue(resp.LastModified), Size: getSize(resp), }, raw: resp, }, nil } // etagToMD5 processes an ETag header and returns an MD5 hash if possible. // S3's ETag header is sometimes a quoted hexstring of the MD5. Other times, // notably when the object was uploaded in multiple parts, it is not. // We do the best we can. // Some links about ETag: // https://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html // https://github.com/aws/aws-sdk-net/issues/815 // https://teppen.io/2018/06/23/aws_s3_etags/ func eTagToMD5(etag *string) []byte { if etag == nil { // No header at all. return nil } // Strip the expected leading and trailing quotes. quoted := *etag if quoted[0] != '"' || quoted[len(quoted)-1] != '"' { return nil } unquoted := quoted[1 : len(quoted)-1] // Un-hex; we return nil on error. In particular, we'll get an error here // for multi-part uploaded blobs, whose ETag will contain a "-" and so will // never be a legal hex encoding. md5, err := hex.DecodeString(unquoted) if err != nil { return nil } return md5 } func getSize(resp *s3.GetObjectOutput) int64 { // Default size to ContentLength, but that's incorrect for partial-length reads, // where ContentLength refers to the size of the returned Body, not the entire // size of the blob. ContentRange has the full size. size := aws.Int64Value(resp.ContentLength) if cr := aws.StringValue(resp.ContentRange); cr != "" { // Sample: bytes 10-14/27 (where 27 is the full size). parts := strings.Split(cr, "/") if len(parts) == 2 { if i, err := strconv.ParseInt(parts[1], 10, 64); err == nil { size = i } } } return size } // escapeKey does all required escaping for UTF-8 strings to work with S3. func escapeKey(key string) string { return escape.HexEscape(key, func(r []rune, i int) bool { c := r[i] switch { // S3 doesn't handle these characters (determined via experimentation). case c < 32: return true // For "../", escape the trailing slash. case i > 1 && c == '/' && r[i-1] == '.' && r[i-2] == '.': return true // For "//", escape the trailing slash. Otherwise, S3 drops it. case i > 0 && c == '/' && r[i-1] == '/': return true } return false }) } // unescapeKey reverses escapeKey. func unescapeKey(key string) string { return escape.HexUnescape(key) } // NewTypedWriter implements driver.NewTypedWriter. func (b *bucket) NewTypedWriter(ctx context.Context, key string, contentType string, opts *driver.WriterOptions) (driver.Writer, error) { key = escapeKey(key) uploader := s3manager.NewUploaderWithClient(b.client, func(u *s3manager.Uploader) { if opts.BufferSize != 0 { u.PartSize = int64(opts.BufferSize) } }) md := make(map[string]*string, len(opts.Metadata)) for k, v := range opts.Metadata { // See the package comments for more details on escaping of metadata // keys & values. k = escape.HexEscape(url.PathEscape(k), func(runes []rune, i int) bool { c := runes[i] return c == '@' || c == ':' || c == '=' }) md[k] = aws.String(url.PathEscape(v)) } req := &s3manager.UploadInput{ Bucket: aws.String(b.name), ContentType: aws.String(contentType), Key: aws.String(key), Metadata: md, } if opts.CacheControl != "" { req.CacheControl = aws.String(opts.CacheControl) } if opts.ContentDisposition != "" { req.ContentDisposition = aws.String(opts.ContentDisposition) } if opts.ContentEncoding != "" { req.ContentEncoding = aws.String(opts.ContentEncoding) } if opts.ContentLanguage != "" { req.ContentLanguage = aws.String(opts.ContentLanguage) } if len(opts.ContentMD5) > 0 { req.ContentMD5 = aws.String(base64.StdEncoding.EncodeToString(opts.ContentMD5)) } if opts.BeforeWrite != nil { asFunc := func(i interface{}) bool { p, ok := i.(**s3manager.UploadInput) if !ok { return false } *p = req return true } if err := opts.BeforeWrite(asFunc); err != nil { return nil, err } } return &writer{ ctx: ctx, uploader: uploader, req: req, donec: make(chan struct{}), }, nil } // Copy implements driver.Copy. func (b *bucket) Copy(ctx context.Context, dstKey, srcKey string, opts *driver.CopyOptions) error { dstKey = escapeKey(dstKey) srcKey = escapeKey(srcKey) input := &s3.CopyObjectInput{ Bucket: aws.String(b.name), CopySource: aws.String(b.name + "/" + srcKey), Key: aws.String(dstKey), } if opts.BeforeCopy != nil { asFunc := func(i interface{}) bool { switch v := i.(type) { case **s3.CopyObjectInput: *v = input return true } return false } if err := opts.BeforeCopy(asFunc); err != nil { return err } } _, err := b.client.CopyObjectWithContext(ctx, input) return err } // Delete implements driver.Delete. func (b *bucket) Delete(ctx context.Context, key string) error { if _, err := b.Attributes(ctx, key); err != nil { return err } key = escapeKey(key) input := &s3.DeleteObjectInput{ Bucket: aws.String(b.name), Key: aws.String(key), } _, err := b.client.DeleteObjectWithContext(ctx, input) return err } func (b *bucket) SignedURL(ctx context.Context, key string, opts *driver.SignedURLOptions) (string, error) { key = escapeKey(key) switch opts.Method { case http.MethodGet: in := &s3.GetObjectInput{ Bucket: aws.String(b.name), Key: aws.String(key), } req, _ := b.client.GetObjectRequest(in) return req.Presign(opts.Expiry) case http.MethodPut: in := &s3.PutObjectInput{ Bucket: aws.String(b.name), Key: aws.String(key), ContentType: aws.String(opts.ContentType), } req, _ := b.client.PutObjectRequest(in) return req.Presign(opts.Expiry) case http.MethodDelete: in := &s3.DeleteObjectInput{ Bucket: aws.String(b.name), Key: aws.String(key), } req, _ := b.client.DeleteObjectRequest(in) return req.Presign(opts.Expiry) default: return "", fmt.Errorf("unsupported Method %q", opts.Method) } } go-cloud-0.20.0/blob/s3blob/s3blob_test.go000066400000000000000000000165101367004507500201700ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package s3blob import ( "context" "errors" "fmt" "net/http" "testing" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3manager" "gocloud.dev/blob" "gocloud.dev/blob/driver" "gocloud.dev/blob/drivertest" "gocloud.dev/internal/testing/setup" ) // These constants record the region & bucket used for the last --record. // If you want to use --record mode, // 1. Create a bucket in your AWS project from the S3 management console. // https://s3.console.aws.amazon.com/s3/home. // 2. Update this constant to your bucket name. // TODO(issue #300): Use Terraform to provision a bucket, and get the bucket // name from the Terraform output instead (saving a copy of it for replay). const ( bucketName = "go-cloud-testing" region = "us-west-1" ) type harness struct { session *session.Session opts *Options rt http.RoundTripper closer func() } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { sess, rt, done, _ := setup.NewAWSSession(ctx, t, region) return &harness{session: sess, opts: nil, rt: rt, closer: done}, nil } func newHarnessUsingLegacyList(ctx context.Context, t *testing.T) (drivertest.Harness, error) { sess, rt, done, _ := setup.NewAWSSession(ctx, t, region) return &harness{session: sess, opts: &Options{UseLegacyList: true}, rt: rt, closer: done}, nil } func (h *harness) HTTPClient() *http.Client { return &http.Client{Transport: h.rt} } func (h *harness) MakeDriver(ctx context.Context) (driver.Bucket, error) { return openBucket(ctx, h.session, bucketName, h.opts) } func (h *harness) Close() { h.closer() } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyContentLanguage{usingLegacyList: false}}) } func TestConformanceUsingLegacyList(t *testing.T) { drivertest.RunConformanceTests(t, newHarnessUsingLegacyList, []drivertest.AsTest{verifyContentLanguage{usingLegacyList: true}}) } func BenchmarkS3blob(b *testing.B) { sess, err := session.NewSession(&aws.Config{ Region: aws.String(region), }) if err != nil { b.Fatal(err) } bkt, err := OpenBucket(context.Background(), sess, bucketName, nil) if err != nil { b.Fatal(err) } drivertest.RunBenchmarks(b, bkt) } const language = "nl" // verifyContentLanguage uses As to access the underlying GCS types and // read/write the ContentLanguage field. type verifyContentLanguage struct { usingLegacyList bool } func (verifyContentLanguage) Name() string { return "verify ContentLanguage can be written and read through As" } func (verifyContentLanguage) BucketCheck(b *blob.Bucket) error { var client *s3.S3 if !b.As(&client) { return errors.New("Bucket.As failed") } return nil } func (verifyContentLanguage) ErrorCheck(b *blob.Bucket, err error) error { var e awserr.Error if !b.ErrorAs(err, &e) { return errors.New("blob.ErrorAs failed") } return nil } func (verifyContentLanguage) BeforeRead(as func(interface{}) bool) error { var req *s3.GetObjectInput if !as(&req) { return errors.New("BeforeRead As failed") } return nil } func (verifyContentLanguage) BeforeWrite(as func(interface{}) bool) error { var req *s3manager.UploadInput if !as(&req) { return errors.New("Writer.As failed") } req.ContentLanguage = aws.String(language) return nil } func (verifyContentLanguage) BeforeCopy(as func(interface{}) bool) error { var in *s3.CopyObjectInput if !as(&in) { return errors.New("BeforeCopy.As failed") } return nil } func (v verifyContentLanguage) BeforeList(as func(interface{}) bool) error { if v.usingLegacyList { var req *s3.ListObjectsInput if !as(&req) { return errors.New("List.As failed") } } else { var req *s3.ListObjectsV2Input if !as(&req) { return errors.New("List.As failed") } } // Nothing to do. return nil } func (verifyContentLanguage) AttributesCheck(attrs *blob.Attributes) error { var hoo s3.HeadObjectOutput if !attrs.As(&hoo) { return errors.New("Attributes.As returned false") } if got := *hoo.ContentLanguage; got != language { return fmt.Errorf("got %q want %q", got, language) } return nil } func (verifyContentLanguage) ReaderCheck(r *blob.Reader) error { var goo s3.GetObjectOutput if !r.As(&goo) { return errors.New("Reader.As returned false") } if got := *goo.ContentLanguage; got != language { return fmt.Errorf("got %q want %q", got, language) } return nil } func (verifyContentLanguage) ListObjectCheck(o *blob.ListObject) error { if o.IsDir { var commonPrefix s3.CommonPrefix if !o.As(&commonPrefix) { return errors.New("ListObject.As for directory returned false") } return nil } var obj s3.Object if !o.As(&obj) { return errors.New("ListObject.As for object returned false") } if obj.Key == nil || o.Key != *obj.Key { return errors.New("ListObject.As for object returned a different item") } // Nothing to check. return nil } func TestOpenBucket(t *testing.T) { tests := []struct { description string bucketName string nilSession bool want string wantErr bool }{ { description: "empty bucket name results in error", wantErr: true, }, { description: "nil sess results in error", bucketName: "foo", nilSession: true, wantErr: true, }, { description: "success", bucketName: "foo", want: "foo", }, } ctx := context.Background() for _, test := range tests { t.Run(test.description, func(t *testing.T) { var sess client.ConfigProvider if !test.nilSession { var done func() sess, _, done, _ = setup.NewAWSSession(ctx, t, region) defer done() } // Create driver impl. drv, err := openBucket(ctx, sess, test.bucketName, nil) if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } if err == nil && drv != nil && drv.name != test.want { t.Errorf("got %q want %q", drv.name, test.want) } // Create portable type. b, err := OpenBucket(ctx, sess, test.bucketName, nil) if b != nil { defer b.Close() } if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } }) } } func TestOpenBucketFromURL(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"s3://mybucket", false}, // OK, setting region. {"s3://mybucket?region=us-west1", false}, // Invalid parameter. {"s3://mybucket?param=value", true}, } ctx := context.Background() for _, test := range tests { b, err := blob.OpenBucket(ctx, test.URL) if b != nil { defer b.Close() } if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } } } go-cloud-0.20.0/blob/s3blob/testdata/000077500000000000000000000000001367004507500172245ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/000077500000000000000000000000001367004507500223165ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestAs/000077500000000000000000000000001367004507500235215ustar00rootroot00000000000000verify_As_returns_false_when_passed_nil.replay000066400000000000000000000417141367004507500347740ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestAs{ "Initial": "AQAAAA7WcSPlNzCgIf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "dd205fff2806258d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xrMn3vQLEGBTyAPq6+3iZ6LcZ9fdN1cfC9akzlKeJJ0FE3I2krcmfzuNJY2lTs+5ZNiyumsOpMI=" ], "X-Amz-Request-Id": [ "4C6989C5EC58CC94" ] }, "Body": "" } }, { "ID": "52bba4c08cdb66e9", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "daXv7aDFJSeJuE0tCMiVR/x5Cq2vPkncwE+WWzbysGdEwIM6rUBJ2e9lQV7nk6H9avhbr+WR/tg=" ], "X-Amz-Request-Id": [ "A08C2A8946B259A1" ] }, "Body": "" } }, { "ID": "b2bae57f04f42518", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Q68o/Y302i7pqTJQFqewI9SMQ3u00gZkNlfRbzUipO8LSsdG8SvlFcRLdGOCvkIMIU8WxQBQvro=" ], "X-Amz-Request-Id": [ "E32A814894975AE2" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "17dba5281d518181", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026list-type=2\u0026max-keys=1000\u0026prefix=mydir", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "CYw50mftB/j0BcS0E/0ZxX8UfND1/sfuRIc1enWogeK2mBgd83Zqi7M+YcRGBeCROVe+Rz/yjrA=" ], "X-Amz-Request-Id": [ "BE46B1612AA464B7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm15ZGlyPC9QcmVmaXg+PEtleUNvdW50PjE8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5teWRpci88L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "327d74a6625dcff4", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=mydir%2Fas-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "ON6ddZErc0Yje8HCshmskEbAykyKWKii/b/46WAoskcAzceb0LzufVHyHbwikSNWRKyOraxQ/NU=" ], "X-Amz-Request-Id": [ "BFC86FF2070971A1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm15ZGlyL2FzLXRlc3Q8L1ByZWZpeD48S2V5Q291bnQ+MTwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5Pm15ZGlyL2FzLXRlc3Q8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzI6MDYuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzJnF1b3Q7PC9FVGFnPjxTaXplPjExPC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "dd2a144e3cd9bea3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NcUcJmvIkfDmsh4wKt8YFf71DUuxUMr0rdVHrEdfbk5vMfsTxFGUvyWrjTfRQt6uvk6Og71bAVQ=" ], "X-Amz-Request-Id": [ "C0A7170757ED0024" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5rZXktZG9lcy1ub3QtZXhpc3Q8L0tleT48UmVxdWVzdElkPkMwQTcxNzA3NTdFRDAwMjQ8L1JlcXVlc3RJZD48SG9zdElkPk5jVWNKbXZJa2ZEbXNoNHdLdDhZRmY3MURVdXhVTXIwcmRWSHJFZGZiazV2TWZzVHhGR1V2eVdyalRmUlF0NnV2azZPZzcxYkFWUT08L0hvc3RJZD48L0Vycm9yPg==" } }, { "ID": "f90fa28c68166de9", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/mydir/as-test" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "234" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "qS4HLlZxzV56BfXNZNtIl0S7JXDBLVc4ebSA5Y//Hu7eR/9O7Jl8+dOjEdfny2O+eTAL1JEkT7Q=" ], "X-Amz-Request-Id": [ "A3BF971D0E011C8A" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENvcHlPYmplY3RSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjA3LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMyZxdW90OzwvRVRhZz48L0NvcHlPYmplY3RSZXN1bHQ+" } }, { "ID": "2b6e7a1d22e6a4d1", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "enSnlT+0HyUJ+KjOhXNU6yRBB9gPaGJyQAaIK01OCV5LH2eMFXUgA4Hs2Nza9M4wlts+WIu6nVY=" ], "X-Amz-Request-Id": [ "9ABBAADE5A1E9E90" ] }, "Body": "" } }, { "ID": "155a83bd3e0a75e0", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rv/EpzXTyJqI2MqUg2i09xoHyUW7L2eZJu38l++6wNCcGNN5Fk4bsY1gLQCgvxwJ4waOqAM2IIY=" ], "X-Amz-Request-Id": [ "FF147B9EFE13EF49" ] }, "Body": "" } }, { "ID": "099338a5aa226a5a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "v65cfyEkYQtIFkBLns7lxasR+lhG1DdlrfZnos1LPwrGi84yVo0+upLT2g/c0RzKuFaPqzeurSk=" ], "X-Amz-Request-Id": [ "C15D17FEEF1543F9" ] }, "Body": "" } }, { "ID": "7caf00be5ac5e1c6", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "maA7ehX0X2WQs9+u7tfCTQIbUlaHS751kVq+QJkeyb2YVwxjIq2A4fy0fANHrGN5mLYft5u71n0=" ], "X-Amz-Request-Id": [ "3D91E874562503FA" ] }, "Body": "" } } ] }verify_ContentLanguage_can_be_written_and_read_through_As.replay000066400000000000000000000424021367004507500403670ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestAs{ "Initial": "AQAAAA7WcSPlJZaKzP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "7a730f0093682de5", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "zv9YT6YR0agFgUG9LWwwY7HqXg156hKkHsNYRQxrEomS4nSauFtv8u/s1S5ZNF1Fvsr2m8vjZjg=" ], "X-Amz-Request-Id": [ "592711DEB480525B" ] }, "Body": "" } }, { "ID": "c69d008df61f78a0", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6OCHCMozWMDB5QZmRsyiNZW7Ue5lDRjOVPsfG+D72FvZ75jVFvxg2r+x48PfL53YA5tcsxBZjzo=" ], "X-Amz-Request-Id": [ "F1AC7D4B3EB418FD" ] }, "Body": "" } }, { "ID": "48bf8b1d635d0512", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "T5vwRVc5Uw8z71tO9PyOuW5pLrP8Mjka81txCaKQjXLdv3RepDtqVfm2YTALDn2W0n80qGiUCVk=" ], "X-Amz-Request-Id": [ "EB52C7DA81DDA235" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "4a25cca175e9ef0c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026list-type=2\u0026max-keys=1000\u0026prefix=mydir", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "gtYwY9T1cYDWwXUpDMWzYca9FJFu9H2e6ELgdsMdSL+dXMe5Yg3B8YkArjnHQg70ZaNcu2CfFdo=" ], "X-Amz-Request-Id": [ "F8CA306D13D8F876" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm15ZGlyPC9QcmVmaXg+PEtleUNvdW50PjE8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5teWRpci88L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "a1bb06795019f223", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=mydir%2Fas-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "pWCK0w/mcOgbkOukOR5UegpDg9LD2f98SYCJHWKWKEKI7dJPvBJ7Mtf3cGAQ23P24D5FhFp0xDw=" ], "X-Amz-Request-Id": [ "80EE846D07F44355" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm15ZGlyL2FzLXRlc3Q8L1ByZWZpeD48S2V5Q291bnQ+MTwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5Pm15ZGlyL2FzLXRlc3Q8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzI6MDYuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzJnF1b3Q7PC9FVGFnPjxTaXplPjExPC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "2b562eaa72e37759", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "cw6qFWQrk86zk6jhs6uDeIRB4GJ7DndEbNSVlh6vjsUh6e7Gme6uyIvelKtPwwEgFsfc3wu4fRg=" ], "X-Amz-Request-Id": [ "6C6CAEF8EA90FF09" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5rZXktZG9lcy1ub3QtZXhpc3Q8L0tleT48UmVxdWVzdElkPjZDNkNBRUY4RUE5MEZGMDk8L1JlcXVlc3RJZD48SG9zdElkPmN3NnFGV1Fyazg2ems2amhzNnVEZUlSQjRHSjdEbmRFYk5TVmxoNnZqc1VoNmU3R21lNnV5SXZlbEt0UHd3RWdGc2ZjM3d1NGZSZz08L0hvc3RJZD48L0Vycm9yPg==" } }, { "ID": "108cd06dbbcbf78f", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/mydir/as-test" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "234" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "+hs6UwrhX6kthaNtr6GURiUKtgKGamG/HkPaMOicbHZLES8wyaOkOpOItcdiUTtUUezp9Cc5RWI=" ], "X-Amz-Request-Id": [ "F55D99B43D523F62" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENvcHlPYmplY3RSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjA2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMyZxdW90OzwvRVRhZz48L0NvcHlPYmplY3RSZXN1bHQ+" } }, { "ID": "0d5028ce70aa88a3", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "t3DaXw02m0OM5hz2e0OI2STt+E4huWKFI6hb4EEBa4xiPUsg8K0FhvpkTBdKcDGnY/JLEWe2vvM=" ], "X-Amz-Request-Id": [ "11CA9D0EEDB7B178" ] }, "Body": "" } }, { "ID": "cf6dc06765ae2a30", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3a9dFU1smBv6lpK5fsXfD3ltWCuaDBcgn+W6yGvuymk2PGx3zolFcomg/QIkwM+IdWGAuItGrtU=" ], "X-Amz-Request-Id": [ "693AD1731FE68D04" ] }, "Body": "" } }, { "ID": "8f798601e504a64b", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "eVXBWX8CDegnHDrg/m9uEu2SqTwpNphcgQbStKOJ3H++WYTluzA0eI8IB5wYqSdwBX5/hGFhjSw=" ], "X-Amz-Request-Id": [ "F69717352B88FA8C" ] }, "Body": "" } }, { "ID": "56afebf1b8786097", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GbSdN+uxaHocHhMAJ3OhoNanjhgzfOHar2g1GfJeUw6zzY/mft920J4IM5It7fQA+NUabB+K3BM=" ], "X-Amz-Request-Id": [ "38D92B16A38009C2" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestAttributes.replay000066400000000000000000000350451367004507500265310ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPdJq0Pkf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "78098024d7ef24cd", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQh" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "P4qwz7+VgAVvanBMGmArbkx7coNQ0+g+iBqXGNXerldR70CXqKl+qLtwAD+36sP9hMOzj8a/61c=" ], "X-Amz-Request-Id": [ "1F99030A6EA62F74" ] }, "Body": "" } }, { "ID": "c932bc8af283f06f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/not-found", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HX334zTq93aFKoB7SYF5FnMGl5D6xffFKIkwpl5ynvZTCumac68H/wNArlpvQjc0NlXDtFpl+24=" ], "X-Amz-Request-Id": [ "2C4F57CC70F72C3C" ] }, "Body": "" } }, { "ID": "ba2e948127d15051", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "puxbjWyChuKf6ccjwLFc+PteUmcfMsTb1q9zCYPbmFdUCEeqb2GuYx8U/fQ7TmVyTtuHZ2k7tGY=" ], "X-Amz-Request-Id": [ "01C59431D33D51D5" ] }, "Body": "" } }, { "ID": "168e92cf1b1c1f2f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "r67H96jCgkkzOJx8sZr7itSBmMfjpWU+er/M5uUbSOFFBlb2POm6yoZNmaq8LWz7U57a6zWYnWQ=" ], "X-Amz-Request-Id": [ "B7008AFA960B99C1" ] }, "Body": "" } }, { "ID": "b5348d5ff3c034ba", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "PpOy33ItndoP3bwADl1SaGbxcVrumQpA+j8wIxyITnRk0TrwhBKgsKIO9pAx2ODrs6+WqH0tH+c=" ], "X-Amz-Request-Id": [ "83F606716EAF02EF" ] }, "Body": "" } }, { "ID": "c30eca944fa9287b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Po75yH8TCZDnWpEQGebXkGI2kKkkgIxe3yoVmQi+XRD/3hfVedi7Q3XyCkWm/6ZMPkPZMcTTn6o=" ], "X-Amz-Request-Id": [ "BEED2A01F2E52118" ] }, "Body": "SGVsbG8gV29ybGQh" } }, { "ID": "8d3469eb826d5e6c", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "12" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQh" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "aXLejf6/kxmB0m7NdM9yhIelwO0ILZBNn1t5/UOPEoipe28UEZ0pSlqad9fM91VxCMxz1OFfBtQ=" ], "X-Amz-Request-Id": [ "2808C85388399ED3" ] }, "Body": "" } }, { "ID": "6a18a596b299c17a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rxOdMaknCY7MJi8d4+piCpL52RPgmo5HXy4jcdlO+LSLZMtnOFV0i36j6LXolPj+aI4WFll5R6Y=" ], "X-Amz-Request-Id": [ "6898722BFEA0631F" ] }, "Body": "" } }, { "ID": "b2ca2d4e359f783c", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0m7JYJ2Qpr0YCrgNtY5CDWMGgM/dc/6ZIJNEa79/ivGPKTKQj9uY2tQ+ZxHP3ziCFwfh4tj4QAQ=" ], "X-Amz-Request-Id": [ "A0141B677EB8B7F6" ] }, "Body": "" } }, { "ID": "cd0ca6c10e8319fb", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "PmqlszD+9M1KmG+htXskjqAc70s3S70laOSMhA+e4L7birJuI+eBLntdCTdCDbl6Ijtmp3JCBSg=" ], "X-Amz-Request-Id": [ "92F1BFD27CEF7870" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestCanceledWrite/000077500000000000000000000000001367004507500256675ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestCanceledWrite/BlobExists.replay000066400000000000000000000173621367004507500311740ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPfItbYzv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "1611bc1cd43c46c5", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "OjRmrgoLvy3yAc6RnjLK6sHrB0VrYg9D01qfniIga8j302sRfTWcF3dZXqie3QcuuitjSuTf1k4=" ], "X-Amz-Request-Id": [ "6A36674EB001237C" ] }, "Body": "" } }, { "ID": "ba92e08463516716", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "tmzI61PnI5ZP+LloL+oMKhjJcMIAavxAONOUa2MtMDCg4whaxtMq6O9R1mDb/AlmBXh32TGi3N8=" ], "X-Amz-Request-Id": [ "655A6F50E58AC0DD" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "e1f835ed03184c9d", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GJIL7oSGUu1qltQRksBPprYnbFtCHENwU8u1EAtYh688ZdzYXGUMKaDnJ143LFa9/ORpz78HXkA=" ], "X-Amz-Request-Id": [ "0E922587B81F4AFA" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "c0741fa22b66b4cb", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0DnhadnDDMh4UshcAFP6Km83D9c0Q3YgLpj0/21hbcyVqZkKjTiSAKnaSpFOUIECenYnFCErGFc=" ], "X-Amz-Request-Id": [ "89B4DADC7542D8DC" ] }, "Body": "" } }, { "ID": "dd91b41dd2cfc24d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DRzJJyII7Lqstl0RTfHl7aXE8q73Y02CQPAHS0qTMTVnCaRThKCF9a3gscg6yOmL6mo7FKUflQ8=" ], "X-Amz-Request-Id": [ "E1931096F946477D" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestCanceledWrite/EmptyContentType.replay000066400000000000000000000077321367004507500324110ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPfG2isB/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "899eda902f0232db", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "F4PnqRAe9IbA3xUS8Vlxrcf32weX6fO67IGvQJC3QLUElgF9DmP6c26FSBD2dD3B+QhIVSv552Y=" ], "X-Amz-Request-Id": [ "6566B7E67CEF3B39" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvS2V5PjxSZXF1ZXN0SWQ+NjU2NkI3RTY3Q0VGM0IzOTwvUmVxdWVzdElkPjxIb3N0SWQ+RjRQbnFSQWU5SWJBM3hVUzhWbHhyY2YzMndlWDZmTzY3SUd2UUpDM1FMVUVsZ0Y5RG1QNmMyNkZTQkQyZEQzQitRaElWU3Y1NTJZPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "41c0bf87081633f7", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "gqtiLosC1wqs31N81HWMM7XF0I0kAXcQ+4GpDtwXU3r6nwy0XJva0yF0CPTWiT9c2+Dr7+tkNrk=" ], "X-Amz-Request-Id": [ "D56183134BB0D940" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvS2V5PjxSZXF1ZXN0SWQ+RDU2MTgzMTM0QkIwRDk0MDwvUmVxdWVzdElkPjxIb3N0SWQ+Z3F0aUxvc0Mxd3FzMzFOODFIV01NN1hGMEkwa0FYY1ErNEdwRHR3WFUzcjZud3kwWEp2YTB5RjBDUFRXaVQ5YzIrRHI3K3RrTnJrPTwvSG9zdElkPjwvRXJyb3I+" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestCanceledWrite/NonEmptyContentType.replay000066400000000000000000000077321367004507500330640ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPfHzQsjf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5199e948b3ecfa0e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "vZG9Ta2KCK/W+/oKUKqFDaY4+tlxkt9VY5rjNuRaBmm16a2cnDua89/g5yLcBjDLHCq/qXkxyu8=" ], "X-Amz-Request-Id": [ "DFB2C74185CC451F" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvS2V5PjxSZXF1ZXN0SWQ+REZCMkM3NDE4NUNDNDUxRjwvUmVxdWVzdElkPjxIb3N0SWQ+dlpHOVRhMktDSy9XKy9vS1VLcUZEYVk0K3RseGt0OVZZNXJqTnVSYUJtbTE2YTJjbkR1YTg5L2c1eUxjQmpETEhDcS9xWGt4eXU4PTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "426c98e1d30fa78e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Rub/4n3N42W8diWIRr3nR9gktt9DKKHUXaAQeOtGy3UxV6ymIP5K3u6ouVEWz+IWkMGZsR4BL0A=" ], "X-Amz-Request-Id": [ "4Z0ZFS8N0RDW6S6G" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvS2V5PjxSZXF1ZXN0SWQ+NFowWkZTOE4wUkRXNlM2RzwvUmVxdWVzdElkPjxIb3N0SWQ+UnViLzRuM040Mlc4ZGlXSVJyM25SOWdrdHQ5REtLSFVYYUFRZU90R3kzVXhWNnltSVA1SzN1Nm91VkVXeitJV2tNR1pzUjRCTDBBPTwvSG9zdElkPjwvRXJyb3I+" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestConcurrentWriteAndRead.replay000066400000000000000000012010641367004507500307540ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPfLRRUgv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "91ce27751b50ef1e", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key7", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "kbuiTp5JEugjwAkgztPoXA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "c9ac7b0624824f844f6c7f3d50fab9741a8914e878467e8daaedca143a34d90b" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"91bba24e9e4912e823c00920ced3e85c\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Tguj07vU1vZmiecpvahEIp9xMd1Pn2mZ3ukdAQz10EOl0G1NFwxnqWIOfWVNfUwdxIYTLtJaSP4=" ], "X-Amz-Request-Id": [ "587EB418DA4B4A99" ] }, "Body": "" } }, { "ID": "53edaa9dc9420962", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key6", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "lko2uDqoJrgEyYNnvcJ6vw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "300149a02cb87df26610b2e874637411f567bba9b586c90f47dc126ff203c0e8" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"964a36b83aa826b804c98367bdc27abf\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2evVIJKSAINrxWN35qTAXUgTJ1UUHdFVh16JmJ7YMKC+FYdaAaze44+W2bfIAiQReHQzTe7FkG0=" ], "X-Amz-Request-Id": [ "5E6EAC5935E1DA64" ] }, "Body": "" } }, { "ID": "24501f23c6219977", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key19", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "2w9S4aRqKABHoeAhyiAJMA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "1fef5f6a0d5dcc70dc8b47de8920f3dbd014d89c81683f6f784e027562a49063" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"db0f52e1a46a280047a1e021ca200930\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0Rj8oftsERzzbdyOuzPgefGOEDwAOqGby1qEfCajRzCuKvSDTtd4JQ9gEQ14c7pv4PvdjokP5sQ=" ], "X-Amz-Request-Id": [ "5DF91438E470E167" ] }, "Body": "" } }, { "ID": "3420958d4366223a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key5", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "YfRaKQkG0Wv1UeeMsD1f+Q==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "fb7363f1f02c2f244c32aa8076ef7edbc2e621137542836adc1e312143968d75" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"61f45a290906d16bf551e78cb03d5ff9\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GbH3jYa9/6i+vbTTImo4X5kH2e7bJRQBRpWCGN3lvg6x9JcRtaXfdUpwzabPEM8SpJ2TpQLNe4c=" ], "X-Amz-Request-Id": [ "D03B2EF858CD10DA" ] }, "Body": "" } }, { "ID": "c84e2119ef989be4", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key2", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "ZUHn/UhoC5tg7AVev6McAg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "30d6bc164ea54188aa9df0c14f20c4fbc8a155c5644bcc9ef9eb05901cb07d70" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"6541e7fd48680b9b60ec055ebfa31c02\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Z7Q8cAAdjDoVEP80CG//QirylTPXxOX3O6Q2x8kh1ulFC+qe+RDM5DL10GcRmLaGGpZx1AT/ds0=" ], "X-Amz-Request-Id": [ "0875B57E0B64FAD4" ] }, "Body": "" } }, { "ID": "9379b99e3d0f7239", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "Yg8LZ6kff3QVG8W+dFtxEA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"620f0b67a91f7f74151bc5be745b7110\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NHsZ1/oqy9cuAKWLGlNQBEM9ouQ9KnHuY+PZJp72YwzSKbrcmhyvYpZFM/xj9WIVR2NWbFUuR9Y=" ], "X-Amz-Request-Id": [ "E7850243D4DE44C0" ] }, "Body": "" } }, { "ID": "811c257251bcb10a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key10", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "AXKK1JVcZ791KxchIXYNNg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "40bcea1a7a15701f47850819f064c5ea097d5ac9dce7a3861036b302ff82cc41" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"01728ad4955c67bf752b172121760d36\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "jV34JOI8YgQzbNB04I1oTXTRBveZgTURO+kgMNipwnvbY43dgIiAzujRnw+ra8Z3qBRTB+cC2Cw=" ], "X-Amz-Request-Id": [ "51939154940ABBB0" ] }, "Body": "" } }, { "ID": "c997a27792c4dd37", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key16", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "65n9CjdrJkNQEaG4fFWMgQ==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "a1d8e952ebca8e3b696a08bf238740eb415de106914f978637e097a0d785cdb7" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"eb99fd0a376b26435011a1b87c558c81\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HCNN88AKIX4go0GHeJNk+HVGPREr6MuXUSduIFMObdLwsfKx18lCkmryR+NAW+NxpW4+ujwTzZ0=" ], "X-Amz-Request-Id": [ "A2AE41103ED5AFCE" ] }, "Body": "" } }, { "ID": "5b1aba34d698aa7c", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key12", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "VkGQ+3LJseHAFopbb+BYvg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "c150fdde6caca7012e0b945b0917146ec19da5d03e9ca14685b66e4c8190f1b3" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"564190fb72c9b1e1c0168a5b6fe058be\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "UYVaJQ/4qea59y3XCV8YEQmfBwomIwy3VUJ3n8KGQpnHkx+eKxFjZCrrFMI3kNgUWVUy3LVlMpA=" ], "X-Amz-Request-Id": [ "0D42E1D7DDB9785D" ] }, "Body": "" } }, { "ID": "c5c60f3fd50166e4", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key17", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "32eeXsj7ZyhCl0o20wPQ/w==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "c663cfac30430ae0063ef566967a3309489f9a0b6f74b6feefd93f163a593bc4" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"df679e5ec8fb672842974a36d303d0ff\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "OfbD5eXfrQAtU8sbgYvAOf78gOE9Gw+3OrHT54pdmVmv3XXKaufzAwiNbhUi73YrOuZrfndmAMI=" ], "X-Amz-Request-Id": [ "D134C30A2CE76F1F" ] }, "Body": "" } }, { "ID": "e67cce13ef7dc97a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key3", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "7tBPOyKIo0omYOmbN3Ht7w==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "4539cc1fbc3c22bb131672c62f20ff87f3f587ba2d3d4c5b161c271c98c07b38" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"eed04f3b2288a34a2660e99b3771edef\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "b9nFs3EyePwiH+cE1BkRhmrWa2cxZud+E21nopo3g/6uYjd2SUTZdHiaaEpOsfX+vE3J+O6W+GI=" ], "X-Amz-Request-Id": [ "3BB1C11C2B4DE30D" ] }, "Body": "" } }, { "ID": "c32f4cba888164c1", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key1", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qo85ln3rRBpudISWOUWpYA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "3431383721510cf1c211de027cf958c183e16db5fabb6b230eb284c85e196aa9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"aa8f39967deb441a6e7484963945a960\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "BepEj+/3Vwc3M5Z5TSdc1C6mmBG7FDVHmFyEC+HweXVOQcn6lhuYgU3jlU4EvWMJwAK/JTSDEQo=" ], "X-Amz-Request-Id": [ "70F0B1318DF628A8" ] }, "Body": "" } }, { "ID": "47842de06b3b9ded", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key18", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "wZvI1MtOgANGQD0gzZ4NUg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "108e61a3206271b8ee237033cb15a240cb33b912ca7c2ee40f703409f7f044d8" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"c19bc8d4cb4e800346403d20cd9e0d52\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "fvB55F9YSBbDqn5rCQgg2EStfDjIEoputKIOY+opn9SR/TGyI5oCzVZRKk43xxczT2vPii5ft58=" ], "X-Amz-Request-Id": [ "C64671AA71C661A4" ] }, "Body": "" } }, { "ID": "113a647869156cbb", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key14", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "NlFDUFM0TpF1S+MXE1PxDg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "eb12cdd03f846d40900de0534e04edd3fe464839bc40784678fa08f2f64da068" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"3651435053344e91754be3171353f10e\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NR+eAfwjjVxIJem5/G9/GKpXf324j4wqDl680xCjd6esDZQ5EGtPs7BDK5xrRyenKwjZhqulkb8=" ], "X-Amz-Request-Id": [ "C9CAB38D721634CE" ] }, "Body": "" } }, { "ID": "c9c6dcae7870b201", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key13", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "SsTzFZ3m7R1NrIc42UKW+Q==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "ab3072409797eddf337b34f4c0e68c55c5d358b1b939031879f8d8b4922865cf" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"4ac4f3159de6ed1d4dac8738d94296f9\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5/GyX8L6vuOQlMloGyn6MdTxvfcB+8L72pyl3j5qfgb6aruDzAUpT0n7CuzRQm0Iys0xMjPwkeA=" ], "X-Amz-Request-Id": [ "7FBD9ECFE99BF3F5" ] }, "Body": "" } }, { "ID": "b11067ab5aed1db6", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key8", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qPZPE0uAGBNKE6LhEQTA8Q==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "1e640ad0fd3b249a835edf54dd802b9a4be0b093b17db2c60be2dd9c6b6c6ebf" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"a8f64f134b8018134a13a2e11104c0f1\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "UD39x+OUBldqGMkYULBBeX+kA8Il/hTGEah6OSDlE8UTH9XIvQwfhrKlPzNUtDrEwsUhP6hI4GA=" ], "X-Amz-Request-Id": [ "D25B14FB22316271" ] }, "Body": "" } }, { "ID": "782a6125fda1dabf", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key11", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "AbDmWR96f1VIFnW4JQ5/SA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "3deff1bf6e362c3ab528926550faccbdca220dbb124fa28d88daa694072d165f" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"01b0e6591f7a7f55481675b8250e7f48\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sX5oKRxtciY9glXNm6AtT3PLJZ371+brLPCRCFc/9UDLpgRkn7I2i/Rbufl0xScVEY1mFdfQYqY=" ], "X-Amz-Request-Id": [ "738C4660C2DBDE5D" ] }, "Body": "" } }, { "ID": "41eb46b858baf14c", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key9", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "kfsiuKRZ73D7CzauKodAhg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "8027abbcb17ff5a4c6bf2a5a8761dbd29e465336b0bfbf9bcd77e0d8a622f2ff" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"91fb22b8a459ef70fb0b36ae2a874086\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZxG/fwNuxD7ooQ1gzFs0ETH3mIt/UsPwgS6/xLzKrv/fvwC0WMHuFg525pxRWlMhlx0n9dgRDZE=" ], "X-Amz-Request-Id": [ "45591518F3E84637" ] }, "Body": "" } }, { "ID": "281622a3e4884f7d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key4", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "H06jyF3ZsJDOcwyB5gg+zw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "39c080da1146fced48615c5577196a128f716fdb0ff952a615c0707989574eb3" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"1f4ea3c85dd9b090ce730c81e6083ecf\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "zuxYYo4oCRcsYjTqA+RWDi9wf2kQtLiCdtxNx7UeY7vtlPvukl4cBMoc+OvI+CxmZj8LdpJUhFU=" ], "X-Amz-Request-Id": [ "084D8365F57AEB54" ] }, "Body": "" } }, { "ID": "21d1caa43a9db502", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key15", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qHqy3TOCPLWABZ/YTEeiAg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "a17f54b1452b2bda077b58ad5cec2b49764dddf1b09c9b345475ac603c514cf7" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"a87ab2dd33823cb580059fd84c47a202\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "uZ2zYBAZmAtN4bcdwDf3gfx+JIvy7U3b0ZPIIpS8vSONKQlb2X0mnauYa9dj3MHk5R0Gr0xbZhk=" ], "X-Amz-Request-Id": [ "F5AFA698FD661DB5" ] }, "Body": "" } }, { "ID": "9c56f4a97f89f547", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key2", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"6541e7fd48680b9b60ec055ebfa31c02\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pTl2dodxuv8YkGhv/g783G0Gf8LQW4TQcSEdwdprMWnACRcdLKTfeiSUbdhhwiAz+DciO8lCRfs=" ], "X-Amz-Request-Id": [ "B7FD605D6C27704A" ] }, "Body": "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg==" } }, { "ID": "6211394ff8f8f9d4", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key0", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"620f0b67a91f7f74151bc5be745b7110\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "koH1paWBLXcRKtIuf6yQVxyllvelQoCKCNG3CVacnzUwrlrRr4rnVNYiHbJJV2nAXFMvgJ8nTcA=" ], "X-Amz-Request-Id": [ "D682D794171E25BF" ] }, "Body": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" } }, { "ID": "e893c9200300e894", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"aa8f39967deb441a6e7484963945a960\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "x6i/MfAVH5plTqh7WFVur5WLSya1vniiM8DtgO4v9LYRrBoenBOYKqU490l0X2lL+mRuuj2m6Ss=" ], "X-Amz-Request-Id": [ "129453CF7B471122" ] }, "Body": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ==" } }, { "ID": "8f6364396ddfc81f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key3", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"eed04f3b2288a34a2660e99b3771edef\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6yjX5MXb5m0L692s2qkS+D1u7aFXpWotV974HQ8V7e631h5SBs6Yc63JgmdqRN9ViWHIPwhPYrs=" ], "X-Amz-Request-Id": [ "0AC5BA3400B595F3" ] }, "Body": "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==" } }, { "ID": "84e84d4fe2927db8", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key19", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"db0f52e1a46a280047a1e021ca200930\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YHcAgVzS/a3bCfMeOkK+/0TkjuLbmuO/m5KuVNLh/uHgQ1J7LKQ/CZvDik0EYvwwSAAeF3EbhVs=" ], "X-Amz-Request-Id": [ "3380CD9456B9D20A" ] }, "Body": "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw==" } }, { "ID": "589386d983408239", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key6", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"964a36b83aa826b804c98367bdc27abf\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZJTncNmINqzA5saeetdyxMavnpqU4Pq59/K4B4OR+AARE9p0cFrEEBU20P8ij1YNUEyR4xCLXxg=" ], "X-Amz-Request-Id": [ "B58A0008AA8613CD" ] }, "Body": "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg==" } }, { "ID": "1f78a912cce218f3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key4", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"1f4ea3c85dd9b090ce730c81e6083ecf\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ESaZDZsNoS5YJsKDs4c2ZZd3CVG49Na9y3wDVYfuLImT67bjU8XxSbXEtxLGp6BlPPSg1fSbLnk=" ], "X-Amz-Request-Id": [ "6AD0FA61157983F8" ] }, "Body": "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA==" } }, { "ID": "29304bee098ed712", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key13", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"4ac4f3159de6ed1d4dac8738d94296f9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YjeKL68RrjSs3nBQYOv0SpevXChjbV8L5VhXsKTiS7K0Cbk2baburflfS1OVjaOnLOQoTjtNjEQ=" ], "X-Amz-Request-Id": [ "43523C47BCEAE1C2" ] }, "Body": "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ==" } }, { "ID": "cae833200cff1dc9", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key8", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"a8f64f134b8018134a13a2e11104c0f1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "qOgG5skGVEsVYielyyFTiet/93+zCFSYwYpXXUFEbPyo7KBWbsPkyIEWS1e5+M4ETwabjtiyK+Q=" ], "X-Amz-Request-Id": [ "0F433B7F94DCB5EE" ] }, "Body": "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA==" } }, { "ID": "d3079dc0b0637cd7", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key5", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"61f45a290906d16bf551e78cb03d5ff9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3QXmcxKFU5SU4gLga/Z1YvGFjuZS3jKvS4OAIZ1uJcR1C5hyF9hWPoEdXbBn3hWnWHufACryT4g=" ], "X-Amz-Request-Id": [ "54CC0038670AC6EE" ] }, "Body": "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ==" } }, { "ID": "dec5d6bc7d3fd7da", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key11", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"01b0e6591f7a7f55481675b8250e7f48\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6A16orDIWO2ZowNTS/6hQjclJxks4rPSM+liWhtn4CyqWiUJh5AZ/b1keLVJpa1rYv8HP/FtaLQ=" ], "X-Amz-Request-Id": [ "37A68E2C5CC7E877" ] }, "Body": "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw==" } }, { "ID": "da1a81d34d857640", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key7", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"91bba24e9e4912e823c00920ced3e85c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "bV+k1H7p6taBvD8Kkj3Zz878SkP3VdM9fomCamb7KqvvzjO2hO16Jtmoc1QPx6O1CejmPU5FsQY=" ], "X-Amz-Request-Id": [ "274B6F883F8F1663" ] }, "Body": "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw==" } }, { "ID": "08bac214e942aa1e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key10", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"01728ad4955c67bf752b172121760d36\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "aNSIg3ezXEpUgO8KM6BiSPwxNe6R3+pWrSCSrUh4uFqd+1M8rNn6VsCM/jLvlnyoD1LC/ql2MoM=" ], "X-Amz-Request-Id": [ "CDD358610C8A0122" ] }, "Body": "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==" } }, { "ID": "9fc7fee42ac9bde0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key15", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"a87ab2dd33823cb580059fd84c47a202\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "yMHBbcnXDepMKo+A7gNSOaQPSRdcGyBtPp1gzXXl7QMf75T4wHdsXar+zEVrT6Vc5e8fSFFVg4o=" ], "X-Amz-Request-Id": [ "1B13A0BAD54F32F4" ] }, "Body": "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw==" } }, { "ID": "b24d418734d3f7a3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key9", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"91fb22b8a459ef70fb0b36ae2a874086\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "g0/XNYJFLs8aDnjEONoZJcv8XQimsS3B9flV+TM/UxfxmIBRRVsJ2QHomog1ra6isE0FGWDnbQ4=" ], "X-Amz-Request-Id": [ "1688024F51A74EA5" ] }, "Body": "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ==" } }, { "ID": "a84f8d1cd8c6bb91", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key14", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"3651435053344e91754be3171353f10e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Oq/rjmRLNKO5Icf5MsUeGtmy9OP/WqwXLlBHNWmFoHoAUYXzP8BVdfJvNGZzLWTVG280uge/+Ik=" ], "X-Amz-Request-Id": [ "E2F24DF8A0E4F114" ] }, "Body": "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg==" } }, { "ID": "2b2ed7873b67f42e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key18", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"c19bc8d4cb4e800346403d20cd9e0d52\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5avWN3hlZQGeKLtYCG380RgXOWb3psSC0BP9QbqnhVM9LawOQ18akoCsczEfrBZHsZr/Y83Z/0c=" ], "X-Amz-Request-Id": [ "FEF3EFD893C4046E" ] }, "Body": "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg==" } }, { "ID": "0b05c36bb8d39b5f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key17", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"df679e5ec8fb672842974a36d303d0ff\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AYQV2W5WoVAnd71rkE2Cy28eLkfdQg0eOPYJH4C0RBIxqHh6ZHpc12LNnOrLJmBLlxl7nPOHtz4=" ], "X-Amz-Request-Id": [ "64745452DE78ABCD" ] }, "Body": "EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQ==" } }, { "ID": "9035abae9b14f67b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key12", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"564190fb72c9b1e1c0168a5b6fe058be\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZA3TJS5X44yRB215rW7JMWpW4+KcBB2nJZAYvrg/V/75lWSnjoqefrofdtUay1tl4aO99URsVw8=" ], "X-Amz-Request-Id": [ "9F0319002626A600" ] }, "Body": "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA==" } }, { "ID": "d396a6b988efc7f6", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key16", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"eb99fd0a376b26435011a1b87c558c81\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ErkDBcKNvzd7+WjiNgopaXnY83xSEHJi9a68TurWV++qsPeecdAooi/h5p7ozH1uToVsu0C6tkQ=" ], "X-Amz-Request-Id": [ "BB453CE2CFFEF880" ] }, "Body": "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA==" } }, { "ID": "1e13f4deeba24e38", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key19", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"db0f52e1a46a280047a1e021ca200930\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "OXfdl8Cit/VgkHx5p0GuI1IHDMYf4pRYcAep61s7oA0bUMZ1sXRo89ZIXLMpM/+PhbWfdaQEXjc=" ], "X-Amz-Request-Id": [ "F02950B26812CFCA" ] }, "Body": "" } }, { "ID": "3ab0d89566db9461", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key19", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "SAHKng3jJTUlA1a1+32Sp8GvgFIhP56zNTea+ZaM1wsqQaqAnGnblKjCiz46Yq0/b3jkX34Hk0w=" ], "X-Amz-Request-Id": [ "E039D6A6F6228511" ] }, "Body": "" } }, { "ID": "0728b1a9a8843771", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key18", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"c19bc8d4cb4e800346403d20cd9e0d52\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7dkeUDyQieA5E2hHXJAzUREG/N2YjKGDyU4hH1GYWRp+4ehBtVL7K44azJQ1zJ3y62+Lb8Qnh9M=" ], "X-Amz-Request-Id": [ "B4798CA8D704010B" ] }, "Body": "" } }, { "ID": "20ac62d27be2cff2", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key18", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "g6XcNB/ELa+qplWn3Z5LvT7b8OoxOOPN8ArP9pTgo7BM9ORvo5auQmYHcj65K7MjSFdZWC4pgTQ=" ], "X-Amz-Request-Id": [ "08963892AEFAD8A6" ] }, "Body": "" } }, { "ID": "fdebdf5320295a88", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key17", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"df679e5ec8fb672842974a36d303d0ff\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "BpgLykeipWDtm7mbc1GbzPwMCwpF1F1weicGD2seFotqqBE/ob18HK21aAXpFtrytuG+6BTfySQ=" ], "X-Amz-Request-Id": [ "E48F8C8ED9A3DA49" ] }, "Body": "" } }, { "ID": "285e350c9946bb6d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key17", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "b7OSIw++HdOPpYV9Mp90llgXneVx/yav0BavOGU4jIZG2UMAOvs1O2++eb4/dCLwVPA2MH4FrUM=" ], "X-Amz-Request-Id": [ "D008815AA6036A87" ] }, "Body": "" } }, { "ID": "14e3c199e5aa7283", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key16", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"eb99fd0a376b26435011a1b87c558c81\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TNL4uXXX1kQY4Ba8pSCzuTk6JBs1YCoJA2dMKsx2HHHozuqpFN5AlWCTyzEXO8+n1bT3TBomQcw=" ], "X-Amz-Request-Id": [ "3DB14C5DEF8E6B87" ] }, "Body": "" } }, { "ID": "d4a8a942035970c2", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key16", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ScYdhSlRI+sLgnbniX0c2Sg5m0HVKqOV7aC+1urDms8OxUnMZ0peScuuiZk3N/xfB7xmlohbWzI=" ], "X-Amz-Request-Id": [ "AB166425F946D9F1" ] }, "Body": "" } }, { "ID": "28e0b05a60ef9aa1", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key15", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"a87ab2dd33823cb580059fd84c47a202\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "szU0In+zSlpLrBiN5cASmCRAKsK1QT6+GEM7uaouYQqKjPix9C1hXQJF08hY3reRpaf1KsvKnkc=" ], "X-Amz-Request-Id": [ "09DF6C3A25746DB6" ] }, "Body": "" } }, { "ID": "8267148ee3094eb3", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key15", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "WKDioC1PCViQF8gINh6Vd5sZMCCg41lulY5fZCzrBX1eICATdtllD7h67BLJ5ia9xAVcqjZugtg=" ], "X-Amz-Request-Id": [ "DX3ZCX9RAPCZ2P7W" ] }, "Body": "" } }, { "ID": "f9adf7027774d085", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key14", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"3651435053344e91754be3171353f10e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/4DvaUK63RxPKW78olzBFaayN+U/3olX2Ig11UbZOfKI05qwa4aNNJP91xdo0HypzJj1XXWwgKg=" ], "X-Amz-Request-Id": [ "3BC84B1E08352BF5" ] }, "Body": "" } }, { "ID": "a484f857c542bb5f", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key14", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "H8UloB5qQhFrAwxEns8I+GPl/bOaxFrGymQmc3Or2afUoOOTxxgL8n2jLEgIi7jpI5q+TIqJiMM=" ], "X-Amz-Request-Id": [ "E83EE83D52315A66" ] }, "Body": "" } }, { "ID": "8e46933b8d83b05a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key13", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"4ac4f3159de6ed1d4dac8738d94296f9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HYUiMf7h1HMNc6u+vJ+5y1jUNoGI4lnXjjRY/p2qjOg38q4tuRhAx5S/fQEPDj61cTcUDQF9T90=" ], "X-Amz-Request-Id": [ "AB1DC265DDE0C196" ] }, "Body": "" } }, { "ID": "abce0222a5dcaa11", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key13", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "csAqNnMsBnse4QriH3zTzJZnQ4Fz5Qrd4JtFw8F9N6hWV485uD7T+kDdNFr1F1f5Fiw1xrEsCkw=" ], "X-Amz-Request-Id": [ "2177B3FC463FCDB5" ] }, "Body": "" } }, { "ID": "e935b6bd0ecfdbd2", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key12", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"564190fb72c9b1e1c0168a5b6fe058be\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "iTmzwAcrKp3+j7FmGewuEdpmfJpZ4S+IJQ7MLbHzDGurKKUTqqceDVNey+p2sqhJY6WJ7uL8WzQ=" ], "X-Amz-Request-Id": [ "16F8BF8A7BD16A16" ] }, "Body": "" } }, { "ID": "8d50bdbf42b335c7", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key12", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HPq0TCx4vWnb65cdCgoJ6M5CC0dqiPFWctIGaULTBkUG7i/Fi03OR66UGDy2IBz36cVeiYdG5qc=" ], "X-Amz-Request-Id": [ "BEE475AF503EF4DE" ] }, "Body": "" } }, { "ID": "36df00a8c2a6f065", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key11", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"01b0e6591f7a7f55481675b8250e7f48\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QrmuKc+cqamh6ZddGjmsA8PBqousOZgM7ZS2uX+d0MEFJQ6dYoIMII4ctQGnI3b3lN4g7YsFIjQ=" ], "X-Amz-Request-Id": [ "214884DA09661FCD" ] }, "Body": "" } }, { "ID": "a36c233ee06ce12c", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key11", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hD0tYHNH4b7vjpfUDg9njh88g/AWJYj+rrMva1EvA7Yp7NIbatYKKeO7xSF2eYRo7LHfI5JGi+g=" ], "X-Amz-Request-Id": [ "C1B1AFC78089C8CA" ] }, "Body": "" } }, { "ID": "b71f604fa9c19148", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key10", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"01728ad4955c67bf752b172121760d36\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xXLenDkQPdJ0lUEHXA5ubDFTLZscb0n1x+4nkJJa8v4eCcXtQqqQB5JJQQbqRZdJ4QdEJaZHk6k=" ], "X-Amz-Request-Id": [ "F5EC2E9D577CDA65" ] }, "Body": "" } }, { "ID": "956dae32029f4712", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key10", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rHBJHxORdmg/6qN0Kth+uvvfxgtlJgmKV7P21c12osb3yMRqHOLjQINpYAFot8fQ/TxiljaFIyM=" ], "X-Amz-Request-Id": [ "A8185DEE18DBF883" ] }, "Body": "" } }, { "ID": "e9491381e701e029", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key9", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"91fb22b8a459ef70fb0b36ae2a874086\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xJlO0In3OLIXcKj4Ow/MeoyP5huATd8fAEQKFC1qPdr4H3zP/5WARjhLHnUOyUlNBascLPfwxdY=" ], "X-Amz-Request-Id": [ "407074799B9B05D3" ] }, "Body": "" } }, { "ID": "99d3d3569b129daf", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key9", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "vUMJt5VhtgWzYu8mg574TakbZIiRZT6vAarOWJDxpFkQEvdH8a2iLj/bI05GK5RB0mCn92ShHtE=" ], "X-Amz-Request-Id": [ "E5F6425F3DCCEDF7" ] }, "Body": "" } }, { "ID": "ecb1965ea4de3a1e", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key8", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"a8f64f134b8018134a13a2e11104c0f1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4OXct8pnTObiKtyC3lnxByx7jKX2itmIwItM+zsRAfpfnCPlZI+65lXwIhE4673idrcwuvIGxzI=" ], "X-Amz-Request-Id": [ "9D7DB1EC885B3EB9" ] }, "Body": "" } }, { "ID": "fba5f4f9c494ca5a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key8", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MtZsbjwY0eT+HgJ5P9lI/N/cBcRof597iaUxvHXZhyCufYm6c04sV94m0kNxMPm9jimyrVxWg6o=" ], "X-Amz-Request-Id": [ "EAD75E792852D79A" ] }, "Body": "" } }, { "ID": "acfdfed0141b9a2f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key7", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"91bba24e9e4912e823c00920ced3e85c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hEKuNSRmGDkZhBDNy92OuTigsvObmH9OxuZ9hZQaspfoul3iGMtgyw0XH1P2cFr2lw58orHd0Bw=" ], "X-Amz-Request-Id": [ "6FEF7A15DAAC2DCF" ] }, "Body": "" } }, { "ID": "20ab2ae23e7088be", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key7", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "1jFW5RF1hhTnxRW9IIJIH1Rvc7JoBU2T3ggapusAwwNUGipcRZvIV3TN2Gixg6Gyd29w0p3DKYY=" ], "X-Amz-Request-Id": [ "9BB8DD5CF9687AC0" ] }, "Body": "" } }, { "ID": "0901b14fb9ccb1a8", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key6", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"964a36b83aa826b804c98367bdc27abf\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "E0W5l0N8wyb2CR3NhFwehQAxqcmRd/EB9JhLsS+f/099fBtXiaLvtp/axbBXGR9GLyAPyCeQo0g=" ], "X-Amz-Request-Id": [ "1000CF9B797CFBD5" ] }, "Body": "" } }, { "ID": "40557d27f7a3d64f", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key6", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "PTpFexQzv49q7mLNxx2JBIP02BYiXXwEJs4cSufSKtLb4dxg5SPHGPw/cEILDR+4ZieKMO4ttbY=" ], "X-Amz-Request-Id": [ "FE06F36566231FEB" ] }, "Body": "" } }, { "ID": "dcc4ce605888b69b", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key5", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"61f45a290906d16bf551e78cb03d5ff9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GMBZqVLi4jMqkRjx5E4L3bMPNJAxG10rrR9BgQS9Cr+vE2+2E6rp6/ojfwl+cRmLZKFLvtagiT8=" ], "X-Amz-Request-Id": [ "1D97F26D085ECE97" ] }, "Body": "" } }, { "ID": "5dd3b8d09281c3bb", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key5", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7QXQ2f1frZAvJOe0n5Lu8WJcm8rY1mXSohWLTw9iIcZpJdFcP7D1xnt8fGQ1b9gPuow6YzCqrMM=" ], "X-Amz-Request-Id": [ "8BC486EA9B9E0E72" ] }, "Body": "" } }, { "ID": "239047064c76f6e1", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key4", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"1f4ea3c85dd9b090ce730c81e6083ecf\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8iXvmzvkIUCkL1iSxtocbSzAYRrHJE4c30W4mVzG4EBkobO6swgTPiiU/gv9iOhNUP8eL0kV0Xo=" ], "X-Amz-Request-Id": [ "7B27889FDB4B4B9A" ] }, "Body": "" } }, { "ID": "d0d2a3f43e881298", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key4", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/whlmhLjfu3I9RYTQSrwOpYLjQAscY32YuP+z36ar5nRbohbGJ3rdPDQEIz47h0BiyFtZgs0tO0=" ], "X-Amz-Request-Id": [ "1DB2C6158110E46D" ] }, "Body": "" } }, { "ID": "df19d2b27e1eae84", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key3", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"eed04f3b2288a34a2660e99b3771edef\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "zWQ8WEHjwV09Xd4nqFo/2/fhPl04kFoqYwuelHHv+li2MYHj/rjI8V8H+aJAMSKEMRzJONkwWVs=" ], "X-Amz-Request-Id": [ "1F5C090D2BBE9EC4" ] }, "Body": "" } }, { "ID": "eb7e1a1c94ca61cc", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key3", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8M/re5w8j0la+GHwc/xs85vtcNnCAOMiY7Tz6OWPdzmDnkA4y6QmIFpvx5xDkRhpJNUgFluLX2A=" ], "X-Amz-Request-Id": [ "8ACB6AB456570C29" ] }, "Body": "" } }, { "ID": "f7a6ba7b212891d4", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key2", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"6541e7fd48680b9b60ec055ebfa31c02\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "OnY1SNy/fUx2mG9zWAc+HkrGj4OA1yani/cpBuBn3RyrPXqH6yXq0eUNgFvc2O0dlxgJODKWJ48=" ], "X-Amz-Request-Id": [ "CNCM0M5V7R2WBPDM" ] }, "Body": "" } }, { "ID": "bd087be31e9af370", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key2", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7FtJvsf197JnkeHG3VOWxdUbSQbo1wnIqsepCK0301G4A6lgmuRSXiGnMnL/X1us4Jl5bsIaKEY=" ], "X-Amz-Request-Id": [ "AA484BC9AE4DB26D" ] }, "Body": "" } }, { "ID": "9837413b9a873cae", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key1", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"aa8f39967deb441a6e7484963945a960\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ev2HrKvZnosQyk+qfyT+ZrL81X3kmy+3z8xG8ypig7P94iuNRcPp/VWdBSPDN69rSTzD1ylfxQs=" ], "X-Amz-Request-Id": [ "ECCCC7E297B52EAF" ] }, "Body": "" } }, { "ID": "4dbe1f545ab578f5", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/ZvKqw4qFfFS0eiL8HeVSv2XbihSySNrZdFVRxpxrDLRgXCeJnIxSjIkAV1qZAxV22hNBZjgabQ=" ], "X-Amz-Request-Id": [ "FCAA735A44281392" ] }, "Body": "" } }, { "ID": "90288acc8275e52a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key0", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"620f0b67a91f7f74151bc5be745b7110\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Eyacw7FA8CjhXn6ghlERT17TsY66Kv6NkgWZjrt21DRShRJoBNSZ555wGPNB2mGy3GOoy+z2w8g=" ], "X-Amz-Request-Id": [ "F3F22FF4E92A01B4" ] }, "Body": "" } }, { "ID": "8bfb41ed6857e831", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key0", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sfO/UxvGVbuWpl8QE7n4zs6B0XmL1ZaWdYUWS0T/fle+n2ljzaTvFmGIEm08S5hEqElCd6uRkzE=" ], "X-Amz-Request-Id": [ "01A96D4879B0B369" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestCopy/000077500000000000000000000000001367004507500240705ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestCopy/NonExistentSourceFails.replay000066400000000000000000000047661367004507500317410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPhL6FrBv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5bf2c3e0d5832ec9", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/does-not-exist" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Wa566AuBcjTphXabap9EtmlSqFT+ZYoWO2rfpyn1rRlzW56/bXMeLjbyhB2zJBU+7AYv1etHubo=" ], "X-Amz-Request-Id": [ "83B008D0B4AB7B58" ] }, "Body": "PEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5kb2VzLW5vdC1leGlzdDwvS2V5PjxSZXF1ZXN0SWQ+ODNCMDA4RDBCNEFCN0I1ODwvUmVxdWVzdElkPjxIb3N0SWQ+V2E1NjZBdUJjalRwaFhhYmFwOUV0bWxTcUZUK1pZb1dPMnJmcHluMXJSbHpXNTYvYlhNZUxqYnloQjJ6SkJVKzdBWXYxZXRIdWJvPTwvSG9zdElkPjwvRXJyb3I+" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestCopy/Works.replay000066400000000000000000000401061367004507500264140ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPhMo+P6P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e2b1f801cde42e7d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-src", "Header": { "Accept-Encoding": [ "gzip" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-Foo": [ "bar" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "iUmOvIC0WJ7VC4S1WMdMrA/k8pRfjL8bKH8rw1nRCh/RJk9WFEHQsgK2C3o95IUt4fuW3m9q6rc=" ], "X-Amz-Request-Id": [ "6D913BAB602F5D73" ] }, "Body": "" } }, { "ID": "a01a2688deed5959", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-src", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "yd4bRvFpX4ssi5igzEXGQgHQzTTc45hSrhsvJOLV61dARyD72jvX16DUoLpxvTurTPx3vO7qQXc=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "095200196E20EBC5" ] }, "Body": "" } }, { "ID": "47e79b004f7b3fe7", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "10" ], "Content-Md5": [ "oPqafXJA1cXuvXCJlDDFlw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "cbaa060c695ffea336ebacf821fd121c12e6cddc83d19baae739412dc80c42d5" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "Y2xvYmJlciBtZQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"a0fa9a7d7240d5c5eebd70899430c597\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Z+ucnnS8yr6YJUL5ol3LQznHjgBNinvP1FYA6jz3SbvcS4/gOHUIOTP3puNuAETDROHG5RVHfUc=" ], "X-Amz-Request-Id": [ "CCA765CAB903A14F" ] }, "Body": "" } }, { "ID": "2146f68946488fd7", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/blob-for-copying-src" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "234" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "BQDCQE1MIlVVySUIQxdhLx2dw8KTPHmz2nqnrYPXNI8nBQt4Dy66L+fDLt36u0p6ZRgp+9yQt2w=" ], "X-Amz-Request-Id": [ "AA8C05E0401624E4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENvcHlPYmplY3RSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjAyLjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDtiMTBhOGRiMTY0ZTA3NTQxMDViN2E5OWJlNzJlM2ZlNSZxdW90OzwvRVRhZz48L0NvcHlPYmplY3RSZXN1bHQ+" } }, { "ID": "d247745a5b3225e7", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "1W6fxhrhQ4UoVURfhM8Yg0zyh8vSvcX9qnXrwOC97PVhdPb0+YAbi9RU+BNRwNXoVHOIX0HsdCg=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "59584636AE606002" ] }, "Body": "SGVsbG8gV29ybGQ=" } }, { "ID": "d4bc4679929789d9", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "F838W7oUaHv7us07E7AZP++t1omvJsk6pDmy9FxP27tAkayPiHDWqqd5oxUJEPWMAdZ6hVI9ZBo=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "10A325FA054B286B" ] }, "Body": "" } }, { "ID": "ce4542ff41bf8d9e", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/blob-for-copying-src" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "234" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "faPJs7Syik7tC0Yr/Kv73SdCoXwbhbpDDTcH3ZVswfvI5HXRQFBs0yDg+qxb5rC0WBStmcVAMmY=" ], "X-Amz-Request-Id": [ "FB010440F8F186FA" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENvcHlPYmplY3RSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjAzLjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDtiMTBhOGRiMTY0ZTA3NTQxMDViN2E5OWJlNzJlM2ZlNSZxdW90OzwvRVRhZz48L0NvcHlPYmplY3RSZXN1bHQ+" } }, { "ID": "8adb5f5f5704aa64", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "CHjKpvjKTtSGGuMH4h2Yel8kh17DsVNvMc706H5XN6Wg0zOLeHz5nAA9RBWy5/JzsWbc5J9wEfk=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "D5BF33B42A4840B2" ] }, "Body": "SGVsbG8gV29ybGQ=" } }, { "ID": "64155478715a16ea", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest-exists", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "dKV55azopQd/61p0giHhKcqEs/i71B3xs+2Y6hgDwSx1FxJD58hQTeaemM0auPEmMJsxS26PsZs=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "63F34D7C35CEF981" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestDelete/000077500000000000000000000000001367004507500243605ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestDelete/NonExistentFails.replay000066400000000000000000000037221367004507500310370ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPiBQ7M8v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "75e7395a9d1bc10b", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/does-not-exist", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "M/kZKjxGmpknF/ixcEwW/dNZ4WdNr3DkK22IttlcvebArbd3w8IRQwaUQbnWzszZ7iWn5HdkOe8=" ], "X-Amz-Request-Id": [ "DD64FB58D8C7FC22" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestDelete/Works.replay000066400000000000000000000166321367004507500267130ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPiDA6wDf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "33e5692ba0b67457", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "Content-Md5": [ "PiWWCnnbxptnTNTsZ6csYg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"3e25960a79dbc69b674cd4ec67a72c62\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "yo3p6ojxKEru65NrUqFZFO9pS6ZT5073G8CKLcGLdSMhllpERSjQpZpPl/2HpjGoo6QH/V4HsyU=" ], "X-Amz-Request-Id": [ "ADE08903CF38A5E5" ] }, "Body": "" } }, { "ID": "e2d0de73a963dfac", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"3e25960a79dbc69b674cd4ec67a72c62\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "h9U5njvpRiIdJ5JNZq68kT21BPJ23i8P4YK4Pg5QJNjoIgY6pjn9HPI4S+9s0yraGrwxvPKWQB0=" ], "X-Amz-Request-Id": [ "4210C9644CF61146" ] }, "Body": "" } }, { "ID": "144de87bfd180695", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "C9S/7mD87puKdq45eL2MlyZFWP77I21/QJ9yjCfditiZuz9DbArv6/VW2K3OEfFBZoJlx97pqKg=" ], "X-Amz-Request-Id": [ "67C53802FBC68E69" ] }, "Body": "" } }, { "ID": "aac3192508022a55", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "uUjQ+0veMn4SurMyeXqish5yF0lK31UUrhBUKApNfhTcJrKgZjuNSV4x1Dfq60dVYJiqzG+4slo=" ], "X-Amz-Request-Id": [ "2160F9289ED49EDA" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1kZWxldGluZzwvS2V5PjxSZXF1ZXN0SWQ+MjE2MEY5Mjg5RUQ0OUVEQTwvUmVxdWVzdElkPjxIb3N0SWQ+dVVqUSswdmVNbjRTdXJNeWVYcWlzaDV5RjBsSzMxVVVyaEJVS0FwTmZoVGNKcktnWmp1TlNWNHgxRGZxNjBkVllKaXF6Rys0c2xvPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "5cc920643edf13a1", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "T01NgdBFh/ELUqnbhl0mFix+AjaNqZqFUcyLVYOjf9LkCI8FozUHurfZdwVd3za7Jdx1cMJ8000=" ], "X-Amz-Request-Id": [ "1FD7A0B6DED871CA" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/000077500000000000000000000000001367004507500240715ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/ascii-1.replay000066400000000000000000000231721367004507500265420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPkKGqsj/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "54af5b923fb39101", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "U0dwz/jJp4nUzPrsNRC1lbv7DHdBYmKN+Kygn/EQbDHEDFlwOdtXuUhwWru+Xl9jiMtCxJKrd18=" ], "X-Amz-Request-Id": [ "EE1565A1FD446A78" ] }, "Body": "" } }, { "ID": "d274a70f733b6d28", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TB33XPQetWhJ0qTSsVMdtcEwwjfKkTphNDtcGRHUti5D5TGPRorBIAWBj70PSagZ3xgOMUJZvTs=" ], "X-Amz-Request-Id": [ "35D49B04079241F1" ] }, "Body": "aGVsbG8=" } }, { "ID": "a43d88caf6e924c0", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pceq+wmJXUTDRKYt0dafo3xBGIyTfvM0F2JubCmyzCdWkSmhZX5eblmiQf2bnP7QlA+3iFZ0B3s=" ], "X-Amz-Request-Id": [ "DD575278B9BBEE58" ] }, "Body": "" } }, { "ID": "be7c30781e48423b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "uHRmsPMVq65TYbeaw9HJHNTNEf0C6jdiZKrzTcNk0NgmrxIzlMcti0KjOaIWTHpJhs+Wp9Hsixg=" ], "X-Amz-Request-Id": [ "10B148D569CDFBB6" ] }, "Body": "aGVsbG8=" } }, { "ID": "748949c4aee2a6a4", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JO1kGI7THaBhrpSMiGfrHoL5FLC76P4UngLq8sUV3hjHHaKLAHoMjY9B3OrgabTxrwOauMueB8A=" ], "X-Amz-Request-Id": [ "5823CA2DBC57D246" ] }, "Body": "" } }, { "ID": "6231878515582cf3", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZG/B6D/XBodmzeG8BLdgdkM2g/wkhTzm2HLKUnfJCVMzltGUos16REy8NcLAP9DsNLmP0mSrBuk=" ], "X-Amz-Request-Id": [ "1ED1DE202C980C42" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/ascii-2.replay000066400000000000000000000233321367004507500265410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPiLwgzuP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "fe969d75db26188c", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "FJIhrwQmSXIPcZhUbHnsIPvorPIcVBL38qy4is27iRkXW5ErO1SWMX8OpdNPyZXU2Z7+14tGpFk=" ], "X-Amz-Request-Id": [ "5385F1EECD16CA7F" ] }, "Body": "" } }, { "ID": "e6c58a27b194297e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pkSu6hMkL6B1OHzxtHrfm2enudUwGC4LW7lC3k7VPeP2g5EYwUlAvf1HVfX8ApsGp9JNUsL6LG4=" ], "X-Amz-Request-Id": [ "6B463371E3F3CE44" ] }, "Body": "aGVsbG8=" } }, { "ID": "31dc328430609d8a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "96cnj9YLSh4hmaIA//8CKTLFuabdtozX2RviEKnsTXUJZYLePmCBcrJNb56Bpahl7GSukhKpnvE=" ], "X-Amz-Request-Id": [ "13180A15F0E56A5F" ] }, "Body": "" } }, { "ID": "2120bd63d2458399", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JSpQTlV/Tt1dtL+rMTeOPQcFWhGX4Ska56kIhpBzk8hGMEzuIVYogeTKNNQ6XIPQ6WBkvgq0L2w=" ], "X-Amz-Request-Id": [ "904BC2E74FDAE1FA" ] }, "Body": "aGVsbG8=" } }, { "ID": "2d9812c5f5c1cff0", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "oy0WB88TsSKX+kWwLyd1brtgIqRLQh3om5lkPM+dQBPnyYxNRvkG71eMeWZ0G/ycgNVZUvCeqOg=" ], "X-Amz-Request-Id": [ "092626B6C5BDCFE5" ] }, "Body": "" } }, { "ID": "f9b409be99580a4d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "v1afHEkHurWroovmGFCd9eGPpTEOcCMfJ8vtmCdxIN+VsjzSBb8vwpSRK4dX0m8B1/ZDBQWUprU=" ], "X-Amz-Request-Id": [ "E34B57521F52B142" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/ascii-3.replay000066400000000000000000000223261367004507500265440ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPiN6UhhP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "9a07bb6b75650b54", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ACzUvmW7Ho1M/w+oE705dv0ziPgbs42sZmyKt2OS/v83NeXvrIb6k8BRk6l+TiHp01j71o2iUoA=" ], "X-Amz-Request-Id": [ "BE24931C4779E923" ] }, "Body": "" } }, { "ID": "a4bba0308836dee2", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7H9pPNlGnXjFd3+vv4S9BU2IoGu8BryleCFfrIXfMpho+mUQqjU4FCXjvjrxASAjdn3GxjlGp08=" ], "X-Amz-Request-Id": [ "1BD3D418065EE605" ] }, "Body": "aGVsbG8=" } }, { "ID": "b2b072ee8d82e6cd", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/POx2mrZZyUl8WqAr8SaXSk9rwiXu2qTt++GEG/97otnOOWisCxvSEPOTOi6fUsFkCgA0szld40=" ], "X-Amz-Request-Id": [ "BCDD1C5180A37F53" ] }, "Body": "" } }, { "ID": "467c6b82fc3e325d", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JpVHZdEeDcK9tdTVXrgUzQ/Nv+cjaSLcV8pmvHGRmf9D47KZvMM939b7uoft2NZKVHlWHSpuhaU=" ], "X-Amz-Request-Id": [ "B4A7A192003B5642" ] }, "Body": "aGVsbG8=" } }, { "ID": "4c0b833982f0bcea", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xpfMhIiLrAhRnobT+Q9SKhVy0G794PzZBol5EqUmU3sNdDqmyBmawDki8n91zc56ApCvCKlPW+Y=" ], "X-Amz-Request-Id": [ "C191B56086D7323C" ] }, "Body": "" } }, { "ID": "c7a7704eb141b983", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "1YG6FEHKwgFowy7LejRMvhvymdnhTEPti4C/tGQPkGLzacyRKdqwNrx9qSxBhGxshVJdNMDM+D0=" ], "X-Amz-Request-Id": [ "3FDB981CA7F5A988" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/ascii-4.replay000066400000000000000000000221061367004507500265410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPjA8CQ0f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "117500d0804a551a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JNEqPQ3kq+5zSpEHssrY7ypbIhUkt49iaf5hOQzS4BEWJa5DyjTNcCeaHUWxhFTSDb9tCGhVk54=" ], "X-Amz-Request-Id": [ "BEF5ADB6273E2462" ] }, "Body": "" } }, { "ID": "b3ea5b61f61c69a0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MxOg/aFFzLDhVa+P/TB3Xz3pcgaK7sK/P8sTFu856u5rKaFUTfruKSB0w+Uq3O2HRc5kZD2tkmg=" ], "X-Amz-Request-Id": [ "052837CE32CC23EB" ] }, "Body": "aGVsbG8=" } }, { "ID": "df299ca172c9c47a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "397e2QJnpGhUg9XzkeZoXPGWzErKL45CGyV46fQjya/PHb8WL6haF/JTH81cD4muGLz2A4k8QsM=" ], "X-Amz-Request-Id": [ "A0C1E8A518DAECB6" ] }, "Body": "" } }, { "ID": "e5ca712a332a6b05", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Vpdo7CCxh2O1+aLzzZMkM0Ket0WQpOa6ObhseKO1VtX6ug9V0Rv76VG2j8XbcWPJjjzjG4R/BVE=" ], "X-Amz-Request-Id": [ "C094F2BAC5A2326F" ] }, "Body": "aGVsbG8=" } }, { "ID": "2a0daa15239d9f29", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "WGYOgWF8/dw/4cNU6afUjXJBfQzN6AAgkkyEQ5ZpSwRO5Ua5U00cZP/OD3Ea+hdw3FnT/6Ttk0s=" ], "X-Amz-Request-Id": [ "71018D6392522E8D" ] }, "Body": "" } }, { "ID": "8229ef8e55179ca4", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HgH3lYY1kgzlR2pjZAI4glvdaPixayRu+DA4z1SzbU7xK9vhAIGLFJssX8pJFymQhtCuVDqN73w=" ], "X-Amz-Request-Id": [ "9EB62F40B990DDCD" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/ascii-5.replay000066400000000000000000000217541367004507500265520ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPjHqa38P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "99744532e26f604b", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "lU3xpMpKJLJj6XpCzyY4NIh4KG/HheGzq2HTBhm5w51HEP8o+bFh7yq8kVeFktT4xpgohs09fXk=" ], "X-Amz-Request-Id": [ "C52CD67485766BB2" ] }, "Body": "" } }, { "ID": "408fe8b0146da7be", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "vi1LI5K6aEEdoKUEhwWIIA+byoVfPQvqN3BzeNEja1s6wdnRsw6Pz1L58+ZOEUXa1cCr1mTDj9I=" ], "X-Amz-Request-Id": [ "16E8A02A8DE1DF7A" ] }, "Body": "aGVsbG8=" } }, { "ID": "c62d91ceaf32abf1", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "td7gIVbT3hoiaqpu1dgSxoA5GBdFPkmE6ih4iSwlaFYBBmmhwr8ycr7ZoOOLL6VivG9nv5xAkaM=" ], "X-Amz-Request-Id": [ "8258F748106F7F3F" ] }, "Body": "" } }, { "ID": "be4ed113268e8a3e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pue0hMkMOeOHG1GPpRB38/fFUfTxTWv8HkUTlbsjN/hY+5jQtEXxcHHMtaZwgRjuF1irEf9+A6c=" ], "X-Amz-Request-Id": [ "1D9D83500D5CDFA1" ] }, "Body": "aGVsbG8=" } }, { "ID": "40e2607e868d9259", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "KKalNZNToJ0cwOlZ/wK1pFY9rF+/VDInFzw2ygW0wq89ovvx1ZiHlZYPjKNeFt1t7Z7Qsrep3c4=" ], "X-Amz-Request-Id": [ "3E358EF2E54EE182" ] }, "Body": "" } }, { "ID": "67aa4e4514cc2ccc", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "RBEpeKQNrKHL631v/Ue5Q5S1F1ZO0GgFdhW844FrsN1kQj9r+mYQYo0WoWcYA3QQiaKIqGhKdAk=" ], "X-Amz-Request-Id": [ "FB8E45FEA2B6CE7D" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/ascii-6.replay000066400000000000000000000220501367004507500265410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPjL2GUYv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "a00f91694c6f8fa4", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "jA4HJBXpc6xQ1RqI+Fk8DczmlSl4OgRRk93/TNBkDUeLdvswMILuZMfNKwo4JQ5ugzl6ug5nWuI=" ], "X-Amz-Request-Id": [ "F0FDCED3C77936E1" ] }, "Body": "" } }, { "ID": "567b12b3148aca42", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "W/fD+le746f/NUh/U0xO7zvz+Upd+8pgco8iX+FQGQB6nOox/uPaz/IqfM01ZRjRSVdkD+5e8ao=" ], "X-Amz-Request-Id": [ "65787CB04F8B7460" ] }, "Body": "aGVsbG8=" } }, { "ID": "9344d6499ee692f4", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TdNLomdkHB9GGYM/KRsg5aBejumM0opqC/10iBnEND0vkY+LfISfdGxv9AOYJ3PrKRxH2f8lC5c=" ], "X-Amz-Request-Id": [ "71200B46DF8BBCD6" ] }, "Body": "" } }, { "ID": "2c170e8c3273db7c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Y0traJlnHyOC4apB+Wwzlw7+3opk/xAJjzrPCXUiDv3lZzKpad1xb58ib95y75/xjsP2ounKSDc=" ], "X-Amz-Request-Id": [ "04DF0B7E9FBA0978" ] }, "Body": "aGVsbG8=" } }, { "ID": "ade79891a935bea6", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AUJ4/hIm2s20NbkE2KFHRKS524IfFOzT94hr6i3VVf3FwqeUAAN7z6DcNhv/UlntXrIGuZlbspw=" ], "X-Amz-Request-Id": [ "85DFBB8E3FF39DF9" ] }, "Body": "" } }, { "ID": "de2b6e5f675eebc5", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0Z0w/Rz3SqvgMwWT1qX/cePsU/mLOImzWjMJdLVCEe2R0hUBDJpjrzQvWdwp4D0WifgUqj74gMc=" ], "X-Amz-Request-Id": [ "D986155080F9410E" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/ascii-7.replay000066400000000000000000000217541367004507500265540ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPjN+bh8f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "3d3503c94b7ca985", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HT0YNuaN08oow07Buyl8pJAV8DAhM7mllIhzfG71c3ly+EswhMwOAs/9/hdokE00irtS8ZfT2jU=" ], "X-Amz-Request-Id": [ "906E1DA33550E796" ] }, "Body": "" } }, { "ID": "d4b98df6f70164ea", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Ljubbke+4Hvbv4FyiTFHQaLWDFKyHG/Wo/rEvuIlInmLN8qv8ipkRihHua/s1rGpHnMg96thxxY=" ], "X-Amz-Request-Id": [ "D8C7EF4864973E72" ] }, "Body": "aGVsbG8=" } }, { "ID": "060debb69b342209", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "g8Tq9kjJXHquUnvqwh2izuKOVOv270ZCyqlBxxP+8VQew5DZTnTx+Oo6XWePdUfrNSvEzViVJ+w=" ], "X-Amz-Request-Id": [ "AA5CAFD17DE7B365" ] }, "Body": "" } }, { "ID": "a3a90171e362a313", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Dsq8Ymfk6TkiZPNQPurOaxlD7zAKEufa5Lia4/fiZhfAMWQfyTBBkNNCk6eUKxvwQC0NdUgxJM8=" ], "X-Amz-Request-Id": [ "EA7F83B7577F3969" ] }, "Body": "aGVsbG8=" } }, { "ID": "60b6649530a63a72", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rmLe+hzZCphuLHzSmeZsD3rjm1MK4eUdr2rdYVhYu7KgV8WbEqrBrUnzYra2qo721A7Y/9P9bkc=" ], "X-Amz-Request-Id": [ "B1774A6F859F3089" ] }, "Body": "" } }, { "ID": "6499de578d9201c2", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "9d0OWwmSNnFEuLKF2+j6uzohUphNYTST8u2YcX6I6dtU8K1AVth1r2sQSbEoL05mp37LzfY5+HA=" ], "X-Amz-Request-Id": [ "80FD066EF27CCB2F" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/ascii-8.replay000066400000000000000000000220501367004507500265430ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPkMYMtW/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "8ae7cf9d6110e54e", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DICRzxBNvMPH/Iw+OkdBJUmwy/mpprCrsvWe3euwMgLTh33drRhJtvtLa8EfODDFlreMa1+RL1g=" ], "X-Amz-Request-Id": [ "0E9C81515DD7E178" ] }, "Body": "" } }, { "ID": "b3da396e609614b8", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MG7vg/B7mpgnOmiK7tmuJ3oP3y4NldmuDrd1qeZbcRC9ZZ4ST3ia+rV4TOBq3t7nzL3oY3zEZrE=" ], "X-Amz-Request-Id": [ "32084F937FA299D1" ] }, "Body": "aGVsbG8=" } }, { "ID": "a7194ab8c39c9193", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XzRwCGB5Ub99cq3hzQd4fVfo59XhSoX3BSzGXNyNhRKU7ZmY03WUI30vgamyV8/21Hcs2Q77GBs=" ], "X-Amz-Request-Id": [ "1E2CF94613D773B8" ] }, "Body": "" } }, { "ID": "90f104127e3a2ba9", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "SNJrEPzUckjMb+ArWjoOY/S8eXhFg2SSx/glOMDmQB0hOHnj7ghngJy3H3TMRVLL1CM2t2loGas=" ], "X-Amz-Request-Id": [ "5AF0C1C7B6332460" ] }, "Body": "aGVsbG8=" } }, { "ID": "24832199ff6c2210", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XmI8vZvnjBQiiMD9OihzT7vre+pq57BY9jKRGWX8zxkcbsBEIh2aorgIr8sLXn224pTsuoZD5Ik=" ], "X-Amz-Request-Id": [ "EB952CC1124FB047" ] }, "Body": "" } }, { "ID": "6866139b4f158b67", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "+K56hfWs7MNsPfhdxyjQ8qqExxCKbYa6UjvYrwTXxnUrLLXSaodY23ZAAeFcMtsUOYDqHHzT81o=" ], "X-Amz-Request-Id": [ "25AA0F0EB85480EA" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/backslashes.replay000066400000000000000000000220641367004507500275760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPkDogTPP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "c24cc2e2e1d18686", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "yE7BwkNvQF9QEYFwwzG/f8uj7iaQSfh2lwIZEr2Uky59y+HO/I6Td64oU217Q5M0ApC9gPBAbgI=" ], "X-Amz-Request-Id": [ "BF6DF97265E0562C" ] }, "Body": "" } }, { "ID": "6f579505bac500f5", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8Q+MzdjqtkKBRyTmecdymZerdcQdRNRL9t15SEpgHPuCgmN91w2i2LP4vaENlhX/uz86L933V40=" ], "X-Amz-Request-Id": [ "33DA7401175EFE5A" ] }, "Body": "aGVsbG8=" } }, { "ID": "7d0bfcb272106bac", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "FN2Etwep0/PP6Cq6gXm9KWXn45TSoGTxVIJ3Xmo9JUd6FZ4OiDFXfBZyOpsckz9zKssH7h0Nsu8=" ], "X-Amz-Request-Id": [ "CEB9FD1E0909A60B" ] }, "Body": "" } }, { "ID": "b00b747c2878e20d", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "mc1np4xuVDjYMWROk/eNrFtM88xAJpbiBfZalx6qZWlTKBvPLTsTojnScmWf41Eg4rys+zkl3+I=" ], "X-Amz-Request-Id": [ "D8565A8C369E3EED" ] }, "Body": "aGVsbG8=" } }, { "ID": "54d7edd36bdfd4c7", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Q7RWbQdL9mOeky50v+Gk0lyD2GNiBLaouQYBj9WGJmwEQlO2LPtouz9AYB04xWIhHSeT03KXpHU=" ], "X-Amz-Request-Id": [ "64ECBD6372A208DB" ] }, "Body": "" } }, { "ID": "b124d62bef9f3436", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DteQJoHgIBl7yWWLakjq+nZHlPVzyInN0bDvwh/sOQP3S3iLZAxurm555ENnWTb8yN6DcRHtJtc=" ], "X-Amz-Request-Id": [ "57054F7AB43FEBBC" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/dotdotbackslash.replay000066400000000000000000000223121367004507500304600ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPkH2/fPf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "2cd0361f1c697ef0", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "+HwkKtseyki3vVZ/EjRJOsPgXYJFy+EjiC+v2x4L6BrfyrG4OcmZNVfLjQusJFUGLN+Cz9wYEE4=" ], "X-Amz-Request-Id": [ "0FD578664080FE0D" ] }, "Body": "" } }, { "ID": "d51e374ae3f4c84a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "i8i9nMBW2F0M00p9WF13i855LJGjsG3PdGpy4WQ1tqARbGtPPrCBKKm4zanqxHt/P18Njlq3sVo=" ], "X-Amz-Request-Id": [ "CD1E9135D2E92F65" ] }, "Body": "aGVsbG8=" } }, { "ID": "a9e1707f2f596e37", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "lsFxtuncDUt5PLy6Hh6BWl1D+ZmaklfH9MT0Cir75txzBeSLBL99ew+a7Ba5MdsCCv1jmWFmu/g=" ], "X-Amz-Request-Id": [ "47E2DA40FA5BCD7D" ] }, "Body": "" } }, { "ID": "60a8d315635af73a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "o6p0ZooAzdy9FnqZo+RSEwvI5QFVKUMVPrxOAj17JCxkdvJKH8rC+qrM7cIiqZnWzJSZaEv+MJ8=" ], "X-Amz-Request-Id": [ "D838DB2604A7DB7D" ] }, "Body": "aGVsbG8=" } }, { "ID": "59f765cf324fdada", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6HYFHHW+WfN48RrqsRqNaCeq5kDep3U4CQGi+2WShDS2+FFuYzVOtkgAHY9WdoDJo5KhwdEvmfE=" ], "X-Amz-Request-Id": [ "851CD397CF200F28" ] }, "Body": "" } }, { "ID": "bda2523f124d12d6", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "9lyWd8707CEQO29+/uBNJqF2ztWM/dkCQRKHy++hzfF6/6PG52b2f1pJqRtjwcKXr3X94nPsKVM=" ], "X-Amz-Request-Id": [ "714F8981AA11E643" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/dotdotslash.replay000066400000000000000000000225101367004507500276370ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPjDL/Jqf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "77a394f2d58d97c4", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "f9jsMna4qMNeQRdIUc5YP3fJ+Elhu0Z37Tir0mC4vAGcFvTCMtzUzrmVTRNUbtC6/NrkvNnmoTM=" ], "X-Amz-Request-Id": [ "E21E3F285FD65880" ] }, "Body": "" } }, { "ID": "53628f696d7268ad", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "oqpGvCqG8t3D/+1QAXhjVVC4cRQfqwLvzPJdljYKAQpnNu1aZlcSBz8IM3a/c4cS3l9jWcWPx9g=" ], "X-Amz-Request-Id": [ "D0BC70A5F0ED3F1B" ] }, "Body": "aGVsbG8=" } }, { "ID": "568b36aba11c85da", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DquwZkX4PmOpSWmxHZ26lCusavyeVphq1e+PNail6BkR5aKC903fVFIyyBQA7x3n7Ss+K1KGhSM=" ], "X-Amz-Request-Id": [ "02B7A2FE2874E641" ] }, "Body": "" } }, { "ID": "7790d7b70e04679f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2qWjJexJoc5McV1PDzPHQRC/Yh46vksjrHrooRSRVcSjWjz01OHSz1is/7k8KyJPrFnSn7ufw9I=" ], "X-Amz-Request-Id": [ "7923BE5AD0EE7A1F" ] }, "Body": "aGVsbG8=" } }, { "ID": "04577af2d2acd69a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rYtrVNguGkR3PcvtaQClcIfl9mNedvFmvwNYoV+4ivl3BEUmfQI1ICiFw7OiMklfV4cu6oRsbQk=" ], "X-Amz-Request-Id": [ "B531A1FCE5076D8A" ] }, "Body": "" } }, { "ID": "07f210b003609933", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Z8jVtvjs7cL9Ga5vuwSQHdTxrjl34pZicuW6ZwLUqH1D0oBQKDjwE0J/zfXJMstztG12UFPYCuQ=" ], "X-Amz-Request-Id": [ "2086C829E6F58369" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/fwdslashes.replay000066400000000000000000000220341367004507500274530ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPiFOHykf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "0f2a200209c77a40", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QXkd+jC4S+4aW90y7Mzzwoe3I6sjXm3z5AMcH9nZzojse3HXLP72WC/2hgw2KPl85I2XzO2ll0E=" ], "X-Amz-Request-Id": [ "01EDF630F91B6A66" ] }, "Body": "" } }, { "ID": "73f6e4add434356a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YJ7j4PX5bEIN0Ukow2osnokhcQL4GHPGMTF9EZ5S7FtTEO+tHTFKoo95Llgr8k+715puIjvRKx0=" ], "X-Amz-Request-Id": [ "0421EAC455BAF3EF" ] }, "Body": "aGVsbG8=" } }, { "ID": "a18fa62366f8b4c2", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "msz5D+NPG5jl7pubAoCmWsU+o08o12jLYFlPz5ApPVYa6CXOYwXztQFp1N0/Rnd2srkoGLyfZFM=" ], "X-Amz-Request-Id": [ "29068EADFB0BB021" ] }, "Body": "" } }, { "ID": "83317b2a1f864d83", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "tJTl9ixWe5o26DPVjguoZ5Bi7xLORWE8yzPidz8vXycO2RmrKuBzD8BltAXniEllWmD2n88OtV0=" ], "X-Amz-Request-Id": [ "E8F24C6AEDB2FD4C" ] }, "Body": "aGVsbG8=" } }, { "ID": "230be7d6081ed444", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "1JSUm1RfAMx45px5rz3lnPmmQSG+RJd1Wyfyy+mv5FewgnXb38mV2FBgjgYckUOCO0iTGzDZ/mM=" ], "X-Amz-Request-Id": [ "9D965CFFC8453372" ] }, "Body": "" } }, { "ID": "ac0dc8ad7407da20", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0otZ6TY8V+3LCIGbINis6/Fn9lXXTQ3xVUTBpo0RfJxjPJsD91rf9deE+597yJC5SLwdE4nMLhs=" ], "X-Amz-Request-Id": [ "E8993EB5D8DAAFC8" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/non-UTF8_fails.replay000066400000000000000000000015501367004507500300040ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPiFIrO6/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/quote.replay000066400000000000000000000220641367004507500264500ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPjJ27gJP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "51d2586bd2792eca", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Z5gfFKn51vKSO0jTo/z+wCgXrsH7sDilF4iNnAUNnyhyqWWP+l96CKgZeVRXzuTiON3fr3W5Of4=" ], "X-Amz-Request-Id": [ "CB4EB38BE2980A89" ] }, "Body": "" } }, { "ID": "61bd8bf493e8b6df", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/Xw9tlhB0dZpMdL5M7Vn2HFgOg8iqGdauzildmZ6/BmN/ppcNxBNuyIUL1jEepRP8yX4+RFeLjQ=" ], "X-Amz-Request-Id": [ "C75C7C9900FBC484" ] }, "Body": "aGVsbG8=" } }, { "ID": "6f7044c87dab825c", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MgCwMqKAM9c7WwStmMAFdwRxG5FCkMoI8iKpISKu4f4tRU3+9F9tul1u5giG5RK+sdtQLeEcp4c=" ], "X-Amz-Request-Id": [ "6DA130A194409C25" ] }, "Body": "" } }, { "ID": "ad03f038bfe7d0d5", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7MsDlvTVVzyNN04qO/P8OsGtPDuR7S8mSIP41fzwdhJuzEJPiy2Kel89MfblsCx3YSUPSsXzq0I=" ], "X-Amz-Request-Id": [ "A8D85B57D8A1B9BB" ] }, "Body": "aGVsbG8=" } }, { "ID": "6f067b87b9367c60", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Kr8lAgBS81vb+WtWR5r/F2lny1IItPn3yAEIqX+x5djGq5APyNFSdT/XXQU8p6TM0Bens8AX8bY=" ], "X-Amz-Request-Id": [ "A711A4150C401FD8" ] }, "Body": "" } }, { "ID": "a1bb4cd9879ae01c", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DZtXyg9bqWTj9f1An1e/4suRXGgjKbZ0HG0UzZGK37MZIlI2T1m++AkLpRX0gR2qPG2vtVSBeEs=" ], "X-Amz-Request-Id": [ "35C669ED709F994B" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/repeatedbackslashes.replay000066400000000000000000000222101367004507500313010ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPkF04F1P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "594e1656c7bf1464", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xYv4xzk/+MBVAxXa+bh4tmxZbcYi6TH4VyWemHvgjunDE412uAtRdlYQO/4XuF/VB4im/YdzMtU=" ], "X-Amz-Request-Id": [ "D323E3B0B4EF9F41" ] }, "Body": "" } }, { "ID": "0633ca5fd5f6ff9c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "SaKZjv2Bo2duhmyGENwVjlfc0Ro0DsLKaP45/U7GUzrGuFc4piA1CiAQrvZC1eydiznFZ8+CDZ8=" ], "X-Amz-Request-Id": [ "7D9FE4DCEC144784" ] }, "Body": "aGVsbG8=" } }, { "ID": "a1d5450181b70972", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pQjJIdFkc9ARqFUlhCMWs2sqxN18oMzEVvvjGkitcJqJdyOXmkVw3u2K3BC2G6Bpn0wCTqw41q4=" ], "X-Amz-Request-Id": [ "E2CED2ECF4FE5665" ] }, "Body": "" } }, { "ID": "61227a66c2227b14", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "wQ77xNjKL4EQMGS2cp5+St1iuyf8hGoOqIhA9F25tgFMBKWbO7iRkOkV24lff/h8dmioJIXAmKM=" ], "X-Amz-Request-Id": [ "51216819195770B3" ] }, "Body": "aGVsbG8=" } }, { "ID": "b6ab7427bbafc8d2", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "uvaufQwmoegpc8yb+VOVvToqAcR/76mr5ZOoqKrcS5NCaLuSmxw5Ncm5Kem9gh8dHjksmYuBWME=" ], "X-Amz-Request-Id": [ "449B8347423C91C6" ] }, "Body": "" } }, { "ID": "7ddb2d37c67ec88b", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VmYPOwkddtI/7Qj3b91cJenLp7hWcNpOzB+aQP1y2YEgqaUL0gTE/4FbD04FqMUv4+6E8WmeeSI=" ], "X-Amz-Request-Id": [ "E45C6341F8328980" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/repeatedfwdslashes.replay000066400000000000000000000222541367004507500311710ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPkBDvCHP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "bc450808621edaae", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "aMgG2wSmGXFCB2/pEZgvwsvSzBsKnKROe49mKSe++G9IaSLpeR3ldEADgL0q2STH0wsK/hT3jD0=" ], "X-Amz-Request-Id": [ "37D51569730DDF68" ] }, "Body": "" } }, { "ID": "6dd388666ca26944", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sq+TkKlH51HAIEFF2qpDNMNDbKbL/Aq/eJ0M19nfceMWvq+UoVqT1fdI8ZxZJm4vxj6IdL9iSk0=" ], "X-Amz-Request-Id": [ "3C7F96FF642CF52E" ] }, "Body": "aGVsbG8=" } }, { "ID": "1a1d26df7da860ed", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "BGJpa8B8ZJcud945YC3EwSPdzFXn4aPulk3gTtLSAYvkjLoNgT5FMv1nEAcsECx/HN84kdykqw8=" ], "X-Amz-Request-Id": [ "D38234EDCA03D227" ] }, "Body": "" } }, { "ID": "4515db65c1d7784a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VxduMWP9+zCp2h8GBKcRMhQSK38W2uxPpTz2aNkbiJmeM26gD+LZYRhI0bsK3XarZWsDC8bitZU=" ], "X-Amz-Request-Id": [ "7D708C1547CCB1BF" ] }, "Body": "aGVsbG8=" } }, { "ID": "b86bc60ddbe0e756", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "opmyEGCPn7BBtD6ux+vZm2iNlPnVp9CssoLfc/NYzp+SFyV5LPLmUmqCYk5Bdg4e7MKE7gwGP2o=" ], "X-Amz-Request-Id": [ "32BA3AD5C40EB769" ] }, "Body": "" } }, { "ID": "d8956fd359a528e7", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "fd/Fixwm3ykZxDN6t+yLLUBW4NMAyyPa57taZZ2Ci84dD82NWteutlO8UQV/WUD1zsFu9VcJpgo=" ], "X-Amz-Request-Id": [ "4930EBF24CF135D5" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/spaces.replay000066400000000000000000000220641367004507500265710ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPiHaPuvv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "b96d80174f6b6ab3", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VcyKpzvRFIa0XsU+HdXdEv3CAdZUKyVi/v/At/Zf7HWZts2zSbaQRWO5QiY3qeRFTkJetG6uqZo=" ], "X-Amz-Request-Id": [ "E6F469BF0620E384" ] }, "Body": "" } }, { "ID": "32a2f2a187f89b80", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pOgY/z218dKs9nuR+vyeQQNE6HqGzInr3mHnmITv784Do4szGvWigtShyP1I/IBpvZxQXLW6e0o=" ], "X-Amz-Request-Id": [ "681CA0338E65E8D4" ] }, "Body": "aGVsbG8=" } }, { "ID": "fe817e601cb27620", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "b6gnEKIMEFTVk0YSdVlfVJR2mTKMTL0VohfuC28FeUVMLxtDXU4VtoLKSf1rSXqdSR+Lbv0rov4=" ], "X-Amz-Request-Id": [ "927FD08E5951A1B3" ] }, "Body": "" } }, { "ID": "c0ff7d232c61d0f2", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "03ChbQRaF5CXkyo1dEXwI7wsbYvw7yhmSH9IyCtzsi4UXAd6eqhYKpdbuHJvqc1s6gEYQj/zkVc=" ], "X-Amz-Request-Id": [ "6051FA50A4700538" ] }, "Body": "aGVsbG8=" } }, { "ID": "cbb5ecfb5b36021f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YMfsx8rAFwiuR9hrc2Qukd8nXsE5nfVqzD2CNEvL7YkgySCr9bxbpLWDNcNn5mFAd98S/VNEToc=" ], "X-Amz-Request-Id": [ "D096DD00E65A4396" ] }, "Body": "" } }, { "ID": "8e0d8f8aab69730b", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "y4GRO7MNmUa2QEr/jpUO5dxr8McqCtvsE8YMsx3aEjvchtC++e6tLMeQYzTXs+hWIzHu/L7j1mc=" ], "X-Amz-Request-Id": [ "01491D5E30312919" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/startwithdigit.replay000066400000000000000000000217701367004507500303700ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPiJk6mZP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e7b5c8e4e2e46775", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "P7ORc2EX7heJ0FtQep2MS3SRToBHRVdmCb5qvXKf2ZEtbvKH2bh0MuNgFD45uKApe4sCeZ72A58=" ], "X-Amz-Request-Id": [ "FA24BA6034139714" ] }, "Body": "" } }, { "ID": "69d8e8349e834fd8", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "tCjj0rT8QSW4VuaTWK4nAv/TFKg8aMs7Baj/ywxw0JrtuvDVPIxeJKHDNIfGX7fNQQipv13quMY=" ], "X-Amz-Request-Id": [ "55339251CBF5DC41" ] }, "Body": "aGVsbG8=" } }, { "ID": "5b20d8414db0c9db", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "S+zsTzbqewcSCAFpvJcItbAy6cCTPPpwcvuqo6EK3G6hryqGONtUJVjnwfWCh7vlKmG7RfxNkag=" ], "X-Amz-Request-Id": [ "E70A3B16013D846E" ] }, "Body": "" } }, { "ID": "97c15e69183d906e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "KqQQhH9rhcMCxikbZQrvpzFhdu+X3NM9wJndL+s/fWM5gN7fDoeyvANsKuLErLAh8bq41Ebnzog=" ], "X-Amz-Request-Id": [ "2E190B12A21DC5A9" ] }, "Body": "aGVsbG8=" } }, { "ID": "cccf1fd4fea15252", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GY4L2nrDHo6yMt1OUslOhchUkzSoziVBb/MKwqmSMXT+Jp+oVvQ+qUM6F0miJgs+NGY92oMSK9g=" ], "X-Amz-Request-Id": [ "491BCC2A3A4185EF" ] }, "Body": "" } }, { "ID": "fbd8512bb03b9967", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:03 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TMtMxVRe1VeblKzxV046k8qIX7u/rWZ46NlvsvQA9GqIr1SfUSiB+R82bbv6Jd84Vz41hiZvnJw=" ], "X-Amz-Request-Id": [ "C50391D19B735DD8" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestKeys/unicode.replay000066400000000000000000000221741367004507500267430ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPjFdJDIv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "398a1011c99ed516", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pj0RvGVq2kWgscD+CQuxhxOqm9U3s2q+Ya/VIHZmxmHqLBuh5OpFXZ7Q7aLUogT0xpO4fG6iHiw=" ], "X-Amz-Request-Id": [ "425641C93DC326C4" ] }, "Body": "" } }, { "ID": "f6afe9b848ad23a8", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VFwkNk5Esn+2Qi9k6mHbt0xOEkU05adoXuUaNJSeLxEtySd/4NNgyxJ5NKXJctXKsqZ2CDKRcG0=" ], "X-Amz-Request-Id": [ "884BE85C59876BC9" ] }, "Body": "aGVsbG8=" } }, { "ID": "3a778b408b121479", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/ANJ3Q9WpUbC6qmrYnmzma2cDYe6xU/yy8IMT5pXZaiw8bUR9LoNcp6TfnxRvDux4YNIpg6SIvk=" ], "X-Amz-Request-Id": [ "950E938316D72295" ] }, "Body": "" } }, { "ID": "c27816ccbef1fedd", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AEYXyDnOK5ULt4xd3aKcPF7hDOroL7F4ayFjL6ClEN/WiN5kCcGWCpXH1h9gWuNDsT6V7wSkbqM=" ], "X-Amz-Request-Id": [ "EC6CA3AAC6AD25F9" ] }, "Body": "aGVsbG8=" } }, { "ID": "3a85af11d3642655", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/z22aHjwsckDHawI8OwNSfRJdLe8YLw5QiTnqjkzmkn2xPdnBClvfXOCpGsQdbpIEgEfJ1mIVPM=" ], "X-Amz-Request-Id": [ "D301B2EF6DF92FF3" ] }, "Body": "" } }, { "ID": "d16b4a32c201996a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "zPrP9xpUNkh+tw7NQBMy7UOgax5NGfNH4PrPsDTji9JyCobhf0YKigk3yH2WVNchVN2h3kBLGa0=" ], "X-Amz-Request-Id": [ "70AB796B8CB639D7" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList/000077500000000000000000000000001367004507500240715ustar00rootroot00000000000000PaginationConsistencyAfterDelete.replay000066400000000000000000000271161367004507500336570ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList{ "Initial": "AQAAAA7WcSPbHLLBtP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "fff180bf9c8c14a8", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "7jCe+HTKCB/HgiBL/lHSXy4XY7ULZuHX/1J6M/K5Grei9Pt0tkhiYa27I8PK05pBLg5deS3AAqc=" ], "X-Amz-Request-Id": [ "1557342C2D9409E8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "7b98112f24497f0c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=2\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "BXBf34BGqN6hhR5mmYFBkpYLy5b70hOPr6bjkBzwBxBWtu3rb2xo+hMXjOWPWKXSG7InXwhnmns=" ], "X-Amz-Request-Id": [ "CE0BC37FC7DFD819" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TmV4dENvbnRpbnVhdGlvblRva2VuPjF1MmZMTFpKZDczS054N05iSnd1aVc1UVl5L3E5M3lsbjJhbnVTeEJIaE1jakZTZm0yc2xFYnRWK1czSTRmRkNOPC9OZXh0Q29udGludWF0aW9uVG9rZW4+PEtleUNvdW50PjI8L0tleUNvdW50PjxNYXhLZXlzPjI8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "20f0a9ca9abb9294", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-1", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Wed, 14 Aug 2019 02:34:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "d2SrUFw5EaTjFsGGT1ALNKabD4DjfwGM2ByHH5eKQhEdKrd4G1BreWEPZwh/bZ4Bz6ragS6amGk=" ], "X-Amz-Request-Id": [ "9CE1C60E38342A53" ] }, "Body": "" } }, { "ID": "3dae4c8e63ecc194", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "y+DJPlBVOF4FWFwPe5jNwWEaLuCzeQ1kXJMr1pRuKJvUxih/gblDWXGtA89Oc99DF/bDpAUbcWM=" ], "X-Amz-Request-Id": [ "853B1EDB4EB1CCB1" ] }, "Body": "" } }, { "ID": "1cc93cb2dc98fcdb", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1u2fLLZJd73KNx7NbJwuiW5QYy%2Fq93yln2anuSxBHhMcjFSfm2slEbtV%2BW3I4fFCN\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "Fubz1CUxewsLcoZ+azAEPLrDkeiZDJ4yg0asHLc73vZhQyHpCgWQqPMDb7dNyJRgqLFq8iXTMnI=" ], "X-Amz-Request-Id": [ "33269508C8ECDB11" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48Q29udGludWF0aW9uVG9rZW4+MXUyZkxMWkpkNzNLTng3TmJKd3VpVzVRWXkvcTkzeWxuMmFudVN4QkhoTWNqRlNmbTJzbEVidFYrVzNJNGZGQ048L0NvbnRpbnVhdGlvblRva2VuPjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "f51c34fee2d6e6bf", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-1", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "wF4PAGnXNPa2a+5IZOCo1O0X4pk+Qr0UjOBYjlEh99M8bB0PSw2Z+U5FDDTb2gyHgIV45oXqelM=" ], "X-Amz-Request-Id": [ "3B4A2FC97EABF51C" ] }, "Body": "" } } ] }PaginationConsistencyAfterInsert.replay000066400000000000000000000271171367004507500337220ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList{ "Initial": "AQAAAA7WcSPbDee5yf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "352978c84892be55", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "eUVCQnkzGrLiwlbBiZONY79gz/RmNMFINyLD9IpNaHv3B+4+cnJ8NZpMCHtMRUGsewc2xotBJsQ=" ], "X-Amz-Request-Id": [ "DAD0EDE0F99CDAB3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "5fd4f7dcbf780f0c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=2\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "KaM1XmDqkRIOEHEyYiWP24P3nMmy91e7GFXZuTJ2phku/DRvbi259N87Hiw0g1m0ZQsnoMpdjig=" ], "X-Amz-Request-Id": [ "2AEDF489A20DDF37" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TmV4dENvbnRpbnVhdGlvblRva2VuPjFMWms2eENaKzlacFBEajkwdlBjcDBvU1dyeFk1Nm5NeDZkdTRKeFhPQ0hMV2pFU3QzR3lXWDAwRG5CRVdvcDFRPC9OZXh0Q29udGludWF0aW9uVG9rZW4+PEtleUNvdW50PjI8L0tleUNvdW50PjxNYXhLZXlzPjI8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "fa83c39298fdc432", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-0a", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xNl+oeVDVnfjL1r19dSEtA0BrQLxYH0+oSnqsnwBlGVkx67i63evurVNLyI0EDz8kQ5nHIQz6J4=" ], "X-Amz-Request-Id": [ "124216E906A3A189" ] }, "Body": "" } }, { "ID": "420a01962eef86df", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1LZk6xCZ%2B9ZpPDj90vPcp0oSWrxY56nMx6du4JxXOCHLWjESt3GyWX00DnBEWop1Q\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "932SOxQj2KXbBv4wldA4HPs5JhjvqaygWLc+eW9Nc3VrKA0XZ7iVKIdSyRzpAnmo8PT+KoEO3nU=" ], "X-Amz-Request-Id": [ "B9FBF0DD5A8DA464" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48Q29udGludWF0aW9uVG9rZW4+MUxaazZ4Q1orOVpwUERqOTB2UGNwMG9TV3J4WTU2bk14NmR1NEp4WE9DSExXakVTdDNHeVdYMDBEbkJFV29wMVE8L0NvbnRpbnVhdGlvblRva2VuPjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "762a8cd22dbb0c96", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-0a", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "IKZfhegiOY188M2xzhmBObZQD5T181iWX/6cIfaQhw42S82cwlglCI7wntnT+VHdpeJykDLW3RA=" ], "X-Amz-Request-Id": [ "A6C486A08DD564E4" ] }, "Body": "" } }, { "ID": "393b86a57022b56e", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-0a", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "PUIJERWLf/pGIVKbQp32mqZpyIf05ts5ywM6Q8g6K4Z+zBAnwMZ63MNZmqXc6HE53fb8q1UgxRA=" ], "X-Amz-Request-Id": [ "E57BBABF07B53B8C" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList/by_1.replay000066400000000000000000000232471367004507500261510ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPaMvOXEf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "92623d91a1b67105", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "bY+5XzPFXKz4fys7zIwAAa8M2sAaepKIYzfV8PCkiNq7laiD0ReY6KZXJwLpH/TjjlPv2PPCoQE=" ], "X-Amz-Request-Id": [ "0434E2E506FF5DE7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "c006dcf3c901910e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "stOE/f0h92cUdBWPxU/3+LWi7FyBVGK6iSF+6xN1x52n8YIdGsFHLYuvzm3Ty3ZNFeZzMT0cjQo=" ], "X-Amz-Request-Id": [ "89D918396D0746AC" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TmV4dENvbnRpbnVhdGlvblRva2VuPjF3NFRVRHJRLzU3Y2N6dm1ubk1yS3J4TUVxMGpKaUdzZWpXaDNkVGx3dkJHSi9aUFhzL2s1SVVJU0JDYmRXcTlsPC9OZXh0Q29udGludWF0aW9uVG9rZW4+PEtleUNvdW50PjE8L0tleUNvdW50PjxNYXhLZXlzPjE8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "f245762dab43765b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1w4TUDrQ%2F57cczvmnnMrKrxMEq0jJiGsejWh3dTlwvBGJ%2FZPXs%2Fk5IUISBCbdWq9l\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "jXplwsVZyGqF25KkM23d/MzAYchxRq7bdG/b/yomqAE65+L0FQVzMF5oC+TdZ1DXZ76VnrFLzX0=" ], "X-Amz-Request-Id": [ "9A36B3EC4B2FEAB4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48Q29udGludWF0aW9uVG9rZW4+MXc0VFVEclEvNTdjY3p2bW5uTXJLcnhNRXEwakppR3NlaldoM2RUbHd2QkdKL1pQWHMvazVJVUlTQkNiZFdxOWw8L0NvbnRpbnVhdGlvblRva2VuPjxOZXh0Q29udGludWF0aW9uVG9rZW4+MUpsbUpDVnZNc2tOTU1NTmxQVjlXaFpjN2JpdVBiS1Zwc0FrRkp6ZU1aZGo3OW9renVDNzVKMlAxMnBkUS92TGw8L05leHRDb250aW51YXRpb25Ub2tlbj48S2V5Q291bnQ+MTwvS2V5Q291bnQ+PE1heEtleXM+MTwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+dHJ1ZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTA4LTE0VDAyOjM0OjE3LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "4282bfdcd7f51679", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1JlmJCVvMskNMMMNlPV9WhZc7biuPbKVpsAkFJzeMZdj79okzuC75J2P12pdQ%2FvLl\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "8bi/YfNqDRNeyJRZ4NigCK6JAoArZ0k/Muu+UmfWGXFXb25HvdwXR2/eO8YSSWcKh3+2k1zVRag=" ], "X-Amz-Request-Id": [ "B872B7797D427451" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48Q29udGludWF0aW9uVG9rZW4+MUpsbUpDVnZNc2tOTU1NTmxQVjlXaFpjN2JpdVBiS1Zwc0FrRkp6ZU1aZGo3OW9renVDNzVKMlAxMnBkUS92TGw8L0NvbnRpbnVhdGlvblRva2VuPjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4xPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList/by_2.replay000066400000000000000000000173071367004507500261520ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPaOzlBFf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "15477c338e543ef0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "qS9ulzXdUzH5WgAeNaXGkF0iXNypCiLWMg/XoN2CDROQMI+QdV4fNJRQdpuDc7ZOaqW3ld1npCI=" ], "X-Amz-Request-Id": [ "D3621E00FBAA8C2B" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "4490bf06981a9430", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=2\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "rK37vcV4sWW/+n1CumvRFQIlLSLWsPMdaBPFgyhyv0BJ4H+hC58uLKEm6q9pc2Agc/B+IKj7O+I=" ], "X-Amz-Request-Id": [ "4CAF79E5DFFE0866" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TmV4dENvbnRpbnVhdGlvblRva2VuPjFvbEEra0d1QW00UytkZHBOc2E3cUpsbFFTLzAycVIxNDRZVW9Qd3ZmSGgzdS8rcVF3MXdWWVI0cCtUdTkrOWU4PC9OZXh0Q29udGludWF0aW9uVG9rZW4+PEtleUNvdW50PjI8L0tleUNvdW50PjxNYXhLZXlzPjI8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "37f1fb58ce89235e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1olA%2BkGuAm4S%2BddpNsa7qJllQS%2F02qR144YUoPwvfHh3u%2F%2BqQw1wVYR4p%2BTu9%2B9e8\u0026list-type=2\u0026max-keys=2\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "5uyfYk3EEgrKGvdPchNAICPp5tSFNqdnIKgAswl4jVwOSfFt5pyvX80tALQtQm1LgyTFPzJne5o=" ], "X-Amz-Request-Id": [ "DBB1B3A661239071" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48Q29udGludWF0aW9uVG9rZW4+MW9sQStrR3VBbTRTK2RkcE5zYTdxSmxsUVMvMDJxUjE0NFlVb1B3dmZIaDN1LytxUXcxd1ZZUjRwK1R1OSs5ZTg8L0NvbnRpbnVhdGlvblRva2VuPjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4yPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList/by_3.replay000066400000000000000000000133171367004507500261500ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPbCAVqMv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "40307d4b76ed66d7", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "xN4DSbogyZJv7bEwWq9bYR7rFtwHxOEvKcdGOuRGJo5931ixqaIIs4OqL7CIF/Tv+ni3mIJKD9Y=" ], "X-Amz-Request-Id": [ "6F0A1EBF2BF6ED2F" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "a793db98f92a497c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=3\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "IC8WlWhNMOTRlfa51OpIi4hfGwBML1bWs8PTubdB3lAJZqOoQq/RzO+n3zkgOCpVi8zLpj6Qbcw=" ], "X-Amz-Request-Id": [ "056427868E34DA14" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MzwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList/exactly_1_object_due_to_prefix.replay000066400000000000000000000122601367004507500334430ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPaKCtjJf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "16e692c6b806cd32", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "ZLyMidGNLZF8Q/+BUgu1fW44GnqVxdX5w3gCfFgwq2Wfiy/QQx3Obeg4iT/OSh5qxLVkwb8aAs8=" ], "X-Amz-Request-Id": [ "4BF8533789C6D3D2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "7f61cd74aa7d6a19", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list-1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "Wtw5HFnqR/5x+/amm03jOOXYz3Uujn4M5qUvxoFKNLOIGeGuDYIGMaJZJJyAg3pMpdbYXy/qao4=" ], "X-Amz-Request-Id": [ "E277B4EF131FAEBF" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3QtMTwvUHJlZml4PjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTA4LTE0VDAyOjM0OjE3LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList/no_objects.replay000066400000000000000000000116701367004507500274410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPZIoRUDv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d2ed0e4ad654bf86", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "5Bz0WSa/pXxJPzePhrpSqV7VlVnwSUnRdOEynB86LQ/z4u9L13E0k5YskcFm1O+jm3jMfTSryRg=" ], "X-Amz-Request-Id": [ "EA9C3A6E76926DF5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "032e7798ff79bf63", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=no-objects-with-this-prefix", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "BLH94pPdMYs8odosIOZomwSBM7BQOg+FmH5yT5X6r/vLSpTbFWoITFEUEdfMqaQm9OjcNRsbseA=" ], "X-Amz-Request-Id": [ "568B9C2319309C02" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm5vLW9iamVjdHMtd2l0aC10aGlzLXByZWZpeDwvUHJlZml4PjxLZXlDb3VudD4wPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestList/no_pagination.replay000066400000000000000000000133261367004507500301410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPaLaTnzv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "915c776364deea47", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "theXtc+RDw0izM7u7epnGfPQSYNBaWDUrHQoeFjU8cdTpvBvllsKmEVBQTp1GwEjsQjVMmdV28w=" ], "X-Amz-Request-Id": [ "3F3F7B9D2174822E" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "204fa26612f1bf1a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:55 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "oLbfJ9Ia3b09eVy4nb2ZNou1DIjf04dyAcScg/yR4HLnzYY/u4NxCtw4/EgNok8n6GaGAVGv7As=" ], "X-Amz-Request-Id": [ "833B9BE3D7648B09" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48S2V5Q291bnQ+MzwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0yPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestListDelimiters/000077500000000000000000000000001367004507500261135ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestListDelimiters/abc.replay000066400000000000000000000721731367004507500300700ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPcHmJu8P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "4576fe5fc127dfaa", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "uzOf4pqtoUXiFVkF/ab6BagnmAQ8b8eHcnM9XXtnbV6jCuu3OFE+Q72Ov4NhlZaq5irMYQp1oME=" ], "X-Amz-Request-Id": [ "C635A8F4EE47B8AA" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PEtleUNvdW50PjY8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wOC0xNFQwMjozNDoxOC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "13605f55a0a446dc", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "IRkBKhayG7ob4vop409Pt1FSN37czLMNO0EQ0/TJRiZwTyAh+fohA4CGx2uSAmsumrn3AdSvyC4=" ], "X-Amz-Request-Id": [ "B7E5E1A5E0567DF8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PEtleUNvdW50PjY8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wOC0xNFQwMjozNDoxOC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "b9dd3af7b0bd3f6b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "E4LazPBw37r/4ipwE3gkXCK4s9QVskPRO+WulFaOfCTSQmFxVUyjWHk2+U/mA+PgNGo6CxnO22M=" ], "X-Amz-Request-Id": [ "8DB73738085310D4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PEtleUNvdW50PjM8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PERlbGltaXRlcj5hYmM8L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmM8L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "b50a7592b1c51476", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abcdir1abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "eC0CIgps8pH8i5bpAkMkpMHhAexop4RKfyOyI3Dt4Yi05QksNqRUPeJV4zeaniAVjS1tgONoAHA=" ], "X-Amz-Request-Id": [ "2E452E4489A8A191" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiYzwvUHJlZml4PjxLZXlDb3VudD4zPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNhLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNiLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmM8L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "fe79e1dfa45e6665", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abcdir1abcsubdirabc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "SmmJy2XLUP/Vn22tVZQQOGJTCcV9JjeTYcXOd+xtNv6reG5Njw7zjNdQ/VGMBrmaqDZAYrtoLuM=" ], "X-Amz-Request-Id": [ "FB83A80B1ACCC444" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiYzwvUHJlZml4PjxLZXlDb3VudD4yPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNjLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmNzdWJkaXJhYmNkLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "9eebdb05bea4fbc7", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abcdir2abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "11IFTsjVutAvV1RR3n4HHtZD6ZsPt+hwzHSKJk/0dETS6iGxNlFNsGjrsAzn5HDmLHEa4H/XjUA=" ], "X-Amz-Request-Id": [ "2A8FDA707A7D6E78" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiYzwvUHJlZml4PjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmNlLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wOC0xNFQwMjozNDoxOC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "3582123b2280b43e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "YrAFG52h2I1yyUaz446Nsk7JLKcTJlTc6P3s1I9p5tPqOc7I7+ZwlNFaah/F9VM2boHB7XV+xeI=" ], "X-Amz-Request-Id": [ "BE2402157AAAB79A" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PE5leHRDb250aW51YXRpb25Ub2tlbj4xNVFCMFRGZnNIbFdZY0tqU256WXBPTWpkT0hwcTNWZ2xZdEJGanRuSEdCYkkzQ2gwNkJnZXJ4N1FzT3VYbllMOUN5aE9ZSllVM0xQTDB4Zm1vREtMUVE9PTwvTmV4dENvbnRpbnVhdGlvblRva2VuPjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4xPC9NYXhLZXlzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiYzwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "8488c1e744197e33", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=15QB0TFfsHlWYcKjSnzYpOMjdOHpq3VglYtBFjtnHGBbI3Ch06Bgerx7QsOuXnYL9CyhOYJYU3LPL0xfmoDKLQQ%3D%3D\u0026delimiter=abc\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "kUk+tovf/GEuIGwj97zmOjGHMK7WWrfUcx94J7Sg/eQ+GJxnJFP/gMgkAhXVrcAP3m/JAct9LkU=" ], "X-Amz-Request-Id": [ "0BA0A41C35F69596" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PENvbnRpbnVhdGlvblRva2VuPjE1UUIwVEZmc0hsV1ljS2pTbnpZcE9NamRPSHBxM1ZnbFl0QkZqdG5IR0JiSTNDaDA2Qmdlcng3UXNPdVhuWUw5Q3loT1lKWVUzTFBMMHhmbW9ES0xRUT09PC9Db250aW51YXRpb25Ub2tlbj48TmV4dENvbnRpbnVhdGlvblRva2VuPjFteW9BYUNaREcwbUFOQmFsNHJYUktrRmhWU01iRG1WUnI1WUkyM0FxQjgxSnVRMjMvcUFmY3J4RGRvdGlLM1BlSStUd1V1MnY2OXM9PC9OZXh0Q29udGludWF0aW9uVG9rZW4+PEtleUNvdW50PjE8L0tleUNvdW50PjxNYXhLZXlzPjE8L01heEtleXM+PERlbGltaXRlcj5hYmM8L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+dHJ1ZTwvSXNUcnVuY2F0ZWQ+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "6fe9e1e588635bfc", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1myoAaCZDG0mANBal4rXRKkFhVSMbDmVRr5YI23AqB81JuQ23%2FqAfcrxDdotiK3PeI%2BTwUu2v69s%3D\u0026delimiter=abc\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "sIQW82qoyinPuklqW3YQt9Me7TmeMk43+tFD2BiHrWTaN5N8fdQCzPCXIMSlz5SdvkJSVyFFSho=" ], "X-Amz-Request-Id": [ "CF886C8F4D88148D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PENvbnRpbnVhdGlvblRva2VuPjFteW9BYUNaREcwbUFOQmFsNHJYUktrRmhWU01iRG1WUnI1WUkyM0FxQjgxSnVRMjMvcUFmY3J4RGRvdGlLM1BlSStUd1V1MnY2OXM9PC9Db250aW51YXRpb25Ub2tlbj48S2V5Q291bnQ+MTwvS2V5Q291bnQ+PE1heEtleXM+MTwvTWF4S2V5cz48RGVsaW1pdGVyPmFiYzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "21e1c98136213deb", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-abcdir2abce.txt", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Wed, 14 Aug 2019 02:34:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "H69z9b4GJ36PaDdIzCzWLNlty7KO50cV3KmRgptyaiqrjCVOJPBKk0kK0z2MEwny/Ccb+rPC2kg=" ], "X-Amz-Request-Id": [ "D6B829139789234A" ] }, "Body": "" } }, { "ID": "ad64b324b3d84879", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-abcdir2abce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xeOZd0xRww5XwOOP+Bl17dz7oOqZ4BlzfmX5BdA89AqSC04WoueFakvtQwCt8vHrw4znylZwkhw=" ], "X-Amz-Request-Id": [ "FA02B3981FDA52C0" ] }, "Body": "" } }, { "ID": "a43bf12b2b82c802", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "1ZdqeDgIrUN6kT5YHCIdwtj8f/ZRNaXtOB55SKePuRKPRCm6QCzGxmIxZ2SXM87xmnMPJCM6o0E=" ], "X-Amz-Request-Id": [ "6ACBF03ABFA1071D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PEtleUNvdW50PjI8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PERlbGltaXRlcj5hYmM8L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "b5940f50a3bf8f37", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-abcdir2abce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "SCR/zzrPwTuaA4wvuWcd7vcz1E3j9QyP+D8ly5mt1Ewh3z11hmgBacwzFHVgb+aXfO9ZffoKl0A=" ], "X-Amz-Request-Id": [ "11F613D0D20EB4AB" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestListDelimiters/backslash.replay000066400000000000000000000716171367004507500313000ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPcCANsYP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "a443d4a079e7fdc6", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "jJhbDJSi72M8iocgc7BEhn/jRq6pFYJRlaJWCVn9mztCEvUuJHHC8pI9IFCE3s6civU69m6OcZ4=" ], "X-Amz-Request-Id": [ "40D0210EB1544D2B" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxLZXlDb3VudD42PC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVxhLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXGIudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXGMudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXGQudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjJcZS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTguMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "de2b2b3632e9948c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "R2DfGgD3gJ/EWDxhVjAaEiyMoQH9LM8Scl7pyPYoulJfUaoQkkOzUjdEh0wAarjkiKyUFLaLeXM=" ], "X-Amz-Request-Id": [ "C7A79E55681EC5E2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxLZXlDb3VudD42PC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVxhLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXGIudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXGMudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXGQudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjJcZS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTguMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "08258aa37395d310", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "PAH4Z2zMTFLKFc/Pdga/lVE1DCcCDYq0uJlMfhHL7z7ps6aoU/iGf+XWK2fT/ddzuoy47Iz82lo=" ], "X-Amz-Request-Id": [ "4BE7AD1F9283E535" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxLZXlDb3VudD4zPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+XDwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVw8L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjJcPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "510710c063b6d9d5", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5Cdir1%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "dzmKiVKGU/TOxC7KfklSj5u6c0EoCctremODbR0MDs6MU02uih3aTum6WesTMgfdHxN0xCUS+fw=" ], "X-Amz-Request-Id": [ "AA11A46CE1486EA5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcPC9QcmVmaXg+PEtleUNvdW50PjM8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PERlbGltaXRlcj5cPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXGEudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcYi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVxzdWJkaXJcPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "cb1bb8bba5d0d2ba", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5Cdir1%5Csubdir%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "TAdf+9GAl21Ng0pUwVMXkYpjwEdOJMHdFXqVsB/SdXQ69ajR+AH9HmdEmRqr9WLg0p1oySu3peU=" ], "X-Amz-Request-Id": [ "0987310518820D50" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXDwvUHJlZml4PjxLZXlDb3VudD4yPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+XDwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVxzdWJkaXJcYy50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVxzdWJkaXJcZC50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "063c80d8ea4e8fbe", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5Cdir2%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "Cb045aTneYvgP7APJxbtLf7JsIuPHY/ubN1uftMYarvMKHxKHmHt9S2TAeGLaCq3Vu5yz2RAR6I=" ], "X-Amz-Request-Id": [ "5C83EB03BE82F666" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjJcPC9QcmVmaXg+PEtleUNvdW50PjE8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PERlbGltaXRlcj5cPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIyXGUudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTA4LTE0VDAyOjM0OjE4LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "724a9bb54f3e340d", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "XhUrqaD29M/d/RdSOVSOY6Wz6R7lMW8R2h12cVBKNYtBaeQbPf39rfpWsjLplH4+9smJUpiKHj0=" ], "X-Amz-Request-Id": [ "2B2E8C8C9C965420" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxOZXh0Q29udGludWF0aW9uVG9rZW4+MVVnSlpvdEhTTHJCekF0YXFaNnBqOGM1a2tyY0xzbkh4Y2pXaGpEQzJWd2gvam1Pd1JoMnNyZGQwZ2VWZmhEOWx2Z0kxQkplVXAvMD08L05leHRDb250aW51YXRpb25Ub2tlbj48S2V5Q291bnQ+MTwvS2V5Q291bnQ+PE1heEtleXM+MTwvTWF4S2V5cz48RGVsaW1pdGVyPlw8L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+dHJ1ZTwvSXNUcnVuY2F0ZWQ+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVw8L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "d2e4efda60e3fcd1", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1UgJZotHSLrBzAtaqZ6pj8c5kkrcLsnHxcjWhjDC2Vwh%2FjmOwRh2srdd0geVfhD9lvgI1BJeUp%2F0%3D\u0026delimiter=%5C\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "L5sOxul/15eOPGmMKLqD4iTZXwvnIXvlEheLRE1HCeyzWdbFuNa8J+6uIVAHqum7tf/2iOk4ONM=" ], "X-Amz-Request-Id": [ "592074D3FB56478D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxDb250aW51YXRpb25Ub2tlbj4xVWdKWm90SFNMckJ6QXRhcVo2cGo4YzVra3JjTHNuSHhjaldoakRDMlZ3aC9qbU93Umgyc3JkZDBnZVZmaEQ5bHZnSTFCSmVVcC8wPTwvQ29udGludWF0aW9uVG9rZW4+PE5leHRDb250aW51YXRpb25Ub2tlbj4xM09NaCttRU53bXRVZmk3WnFpK21CWXdtUXc5OXd6b1FvK0Noc01NMXJqZVV3NjFMODQ3YU9mQnkzVTRqM1JFOUx6QTlISHd0a3dnPTwvTmV4dENvbnRpbnVhdGlvblRva2VuPjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4xPC9NYXhLZXlzPjxEZWxpbWl0ZXI+XDwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD50cnVlPC9Jc1RydW5jYXRlZD48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIyXDwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "7828966b7aa9d054", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=13OMh%2BmENwmtUfi7Zqi%2BmBYwmQw99wzoQo%2BChsMM1rjeUw61L847aOfBy3U4j3RE9LzA9HHwtkwg%3D\u0026delimiter=%5C\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "mLR8ylso4namPIuSF0tpD+65XP3/QpW3gMeapqebOXN491BwkgpSwbsDD/w8AtbcToBQoTgF1M0=" ], "X-Amz-Request-Id": [ "3E8E14212F30BF06" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxDb250aW51YXRpb25Ub2tlbj4xM09NaCttRU53bXRVZmk3WnFpK21CWXdtUXc5OXd6b1FvK0Noc01NMXJqZVV3NjFMODQ3YU9mQnkzVTRqM1JFOUx6QTlISHd0a3dnPTwvQ29udGludWF0aW9uVG9rZW4+PEtleUNvdW50PjE8L0tleUNvdW50PjxNYXhLZXlzPjE8L01heEtleXM+PERlbGltaXRlcj5cPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxmLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "2b3331f6d6cdd7c5", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-%5Cdir2%5Ce.txt", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Wed, 14 Aug 2019 02:34:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QKZRwVqP/kE6rsem4gqR+p00M/tMMnVImeNWVd7PL74sYKyhnV0S6SYYzjmIpqmXItSbm7Yyb6o=" ], "X-Amz-Request-Id": [ "7EA57E894531FC22" ] }, "Body": "" } }, { "ID": "03d0abcdef372282", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-%5Cdir2%5Ce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "yn8PJRlWZNvC1aId33n1B8g91AYMn3dMWQ9dVfryEsu2i1rMxqC0G5VKy8o4TIq0gabtbAA6dRs=" ], "X-Amz-Request-Id": [ "2187E86C91795E1E" ] }, "Body": "" } }, { "ID": "2f99dc594fb1c8ed", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "diUILrbSEcXP1ZH5HiR5htB15g9nQsVIuw8OfCWzR2Q4HGBlzPuQB4uqJREE6nWU4QrwXdZZ1fM=" ], "X-Amz-Request-Id": [ "95BA6E2AC592724E" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxLZXlDb3VudD4yPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+XDwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVw8L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "65e957ee2eff2c4d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-%5Cdir2%5Ce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Bh2uLcwf6qAvp/85hOGZgWLyGFUEXHvTl1x/pp4WXOzHVgMQEGlr5xadj2mz9CZEy+zsTAaF8s0=" ], "X-Amz-Request-Id": [ "78DF482FC675AF37" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestListDelimiters/fwdslash.replay000066400000000000000000000715771367004507500311650ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPbLvQeqv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "f4a109362377d608", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "n5HYszz6EsgcmtWVvSUX9P+jbGXQmBI+qYGUaxRe8Vn5qQk9ZpMWML6yDFxSikkZNFacSFDijZo=" ], "X-Amz-Request-Id": [ "B23223B460097A66" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxLZXlDb3VudD42PC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2MudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTguMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "021a743ad598ade1", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "/610KPiMLBbh0bF74JtOP1cUYU9Ca0IWJD3JmA9qMHA5+KSfd6ZBWnqGnuv6gTX9OhDiTKEk71o=" ], "X-Amz-Request-Id": [ "323400013720ED9C" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxLZXlDb3VudD42PC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2MudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvZS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDgtMTRUMDI6MzQ6MTguMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "9aed5ebc4b461752", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "BpC8ImUp1Z+4H8tw9d4lxL+xMS8YnFqxPKn5G8h+epId+ErNYJGRUbErz34lAi0gPFWCLf2U7x8=" ], "X-Amz-Request-Id": [ "0647FF4902813423" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxLZXlDb3VudD4zPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS88L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "2be426fa17cc947c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2Fdir1%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "PtlMBgluec514//gWqtwm/E0ApcPt1+BZNDL0/mFSaCcpdi2gV7uazWlnASXBz/Hd77oGE5ktgM=" ], "X-Amz-Request-Id": [ "938F7EE3A8F327AC" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvPC9QcmVmaXg+PEtleUNvdW50PjM8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2EudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "d1f33215b278c390", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2Fdir1%2Fsubdir%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "RX43eBPt7tVsIEH9j6/s32q4uhzfscUjH/9aegh1aVmU5MAEMeSECKvuKZi9ZrzS14yWFFctxMA=" ], "X-Amz-Request-Id": [ "7732B701C158559D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyLzwvUHJlZml4PjxLZXlDb3VudD4yPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvYy50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9zdWJkaXIvZC50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "a59a466478e27f6b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2Fdir2%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "CdVxgZ9QJogxa83SQVSgevRStByHTJknmmt4r0R+7o5Hb3PyzfUxzRSz3t9XkjLc3aKrLHlKzJs=" ], "X-Amz-Request-Id": [ "D6136B0165E9793E" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvPC9QcmVmaXg+PEtleUNvdW50PjE8L0tleUNvdW50PjxNYXhLZXlzPjEwMDA8L01heEtleXM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTA4LTE0VDAyOjM0OjE4LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "748f420af3c4dbf3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "cV5vphrXbp0sCAz556dZfDPYcUqmk7i5Kozk/1oxwvXbfaIzQpcEbsxsUg/mkNumsEkYb5Efkew=" ], "X-Amz-Request-Id": [ "4XCH9H7V6Z1Q0VAW" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxOZXh0Q29udGludWF0aW9uVG9rZW4+MVpsclJlT0dWZ2gya01ONzdLMzVlYld1Mk5IcnVEZzd6TnhMc3lnbXlXS2pGeGZ5QmRFWlM0Y2FmSmdSYytBaUZxVlhZd2F2bDFtdz08L05leHRDb250aW51YXRpb25Ub2tlbj48S2V5Q291bnQ+MTwvS2V5Q291bnQ+PE1heEtleXM+MTwvTWF4S2V5cz48RGVsaW1pdGVyPi88L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+dHJ1ZTwvSXNUcnVuY2F0ZWQ+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS88L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "26c103794b7e084c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1ZlrReOGVgh2kMN77K35ebWu2NHruDg7zNxLsygmyWKjFxfyBdEZS4cafJgRc%2BAiFqVXYwavl1mw%3D\u0026delimiter=%2F\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "0/Dd2oqH5q2t0YWcyuZJB9xOn069Kd8B5CMIk4z/4YFX36281zQPgtuCzV0Rk3gJoI1rGCYzdjE=" ], "X-Amz-Request-Id": [ "ED15CE024EA635D0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxDb250aW51YXRpb25Ub2tlbj4xWmxyUmVPR1ZnaDJrTU43N0szNWViV3UyTkhydURnN3pOeExzeWdteVdLakZ4ZnlCZEVaUzRjYWZKZ1JjK0FpRnFWWFl3YXZsMW13PTwvQ29udGludWF0aW9uVG9rZW4+PE5leHRDb250aW51YXRpb25Ub2tlbj4xVWdEUnNYZDZoU3VnT2Z4QWZCNUlmVThuSEpQS1B6Q1hNaGtiL0U2Z05pWkpxeXY5MVQ3NThuQ1FNYldGanBtb0l1K1pCNjZueHV3PTwvTmV4dENvbnRpbnVhdGlvblRva2VuPjxLZXlDb3VudD4xPC9LZXlDb3VudD48TWF4S2V5cz4xPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD50cnVlPC9Jc1RydW5jYXRlZD48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLzwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "a3f72f9a0c1c401d", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?continuation-token=1UgDRsXd6hSugOfxAfB5IfU8nHJPKPzCXMhkb%2FE6gNiZJqyv91T758nCQMbWFjpmoIu%2BZB66nxuw%3D\u0026delimiter=%2F\u0026list-type=2\u0026max-keys=1\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "PD9cSVgTomPONDX4dzCerKGSnE8J8gpaSHKuzWVgj0Ff4tUw/aofAg2rssnpyjsWPzvb9ks5OiE=" ], "X-Amz-Request-Id": [ "AA32CF8810F4FFA9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxDb250aW51YXRpb25Ub2tlbj4xVWdEUnNYZDZoU3VnT2Z4QWZCNUlmVThuSEpQS1B6Q1hNaGtiL0U2Z05pWkpxeXY5MVQ3NThuQ1FNYldGanBtb0l1K1pCNjZueHV3PTwvQ29udGludWF0aW9uVG9rZW4+PEtleUNvdW50PjE8L0tleUNvdW50PjxNYXhLZXlzPjE8L01heEtleXM+PERlbGltaXRlcj4vPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9mLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "55153ead863a50f0", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-/dir2/e.txt", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Wed, 14 Aug 2019 02:34:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "V0yq6zTMR3flKLTGsNVYKu9f1PpsQ1k23xMK34q+0t50Sd6YYX1A/EHgVKsvo8KUEvyVEmn/mWc=" ], "X-Amz-Request-Id": [ "1CC244FDACDDED41" ] }, "Body": "" } }, { "ID": "ecacc6e0b1aae5e9", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-/dir2/e.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ebqcMwARJzu60HfZDiLHZGafg3bCYljvKGMXHFx2h6TGIrVxEhL1pZPiNUDJlsdQsb+SR2S+pJY=" ], "X-Amz-Request-Id": [ "37AC1319EFA4AE51" ] }, "Body": "" } }, { "ID": "08e1f8ef4be59bff", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026list-type=2\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "FgOEcSRlwJxpBoAme2CRrfAm8JqFA5G+UIOE6cvD14P5pQHey99tSAtftFwECR/EVG7F7K++xg0=" ], "X-Amz-Request-Id": [ "022EBBA164190AB8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxLZXlDb3VudD4yPC9LZXlDb3VudD48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS88L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "573f415f14457a96", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-/dir2/e.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "RXfPHiZ27fiP731KcfxD8rn6FCyI0N5d8vdu1Xrc2q1WYyTKbTmPcuTSSNZvcdf5poOQixhtnKQ=" ], "X-Amz-Request-Id": [ "696DEBF4E29BC712" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestListWeirdKeys.replay000066400000000000000000000362321367004507500271440ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPbKDy6Mv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "3070a0aa329e6eec", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=list-weirdkeys-", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "b1hyeLToeGMI7ujtNYj3z54YVmldv+3FSIEYHb4LK4deag4j7RUPGD2Zx5K54v+wLAQgP/RxkPA=" ], "X-Amz-Request-Id": [ "2A776C0F3F1FA70D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pmxpc3Qtd2VpcmRrZXlzLTwvUHJlZml4PjxLZXlDb3VudD4xODwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLSAhJnF1b3Q7IyQlJmFtcDsmYXBvczsoKSorLC0uLzwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLlxmb29cLi5cYmFyXC4uXC4uXGJhei4uXDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLlxmb29cXGJhclxcXGJhejwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLTEyMzQ1PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLTo7Jmx0Oz0mZ3Q7PzwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1APC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLVtcXV5fPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLV9fMHgwX19fXzB4MV9fX18weDJfX19fMHgzX19fXzB4NF9fX18weDVfX19fMHg2X19fXzB4N19fX18weDhfX19fMHg5X19fXzB4YV9fX18weGJfX19fMHhjX19fXzB4ZF9fX18weGVfX19fMHhmX188L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtX18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX188L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtYDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhejwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1mb28mcXVvdDtiYXImcXVvdDtiYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vL19fMHgyZl9fYmFyL19fMHgyZl9fX18weDJmX19iYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vL2Jhci9iYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vXGJhclxiYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMte3x9fn88L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMt4pi64pi64pi6PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "02aa249e9eb5ef8f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=list-weirdkeys-", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "M7+f8NNegMh7OU2jK3FT3WjV8+RUAgp4qThrDVfUAQ5ujlWbhuHbytl4sf9lXwmr9R/YPDsEZ0Y=" ], "X-Amz-Request-Id": [ "776FD718BD6547D4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pmxpc3Qtd2VpcmRrZXlzLTwvUHJlZml4PjxLZXlDb3VudD4xODwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLSAhJnF1b3Q7IyQlJmFtcDsmYXBvczsoKSorLC0uLzwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLlxmb29cLi5cYmFyXC4uXC4uXGJhei4uXDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLlxmb29cXGJhclxcXGJhejwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLTEyMzQ1PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLTo7Jmx0Oz0mZ3Q7PzwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1APC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLVtcXV5fPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLV9fMHgwX19fXzB4MV9fX18weDJfX19fMHgzX19fXzB4NF9fX18weDVfX19fMHg2X19fXzB4N19fX18weDhfX19fMHg5X19fXzB4YV9fX18weGJfX19fMHhjX19fXzB4ZF9fX18weGVfX19fMHhmX188L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtX18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX188L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtYDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhejwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1mb28mcXVvdDtiYXImcXVvdDtiYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vL19fMHgyZl9fYmFyL19fMHgyZl9fX18weDJmX19iYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vL2Jhci9iYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vXGJhclxiYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMte3x9fn88L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMt4pi64pi64pi6PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMD5.replay000066400000000000000000000331331367004507500247640ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPhI3JEtv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "deb280452a13a230", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-aaa", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "9QvO6SFRpvYokgxh+/l8N7wnF7w3fupVme5eolh/Mg0tnZl8xLkjj+SYBHy/ovz+oyV0tjOs97o=" ], "X-Amz-Request-Id": [ "E4DEBA099C7EFA0E" ] }, "Body": "" } }, { "ID": "2228defb0d5683ac", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-bbb", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "7" ], "Content-Md5": [ "afqrYmg1ApVVDefVh7wyPQ==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "82e35a63ceba37e9646434c5dd412ea577147f1e4a41ccde1614253187e3dbf9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "Z29vZGJ5ZQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"69faab6268350295550de7d587bc323d\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "CO3Pb79JiOqCUkyssrr47NrHwh6nFoHpHXXG5jjbzPo5Y/VzSlvcQMS8jjQczSaSIhhKGXWQbPM=" ], "X-Amz-Request-Id": [ "FEEF2BF3DF1E13DC" ] }, "Body": "" } }, { "ID": "74665a7838174353", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-aaa", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YSp/QcxQasdNoHUSicddNkHzJ4ZRs7CqPBOTv4vfs2YMzH+VbnPl+OyrcVy0bj9AQMHXwY3/Uxk=" ], "X-Amz-Request-Id": [ "9A5DB0992E086774" ] }, "Body": "" } }, { "ID": "cf8791271ce7ea20", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-bbb", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "7" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"69faab6268350295550de7d587bc323d\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "CYJ13aEY8hx4F3/PVbKKkVQW9DM5TZCQNx4pSV/QSfdWHEwv8TOHA1i4Ueud9srdJ1pLfna0dUY=" ], "X-Amz-Request-Id": [ "5E87456B9EAE4817" ] }, "Body": "" } }, { "ID": "869c8af9cd25516a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?list-type=2\u0026max-keys=1000\u0026prefix=blob-for-md5-", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "EqJJi5cWlSkQ3hnr8h2amCCeaFXbX4XwaghvH6mjfUNyPMZL7v+2xwywNka1JPVcDYAIpz7OSkE=" ], "X-Amz-Request-Id": [ "BF57D3083C5F89F1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLW1kNS08L1ByZWZpeD48S2V5Q291bnQ+MjwvS2V5Q291bnQ+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLW1kNS1hYWE8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzI6MDIuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbWQ1LWJiYjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAyMC0wNi0wOVQwNjozMjowMi4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NjlmYWFiNjI2ODM1MDI5NTU1MGRlN2Q1ODdiYzMyM2QmcXVvdDs8L0VUYWc+PFNpemU+NzwvU2l6ZT48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "8de40a26271812cf", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-bbb", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "7" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"69faab6268350295550de7d587bc323d\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rXnM8phkSr2D5442VzcxFPxSqLnX8Lxul852UqZYJ5Qm2c4WnoLZBT5etztkn/jN98iUOsPLx+Q=" ], "X-Amz-Request-Id": [ "30BC66799B53ACB7" ] }, "Body": "" } }, { "ID": "ac54254101797263", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-bbb", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JsUuwRJcaoRhRPD3sV77sxs1emogzo9wSo0jg9ZCE1By7nz3M2TVzU4Tewaay1d7veBc1z0hVlA=" ], "X-Amz-Request-Id": [ "23D4B0E057B5AD67" ] }, "Body": "" } }, { "ID": "1e218447be5b39e3", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-aaa", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3PCXSr2VxO9Pj/QOBmCDf/Uvq75jXTJ5B7reEQ7OK2mfY+gXGeVUKAhtr3uJiB0L84XEe3Tdy1E=" ], "X-Amz-Request-Id": [ "8D943FC7C6A24A9D" ] }, "Body": "" } }, { "ID": "e821e4d6d38ad42a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-aaa", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ea9qZ0Fj+912H+I6bpJj53GOi8BKjtgoHhcSBerx5f1m30yJCJxIuL8s8aq0n/iRU9DM+PYCD50=" ], "X-Amz-Request-Id": [ "7FDDA7D98D56F3C9" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata/000077500000000000000000000000001367004507500246765ustar00rootroot00000000000000duplicate_case-insensitive_key_fails.replay000066400000000000000000000015501367004507500353670ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSPhAwTwD/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata/empty.replay000066400000000000000000000142221367004507500272530ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPgN/Pxt/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "629bcb6ec498b977", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hZ5X3z3GZ5k58VWo5LyEXcy6o4fVtwt4SLrnnxxACRiGAstqeZpoDArQAGgEh0kQApn/YcOxhj8=" ], "X-Amz-Request-Id": [ "8Q1RCMBW4YDN6XFR" ] }, "Body": "" } }, { "ID": "0cf794978d10f00c", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6bmmT9H9NS0/vK7q3pWVwqnHT5UlXTCq4V0k6UGQOtG1YjVxkghug/jJ/NoTeMrEWWiiEosi++c=" ], "X-Amz-Request-Id": [ "E7348D4FB38DFA8A" ] }, "Body": "" } }, { "ID": "61945f85f383d5b0", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:01 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6utCbpp6uie6tBQp4GaWlBwD35Ko7JqqyM/jNHRg7V3Q3RazZMwCwCtygslr55nw1euRF4vCkNM=" ], "X-Amz-Request-Id": [ "525D2F040C0BB3C8" ] }, "Body": "" } }, { "ID": "70f9babd4d2459b7", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "PMkOYbyqTowUAYXC8AQ3Wt5xQB7uR6t0v1CX0CPV6v24pO2Xer+DM0DbqtPXUjkNaMIKiJ4PyGg=" ], "X-Amz-Request-Id": [ "0D1BB29BFE8B1538" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata/empty_key_fails.replay000066400000000000000000000015501367004507500313010ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPhAq3ThP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata/non-utf8_metadata_key.replay000066400000000000000000000015501367004507500323030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPhItUWX/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata/non-utf8_metadata_value.replay000066400000000000000000000015501367004507500326270ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPhIyHgqP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata/valid_metadata.replay000066400000000000000000000153551367004507500310640ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPhA1xSkf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "86447dfa77f36f39", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-Key_a": [ "value-a" ], "X-Amz-Meta-Key_b": [ "value-b" ], "X-Amz-Meta-Key_c": [ "vAlUe-c" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ENiNYUe+HWPlXbtyp5Epkh6Q13bj45awLrr8okF3LG92N1q0NkqxJCcMW1a47HnkuG/zGvOc9UY=" ], "X-Amz-Request-Id": [ "5BFB047C9B60763E" ] }, "Body": "" } }, { "ID": "210216526629080e", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3eDQlT8xR7Yg5KWtxQMEIESt44fFD8NGRea93YRATKIx0cnAx4nnLyReVsV+mg5Y/WTEYr2iREM=" ], "X-Amz-Meta-Key_a": [ "value-a" ], "X-Amz-Meta-Key_b": [ "value-b" ], "X-Amz-Meta-Key_c": [ "vAlUe-c" ], "X-Amz-Request-Id": [ "EB0925FDFB294A91" ] }, "Body": "" } }, { "ID": "cb1f436bfa04dd74", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "gsBM0dmkWJYHHxR/LWTyJ6SHsDLtezKstlS/UktKrJBJU6yHkcx9rTR3UqWVe+ISQCfJPJadZc8=" ], "X-Amz-Meta-Key_a": [ "value-a" ], "X-Amz-Meta-Key_b": [ "value-b" ], "X-Amz-Meta-Key_c": [ "vAlUe-c" ], "X-Amz-Request-Id": [ "3D3093299F4AC09D" ] }, "Body": "" } }, { "ID": "de9542e75e8b3a4a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Ip3KWV+fU+uu8ZvOBUnqC325m0E9MW5qjvjr2Qt86IYXPfY01m+hfvkWk6AImPpmbwvDTElqRRY=" ], "X-Amz-Request-Id": [ "F880F5D084026AFE" ] }, "Body": "" } } ] }valid_metadata_with_content_type.replay000066400000000000000000000144531367004507500346310ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSPhELzUzP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "c2955b47f7a0c926", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-Foo": [ "bar" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "i14g9HUfJTRbt75Hrj62F450+pCtrOeSIePqzDssFQ2bWJEUKAp1xCHLscM1yn80AsqAsdVpMGQ=" ], "X-Amz-Request-Id": [ "2F136D69A1C95D3B" ] }, "Body": "" } }, { "ID": "36c1a25a05eca3f4", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "qZdQ9a6esG3/+I3nF+LbWuMOkVFDPtzCAIC557Bo3AF8scARhPztEgG4iji/2/1+4KEtIvdoEdU=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "7FF7B81CB0AA4C00" ] }, "Body": "" } }, { "ID": "eb23cff27e719ca0", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "RvfEpmg8ZTihf2q0jLDP0mAqFugYoKcedXPGZpr1nwLH3rhE+KmuQLkbdUOyVJDrkdStZXPXAqw=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "1CFFC168672DAEE1" ] }, "Body": "" } }, { "ID": "ef1622e00cc2b66c", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XLuZ955A1kWio2G4SwSw3EDVu9W4SEelj3+jTYQ3DAwiMblQh0kCLoNA0bcIPvNKt5HR69ishUo=" ], "X-Amz-Request-Id": [ "181FB8D9D21B4FEC" ] }, "Body": "" } } ] }valid_metadata_with_empty_body.replay000066400000000000000000000145111367004507500342640ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata{ "Initial": "AQAAAA7WcSPhCtlXwv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "ae1d578b280b8d4d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-Foo": [ "bar" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ElyYDtME0KTfBnW6vSlNpxKAScNawsu141abnk2gA96H8yXNmbTWYw+rY5407FwZW2pP1M8CNZY=" ], "X-Amz-Request-Id": [ "CCAAA444710BDB1E" ] }, "Body": "" } }, { "ID": "1ed1af2511c83ecc", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7/tGG9FOY+Y2kOXtJHtGBPRNgJY/3lUhKhc0UqAdj7US2wNlzvrSDOBUHrJBkTsrejYRdCi0tSs=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "207C3AB5FB28517C" ] }, "Body": "" } }, { "ID": "94f33dea4d04cf9c", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "1+u1IgY9p/VzrMNhaieYHkcJG/t3VSjgrLIcLEYASjcbiz6s2UqR3RgSjxn27O4gMMTvK3K9cXU=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "2E105DC5159036E7" ] }, "Body": "" } }, { "ID": "2fdda8ad64ac4b9f", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Olnf4vUH7Zk11lt4Ev0cVQrqA6Tc7zL3W3prvePQToBzeEgk0N4WFMxHwH/MyOlmi4PEB2gE/Hk=" ], "X-Amz-Request-Id": [ "8EC10AC0FF91F328" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestMetadata/weird_metadata_keys.replay000066400000000000000000000267731367004507500321400ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPhF/b31/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "01d4b96ab7976b41", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f": [ "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ], "X-Amz-Meta-%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f": [ "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ], "X-Amz-Meta-%20%21%22%23$%25\u0026%27%28%29%2a+%2c-.%2f": [ "%20%21%22%23$%25\u0026%27%28%29%2A+%2C-.%2F" ], "X-Amz-Meta-%5b%5c%5d%5e_": [ "%5B%5C%5D%5E_" ], "X-Amz-Meta-%60": [ "%60" ], "X-Amz-Meta-%7b%7c%7d~%7f": [ "%7B%7C%7D~%7F" ], "X-Amz-Meta-%e2%98%ba%e2%98%ba%e2%98%ba": [ "%E2%98%BA%E2%98%BA%E2%98%BA" ], "X-Amz-Meta-..%2ffoo%2f..%2fbar%2f..%2f..%2fbaz..%2f": [ "..%2Ffoo%2F..%2Fbar%2F..%2F..%2Fbaz..%2F" ], "X-Amz-Meta-..%5cfoo%5c%5cbar%5c%5c%5cbaz": [ "..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz" ], "X-Amz-Meta-..%5cfoo%5c..%5cbar%5c..%5c..%5cbaz..%5c": [ "..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C" ], "X-Amz-Meta-12345": [ "12345" ], "X-Amz-Meta-Foo%20bar%20baz": [ "foo%20bar%20baz" ], "X-Amz-Meta-Foo%22bar%22baz": [ "foo%22bar%22baz" ], "X-Amz-Meta-Foo%2f%2fbar%2f%2f%2fbaz": [ "foo%2F%2Fbar%2F%2F%2Fbaz" ], "X-Amz-Meta-Foo%2fbar%2fbaz": [ "foo%2Fbar%2Fbaz" ], "X-Amz-Meta-Foo%5cbar%5cbaz": [ "foo%5Cbar%5Cbaz" ], "X-Amz-Meta-__0x3a__%3b%3c__0x3d__%3e%3f": [ ":%3B%3C=%3E%3F" ], "X-Amz-Meta-__0x40__": [ "@" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "jM2oRx7gmktVywA4xzOwbzWwskXyM/N4A+7lG9XVg9eaVU8EWiy2JFDLNv3sWxqqBLCXHIyueMs=" ], "X-Amz-Request-Id": [ "CB166103F17117D4" ] }, "Body": "" } }, { "ID": "5fece40b90b55a24", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TljNqbLyYf6thJ2gHaRGtc5EoStfFOmqdRdESh+cdb1KSqCtbwpMnHMWYBeNoYVkXobFYa3PFTo=" ], "X-Amz-Meta-%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f": [ "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ], "X-Amz-Meta-%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f": [ "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ], "X-Amz-Meta-%20%21%22%23$%25\u0026%27%28%29%2a+%2c-.%2f": [ "%20%21%22%23$%25\u0026%27%28%29%2A+%2C-.%2F" ], "X-Amz-Meta-%5b%5c%5d%5e_": [ "%5B%5C%5D%5E_" ], "X-Amz-Meta-%60": [ "%60" ], "X-Amz-Meta-%7b%7c%7d~%7f": [ "%7B%7C%7D~%7F" ], "X-Amz-Meta-%e2%98%ba%e2%98%ba%e2%98%ba": [ "%E2%98%BA%E2%98%BA%E2%98%BA" ], "X-Amz-Meta-..%2ffoo%2f..%2fbar%2f..%2f..%2fbaz..%2f": [ "..%2Ffoo%2F..%2Fbar%2F..%2F..%2Fbaz..%2F" ], "X-Amz-Meta-..%5cfoo%5c%5cbar%5c%5c%5cbaz": [ "..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz" ], "X-Amz-Meta-..%5cfoo%5c..%5cbar%5c..%5c..%5cbaz..%5c": [ "..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C" ], "X-Amz-Meta-12345": [ "12345" ], "X-Amz-Meta-Foo%20bar%20baz": [ "foo%20bar%20baz" ], "X-Amz-Meta-Foo%22bar%22baz": [ "foo%22bar%22baz" ], "X-Amz-Meta-Foo%2f%2fbar%2f%2f%2fbaz": [ "foo%2F%2Fbar%2F%2F%2Fbaz" ], "X-Amz-Meta-Foo%2fbar%2fbaz": [ "foo%2Fbar%2Fbaz" ], "X-Amz-Meta-Foo%5cbar%5cbaz": [ "foo%5Cbar%5Cbaz" ], "X-Amz-Meta-__0x3a__%3b%3c__0x3d__%3e%3f": [ ":%3B%3C=%3E%3F" ], "X-Amz-Meta-__0x40__": [ "@" ], "X-Amz-Request-Id": [ "129DD682DEB9833C" ] }, "Body": "" } }, { "ID": "0caf8b6e445464ab", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "EWqeccnE8gQF/ylONCin6LQ6gml4c4EHJCOJb/TMyTsLLffir6QGqfKaq5/JIKo0CrXoVl9P1R0=" ], "X-Amz-Meta-%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f": [ "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ], "X-Amz-Meta-%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f": [ "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ], "X-Amz-Meta-%20%21%22%23$%25\u0026%27%28%29%2a+%2c-.%2f": [ "%20%21%22%23$%25\u0026%27%28%29%2A+%2C-.%2F" ], "X-Amz-Meta-%5b%5c%5d%5e_": [ "%5B%5C%5D%5E_" ], "X-Amz-Meta-%60": [ "%60" ], "X-Amz-Meta-%7b%7c%7d~%7f": [ "%7B%7C%7D~%7F" ], "X-Amz-Meta-%e2%98%ba%e2%98%ba%e2%98%ba": [ "%E2%98%BA%E2%98%BA%E2%98%BA" ], "X-Amz-Meta-..%2ffoo%2f..%2fbar%2f..%2f..%2fbaz..%2f": [ "..%2Ffoo%2F..%2Fbar%2F..%2F..%2Fbaz..%2F" ], "X-Amz-Meta-..%5cfoo%5c%5cbar%5c%5c%5cbaz": [ "..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz" ], "X-Amz-Meta-..%5cfoo%5c..%5cbar%5c..%5c..%5cbaz..%5c": [ "..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C" ], "X-Amz-Meta-12345": [ "12345" ], "X-Amz-Meta-Foo%20bar%20baz": [ "foo%20bar%20baz" ], "X-Amz-Meta-Foo%22bar%22baz": [ "foo%22bar%22baz" ], "X-Amz-Meta-Foo%2f%2fbar%2f%2f%2fbaz": [ "foo%2F%2Fbar%2F%2F%2Fbaz" ], "X-Amz-Meta-Foo%2fbar%2fbaz": [ "foo%2Fbar%2Fbaz" ], "X-Amz-Meta-Foo%5cbar%5cbaz": [ "foo%5Cbar%5Cbaz" ], "X-Amz-Meta-__0x3a__%3b%3c__0x3d__%3e%3f": [ ":%3B%3C=%3E%3F" ], "X-Amz-Meta-__0x40__": [ "@" ], "X-Amz-Request-Id": [ "BCBBE256F6F4B435" ] }, "Body": "" } }, { "ID": "ab52d5e31874e0a8", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:02 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "i6nAvyUzYMVS15zidNGYc933EF8a91BExg5Gt9ztEUF9dRx3t+gylXtAigewUKrBJ4Wpc9XvDOE=" ], "X-Amz-Request-Id": [ "C35D8744929A6224" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestRead/000077500000000000000000000000001367004507500240315ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestRead/length_0_read.replay000066400000000000000000000144561367004507500277540ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPdADAzIP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "75bf0ff463493e2f", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "F5NNSGU4LlbiMz2vrtF7N6EmYeO27ufuaHQytM8kG5ZHa3fKBdWzvUJI2eEmXDStL0pvtDB3K20=" ], "X-Amz-Request-Id": [ "065928BEB6E5552C" ] }, "Body": "" } }, { "ID": "1b26e2a649323346", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Range": [ "bytes=0-0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "1" ], "Content-Range": [ "bytes 0-0/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "eJ6WSLPPmE2Am5jnEOSd8DLZjNp4iZHUB0FPt/v7LSlr2OubY6aG+J+1Jeanb9qFsio1gkA0lXI=" ], "X-Amz-Request-Id": [ "2EE7604B8CAC0EF1" ] }, "Body": "YQ==" } }, { "ID": "0d66fc3c164c69d1", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8eWpjrE3DXfEkYMI33Iw4cxtLO3b+f11l8TZ7gt5BGdKxPJEkzhalafC4Ewr+a4wT3tYrZhtwSo=" ], "X-Amz-Request-Id": [ "A39969625E6038DC" ] }, "Body": "" } }, { "ID": "77887aa8c14f89b8", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "jf4hWRcI66927qrgMExx3fWPxRzlBLpaalEFDS3wmIweKPTOoPl4RIjz1lhOWBvYCIAgpBmvP6Y=" ], "X-Amz-Request-Id": [ "B47ACC881D6DB562" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestRead/negative_offset_fails.replay000066400000000000000000000015501367004507500315760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPdAAYUAv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestRead/read_a_part_in_middle.replay000066400000000000000000000144661367004507500315270ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPdEBV51P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "59c0b8a08b599e18", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "p7NBWRlWUsL2bAWMrBSWByXS6biu7OaKqz/FNxsM/99eE1OaC92WRboq4gudNTc8cK6Z8UWqy7s=" ], "X-Amz-Request-Id": [ "A9D72A561A0BCD25" ] }, "Body": "" } }, { "ID": "cfa26ec435bdbd9b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Range": [ "bytes=10-14" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Range": [ "bytes 10-14/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "jRoVKRmZB47AnkAP92ebp1NDXe0Icd1fjLkgVJ9FbVYDsIfwLNyASCV3eAPmr2sMVWZ1g3ghnBM=" ], "X-Amz-Request-Id": [ "3D5179D531A54BF9" ] }, "Body": "a2xtbm8=" } }, { "ID": "c582ac380e4be669", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hregXiQSypbxnUT75xJzEB0ubD2IgiEK7qoifPG5QgnmjBkqWgvMwFc5fsb+O41IedDEYFvBPKs=" ], "X-Amz-Request-Id": [ "1666E80E78D8DE3F" ] }, "Body": "" } }, { "ID": "d5e6cec4170431b2", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TArQE1BnLxDesObU6kYDyQ+mH1Q9a/P2t6992hnUy/XmgaFcsMmLqzc7W6M6KlfyemMHXMnFgJY=" ], "X-Amz-Request-Id": [ "5A7FB073598F51F3" ] }, "Body": "" } } ] }read_from_positive_offset_to_end.replay000066400000000000000000000145051367004507500337530ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestRead{ "Initial": "AQAAAA7WcSPdCB0pjf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "ee654d0fca8c18e8", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "e3sbfE2oNoWc+8KMKATOqwYuwS3ZtN4Sc83jM9rrwXdXuhAh0DQiJNOfJ9TuW9RL/0F4RXNp49c=" ], "X-Amz-Request-Id": [ "120F26F31935274F" ] }, "Body": "" } }, { "ID": "f7df4b45242467df", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Range": [ "bytes=10-" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "17" ], "Content-Range": [ "bytes 10-26/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HfXMtEEmrTSHo3lxff0pLjHhagidc99n3taVHSXtC7VU1u6yyq8gtlwpg/ZHik5P/ZWWWOnZUoQ=" ], "X-Amz-Request-Id": [ "5D29B052748E0F5E" ] }, "Body": "a2xtbm9wcXVyc3R1dnd4eXo=" } }, { "ID": "cf62bffddc6a076e", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "di/qORn1LENLwEB8+7pRrwI8qhAs9agf8tY65uRba0E1NFn5/3RnuvN4C4myB9PgBBLFwZRr4l0=" ], "X-Amz-Request-Id": [ "F1905BF502534FC1" ] }, "Body": "" } }, { "ID": "a6798e1d05c6c329", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6XAbL8dbDEv6L+pEI5FyWl4gI4W4NXd8GwvFTcu0DzEFn6Atrkx/AvqhNwG8yE3ISGKD/C/O20U=" ], "X-Amz-Request-Id": [ "9EC0CD1B9A9B5E0E" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestRead/read_in_full.replay000066400000000000000000000144171367004507500277010ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPdGCZuTf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e57625d616cb9aa6", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MkzkNEYdxh0VJi2UPSFkvF/haHURJ/iDu1+C6B5KNU8JCXi7oNF0xNQfa6ggipluoGhZmTWNTv0=" ], "X-Amz-Request-Id": [ "E6C0A69F31DBCE97" ] }, "Body": "" } }, { "ID": "a5628f1e03ebedd9", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "i97HANF++33vOiTLJ7Fk7EebIamCrq9rrk+7/nIw4bDJZvkksZGHLoqTJ2/nLozUFEjFPEccX8I=" ], "X-Amz-Request-Id": [ "905B33960B3DC3C3" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "ba739506486948ea", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZIlbLlkmtn04QrEw/zCxM1z1FoiZfkZbaXSfd8SFZs4PcZB/Ica0Y1iMVmUfKabzc5DW6G+TioE=" ], "X-Amz-Request-Id": [ "38E085B9F43CBF79" ] }, "Body": "" } }, { "ID": "981e9484b51a4f7e", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "u/14/XkmYITukqpM6CugEQ0QTKEEU3xTYhA0FPMQjIJ2tXDJh0Lq4kT68qJI2x7uV5C5z1wQT+8=" ], "X-Amz-Request-Id": [ "5BCB0A4D1F8C4CFF" ] }, "Body": "" } } ] }read_in_full_with_negative_length_not_-1.replay000066400000000000000000000144171367004507500352550ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestRead{ "Initial": "AQAAAA7WcSPdH4NDz/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "539bac555cf7c147", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "unB6awfRjgmL1pt1hHEKVlVkZuo/gv41VYXIZS6E9k9qPFYGVuuXkiQg+kclSW4JVMLTMtwCwBw=" ], "X-Amz-Request-Id": [ "3692DCCD4B02A836" ] }, "Body": "" } }, { "ID": "b31676edc344bdab", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Dkn/D9iiB3MkjFz5T1JqtZ6ojObq3MmwRfX5le2DwcHaNsImit+Jgu46qqAAEuk151Fj3eV5nk0=" ], "X-Amz-Request-Id": [ "26EACC9572E0AF23" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "e547de5944ee0e52", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "9inJu5WF/DOvvTIsafcQ56LUGjuN9ISjf0Zz6xH4P1ANAJflGUtZXhM4Uco3gUpZdqWYzdsrGeY=" ], "X-Amz-Request-Id": [ "935BAFD02F6158D8" ] }, "Body": "" } }, { "ID": "397e6b2eef99b86c", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "vNqWk/2mpjbFLJQf7IFg/DdjYWn/k7V6uIx0iR9tnL+7B7mTaIEgrZuf4yW2Z+tqrcUi5ZaPGLk=" ], "X-Amz-Request-Id": [ "DDE75504351129EC" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestRead/read_of_nonexistent_key_fails.replay000066400000000000000000000145031367004507500333350ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPcMw3uRP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "3e439c4545dee792", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rgn9YrAoLPb7pXTLxlAFSungPyR/50WJ166NlFy6P1GquQxqocdiJvkNtq3fA5yeg6iwTUNuQDc=" ], "X-Amz-Request-Id": [ "2C202BFE252DC81D" ] }, "Body": "" } }, { "ID": "38a859b6c6f78069", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "dalMoGKzk3YC1hrfRaT+0OMil1751a7fUu211DcmrvigGC6633efEIh2tU9Ff4LGoCNsi+XwnsA=" ], "X-Amz-Request-Id": [ "D64083F60203B7F2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5rZXktZG9lcy1ub3QtZXhpc3Q8L0tleT48UmVxdWVzdElkPkQ2NDA4M0Y2MDIwM0I3RjI8L1JlcXVlc3RJZD48SG9zdElkPmRhbE1vR0t6azNZQzFocmZSYVQrME9NaWwxNzUxYTdmVXUyMTFEY21ydmlnR0M2NjMzZWZFSWgydFU5RmY0TEdvQ05zaStYd25zQT08L0hvc3RJZD48L0Vycm9yPg==" } }, { "ID": "a4a6a1cce3a6ae72", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ChmqUHRlvC+aL6OSddcGQ06q7atlOVciR3M4nbUQrqBRxwKD8p3LGL1GtnLBkD6fxchoqTMT4lY=" ], "X-Amz-Request-Id": [ "9960ED2A26F458AA" ] }, "Body": "" } }, { "ID": "710b8488893bd0af", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "wf/xLoV6KoWJLVoHZaUsj97tr5dKUJ8ppPdDGt8immzpI0sq+MpxS6Obc/ubGlmme7Jda+PIxYU=" ], "X-Amz-Request-Id": [ "0B8A546A7A52AE5B" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestSignedURL.replay000066400000000000000000001412711367004507500261760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPkOxcG6P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "895cd6fdec55ce26", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4FtkzMYEAGIsJsvLgB39qmslkosx21ofkamoYZHrqY2NLOWNKn/iJG6AESXS1nxX3CdcXbXvGaA=" ], "X-Amz-Request-Id": [ "81B79CB47F755519" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKZGNmYjc3YzJhYTlmZTNjMjBhOTM4ZjhjZDBmNWZjYThjMjk2MmM2OTg4MGUwODI4ZTJmMDRhNGRlMjg5ZDk0ZTwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD43ZDk2Y2MwMzg3ZDM1YTMzOGY1MDM1ZjczOTVhNGY0NDNjNjIyZjM1OTg1ZjBjOGU0YTZkOTU0YmY3NGI3MmQyPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgNjQgNjMgNjYgNjIgMzcgMzcgNjMgMzIgNjEgNjEgMzkgNjYgNjUgMzMgNjMgMzIgMzAgNjEgMzkgMzMgMzggNjYgMzggNjMgNjQgMzAgNjYgMzUgNjYgNjMgNjEgMzggNjMgMzIgMzkgMzYgMzIgNjMgMzYgMzkgMzggMzggMzAgNjUgMzAgMzggMzIgMzggNjUgMzIgNjYgMzAgMzQgNjEgMzQgNjQgNjUgMzIgMzggMzkgNjQgMzkgMzQgNjU8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QKaG9zdDpnby1jbG91ZC10ZXN0aW5nLnMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tCgpob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2OCA2ZiA3MyA3NCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+ODFCNzlDQjQ3Rjc1NTUxOTwvUmVxdWVzdElkPjxIb3N0SWQ+NEZ0a3pNWUVBR0lzSnN2TGdCMzlxbXNsa29zeDIxb2ZrYW1vWVpIcnFZMk5MT1dOS24vaUpHNkFFU1hTMW54WDNDZGNYYlh2R2FBPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "9a60fbe608b9348e", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2Fqurfg1dEFtfhciOp6Uh2IDxB6fVLvw/CsAtV7Gez/IeclkUu0WJB2Tn26Q8fmwMwLuvVLIdnc=" ], "X-Amz-Request-Id": [ "2369DDAA512C8BE3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKZGNmYjc3YzJhYTlmZTNjMjBhOTM4ZjhjZDBmNWZjYThjMjk2MmM2OTg4MGUwODI4ZTJmMDRhNGRlMjg5ZDk0ZTwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD40ZjAzNjI5NzNjZGQyNTQzYTQ3MzQwOTFhZjQzNGU0N2Y4OGI1MWFhNTljZjVhYzcxMDZiYjQwZGZmOTRhNjkzPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgNjQgNjMgNjYgNjIgMzcgMzcgNjMgMzIgNjEgNjEgMzkgNjYgNjUgMzMgNjMgMzIgMzAgNjEgMzkgMzMgMzggNjYgMzggNjMgNjQgMzAgNjYgMzUgNjYgNjMgNjEgMzggNjMgMzIgMzkgMzYgMzIgNjMgMzYgMzkgMzggMzggMzAgNjUgMzAgMzggMzIgMzggNjUgMzIgNjYgMzAgMzQgNjEgMzQgNjQgNjUgMzIgMzggMzkgNjQgMzkgMzQgNjU8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QKaG9zdDpnby1jbG91ZC10ZXN0aW5nLnMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tCgpob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2OCA2ZiA3MyA3NCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+MjM2OUREQUE1MTJDOEJFMzwvUmVxdWVzdElkPjxIb3N0SWQ+MkZxdXJmZzFkRUZ0ZmhjaU9wNlVoMklEeEI2ZlZMdncvQ3NBdFY3R2V6L0llY2xrVXUwV0pCMlRuMjZROGZtd013THV2VkxJZG5jPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "7c8818c277784003", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "WbWGOYDPE7MHaKfkAw6xKf43T7VafiadWKzPHo4yd50x0LJ1+zu5dmqDFP188PCUN325hbAl7hE=" ], "X-Amz-Request-Id": [ "A599F93CF05CED11" ] }, "Body": "" } }, { "ID": "e8ddfba6e418c194", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "X0nVSoMdttmWYbYreFkZ/W06hxkuAlrIQaY6TFW3zp016vFxTEUOpRovX7h7PbIVfdpGMk3AWdo=" ], "X-Amz-Request-Id": [ "55F4A4216269C6AF" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKODBiZjkyMzc2YjM0YTA5MGQzN2E3NGMzOWQ0M2Q2YTVjMTE2Mzk3Mzk4YjFkNmM4ZDY3MmViMmEyZDNhZWYzYTwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD5hOTdmN2JlZGE4ZDRkODAyNzc4ZDg2MmMxMzJlMTY3ODVhOGIwNTE1N2VlMWNkY2E4MjE2NDUwY2IxNzEwN2ZmPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzggMzAgNjIgNjYgMzkgMzIgMzMgMzcgMzYgNjIgMzMgMzQgNjEgMzAgMzkgMzAgNjQgMzMgMzcgNjEgMzcgMzQgNjMgMzMgMzkgNjQgMzQgMzMgNjQgMzYgNjEgMzUgNjMgMzEgMzEgMzYgMzMgMzkgMzcgMzMgMzkgMzggNjIgMzEgNjQgMzYgNjMgMzggNjQgMzYgMzcgMzIgNjUgNjIgMzIgNjEgMzIgNjQgMzMgNjEgNjUgNjYgMzMgNjE8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSA2MSA3MCA3MCA2YyA2OSA2MyA2MSA3NCA2OSA2ZiA2ZSAyZiA2ZiA2MyA3NCA2NSA3NCAyZCA3MyA3NCA3MiA2NSA2MSA2ZCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+NTVGNEE0MjE2MjY5QzZBRjwvUmVxdWVzdElkPjxIb3N0SWQ+WDBuVlNvTWR0dG1XWWJZcmVGa1ovVzA2aHhrdUFscklRYVk2VEZXM3pwMDE2dkZ4VEVVT3BSb3ZYN2g3UGJJVmZkcEdNazNBV2RvPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "810328d937f9b782", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "cXAiGlR7DOfFUr0M/hmCbxZyiD5UJ1l14jpBxFNTd9rBLIhgC6sdBZ+WZWiS41oODbheIcVN4aA=" ], "X-Amz-Request-Id": [ "7169DA1DA2A82CDE" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKMTNkZGMxZWVjY2M3ZjY5Mjg3NTE3Y2I0Mjk2MmQ2YzRhODNlYmE2MzdjNzI4NjVlMDUxOWI1YzNjMzBlNzU4ZDwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD5hOTdmN2JlZGE4ZDRkODAyNzc4ZDg2MmMxMzJlMTY3ODVhOGIwNTE1N2VlMWNkY2E4MjE2NDUwY2IxNzEwN2ZmPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzEgMzMgNjQgNjQgNjMgMzEgNjUgNjUgNjMgNjMgNjMgMzcgNjYgMzYgMzkgMzIgMzggMzcgMzUgMzEgMzcgNjMgNjIgMzQgMzIgMzkgMzYgMzIgNjQgMzYgNjMgMzQgNjEgMzggMzMgNjUgNjIgNjEgMzYgMzMgMzcgNjMgMzcgMzIgMzggMzYgMzUgNjUgMzAgMzUgMzEgMzkgNjIgMzUgNjMgMzMgNjMgMzMgMzAgNjUgMzcgMzUgMzggNjQ8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOgpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+NzE2OURBMURBMkE4MkNERTwvUmVxdWVzdElkPjxIb3N0SWQ+Y1hBaUdsUjdET2ZGVXIwTS9obUNieFp5aUQ1VUoxbDE0anBCeEZOVGQ5ckJMSWhnQzZzZEJaK1daV2lTNDFvT0RiaGVJY1ZONGFBPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "515bdf8e4e88ca6f", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sPNmLFEyaysqKwsYUXQ83Oku+4q/9sKloHvuN7JLvrPN00CNNzgmiZ0hfXPWwoOumH1JEYSLgUI=" ], "X-Amz-Request-Id": [ "E45EEA9A3026C479" ] }, "Body": "" } }, { "ID": "f2957e4ddb99d6a3", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "H0d9eVOMsRe3eAMfZI3ejYPjhbKztySByF5+pPpXGfhzAHzcAJ1acmHtuluxcWHhr1Oan/WhTQE=" ], "X-Amz-Request-Id": [ "8CE11D66EA72400B" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKODBiZjkyMzc2YjM0YTA5MGQzN2E3NGMzOWQ0M2Q2YTVjMTE2Mzk3Mzk4YjFkNmM4ZDY3MmViMmEyZDNhZWYzYTwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD4yNTc5MTU1OTEwODg4MGE3Y2VmZmU4MmYxNzc0MDVhMWE2ZmVhYTUwOGYwMDYyYjQzMGJlMDRjYWM5ZDBjOWFiPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzggMzAgNjIgNjYgMzkgMzIgMzMgMzcgMzYgNjIgMzMgMzQgNjEgMzAgMzkgMzAgNjQgMzMgMzcgNjEgMzcgMzQgNjMgMzMgMzkgNjQgMzQgMzMgNjQgMzYgNjEgMzUgNjMgMzEgMzEgMzYgMzMgMzkgMzcgMzMgMzkgMzggNjIgMzEgNjQgMzYgNjMgMzggNjQgMzYgMzcgMzIgNjUgNjIgMzIgNjEgMzIgNjQgMzMgNjEgNjUgNjYgMzMgNjE8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSA2MSA3MCA3MCA2YyA2OSA2MyA2MSA3NCA2OSA2ZiA2ZSAyZiA2ZiA2MyA3NCA2NSA3NCAyZCA3MyA3NCA3MiA2NSA2MSA2ZCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+OENFMTFENjZFQTcyNDAwQjwvUmVxdWVzdElkPjxIb3N0SWQ+SDBkOWVWT01zUmUzZUFNZlpJM2VqWVBqaGJLenR5U0J5RjUrcFBwWEdmaHpBSHpjQUoxYWNtSHR1bHV4Y1dIaHIxT2FuL1doVFFFPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "82678166e794ff6f", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Mib5OZdSIsj+tqmdxIyqOVGpTnlIglrcZOABL8L9r5tWIzO/GrKB9109O/iPjiwO+A8J7wcxYqQ=" ], "X-Amz-Request-Id": [ "DB5383C6212B267E" ] }, "Body": "" } }, { "ID": "eb9d8ee86a41edc3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "V9862K2hIGaeUofUsDBX3VUcG1E+OAMT843xca45wozgJqqf0+I2Sh/1ymZP/9qRSlAELpdj+mE=" ], "X-Amz-Request-Id": [ "FD917142D54B33CF" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKNjQyYjY3NWUwM2JjNGZmNmVjNGMwNTg5NjljNDFlOTlhYmVlNDM5Y2IyYTE5NWRiMjc4NjM0NzI0NGM3Yjc3MDwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD40ZjAzNjI5NzNjZGQyNTQzYTQ3MzQwOTFhZjQzNGU0N2Y4OGI1MWFhNTljZjVhYzcxMDZiYjQwZGZmOTRhNjkzPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzYgMzQgMzIgNjIgMzYgMzcgMzUgNjUgMzAgMzMgNjIgNjMgMzQgNjYgNjYgMzYgNjUgNjMgMzQgNjMgMzAgMzUgMzggMzkgMzYgMzkgNjMgMzQgMzEgNjUgMzkgMzkgNjEgNjIgNjUgNjUgMzQgMzMgMzkgNjMgNjIgMzIgNjEgMzEgMzkgMzUgNjQgNjIgMzIgMzcgMzggMzYgMzMgMzQgMzcgMzIgMzQgMzQgNjMgMzcgNjIgMzcgMzcgMzA8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PkdFVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QKaG9zdDpnby1jbG91ZC10ZXN0aW5nLnMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tCgpob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz40NyA0NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2OCA2ZiA3MyA3NCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+RkQ5MTcxNDJENTRCMzNDRjwvUmVxdWVzdElkPjxIb3N0SWQ+Vjk4NjJLMmhJR2FlVW9mVXNEQlgzVlVjRzFFK09BTVQ4NDN4Y2E0NXdvemdKcXFmMCtJMlNoLzF5bVpQLzlxUlNsQUVMcGRqK21FPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "6a26132fafa4b4c3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NLvqcCXzxqVl+zJ5xX2tG08w69ZBgF24hxOLQ5M4tJq0WW4zkuK+/OC5QsUH6FO0NAUe68FhxYc=" ], "X-Amz-Request-Id": [ "97D4F4AB94086BE6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKYmU3MDJmODhmNjdhNWY0Y2IyZTJhNGEwMDJhNmUwODk2YWI4MjNiNGMxNDRiYTlhNGY2ZWYzZWFlODVjZWQyNTwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD4yNTc5MTU1OTEwODg4MGE3Y2VmZmU4MmYxNzc0MDVhMWE2ZmVhYTUwOGYwMDYyYjQzMGJlMDRjYWM5ZDBjOWFiPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgNjIgNjUgMzcgMzAgMzIgNjYgMzggMzggNjYgMzYgMzcgNjEgMzUgNjYgMzQgNjMgNjIgMzIgNjUgMzIgNjEgMzQgNjEgMzAgMzAgMzIgNjEgMzYgNjUgMzAgMzggMzkgMzYgNjEgNjIgMzggMzIgMzMgNjIgMzQgNjMgMzEgMzQgMzQgNjIgNjEgMzkgNjEgMzQgNjYgMzYgNjUgNjYgMzMgNjUgNjEgNjUgMzggMzUgNjMgNjUgNjQgMzIgMzU8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PkdFVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOgpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz40NyA0NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+OTdENEY0QUI5NDA4NkJFNjwvUmVxdWVzdElkPjxIb3N0SWQ+Tkx2cWNDWHp4cVZsK3pKNXhYMnRHMDh3NjlaQmdGMjRoeE9MUTVNNHRKcTBXVzR6a3VLKy9PQzVRc1VINkZPME5BVWU2OEZoeFljPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "a1dd85ea2ebe44fa", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:04 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Ylh0nnGds7flZje8CO65nruAVtKEjidw5sfWi2bGB4T4gSP2UjddZXTM8MJkucNBSebbiCQWeOc=" ], "X-Amz-Request-Id": [ "CDE43A3533A61D47" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPkFjY2Vzc0RlbmllZDwvQ29kZT48TWVzc2FnZT5BY2Nlc3MgRGVuaWVkPC9NZXNzYWdlPjxSZXF1ZXN0SWQ+Q0RFNDNBMzUzM0E2MUQ0NzwvUmVxdWVzdElkPjxIb3N0SWQ+WWxoMG5uR2RzN2ZsWmplOENPNjVucnVBVnRLRWppZHc1c2ZXaTJiR0I0VDRnU1AyVWpkZFpYVE04TUprdWNOQlNlYmJpQ1FXZU9jPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "8dcb85d0caa63696", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "binary/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "cbqknjQXF/1fXuks844sclGsT17ZKsXJibvdWGweAh4Hqjshqrz/TtVzlmO+fozdZ1Fr9iT1+eo=" ], "X-Amz-Request-Id": [ "E1A490D9ED1EFF2F" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "1d89303d0e6ad795", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "SWFfdS42wF4oZl4UaEjaIHl/925YzqnFU/4yRjaoL/QJ3WPyWQvUy7N095OIgWvdO9xrFYjdPS4=" ], "X-Amz-Request-Id": [ "9689B50353EAD463" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKYTY5Y2VhODI5ZmNkYWI1Y2Q4NzZiM2QyNmIwZmRiNmI1MmJlNzlmNWNjZWI0ZDg2YTc3MzYzMjU1NGMwNDI4MjwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD43ZDk2Y2MwMzg3ZDM1YTMzOGY1MDM1ZjczOTVhNGY0NDNjNjIyZjM1OTg1ZjBjOGU0YTZkOTU0YmY3NGI3MmQyPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgNjEgMzYgMzkgNjMgNjUgNjEgMzggMzIgMzkgNjYgNjMgNjQgNjEgNjIgMzUgNjMgNjQgMzggMzcgMzYgNjIgMzMgNjQgMzIgMzYgNjIgMzAgNjYgNjQgNjIgMzYgNjIgMzUgMzIgNjIgNjUgMzcgMzkgNjYgMzUgNjMgNjMgNjUgNjIgMzQgNjQgMzggMzYgNjEgMzcgMzcgMzMgMzYgMzMgMzIgMzUgMzUgMzQgNjMgMzAgMzQgMzIgMzggMzI8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PkRFTEVURQovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QKaG9zdDpnby1jbG91ZC10ZXN0aW5nLnMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tCgpob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz40NCA0NSA0YyA0NSA1NCA0NSAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2OCA2ZiA3MyA3NCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+OTY4OUI1MDM1M0VBRDQ2MzwvUmVxdWVzdElkPjxIb3N0SWQ+U1dGZmRTNDJ3RjRvWmw0VWFFamFJSGwvOTI1WXpxbkZVLzR5Umphb0wvUUozV1B5V1F2VXk3TjA5NU9JZ1d2ZE85eHJGWWpkUFM0PTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "d3087c24beb5ec68", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "cDCKcjLuK94wc30C6a1FIOSUxE66fBSEobvOLU+hDLs++U61W7h4vG9TNoMAT9/zbZOouHYeLk4=" ], "X-Amz-Request-Id": [ "BC83EA9707C8273C" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMDRaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKYTMyNDY5N2YwZGNjN2ExNDE3MGMzMGEwOTI0Y2M3MDg2Zjk3NzkzMzYwZmVkNjRkMTIwNDc3YjIxOTIyMjUwYTwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD4yNTc5MTU1OTEwODg4MGE3Y2VmZmU4MmYxNzc0MDVhMWE2ZmVhYTUwOGYwMDYyYjQzMGJlMDRjYWM5ZDBjOWFiPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzAgMzQgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgNjEgMzMgMzIgMzQgMzYgMzkgMzcgNjYgMzAgNjQgNjMgNjMgMzcgNjEgMzEgMzQgMzEgMzcgMzAgNjMgMzMgMzAgNjEgMzAgMzkgMzIgMzQgNjMgNjMgMzcgMzAgMzggMzYgNjYgMzkgMzcgMzcgMzkgMzMgMzMgMzYgMzAgNjYgNjUgNjQgMzYgMzQgNjQgMzEgMzIgMzAgMzQgMzcgMzcgNjIgMzIgMzEgMzkgMzIgMzIgMzIgMzUgMzAgNjE8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PkRFTEVURQovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjA0WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOgpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz40NCA0NSA0YyA0NSA1NCA0NSAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMCAzNCA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+QkM4M0VBOTcwN0M4MjczQzwvUmVxdWVzdElkPjxIb3N0SWQ+Y0RDS2NqTHVLOTR3YzMwQzZhMUZJT1NVeEU2NmZCU0VvYnZPTFUraERMcysrVTYxVzdoNHZHOVROb01BVDkvemJaT291SFllTGs0PTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "370a802097b7282a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:06 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8ZxqniPr7Y658fbG9TA5EPQNtGcq4fuigoSj2ZVQiWs3JYz6+OX3iXKJbpejCfzVTfBu4dzZ4QU=" ], "X-Amz-Request-Id": [ "E8FF983F324D92A1" ] }, "Body": "" } }, { "ID": "784383dec7e1785e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:05 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "uQgZOFTIng81C73PVDwrJYDyBoJAmlt2eJ00r/Z5uy/V/Tn/VC8nLSId381W0xgzIjIorI56d9A=" ], "X-Amz-Request-Id": [ "7657FB2AB1B2DCB7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1zaWduaW5nPC9LZXk+PFJlcXVlc3RJZD43NjU3RkIyQUIxQjJEQ0I3PC9SZXF1ZXN0SWQ+PEhvc3RJZD51UWdaT0ZUSW5nODFDNzNQVkR3ckpZRHlCb0pBbWx0MmVKMDByL1o1dXkvVi9Ubi9WQzhuTFNJZDM4MVcweGd6SWpJb3JJNTZkOUE9PC9Ib3N0SWQ+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite/000077500000000000000000000000001367004507500242505ustar00rootroot00000000000000ContentType_is_discovered_if_not_provided.replay000066400000000000000000000553721367004507500360330ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPeFAKo5f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "eef6b73974b921ac", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "6354" ], "Content-Md5": [ "D2p8n/PT13C49/oZwq4Z0A==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "354accec7d08850d6f2e6803abecdc0870c3ee9544b6e77ffdae6beafd86a1c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/html", "BodyParts": [ "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "k47u4Tt/3JdT2uSEGdqd6fz3L6AXpTJfZHzp7f1qT5aLQv5Q0Ejka0ip9XXE2LNkRV6nPZLsHFw=" ], "X-Amz-Request-Id": [ "458079BD66E3BA27" ] }, "Body": "" } }, { "ID": "976197690ea8400a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "6354" ], "Content-Type": [ "text/html; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GMWHBHdgeGdx7/bxl+x5KOWPMgykNjqyfQwi52K+ReGZNFU5E1e+n7f/kgdlk1RXWAMpHah+bws=" ], "X-Amz-Request-Id": [ "F413A1304EBE8100" ] }, "Body": "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" } }, { "ID": "d78daea585c52afb", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "6354" ], "Content-Type": [ "text/html; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AHfFoR1kMftwLK4vha/itfFUAp/YsSmAg0KWIJSMBGelkSf2g00VyJbNiU7WsaLmKlOljbNq8Ho=" ], "X-Amz-Request-Id": [ "BA85B532462B4170" ] }, "Body": "" } }, { "ID": "44790e433834ccc3", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "1MZwO3UOcGofr7aRo9535KzEMmJT80sOIrPlOe7I0bzVvQzIZXuX0/PKAV5ZPHtZAwu49JRQBUc=" ], "X-Amz-Request-Id": [ "80DC55F15ADC6A82" ] }, "Body": "" } } ] }Content_md5_did_not_match,_blob_existed.replay000066400000000000000000000143671367004507500352540ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPeMviDjP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e406e96af6b0e713", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "16" ], "Content-Md5": [ "dH9B/ScP7BuCvgMMwc1IAQ==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "131fc6fe7a8464937c72db19863b153ad1ac1b534889ca7dbfc69cfd08088335" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "ZXhpc3RpbmcgY29udGVudA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"747f41fd270fec1b82be030cc1cd4801\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2NVt5R3FwMaHR16UEhDmFOyMixqvldX/i5MDkpLZ680HmnF6mLZZUR1Pr0+KhNDd+aL2CAYpj/o=" ], "X-Amz-Request-Id": [ "83E11BFF676D4314" ] }, "Body": "" } }, { "ID": "bb0a686f838efc8d", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "16" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"747f41fd270fec1b82be030cc1cd4801\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AX/yeWoKVLKXUCxIETk5v6mR42vLjphdXNQ2Zry7MWWn3mZGqQxjfpezrWsnktB/wMNAnZh1ybU=" ], "X-Amz-Request-Id": [ "60C1E278B0FC9A3F" ] }, "Body": "ZXhpc3RpbmcgY29udGVudA==" } }, { "ID": "f7188844a3bdccfe", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "16" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"747f41fd270fec1b82be030cc1cd4801\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/wxYu2kWkX3DPAMkYVuxxBd6uR2rPnVbUo3pTHfAzi9tcmUli7jOFabSLyRCsPEeIjjNWYeLcpc=" ], "X-Amz-Request-Id": [ "35CC697818D5F8E2" ] }, "Body": "" } }, { "ID": "ce9fe042a2d06fd9", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "BcQjkg8QF0I4cMrvFOro7ZYPOuq/m/LPz0AlNgowAGDUb4gAo2pR27gyy2RPCtEC0JI2SMzJQBc=" ], "X-Amz-Request-Id": [ "D0585C4996B8065A" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite/Content_md5_did_not_match.replay000066400000000000000000000046221367004507500325250ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPeMEu6F/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "0dea27bd04022202", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ycOLe/CGirbz1fnrnz5049aKSpUqQWfKkNkizKY6oTo6x6/MV+k8uKXM7GD7+2ieYHhmikxwTf4=" ], "X-Amz-Request-Id": [ "99C240288F57C157" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1yZWFkaW5nPC9LZXk+PFJlcXVlc3RJZD45OUMyNDAyODhGNTdDMTU3PC9SZXF1ZXN0SWQ+PEhvc3RJZD55Y09MZS9DR2lyYnoxZm5ybno1MDQ5YUtTcFVxUVdmS2tOa2l6S1k2b1RvNng2L01WK2s4dUtYTTdHRDcrMmllWUhobWlreHdUZjQ9PC9Ib3N0SWQ+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite/Content_md5_match.replay000066400000000000000000000143471367004507500310320ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPeJ50TcP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "1528277704bc9fc2", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0CrBKbW/PcaQeoODYMYqh0RfopgMv/SEYE3PWYWBMWbfJRhtK2NaJ57jKUMQX4zpfaFQ3ELJt8w=" ], "X-Amz-Request-Id": [ "B12AAEFF512618A8" ] }, "Body": "" } }, { "ID": "d958570b04dbc635", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Zeq9HAS020IEDgdxR8nTNqUrFXdOKTGbQN3lh+gizu83qXUursecfRaRg/43Vuehsb2vnL5AVzQ=" ], "X-Amz-Request-Id": [ "16C46B1AD91EC69F" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "f13140b0547a5f0b", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "vlfKkuohJP46nejkJCIuga1LykgPA3mSMCwJfIphfXcwXm3eQw8UP+W+7wVRU3fFXKgEgl53pbo=" ], "X-Amz-Request-Id": [ "A7F3580ADC33998E" ] }, "Body": "" } }, { "ID": "67fa29570071b609", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0OQlKBBDWWxaXUQf4dCtax7qb/0CgRLzqhLfLGlISusr8SGf+nCKljMiquK4ezpbzM6WOcxGcyQ=" ], "X-Amz-Request-Id": [ "0D65715A642F9B8F" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite/a_large_jpg_file.replay000066400000000000000000003244021367004507500307240ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPfBaKp5v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "8d90ba8b14366fb6", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "38430" ], "Content-Md5": [ "YtQ/og5wv6H9siUQ0cBg0g==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "3b38fbf9a6c411c2094468b6eaaa30d8d860e11bd7a8457b5e13428023d9445b" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "image/jpeg", "BodyParts": [ "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Klntn2e0pg6CM+/oEJTduVxxHh8RGX7bydBsMynwmXZ04Gv5nTn0hU1i3ejU6qrqChWOaqSdkc4=" ], "X-Amz-Request-Id": [ "20182987B4D3DFDE" ] }, "Body": "" } }, { "ID": "2c4a1cb70683e735", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8Srl2OyGgDnwvKEsfknDXMZ24Gkonlvd0+/Fut5yrQPyivhW9Ky2mI8pRg1Bb612S5QxPr3XM1M=" ], "X-Amz-Request-Id": [ "F37D2007EEF0ADB5" ] }, "Body": "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" } }, { "ID": "2c8b8789e24a91a6", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8cCmxQBqO0ZL5ezyE8Np+yI6Kl5I+eZqGOTjWq7JpxVfasNKoWeH6/2oE6/v6wYI78TNzvT3j1Y=" ], "X-Amz-Request-Id": [ "A3437F15D29A908A" ] }, "Body": "" } }, { "ID": "a7f01e2b30fe0bd0", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "M51ro9iIMhy13ZeeOTq5oYcihk8wB0QgGEDj/slb+NILQ7BA3cr+60eFW46D+9HK3T2OAAMHUN0=" ], "X-Amz-Request-Id": [ "D99F39FCC46CC953" ] }, "Body": "" } } ] }a_large_jpg_file_written_in_two_chunks.replay000066400000000000000000003244021367004507500353530ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPfECVy5P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "ac95b60be0acac92", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "38430" ], "Content-Md5": [ "YtQ/og5wv6H9siUQ0cBg0g==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "3b38fbf9a6c411c2094468b6eaaa30d8d860e11bd7a8457b5e13428023d9445b" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "image/jpeg", "BodyParts": [ "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ClglkyEHWmmxxToe+dO7Ha7OIo41Az1urp9U2URHftyqdx4sN5yU3txbwcWA+4Js4AYqcRUgFFY=" ], "X-Amz-Request-Id": [ "235000F664149821" ] }, "Body": "" } }, { "ID": "4f7b71c9fad63e36", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "cxJRnh8JY5wfLtsAyc46wkUG6aY6fF+orw6vbo60k3XWGgcSQIstwFqbYWPMEEWmPt3QsNNZ6lU=" ], "X-Amz-Request-Id": [ "A80F7136AC390D88" ] }, "Body": "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" } }, { "ID": "4fe460d473f11fc2", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "dSpH3xrL5+GrUeuddtZxRBo5Yr670qLuyRP830RZ9jTZQ2EVZfz7km4lZc0f4JTX8BDsWA+0UZE=" ], "X-Amz-Request-Id": [ "E1D2564D7B81F7E5" ] }, "Body": "" } }, { "ID": "17213b246cbd915c", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hRP/VkC2bGwpUqO61luHbys/9PdJbqlxdoZBkeunri5noV64D4gHTNQ9kdDqyenfc1xp+/dPmMw=" ], "X-Amz-Request-Id": [ "412B1083FBEF5FC9" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite/a_small_text_file.replay000066400000000000000000000143771367004507500311550ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPeOf0Vwf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "f4cf18e236baf52f", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "20" ], "Content-Md5": [ "PzMJMSzDJkoTibLSY97OjQ==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "9be104294df7d5a59c328241d49ac062e2c7b9660636e7f511e3a1dc3d919377" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "VGhpcyBpcyBhIHRleHQgZmlsZS4=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"3f3309312cc3264a1389b2d263dece8d\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "V5EvQQ5OeAkS3KtO1+uNtHRhVrDo5iUWuzSX8ZwDj+Oh+VCEa4+pKuAKa+8w4lkusWivZLsiePg=" ], "X-Amz-Request-Id": [ "02D3367AD2CE10C6" ] }, "Body": "" } }, { "ID": "c504f3de4b30fa90", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "20" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"3f3309312cc3264a1389b2d263dece8d\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2amVU+tGFYg6UvINp7b1xCdU4V20O9Gys0tff6rlbfpgqvf1YQuD8tp6jub9uQJ4+mycy2CmIM8=" ], "X-Amz-Request-Id": [ "A21AC4CF5BCEF6AE" ] }, "Body": "VGhpcyBpcyBhIHRleHQgZmlsZS4=" } }, { "ID": "e700783f0dbeaa23", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "20" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Etag": [ "\"3f3309312cc3264a1389b2d263dece8d\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "V3NlX4MGCDY2I4nT7CRe4Jw58tbRezWOVsDhZrCecHa/s+mC9dugicAHy8CGhH8oH0CQSXKxNpY=" ], "X-Amz-Request-Id": [ "35426C0A44FCC528" ] }, "Body": "" } }, { "ID": "748c6730a6c4123a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:00 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "thCVXos/BLa2Puofr/xFX8h4Nce/A4LIERGZBqKUPiv1nAG/QyzRvEwslBa7lTnGfgTauntBzw8=" ], "X-Amz-Request-Id": [ "3E710FCA792FB1A1" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite/invalid_ContentType_fails.replay000066400000000000000000000046221367004507500326320ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPeEPzRWf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "086a815888a63dfd", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8Tay2qArHqVVbiO3434UWUBQxebksrKEMDiL2fIGISPPd9YMfkeTK2P2VvAHXnSN9ALz6Js8rUc=" ], "X-Amz-Request-Id": [ "48E418AB7AE7908D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1yZWFkaW5nPC9LZXk+PFJlcXVlc3RJZD40OEU0MThBQjdBRTc5MDhEPC9SZXF1ZXN0SWQ+PEhvc3RJZD44VGF5MnFBckhxVlZiaU8zNDM0VVdVQlF4ZWJrc3JLRU1EaUwyZklHSVNQUGQ5WU1ma2VUSzJQMlZ2QUhYblNOOUFMejZKczhyVWM9PC9Ib3N0SWQ+PC9FcnJvcj4=" } } ] }no_write_then_close_results_in_empty_blob,_blob_existed.replay000066400000000000000000000143041367004507500407240ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPeBS5Pcf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "6259756914364b58", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "Content-Md5": [ "1B2M2Y8AsgTpgAmY7PhCfg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "45k2Q5Sr6x2/5u9m2aZCCJmumbdMMvVdZcWChKH3h3WM+xmXwlUEG9uNPIB3c1sgR9TZNvseDEg=" ], "X-Amz-Request-Id": [ "CE0156E80DD994DE" ] }, "Body": "" } }, { "ID": "22942a07002a0e1c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "P2GNs8iWn3MAIwlPJr02ojDQtDQ5dxRU3ujNZrJcqq/8WmzzoPepfVv1M4Yg1jxkxrMQ7l51MOo=" ], "X-Amz-Request-Id": [ "C32DBCFB1D12C604" ] }, "Body": "" } }, { "ID": "a354a6903a706b23", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "k2N+T4CZwv/MTXm1NDob7qo7j93UwiR/+jViQUVTUiVp3hytB8hiUruhiAKZfoWiq6elvuUF994=" ], "X-Amz-Request-Id": [ "9F96470DB650C82A" ] }, "Body": "" } }, { "ID": "c9a3f5403d426897", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "FAK8dsiwBXZ6OqO54I/D6Ji2mcSfI2zPxF3OtHgHq927KPAyU8Z3gC/5dbK8Ur7V5GyWRswhDcs=" ], "X-Amz-Request-Id": [ "57EB9C02444EA7B8" ] }, "Body": "" } } ] }no_write_then_close_results_in_empty_blob.replay000066400000000000000000000143041367004507500361250ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPdNwun/f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "29285e8eaf5c7ad7", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "Content-Md5": [ "1B2M2Y8AsgTpgAmY7PhCfg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "M8Z14XL7GPqNwBwFYB697ygThlLGsLd8YNsdjnbvyA7LR1q0gn0uQx0TQFNVWSfTPyCSimv0pwA=" ], "X-Amz-Request-Id": [ "24AA6770C979AB28" ] }, "Body": "" } }, { "ID": "fa0897e4b8bad75e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7A1g1LKJ8Dzxx+pif/+gsdPXKAllQpUNwhpLYzO/9iuV+SkRDGN7RJUE8VR0IyOQww0g/9I3Tec=" ], "X-Amz-Request-Id": [ "0B7942EEF095FB3D" ] }, "Body": "" } }, { "ID": "fefcc6c1e0f5766b", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:58 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Op7En5uwIRcs4sBSo9p34Yem0XtpX3mt0nqlxK+9tBxAz/Um5S6nAwp2QxwMiQyILLrQ/01uPvQ=" ], "X-Amz-Request-Id": [ "45F515637034FCA9" ] }, "Body": "" } }, { "ID": "0b1521b8e1d8ccbc", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VTUROCLiwAhqSFJAxQKNgBOslrBpkUzJOektz/Xik0SqFDP/op9Rf4esnQ8elNQfN1v/y87iT8w=" ], "X-Amz-Request-Id": [ "102CFC3D88716325" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite/write_to_empty_key_fails.replay000066400000000000000000000015501367004507500325670ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPdNsZKpf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }write_with_explicit_ContentType_overrides_discovery.replay000066400000000000000000000553611367004507500402140ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformance/TestWrite{ "Initial": "AQAAAA7WcSPeHKXOVf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "aa28713aefeff882", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "6354" ], "Content-Md5": [ "D2p8n/PT13C49/oZwq4Z0A==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "354accec7d08850d6f2e6803abecdc0870c3ee9544b6e77ffdae6beafd86a1c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "yR/ODscldCN8QyvaHOSAt5LNryGbCxCRDcOSIuyrsgnAQ5m5x7+UyxaL2LPKfQY6+FAjdnfh/as=" ], "X-Amz-Request-Id": [ "C571E9ABBCEDD9D5" ] }, "Body": "" } }, { "ID": "c2600d09326f44e0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "6354" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "l0FSYjxnNaEuVgcgtGyd40iQclj82rhkGJHtQ/Cf/LT+PMZiH/D/zxBljC9b0UJLJZXgrYr7k3U=" ], "X-Amz-Request-Id": [ "83374458D0A0B97E" ] }, "Body": "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" } }, { "ID": "d1b5e64f4e5f87fb", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "6354" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rIVJKncVXClYNuODtuMXieYVH278040MdUsIA7G9Y0Qrx67USVNa9bRQXgrwEd5Y027oysv6X1c=" ], "X-Amz-Request-Id": [ "DFC86E8432999AEA" ] }, "Body": "" } }, { "ID": "810f4c69ff9e8f41", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:31:59 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "mzp5NyjZY8Duoev9FLnWKD35H4E+3AAPVlLdC5KgGG2eanx0dbUVvYHcAKEWjEJueCiMC0QMY8Y=" ], "X-Amz-Request-Id": [ "939F6E0C7845B266" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/000077500000000000000000000000001367004507500253055ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestAs/000077500000000000000000000000001367004507500265105ustar00rootroot00000000000000verify_As_returns_false_when_passed_nil.replay000066400000000000000000000420761367004507500377650ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestAs{ "Initial": "AQAAAA7WcSPyLLsEcf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "81b9659dfa289432", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "RN4Hz7gAHqvsVTsBwlWIWdFob3EaShyVKlyi0daXmNQmrbhm2vf5Ckp9PFILeXxOPU7BHfhMtMw=" ], "X-Amz-Request-Id": [ "A121BFEA179B7F8F" ] }, "Body": "" } }, { "ID": "4c531d41fb7243c2", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NMDKbtuFsCWrwlzyevv8/+1LtbtDQO0YFGqtODOwcWXMIDHi/DBzZuPTa/xOpNOKdpKTRBT6oR8=" ], "X-Amz-Request-Id": [ "18F7E15967AEF06D" ] }, "Body": "" } }, { "ID": "504a3c43593bdb10", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "c8Rqbj7MglFdijZbHV1kX8pocfbjQpTvn4zScjceAzwaNkb++5ri5NRaU3FjxJ3yxByCneYf1VA=" ], "X-Amz-Request-Id": [ "8411D7B7274D2CF6" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "0d54e1a144949410", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026max-keys=1000\u0026prefix=mydir", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "eUNCm0DWiZYpIPYPCWu+U+QbhdrmiKjlqvkdGMMmm1PX8l/fCehqS0+DSDVtHXxyGrSO4dIWz3A=" ], "X-Amz-Request-Id": [ "298297E68E252EC0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm15ZGlyPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+bXlkaXIvPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "6eb97d8308477141", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=mydir%2Fas-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "2ywrDEUoOkFYWG8bUWjhB1d0GRl98SoumaRAlGq749tYtxFGFohRpdOad6+aQF6U9BAqCsoj0Do=" ], "X-Amz-Request-Id": [ "10EEBBD13B77E260" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm15ZGlyL2FzLXRlc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5teWRpci9hcy10ZXN0PC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjE5LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMyZxdW90OzwvRVRhZz48U2l6ZT4xMTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "914461464a78f02d", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "iqXoypvs61tRTcIsECBDBeXDSvLpwk9WTpX6f/qtgpU1gB6jCxRsCwzwbqOgTKn22U4ZTF5+oqU=" ], "X-Amz-Request-Id": [ "DCB1BE8AB8795B1A" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5rZXktZG9lcy1ub3QtZXhpc3Q8L0tleT48UmVxdWVzdElkPkRDQjFCRThBQjg3OTVCMUE8L1JlcXVlc3RJZD48SG9zdElkPmlxWG95cHZzNjF0UlRjSXNFQ0JEQmVYRFN2THB3azlXVHBYNmYvcXRncFUxZ0I2akN4UnNDd3p3YnFPZ1RLbjIyVTRaVEY1K29xVT08L0hvc3RJZD48L0Vycm9yPg==" } }, { "ID": "b9d1aa83b310ba96", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/mydir/as-test" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "234" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:20 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NmqPmIxinFi+o+R8XjxVnGreMlVIOXnN97CtYrKrpjy7Q0+1KHZXuVF75HLxkN8X28sqFTv9cto=" ], "X-Amz-Request-Id": [ "BAF1695E44D4CA44" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENvcHlPYmplY3RSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjIwLjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMyZxdW90OzwvRVRhZz48L0NvcHlPYmplY3RSZXN1bHQ+" } }, { "ID": "ac01fcad4ce9cec6", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:20 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:20 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Dujg/+Ti25iqnfuHdJmPKbh0QeTPFbd7H65hW5q6cOBZIkWblx8c01NkuEcnoLthdT2PbcG35+k=" ], "X-Amz-Request-Id": [ "D789688C02C89B80" ] }, "Body": "" } }, { "ID": "63bb6da08c85e78b", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:20 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "b5ei0pDtp38wzCfp92P3k7Gaz4HA9ofbCqa4OTNOV1G/B2WZC6AwmhaX++IJNPa5dKIf6iizIgc=" ], "X-Amz-Request-Id": [ "D47DD90B101CA9B5" ] }, "Body": "" } }, { "ID": "d6d026ee283840ba", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:20 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "vb0hh/x2sZZbSawwI/k6HqSf0YPTjMzPh9IOqSWV8yq05TOUEj7qWxgP078lZakjEn9gm006icc=" ], "X-Amz-Request-Id": [ "F3545FD1D4DF253B" ] }, "Body": "" } }, { "ID": "3c8d62b058f6b9aa", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:20 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sDFW2vFOjvUBWppFWtNUXRCVNFQApD+YIP+CcfHzINVrccdnEkgYNF1NAZzyR5SDGsyEm6PEOoE=" ], "X-Amz-Request-Id": [ "DAA5CA190E8B8BD2" ] }, "Body": "" } } ] }verify_ContentLanguage_can_be_written_and_read_through_As.replay000066400000000000000000000425641367004507500433670ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestAs{ "Initial": "AQAAAA7WcSPyBuASL/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "c9ebd22664236431", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xC5YS/Xp2UkKqF5APKfvPAujCHKa+btXzkGUE4Xav1Jqs4jhLHHhijjZyOOcI/yJcpOigOI/LMw=" ], "X-Amz-Request-Id": [ "F8B8EA00B8340F24" ] }, "Body": "" } }, { "ID": "196ae551ab5684b5", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6DXprrC11jtppnlfEI67bbYvLg/YmFhExzQz5n+JtiYABgCXaTP5FueE6GonVgm/buvwePTIJsI=" ], "X-Amz-Request-Id": [ "B62F47FEAF98754D" ] }, "Body": "" } }, { "ID": "bed4cd302f13b7ca", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6b62qTyQmEpFi8iS+ujV+q7QaFrBQhcGf9Vz7m6m7UGQapF8L1Ncq2aXEWj1RtJVvHu780UFCQ0=" ], "X-Amz-Request-Id": [ "E567B38B5098CDE3" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "5cd79d663bd98da2", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026max-keys=1000\u0026prefix=mydir", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "pIYEjvUYWPG9duVnAoDg3dCiG8ZtHW1j0/QwIgWKnVHqqOKOmEIO2MQpOSV12jA3JkAs3h+T84g=" ], "X-Amz-Request-Id": [ "36C24F55D1873408" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm15ZGlyPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+bXlkaXIvPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "f9df3b61ba9d5c19", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=mydir%2Fas-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "VfNwrBXiF2668tThKlSCGmHfQt570MNnsnhWtiT/vAlESfpygDlsxnrJLPV4wVaJ9lP0cqYmvbk=" ], "X-Amz-Request-Id": [ "F7D1D21F0078698C" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm15ZGlyL2FzLXRlc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5teWRpci9hcy10ZXN0PC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjE5LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMyZxdW90OzwvRVRhZz48U2l6ZT4xMTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "05dea62834ea4f2f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "D+f7D7rY6RKzrz6lRkIzekNCrdPJrDbMxvq3iszogYdaxnbXloe5eIwO7004/iMRwkSH9Y+u0fk=" ], "X-Amz-Request-Id": [ "2E8B5C386A7C87BB" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5rZXktZG9lcy1ub3QtZXhpc3Q8L0tleT48UmVxdWVzdElkPjJFOEI1QzM4NkE3Qzg3QkI8L1JlcXVlc3RJZD48SG9zdElkPkQrZjdEN3JZNlJLenJ6NmxSa0l6ZWtOQ3JkUEpyRGJNeHZxM2lzem9nWWRheG5iWGxvZTVlSXdPNzAwNC9pTVJ3a1NIOVkrdTBmaz08L0hvc3RJZD48L0Vycm9yPg==" } }, { "ID": "df7deebdb01cef74", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/mydir/as-test" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "234" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "WKorrulYF49SI+XzGq4dl9/vCo+44WK48O9KE0nNdTEiXiHMvXSDZ6jG0+ppDCOR6il3LAImMYI=" ], "X-Amz-Request-Id": [ "E5F0785868BA3BF8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENvcHlPYmplY3RSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjE5LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMyZxdW90OzwvRVRhZz48L0NvcHlPYmplY3RSZXN1bHQ+" } }, { "ID": "d52a450912258123", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "fhBNoRAkwfW4OoUA/xSc5LiXWlY8xYrgk6ymN0oH33rWvDeo0Walc2x0AP2zKEslRGe+3N5NAPQ=" ], "X-Amz-Request-Id": [ "1A17744BD4AD6A6E" ] }, "Body": "" } }, { "ID": "f05cbe77479ab1d5", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test-copy", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "z0igH2NOR2m0TsDdl9FqLWAhunup55aFURMtF8mslNZEq6wOMYFgnxT+H+gGhYFkScX2xh/d/CY=" ], "X-Amz-Request-Id": [ "7F13595C141471F8" ] }, "Body": "" } }, { "ID": "992b97611f9d9e44", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Language": [ "nl" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "g2Xw8Jo14SgzXiotL7f66yc4RvWM978Tppmsqox1SKCNYjSY7Qu/uLn/5x87Lc4sqM4Qj/sxqow=" ], "X-Amz-Request-Id": [ "3CD3151385D3ABC4" ] }, "Body": "" } }, { "ID": "837f3c974504e3ce", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/mydir/as-test", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "p/Iy4WzNPfOHbXWzkfS+GD7NvgV2rlrwz8hayGOy/m+zD/T4w30yRm8q+Iz5OspmbD3E5HEQjI4=" ], "X-Amz-Request-Id": [ "ECB4D6E3FC550399" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestAttributes.replay000066400000000000000000000350451367004507500315200ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPqCDTicP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d8810fb7d518107d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQh" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GoYZmBHhFcND5kvt1HMUK1acPd2JU73le60C0MOrb7Mg1ri4sbmRo/gUc4Uo8+BeAAkv90Lz2qc=" ], "X-Amz-Request-Id": [ "1752515394471750" ] }, "Body": "" } }, { "ID": "41886c6fd397c4b3", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/not-found", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "vhm3K8alZxSKcOnGxQAOj6vMsVTAWNn3Vjl0bswD6qQQ/RgGtssNLp2gd44NXFmrkRnPk/dKnSY=" ], "X-Amz-Request-Id": [ "53A66A597BB5BCA5" ] }, "Body": "" } }, { "ID": "792db7492b8fd2a2", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/NcVeZ344oUcL/CMEWdLB84cTq3Av/tC3K6PjMI0WEXMZ03ahnVh+Mmx5OpbVZIZ8mHCc6xP/Io=" ], "X-Amz-Request-Id": [ "F0A7B4F19A1D8444" ] }, "Body": "" } }, { "ID": "0ec1693681b4b032", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ytsIuxQs4Cj6vV2PG2dccfVhfffj2gVAvWsMvyf1ynP67OrqK2WRuKZdGO+pv0M8l1votm6liL8=" ], "X-Amz-Request-Id": [ "8F1AE64BA828A5EC" ] }, "Body": "" } }, { "ID": "4541dbb4a0a2e190", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TRD55x57BZX8qDKxAojRGrFka0bsM8nWXJJ/89VOxftqph+pBnNZmR2DFfG0TTWwAl1WJjkLfrU=" ], "X-Amz-Request-Id": [ "F04E2DF90AD94200" ] }, "Body": "" } }, { "ID": "7cef3781ce7d9bb2", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "SWi50hiQ6Wb9TA2/cjXQd4u602MOyggBDROSi0+l/+4lwndKUnUzqJCp8gpGbpPcIoGqZUQzPkM=" ], "X-Amz-Request-Id": [ "914CA1D49D2200A8" ] }, "Body": "SGVsbG8gV29ybGQh" } }, { "ID": "50c5fc1e33c8b1c8", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "12" ], "Content-Md5": [ "7Qdih1MuhjZehB6Sv8UNjA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQh" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YiAYmS+IJ9KjR86FN6ElbDAq6jgyAxrd0Re0aAK7jv8422eYlOG0XUAyR2MRLHxT/S3/ADQRG88=" ], "X-Amz-Request-Id": [ "014040EA0290CA91" ] }, "Body": "" } }, { "ID": "d1c4fa57bff6d5ff", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JoiuSK5jMbQN9o2nZ3eytBa3QWlWv4P4t0/iEl7PbIBecdCCiYaJqC7SLUrqn1dFPq0h3OD+MM8=" ], "X-Amz-Request-Id": [ "72E47807F9CB4835" ] }, "Body": "" } }, { "ID": "3193b20e9233f0bd", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "12" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"ed076287532e86365e841e92bfc50d8c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YvdZCO2qm6IgNmAsCZtWttbx6wwvK+kpkn2wImLukTYCPqIb7zRaSYcX/D931KRxwEBEjhA68Zo=" ], "X-Amz-Request-Id": [ "1E2AF2F598CDA4B3" ] }, "Body": "" } }, { "ID": "ec607f47597e8da5", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/someDir/blob-for-attributes", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "tAhWG8hPnZCLvlzLceK9Rop08MV/lIeueJYZh3nZT+hwvTAuePoVSrh9Z1ypsA1bwmD+xIuaT7w=" ], "X-Amz-Request-Id": [ "69A24943FF40CAE2" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestCanceledWrite/000077500000000000000000000000001367004507500306565ustar00rootroot00000000000000BlobExists.replay000066400000000000000000000173621367004507500341040ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestCanceledWrite{ "Initial": "AQAAAA7WcSPsAvR6p/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "82630e7a8a37214d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "dkK1RMJuNV+5daIexBpA+nNECeA9myei3/51HegJ8r5bBmX2B+XGvft4ycu8159J6wC44GZ563o=" ], "X-Amz-Request-Id": [ "14BF4DFFC03DDA1A" ] }, "Body": "" } }, { "ID": "6dc1e719ad4f01ee", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TEeQFdk+VZifJj5y2jk36H3zt9ZGLiQO35Ggah2Co/x2aBtE3mzFJ13X3DhqRPKbQCZ8k9NR554=" ], "X-Amz-Request-Id": [ "55054EFE4E40ACD5" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "bd0d3500b04b954a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "+Kri5EcLDq/jnreFUZGWn3/XOucIfdm1ZSy0sTXyC5EscvnU6VoRzH4XgFQ7dl0G0TQaxN38utc=" ], "X-Amz-Request-Id": [ "25C23A39C24AD7EB" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "393063b0504cee4d", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "bhdKH31yhYHwL5fvxfhTIsrknNBBKdY8szT/mKOlrG3y0aFgVZAsLG7rmNl249mOmJr/VJXcjbg=" ], "X-Amz-Request-Id": [ "15E1ED4E2122F90E" ] }, "Body": "" } }, { "ID": "04764676865dacb6", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NKt32crDPrVL1MeOLdxDKxg2szU8q0Wpt0bwyiursuI/pNmUgDxUwnp1I52NR+rideJ5vdIhIYs=" ], "X-Amz-Request-Id": [ "764AA6B5810F14F0" ] }, "Body": "" } } ] }EmptyContentType.replay000066400000000000000000000077321367004507500353210ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestCanceledWrite{ "Initial": "AQAAAA7WcSPrNr2YOP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "0ae5a1fd5503f0d0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4YZzV9d2TxR/78IKyL9Ob7kt8C8lPiDiqclfD0V4WNaqBImsNLv2wOA/EMmujVbEPZzSq7kLKLg=" ], "X-Amz-Request-Id": [ "38013C1AECD46526" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvS2V5PjxSZXF1ZXN0SWQ+MzgwMTNDMUFFQ0Q0NjUyNjwvUmVxdWVzdElkPjxIb3N0SWQ+NFlaelY5ZDJUeFIvNzhJS3lMOU9iN2t0OEM4bFBpRGlxY2xmRDBWNFdOYXFCSW1zTkx2MndPQS9FTW11alZiRVBaelNxN2tMS0xnPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "168777861be0cd58", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Fm9E04Vv26rkupXDq4zgyC0h/B2tjM428L6Dd9G0utrz9unanAeySmMd17kfRvnD0jFTGEXbj9Y=" ], "X-Amz-Request-Id": [ "0A2B8292E073DF65" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvS2V5PjxSZXF1ZXN0SWQ+MEEyQjgyOTJFMDczREY2NTwvUmVxdWVzdElkPjxIb3N0SWQ+Rm05RTA0VnYyNnJrdXBYRHE0emd5QzBoL0IydGpNNDI4TDZEZDlHMHV0cno5dW5hbkFleVNtTWQxN2tmUnZuRDBqRlRHRVhiajlZPTwvSG9zdElkPjwvRXJyb3I+" } } ] }NonEmptyContentType.replay000066400000000000000000000077321367004507500357740ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestCanceledWrite{ "Initial": "AQAAAA7WcSPrOrnBTf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "581b6c3aeb5bb75c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "BNl5hNXF/Wby9NAJmtnpnGeIz5PQ/m/Fet32DkAJAVd9ayO+TH/+zDOKfSGoi1UnJjJ1durLxUA=" ], "X-Amz-Request-Id": [ "08F012AA188AED42" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvS2V5PjxSZXF1ZXN0SWQ+MDhGMDEyQUExODhBRUQ0MjwvUmVxdWVzdElkPjxIb3N0SWQ+Qk5sNWhOWEYvV2J5OU5BSm10bnBuR2VJejVQUS9tL0ZldDMyRGtBSkFWZDlheU8rVEgvK3pET0tmU0dvaTFVbkpqSjFkdXJMeFVBPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "616d78d7c3e3d267", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-canceled-write", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Jdx09QS8cn/yrDCxpK4nkCzPVhYJxvJ5RdJhif9h/ArUpX1OlKtGGAl+8xFfoZDFNap1iUgjHfE=" ], "X-Amz-Request-Id": [ "DFFC5525D1486E78" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1jYW5jZWxlZC13cml0ZTwvS2V5PjxSZXF1ZXN0SWQ+REZGQzU1MjVEMTQ4NkU3ODwvUmVxdWVzdElkPjxIb3N0SWQ+SmR4MDlRUzhjbi95ckRDeHBLNG5rQ3pQVmhZSnh2SjVSZEpoaWY5aC9BclVwWDFPbEt0R0dBbCs4eEZmb1pERk5hcDFpVWdqSGZFPTwvSG9zdElkPjwvRXJyb3I+" } } ] }TestConcurrentWriteAndRead.replay000066400000000000000000012010641367004507500336640ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList{ "Initial": "AQAAAA7WcSPsCcYUZ/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "aeff6afa890f04f4", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key16", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "65n9CjdrJkNQEaG4fFWMgQ==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "a1d8e952ebca8e3b696a08bf238740eb415de106914f978637e097a0d785cdb7" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"eb99fd0a376b26435011a1b87c558c81\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "v2pq9D2h2HaKGaQdYi4jY0gWJHcYHKX2Jbulfi6BgBybWev55b4G0O3F2fyxLr8VTILFfu4cJOs=" ], "X-Amz-Request-Id": [ "BD1CA6C0D71759AD" ] }, "Body": "" } }, { "ID": "81c5c8e81b713a6a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key6", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "lko2uDqoJrgEyYNnvcJ6vw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "300149a02cb87df26610b2e874637411f567bba9b586c90f47dc126ff203c0e8" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"964a36b83aa826b804c98367bdc27abf\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4MVfP9TVZnDax70WyPTRngn0W1zqrjQCd0DEJOWzpp2ImDwTkAFy2OBwkNgoVou94f1tBeq5FjA=" ], "X-Amz-Request-Id": [ "DA9F9BD8D2F9EAFA" ] }, "Body": "" } }, { "ID": "b2d349a601c93bae", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key3", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "7tBPOyKIo0omYOmbN3Ht7w==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "4539cc1fbc3c22bb131672c62f20ff87f3f587ba2d3d4c5b161c271c98c07b38" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"eed04f3b2288a34a2660e99b3771edef\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "o+Ijr6tKRiWyHxUPUgG2z8U8EMIYoCgZH48ApgiX9bBYF08txDc5ugsLOfQsOlnXOXHIodszDsI=" ], "X-Amz-Request-Id": [ "AF7B6A4DED9DF049" ] }, "Body": "" } }, { "ID": "6d3d3ea72da5db4b", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key4", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "H06jyF3ZsJDOcwyB5gg+zw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "39c080da1146fced48615c5577196a128f716fdb0ff952a615c0707989574eb3" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"1f4ea3c85dd9b090ce730c81e6083ecf\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TSOJfZD5YGjJaCASrLBcdDW1pZIjA8ucufQngfct418R8/d8I+7qwGHGrjWlONixYTQIxERDgMw=" ], "X-Amz-Request-Id": [ "D809062CE8A7C8A7" ] }, "Body": "" } }, { "ID": "2da5e2e1f3dfa16b", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key14", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "NlFDUFM0TpF1S+MXE1PxDg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "eb12cdd03f846d40900de0534e04edd3fe464839bc40784678fa08f2f64da068" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"3651435053344e91754be3171353f10e\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "OwzH+nfgcD3AfM9pM05j7MPeIVA9YFrh60PiD1OswTsYsPPuWlRhV9hGF9cjP7DGmgCs8baAjDQ=" ], "X-Amz-Request-Id": [ "3D195B81A5A3EE1E" ] }, "Body": "" } }, { "ID": "a73526b3a63fc042", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key15", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qHqy3TOCPLWABZ/YTEeiAg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "a17f54b1452b2bda077b58ad5cec2b49764dddf1b09c9b345475ac603c514cf7" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"a87ab2dd33823cb580059fd84c47a202\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Ft3n/3OE9Uzrc4SBNqB7Ns/MQ5+jkVq5UnPu4txq2QOj/C+bAIJdlQeiaJ9TXWiZ1vX6B4s/Su0=" ], "X-Amz-Request-Id": [ "2117E5BB5881D35F" ] }, "Body": "" } }, { "ID": "230a06f60a50c5ea", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "Yg8LZ6kff3QVG8W+dFtxEA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"620f0b67a91f7f74151bc5be745b7110\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0GNcN3iezbEGLKyaF0cXPT2TFs2ZIf/k3rOZsO6swFErNj1w9zRJDbpk/55PhQWwQtpzkXAKTEs=" ], "X-Amz-Request-Id": [ "AA67A09949FC51CD" ] }, "Body": "" } }, { "ID": "0f3bb73b0de28b27", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key11", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "AbDmWR96f1VIFnW4JQ5/SA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "3deff1bf6e362c3ab528926550faccbdca220dbb124fa28d88daa694072d165f" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"01b0e6591f7a7f55481675b8250e7f48\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "IQemUgHyooLW4IpjVwPc+skuGjMx1qSPYhA/hychuWyINta7TihkaUyJqYL/q7gNAd6+vYlmX8s=" ], "X-Amz-Request-Id": [ "1AD590AB11161A1E" ] }, "Body": "" } }, { "ID": "2b7c567788e5e948", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key17", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "32eeXsj7ZyhCl0o20wPQ/w==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "c663cfac30430ae0063ef566967a3309489f9a0b6f74b6feefd93f163a593bc4" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"df679e5ec8fb672842974a36d303d0ff\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "93pNz48JLTXCNeTMurzHN7my8iTxn2ZkI1DtCSdP2UHkTqRqpPckxF3yVFWWSeka1INerIg+k6w=" ], "X-Amz-Request-Id": [ "FE3E92F4AFADA22A" ] }, "Body": "" } }, { "ID": "4dd68aa4f8c9aa34", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key1", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qo85ln3rRBpudISWOUWpYA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "3431383721510cf1c211de027cf958c183e16db5fabb6b230eb284c85e196aa9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"aa8f39967deb441a6e7484963945a960\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "J2LYw+9gdYQjLUOwtWpuZXwsNMLLmhx3HkBETgemdeBrS+NBokBZTdHIuEeCKZtmWiVd6MOBEwg=" ], "X-Amz-Request-Id": [ "58B0C20CD59FB0FF" ] }, "Body": "" } }, { "ID": "f23db28547ff5337", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key2", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "ZUHn/UhoC5tg7AVev6McAg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "30d6bc164ea54188aa9df0c14f20c4fbc8a155c5644bcc9ef9eb05901cb07d70" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"6541e7fd48680b9b60ec055ebfa31c02\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "cUJRHqYP3o5pTN7FvLOlIT9+S9o5b6UV7BZK0x9bG+51ue3EsGOPlqby6OGasnlh1f0LUB81358=" ], "X-Amz-Request-Id": [ "DF0B8F3629C6AAE2" ] }, "Body": "" } }, { "ID": "daede5f6511fc6cf", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key13", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "SsTzFZ3m7R1NrIc42UKW+Q==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "ab3072409797eddf337b34f4c0e68c55c5d358b1b939031879f8d8b4922865cf" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"4ac4f3159de6ed1d4dac8738d94296f9\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4eB9/N9ynWVV503VFRhhi6NXVe06z3jmEsM1vWPctC/hvg4Gkv8w1xFChU6nen0BS0NfNkj+bzk=" ], "X-Amz-Request-Id": [ "CCA6B2D06F35546B" ] }, "Body": "" } }, { "ID": "6eb5f0ad694b14fb", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key7", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "kbuiTp5JEugjwAkgztPoXA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "c9ac7b0624824f844f6c7f3d50fab9741a8914e878467e8daaedca143a34d90b" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"91bba24e9e4912e823c00920ced3e85c\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "PUcQkNQPUqrHvfkm46vVCMQvLqQZlXVKBDgyCyqxCmixycREqRYY3Dl2LQl2c8gq/Nsix6azxeE=" ], "X-Amz-Request-Id": [ "11813FFFF162A0CE" ] }, "Body": "" } }, { "ID": "dad26cce63554d64", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key10", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "AXKK1JVcZ791KxchIXYNNg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "40bcea1a7a15701f47850819f064c5ea097d5ac9dce7a3861036b302ff82cc41" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"01728ad4955c67bf752b172121760d36\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "mandTceZJT94DjFdggen817Ya4Ggjjbnbi/dxV35Qq7TBqB7Yjkh/veZL73mPDQwnIDpmRYOcLo=" ], "X-Amz-Request-Id": [ "D11B2085CB966716" ] }, "Body": "" } }, { "ID": "0335946ae95b3f6d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key8", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "qPZPE0uAGBNKE6LhEQTA8Q==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "1e640ad0fd3b249a835edf54dd802b9a4be0b093b17db2c60be2dd9c6b6c6ebf" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"a8f64f134b8018134a13a2e11104c0f1\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "zQJ49u+NjsUzh7rEVhfDvtvTJ/AFzATUKpVQ7rHQqL1L8MgkMrhHy/hcXB92mobzLtIpgOdTH38=" ], "X-Amz-Request-Id": [ "576FDB48D10B703D" ] }, "Body": "" } }, { "ID": "7af91dcddde318f1", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key12", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "VkGQ+3LJseHAFopbb+BYvg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "c150fdde6caca7012e0b945b0917146ec19da5d03e9ca14685b66e4c8190f1b3" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"564190fb72c9b1e1c0168a5b6fe058be\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XYv724RGbL+mL+n5E4wzdJeBq7yPHwLjpBSQxqZ87Co63CtJDMruCZZFK9WrMO9e4tYRR1sjC+c=" ], "X-Amz-Request-Id": [ "A1B2FE0A9300E30B" ] }, "Body": "" } }, { "ID": "9f7d593f7e1e25bb", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key5", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "YfRaKQkG0Wv1UeeMsD1f+Q==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "fb7363f1f02c2f244c32aa8076ef7edbc2e621137542836adc1e312143968d75" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"61f45a290906d16bf551e78cb03d5ff9\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "oZqwiAw+IfoexsFpgHcltrKPV6Y9Rlr2ftlBvgXLX+Q3ojNZswASeX+XxYIy2cnoSWahIzLR3pU=" ], "X-Amz-Request-Id": [ "5BFF9B7B0F17323D" ] }, "Body": "" } }, { "ID": "f91cd621cac9c98a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key19", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "2w9S4aRqKABHoeAhyiAJMA==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "1fef5f6a0d5dcc70dc8b47de8920f3dbd014d89c81683f6f784e027562a49063" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"db0f52e1a46a280047a1e021ca200930\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AcaAUhM94O7u7r5hCeXrDpkakdltBDZaXuIO7li5u2IOu/MA03He/PZ2F22k4D04BOYB1NaQKbQ=" ], "X-Amz-Request-Id": [ "117A85A62E9204DF" ] }, "Body": "" } }, { "ID": "d791e62bfa02fcb9", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key9", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "kfsiuKRZ73D7CzauKodAhg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "8027abbcb17ff5a4c6bf2a5a8761dbd29e465336b0bfbf9bcd77e0d8a622f2ff" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"91fb22b8a459ef70fb0b36ae2a874086\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "97oNDaf2BEMdpcUecGBwmmLQxHlST3BXGST1jL2QtXbl6kYZv53h8ErPe1GcdoMZb4N4MZYrO9E=" ], "X-Amz-Request-Id": [ "FDA1EAB933848E6E" ] }, "Body": "" } }, { "ID": "41a7e9ab398cfc2f", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key18", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "4096" ], "Content-Md5": [ "wZvI1MtOgANGQD0gzZ4NUg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "108e61a3206271b8ee237033cb15a240cb33b912ca7c2ee40f703409f7f044d8" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"c19bc8d4cb4e800346403d20cd9e0d52\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "79W5zV0nkoixR2+ENRi6D6yQ3P8ye8F3IxwpUf300hPzq51ioFncfXBCdOl+IffeUcMDeskFoFI=" ], "X-Amz-Request-Id": [ "42AAE84F9E2421B9" ] }, "Body": "" } }, { "ID": "7afafd41cfd0e26c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"aa8f39967deb441a6e7484963945a960\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "WMxssj9ya5m+6DQA0aASl/BhNKdCsBR4Aa5E+Nys8L/ab7HfSqSQOv7EHqHGTpZjkms7aPA5Psw=" ], "X-Amz-Request-Id": [ "8E55810CCE6857F0" ] }, "Body": "AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ==" } }, { "ID": "e99d263aa8fa6d9a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key8", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"a8f64f134b8018134a13a2e11104c0f1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "oGiXUCKlxUptBhADyLtdpcQembm/TbK994c3uu5otjZsRcFyozIo6x4NDfkgAVCCJgMWzLX1TWc=" ], "X-Amz-Request-Id": [ "374A0118ED8A8A58" ] }, "Body": "CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA==" } }, { "ID": "a744199cc471b7c4", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key15", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"a87ab2dd33823cb580059fd84c47a202\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "OKt7bFJjy7fS/B4D1r/V13+JOg02vQV9xzhLmfBXHQDQagybSv2lAVr+hgA6eu/t/Zw7xIn6ygc=" ], "X-Amz-Request-Id": [ "A870D781148786DC" ] }, "Body": "Dw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw==" } }, { "ID": "2d74c4df1b486af0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key10", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"01728ad4955c67bf752b172121760d36\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sQePPmAug/7IWRX9x7Ay4Pb7bv9AZtvcRruULoUAnssqR9d+5DTE/XPao3V6gS6ksotFU5/Ua84=" ], "X-Amz-Request-Id": [ "6F8D092F15763C99" ] }, "Body": "CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==" } }, { "ID": "c281500b73a27077", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key14", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"3651435053344e91754be3171353f10e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DFlBJR8vvQG1b+A+/d3Qz0tL3FimmG7qTUOWI4lab3r64VoVbMginyCSEIV4aOmBC1wmaZBmuZI=" ], "X-Amz-Request-Id": [ "002E0BBC640C0002" ] }, "Body": "Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg==" } }, { "ID": "09d0b80df9f28236", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key4", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"1f4ea3c85dd9b090ce730c81e6083ecf\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/dmCiyqCT9M/JR8a2kVPZtMSvsJdE3UNVQbn0rLcksomg6cj2hnftrEc3pm/GvjmHqqY+A+DAcY=" ], "X-Amz-Request-Id": [ "1197FA65621F846B" ] }, "Body": "BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA==" } }, { "ID": "a3b7d9aaafd9d4ad", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key6", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"964a36b83aa826b804c98367bdc27abf\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Ei7FhWrFmO8CXGs28CAIR8FBDECp+vmrpfBtEUbJX6yMfsfiUmIxN0aHOJWW52JzKNiPtVHZpbk=" ], "X-Amz-Request-Id": [ "5CAF850EC9D393FB" ] }, "Body": "BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBg==" } }, { "ID": "92fb9f9e0661d3b6", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key3", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"eed04f3b2288a34a2660e99b3771edef\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "LQQ9sTVL57LdWyTBYuvTNoNZLyQapZsiqN7L4q+w/eCne0iybsIO8BdbIKy3bVVuujRtvK7hOxs=" ], "X-Amz-Request-Id": [ "36180264869627C4" ] }, "Body": "AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw==" } }, { "ID": "cbad9895090c2a81", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key0", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"620f0b67a91f7f74151bc5be745b7110\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "T+yGWvnm8DBiKMuH5VVlI9fw5qmsf6WFv6YPoKnflZnVSKIuIe+0JSRwWiFOLWNA2fCVaMBTzsc=" ], "X-Amz-Request-Id": [ "188C3257B37F4345" ] }, "Body": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" } }, { "ID": "ebadbfdb9976206b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key18", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"c19bc8d4cb4e800346403d20cd9e0d52\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3+GvQLAU7R7H1KdfsaPTxCv6FF2Ox1AYt78Ir8eVpiYIMpyEo/pG840LPMXQHpmVXszhsklstuU=" ], "X-Amz-Request-Id": [ "A32B192BFF80EE53" ] }, "Body": "EhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEg==" } }, { "ID": "8c660e9045236e42", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key5", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"61f45a290906d16bf551e78cb03d5ff9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HV+Cy2HxE5XXzb0VuIb47mS+ODMuzLyr2k7zMg8W9U9lFCIZyRPpzjtQUktqo42+NNyEVbK9Gf4=" ], "X-Amz-Request-Id": [ "677AF806272B55DA" ] }, "Body": "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ==" } }, { "ID": "c6fa9b4a38b10a8a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key11", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"01b0e6591f7a7f55481675b8250e7f48\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7F2HTYgmugyX7/Y/o/c1bsbZvIuHCjwngYIqNutfWEkNlTvc3tlwQPPGurNnH1ww8UmY2M742RQ=" ], "X-Amz-Request-Id": [ "085D10DE16DDE98E" ] }, "Body": "CwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCw==" } }, { "ID": "dad5aeeb52de04f6", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key16", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"eb99fd0a376b26435011a1b87c558c81\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ziMPWkLvt/+wLo3b60pT5tE4otGXNNIwQLgrt05aPgH86X9NV3o7K1DvhpE07khC+5RFTJNBsms=" ], "X-Amz-Request-Id": [ "4CE06CF35C3674FA" ] }, "Body": "EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEA==" } }, { "ID": "56b163fe6abfc19d", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key9", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"91fb22b8a459ef70fb0b36ae2a874086\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "KOmCjOj6Kg3S17Ld6G7juz1MpPW3J2pbklJy3gTX/pFrSvlCuDklGJ88wtQzE1VmNmLxvsMYHSI=" ], "X-Amz-Request-Id": [ "E498D7ECACC200CC" ] }, "Body": "CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ==" } }, { "ID": "a54488d65a6a1bdd", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key19", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"db0f52e1a46a280047a1e021ca200930\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5po6ksGuh+XMpDMtv3NXfLuH27mpgxzB7bq1eiUt1QYs5a2hKC4SWq83XKeuINQ5Kj5ME9/C5Tc=" ], "X-Amz-Request-Id": [ "8395604D0F78334F" ] }, "Body": "ExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEw==" } }, { "ID": "01a03fbfb036bed9", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key13", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"4ac4f3159de6ed1d4dac8738d94296f9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "T25jKRmRgXQMuNoGdzCKqdbHs87AihjCHGpYBM2IcVxnQCAZaJDt3JDeaO/V36K/E8Hxj16OGJY=" ], "X-Amz-Request-Id": [ "46B03E48B8DC343E" ] }, "Body": "DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ==" } }, { "ID": "0f894566dd73d5ac", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key7", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"91bba24e9e4912e823c00920ced3e85c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "M0xz/mHA70AyOimL1JZl8woh3s7KMJZw2JYurmzkqocnlCawJXETkbWfeEFOi9xlqyJEre4tFg8=" ], "X-Amz-Request-Id": [ "C21D764F4D37AA13" ] }, "Body": "BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw==" } }, { "ID": "5271bab9e4027716", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key12", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"564190fb72c9b1e1c0168a5b6fe058be\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "imGdSE8lrtQ8NVRFkc+kg471+3nhjXo/4O2u/OB1AlJ758cQSvC8so1Yw9SpNLUxV35xGzgm/i8=" ], "X-Amz-Request-Id": [ "C4E5F7A183D835C3" ] }, "Body": "DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA==" } }, { "ID": "38390076f18bf75a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key2", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"6541e7fd48680b9b60ec055ebfa31c02\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "bvX2YT0xFPjG67DNg0nRgVk1lttY6JQtpUhipQY/NTB9JcIfqx/Al5crq7FvAdbbc8exrs0WTUg=" ], "X-Amz-Request-Id": [ "F5DE562EAEDA23CF" ] }, "Body": "AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg==" } }, { "ID": "18e0d5585f257174", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key17", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"df679e5ec8fb672842974a36d303d0ff\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hK03+AzDqAu+Z/oN1OtJmt3/lOrea//pMlfRoFXEsuLXZeNvZLGlVU01pb2MnaFX7RYR3CdaYMM=" ], "X-Amz-Request-Id": [ "28A50D133705656C" ] }, "Body": "EREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREQ==" } }, { "ID": "1a2030e72a971d12", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key19", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"db0f52e1a46a280047a1e021ca200930\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xQH8ymKgyuwHMaIx1nSSVz6uHBzq6nL4w793f77tNtz7GussV2cjREqBHOlG7IKe/YiLkak0X+0=" ], "X-Amz-Request-Id": [ "D7455DC8A4BFCA32" ] }, "Body": "" } }, { "ID": "e723379f41543c4d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key19", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ri1cY4Nz7DnfqbMPfa0IAnsPkaqWAkTUc4P559g8hyrNskD9V/lb1bsbfjNNvPNBduzam0g4aV8=" ], "X-Amz-Request-Id": [ "15199AFB4328A3E2" ] }, "Body": "" } }, { "ID": "1061d8dfc5c3bfda", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key18", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"c19bc8d4cb4e800346403d20cd9e0d52\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "n3AMveW+jyubaosvs103SQazcmEu2TXs1rvo+DuD4DhbW2Db0+6YAX419YV3tDcU8nxheAu+tu0=" ], "X-Amz-Request-Id": [ "743761EE38C7890D" ] }, "Body": "" } }, { "ID": "7fae42e41b5a6b63", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key18", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Bferu/J3VRTFkT60mMOMWtq6Y9VcCwNkxZ0A+cdgsZwt/ddRt40vD0XIn5BjVlZYMVJyWQ1yXgI=" ], "X-Amz-Request-Id": [ "C262DC99507381DD" ] }, "Body": "" } }, { "ID": "5c4a5548c94d4ca7", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key17", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"df679e5ec8fb672842974a36d303d0ff\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AdteBQk5SEhD23hty/K6ThD+GpBHiubz/go/ld1H3Bbk0xFIyDpof9atwIPf0C10TEQRDT2AtF4=" ], "X-Amz-Request-Id": [ "1F9C103875ADCECE" ] }, "Body": "" } }, { "ID": "b1b5ffd973a22aef", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key17", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "iCs1pFQgN/Rzk4TR3wzEM2Qe7zNGLc1C+5hmoyrRJ0BnVHVpXVwK7RXK4GfI+fFEw2IClL9cfQs=" ], "X-Amz-Request-Id": [ "CB99897E81BED794" ] }, "Body": "" } }, { "ID": "690a15b61b5b2d5d", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key16", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"eb99fd0a376b26435011a1b87c558c81\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZpugmBfeOwBxttYRMQo6VrW4fgjEhBpLViE345DYn59TvvoVq671lop2VnJnf88ZI++tVDsiebc=" ], "X-Amz-Request-Id": [ "97530121618F1C55" ] }, "Body": "" } }, { "ID": "23b0dfc0d5b65c86", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key16", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7HoZzCMu5cF5oc1J9mLQhKI6vZhYc1WlQxrmq2OK5eePRrFICsTfdzYdET3FgW+efr8iNyqUjRM=" ], "X-Amz-Request-Id": [ "84CAEBB5A22E0234" ] }, "Body": "" } }, { "ID": "cd8960ab7cd62d13", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key15", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"a87ab2dd33823cb580059fd84c47a202\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2m35pJViMOagLhGRjwAfvd4OW6xX4TlJJ/p8nEjk8EwW6vAwoOG0FmaX9BAwkFTg7EWr+QAmkD4=" ], "X-Amz-Request-Id": [ "13FAC6350584C453" ] }, "Body": "" } }, { "ID": "4d334acb6ef8914d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key15", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "islOy6begA74op4EfzF1AGQu1u+/RC7267gnn1cA0dg3grx/0ZLp7keSDoephdzGeHTq/zRf1FA=" ], "X-Amz-Request-Id": [ "1B6BA82BA513F8A5" ] }, "Body": "" } }, { "ID": "adf2691a34d2dc44", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key14", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"3651435053344e91754be3171353f10e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2BoaAy1QP6Y9NSwiZsBCqJxcZlZKnzOGKHlv4pwKDh9X3D523UwxUeIB9X2MpH7+FiFOKWYNjG4=" ], "X-Amz-Request-Id": [ "624CD3A16DE102BA" ] }, "Body": "" } }, { "ID": "dc14b58640bb0113", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key14", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "PMXOJ5Z3PLLk61RomUPgDhHCzmtH3yCPslPfEZ/GEVoo709oxZfl+oNhEPIRA2wAXtu94hYBSTI=" ], "X-Amz-Request-Id": [ "1DF60E712F46AFA8" ] }, "Body": "" } }, { "ID": "33fde1837b5ca288", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key13", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"4ac4f3159de6ed1d4dac8738d94296f9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ixiA4d7uRctcJjYlgQaGapoAwwS1Uh+acOZYnlR6zCjtuMilGDqqd7CFpqdxgg01VqRq2Ovmyz0=" ], "X-Amz-Request-Id": [ "A55A97B39DF9F731" ] }, "Body": "" } }, { "ID": "2234588e58b080b6", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key13", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "OJNsCnbEFLtDEXfx4PGUdbFYo3DmN7v+A77JhtuNkxGQthsHCuVIa0Kqy3waQVNZhPHgNUPVArc=" ], "X-Amz-Request-Id": [ "AA357B4C0D9E54C9" ] }, "Body": "" } }, { "ID": "a4b25b372c457a19", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key12", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"564190fb72c9b1e1c0168a5b6fe058be\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TgDXisyXfi6jLdFQFC4jHv8ck2YgoE0jLp6aiLeapN1R12xxKMqBDnPdEHv0ibYckuS4opqCN+k=" ], "X-Amz-Request-Id": [ "39FDFC559B894847" ] }, "Body": "" } }, { "ID": "7e3a4d08943efd05", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key12", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4o0v8y16gUAdfrCP9Xrtrt1tJalxyUPW60qO8iYY666ZhJCrP5EnBFb2W7E/SUv18e1P4WPZBRk=" ], "X-Amz-Request-Id": [ "E9EBB8847E1C8F0B" ] }, "Body": "" } }, { "ID": "7451e153accfd8ad", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key11", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"01b0e6591f7a7f55481675b8250e7f48\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "jekTz29qbwRJVNuie+cC5fyw/izSpKW9Sko/Sf84en52bB0ClcDA8pZp4yyKzMDYFrmh5xlv5YA=" ], "X-Amz-Request-Id": [ "9ZCZDH5V4KFG4V4M" ] }, "Body": "" } }, { "ID": "11c344dfac026d1a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key11", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HbuvR2Kjl1pIBeyoYSe4VgTJ1aVQdfr4adlZUCTqGGP8VNRs16rZdKer8kNJbEeKRL87Sua0gNc=" ], "X-Amz-Request-Id": [ "5D0D3ADEC47E0ED3" ] }, "Body": "" } }, { "ID": "84cac106ba7af2cb", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key10", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"01728ad4955c67bf752b172121760d36\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "+KdvsGEio05DGHojoVtBd7uoLduknRQNY9gG+NLcYzWU1o6nA0CZ6M/1KrfokQjO85Q8B3HUG+Y=" ], "X-Amz-Request-Id": [ "05A22F35EB78E036" ] }, "Body": "" } }, { "ID": "f3068dedf10bf566", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key10", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "s3jQVV9P9hqhAdmVv+e947m4UOM1L3GpShum/z/OKIlcuwYEQ4ynCCi5epI4m3GtDLS701S/v18=" ], "X-Amz-Request-Id": [ "808F3786CE21B629" ] }, "Body": "" } }, { "ID": "5314f535b5d53a72", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key9", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"91fb22b8a459ef70fb0b36ae2a874086\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "bf7YI9MT+h6SR7daiyR9iBs72pV0976v+CHMZ5zzN2sSgFeSSVq2ECNGw93ECezVxkaee/tLZVw=" ], "X-Amz-Request-Id": [ "7FF10A038F0116BC" ] }, "Body": "" } }, { "ID": "1106ce0a2b9819b4", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key9", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "r7f0JWeZryZw65VhiuUg/nXc86diQnOi7VrlFCiJPDdvggAMFx2f/r5n8WA4/9Oo2bo7eVj/5UQ=" ], "X-Amz-Request-Id": [ "DFFB2CF1861313EA" ] }, "Body": "" } }, { "ID": "1557604a6ff741df", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key8", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"a8f64f134b8018134a13a2e11104c0f1\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7TJytbcSZd/v2HCSWat7XvOSt55f2rUXLZeXkNUA7uALjNRpFLtRiZ3Oljo3hONN4GsuumPtOGw=" ], "X-Amz-Request-Id": [ "0BFB561FDB2131AB" ] }, "Body": "" } }, { "ID": "2c26e18d8a87141c", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key8", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "b0JpGc5HrtJTpoCCdpwvo8JwmtemYhGnuHizBMWkhEtl7hWPIGoTo9aL38kc164cG689TyEyTZc=" ], "X-Amz-Request-Id": [ "B68EEE1EDC9F42F0" ] }, "Body": "" } }, { "ID": "4c3cbf64bdaaced2", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key7", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"91bba24e9e4912e823c00920ced3e85c\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "aubLgMiR+U6Spu9/xnrsonD7OEhZiGA2Vgf9UTan8rCZwn6oGHgUKZSoii+Kc8C030I59P8/V8U=" ], "X-Amz-Request-Id": [ "BAEED3C5F539D748" ] }, "Body": "" } }, { "ID": "d084ab876a709675", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key7", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/GWJzCE9ahJo5giQmcHoj1pS7HcMnIwIA/D0AKUZB9sWgbvD0IHQJq8uu4FzzQrNAaf6C4kOX8o=" ], "X-Amz-Request-Id": [ "7B88B97DD3EC9530" ] }, "Body": "" } }, { "ID": "b500f20d75117da8", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key6", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"964a36b83aa826b804c98367bdc27abf\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "tUfKD2hYx3ZIX32xpP/StfjoWVnRaDRJMpWCrdTmsoeF0CLKVgJDnx0b4THzhxCPo71Bbq5d0Yc=" ], "X-Amz-Request-Id": [ "F87D442A5BAABA56" ] }, "Body": "" } }, { "ID": "2e9ff62bc6881b81", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key6", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "FBIW4WnQxXavOpmV1IPlvEbLF9PDZF6RL15VKo1MaSid2n7vtZ5DrAtv0FkFcWhtRVhrYcepCZQ=" ], "X-Amz-Request-Id": [ "80C86B45AA52CB3E" ] }, "Body": "" } }, { "ID": "256defd77fed2d7d", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key5", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Etag": [ "\"61f45a290906d16bf551e78cb03d5ff9\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "lwywT37gtIgxVQTqzisGA58jltRW/MTOECRfuQW6sh3WASZRKD9HxcIEexRY20nbSxaTwIlh6kg=" ], "X-Amz-Request-Id": [ "C5E1D1042D36CFC3" ] }, "Body": "" } }, { "ID": "a123fd198c44ab21", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key5", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "wlwy/A9UKF3p9UO6cs4stJ8ieBG+cVO78U+43LR4PMPs1bZhstQSy7hKdqGZw0LMl3LfncjxmUc=" ], "X-Amz-Request-Id": [ "A8650E57A1E9FF43" ] }, "Body": "" } }, { "ID": "414ebb77952eef46", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key4", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"1f4ea3c85dd9b090ce730c81e6083ecf\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "zCE4g9eooFDdG5vgOeEsrhvCnvY2Ita8joFEqXNC7j0mnMYucmuM4J4P9rRMc+2UH0VFuWk/U0k=" ], "X-Amz-Request-Id": [ "76CC13D01681A832" ] }, "Body": "" } }, { "ID": "4302429788e95b19", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key4", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JNQ7nKAA4L4rIQlPczoUD5Iw9x02czPi4s4/yWd7+EHqgu2PuUPMphyFQTkHOWstkHbTCO8ftHg=" ], "X-Amz-Request-Id": [ "C31A5D2BE98B2386" ] }, "Body": "" } }, { "ID": "c2717aced8dd8fd2", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key3", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"eed04f3b2288a34a2660e99b3771edef\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "X+uQxmRqxIukmEmiPyXKIHVzQPfUzYT0y12hwa62zELWWkGrwY7nr2nSUbpMJKFfmJuWa2ACJNc=" ], "X-Amz-Request-Id": [ "2F1703AFC6D3C88F" ] }, "Body": "" } }, { "ID": "4efa649e1db0d0d3", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key3", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7Rjjag5HfjU6Pr8snxOMsA52ykvdYQeVyqrCzaOxdOXYMxzvVWIsw03QjDAWJShkgBe171sTmXc=" ], "X-Amz-Request-Id": [ "9E5232849F84F0CF" ] }, "Body": "" } }, { "ID": "d31d6dc1ed3f4898", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key2", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"6541e7fd48680b9b60ec055ebfa31c02\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XGVK1PB5IwzMOdkJ38EWUOiUalmu133qcN7LU2pioGkLaTjKVFvtMMev0t5hvCEDsCpAerrjsQs=" ], "X-Amz-Request-Id": [ "F96FE0378335353E" ] }, "Body": "" } }, { "ID": "7594946a1adf29ed", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key2", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "UjrBP6c5BzTKfXOVqO1oudOcxplWxDmvSTUIxvas6SJN+cDXsLn8w/P4sI9QmdTc4AmJDyBptEc=" ], "X-Amz-Request-Id": [ "BCD72A66529D9C0B" ] }, "Body": "" } }, { "ID": "17694c8ed39e6f01", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key1", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"aa8f39967deb441a6e7484963945a960\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "EYFnBpnOe2u82MYmp/ZjazIs4wSdltBo+RpsvpLMK5dofZE9K97Z4q94WCieQncoGWsN/S0r9KI=" ], "X-Amz-Request-Id": [ "A22C4AC829ED365F" ] }, "Body": "" } }, { "ID": "ff238aebb658804e", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "P54tScGig6ksJC2xvqF4mILw9TPuIaJnbBSBvKK9QS7tADhkdiArG4Aiz2MlV3EqXFWYwNzlgYM=" ], "X-Amz-Request-Id": [ "51050C2ECEB36F66" ] }, "Body": "" } }, { "ID": "75602f0dd6dc07b3", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key0", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "4096" ], "Content-Type": [ "application/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"620f0b67a91f7f74151bc5be745b7110\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TQv5lqGjxBP+ZoQmROxRN983oysS20dM1nhTOz91nUnjf/wV3DjvuwFpgIE1OtL+OLFmil0fjs8=" ], "X-Amz-Request-Id": [ "B64CB15AC7C63316" ] }, "Body": "" } }, { "ID": "35fdeec6a937187f", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key0", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rnD4H1ftEhUIB1sxv7uo6zN/b2n1Le20ysMyoSuq2eB7M+Jpt2ZMtzqDBtJqxCuX05Xt+5A8Z1s=" ], "X-Amz-Request-Id": [ "BDE3D843CD2E0E0B" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestCopy/000077500000000000000000000000001367004507500270575ustar00rootroot00000000000000NonExistentSourceFails.replay000066400000000000000000000047661367004507500346510ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestCopy{ "Initial": "AQAAAA7WcSPuDjFNIP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "f7666de508a9b904", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/does-not-exist" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sExLunaPYOOOhdCMn2BDbLqo9dE5VorIgT6GHbWMWi1kBDcPb+6pd9QcuLUQSZz7qkzwOIu7E8c=" ], "X-Amz-Request-Id": [ "BDF24E25950D2BA0" ] }, "Body": "PEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5kb2VzLW5vdC1leGlzdDwvS2V5PjxSZXF1ZXN0SWQ+QkRGMjRFMjU5NTBEMkJBMDwvUmVxdWVzdElkPjxIb3N0SWQ+c0V4THVuYVBZT09PaGRDTW4yQkRiTHFvOWRFNVZvcklnVDZHSGJXTVdpMWtCRGNQYis2cGQ5UWN1TFVRU1p6N3FrendPSXU3RThjPTwvSG9zdElkPjwvRXJyb3I+" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestCopy/Works.replay000066400000000000000000000401061367004507500314030ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPuEOZOJf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "26e0587106ebb418", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-src", "Header": { "Accept-Encoding": [ "gzip" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Md5": [ "sQqNsWTgdUEFt6mb5y4/5Q==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-Foo": [ "bar" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gV29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "bQAniIPri5YNUdbHCB5MAmRbFSokDoHflyTjaCp2ja64PDxo5NufllCn0AW0pCWZ80AXnurZl7o=" ], "X-Amz-Request-Id": [ "8097733E7BC5C87D" ] }, "Body": "" } }, { "ID": "75593116b1ce9d7b", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-src", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "h1QMN4TlfHALH15vVAbOK9V6YGsopatXYG8Rj3DBnhj4mBxOvu4cXUirB9wN1YOgeUwUAUMQqtQ=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "70696F7D04FB7128" ] }, "Body": "" } }, { "ID": "d470ab49ca212278", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "10" ], "Content-Md5": [ "oPqafXJA1cXuvXCJlDDFlw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "cbaa060c695ffea336ebacf821fd121c12e6cddc83d19baae739412dc80c42d5" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "Y2xvYmJlciBtZQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"a0fa9a7d7240d5c5eebd70899430c597\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "aoJfXC4Yr5rMLuKo6X499YghnKf8DNiRRXhm4ztz+ffRSDRc7nyk6JbL2dN/41w+VbwyXRXyoao=" ], "X-Amz-Request-Id": [ "58B9DD1FF8219CFF" ] }, "Body": "" } }, { "ID": "9c8ddf33497bc2a2", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/blob-for-copying-src" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "234" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "luv98MspXm/KeNbg0piF3CuHaraj++RgChi0/CpUwVnZoAyTvbAV8iNGrCibw2VkNJbn1viXtnM=" ], "X-Amz-Request-Id": [ "C5D183DBF1E89133" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENvcHlPYmplY3RSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjE1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDtiMTBhOGRiMTY0ZTA3NTQxMDViN2E5OWJlNzJlM2ZlNSZxdW90OzwvRVRhZz48L0NvcHlPYmplY3RSZXN1bHQ+" } }, { "ID": "60a875ac5e5ecadc", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VtXjXES0RDgMQ9R01SnkIYsF2/e6rHguKTtZ69s8xtCO9hWHGnGfmryqJ4LG2MFEpqndqvwlLGs=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "288F10A144FE6269" ] }, "Body": "SGVsbG8gV29ybGQ=" } }, { "ID": "a08246d90a9b1d31", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4Kj3PkfydoshbS8wfrvONcP71/cV87pZVp83M6AlBkQ12Go0JnDwCiiZlXr+UXDukhVV0YdqF94=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "7724052D968C0B36" ] }, "Body": "" } }, { "ID": "94e659dd704467a7", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Copy-Source": [ "go-cloud-testing/blob-for-copying-src" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "234" ], "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AebRHmFqkck8KV9sJGCaDb6SX4t98MOKRKB7DrRk+z3jUO0b4YJYUHQ89KukZR5dJ3VxaU0gEdg=" ], "X-Amz-Request-Id": [ "E3FA403C29D34148" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPENvcHlPYmplY3RSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjE1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDtiMTBhOGRiMTY0ZTA3NTQxMDViN2E5OWJlNzJlM2ZlNSZxdW90OzwvRVRhZz48L0NvcHlPYmplY3RSZXN1bHQ+" } }, { "ID": "24339b79738903fe", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest-exists", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "T/pzMcxAb3GKmJT9s+iCU8w/tk90sy52Z9AtHc3y9rJuXeQ3k+hJyLk5tRB9YK9le1sO5BhJjcQ=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "0FF636A070115E13" ] }, "Body": "SGVsbG8gV29ybGQ=" } }, { "ID": "8270dc6e8a6035d5", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-copying-dest-exists", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Cache-Control": [ "no-cache" ], "Content-Disposition": [ "inline" ], "Content-Encoding": [ "identity" ], "Content-Language": [ "en" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"b10a8db164e0754105b7a99be72e3fe5\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "S/O0CRVXZKx5RXa0KBNKo/aOfo0ppmNjDoORLjA9rPdTap+/diNvmBurJd37glq6bm5S+APt/uE=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "48B06002BC6C60F2" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestDelete/000077500000000000000000000000001367004507500273475ustar00rootroot00000000000000NonExistentFails.replay000066400000000000000000000037221367004507500337470ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestDelete{ "Initial": "AQAAAA7WcSPuHnzCBf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d8b73fddf05456ca", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/does-not-exist", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Rt6xgbbOqcBg1/1QjzTW0pwZwsj1sprw2kvuMEz4BMxPV446ZKZogMWXlLlCyNVsAyd9kz8YeYc=" ], "X-Amz-Request-Id": [ "C8AA3C6E9271715B" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestDelete/Works.replay000066400000000000000000000166321367004507500317020ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPuIQ+c1f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "3fc85246c7e5b78d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "Content-Md5": [ "PiWWCnnbxptnTNTsZ6csYg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "SGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"3e25960a79dbc69b674cd4ec67a72c62\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VjQmcMMX6l+0LPLgcAfr2ZjVlGNX/wivFDoPNtJnp9Xq78dDHSJQfSWcStP1OVjRZnh7TJ/Mukc=" ], "X-Amz-Request-Id": [ "F5B258B2569E2909" ] }, "Body": "" } }, { "ID": "5e40ac731dc25c8a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"3e25960a79dbc69b674cd4ec67a72c62\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ILoMKmojKAXOngaUtbiZRZdyeSpA1Cs1WQCRrb53SopCRRbln7YBT0PFEmu8vkSrcTJFuCa7yJE=" ], "X-Amz-Request-Id": [ "97291952E690F95D" ] }, "Body": "" } }, { "ID": "80c128a9e2e29173", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GC/PU/mJL5eWGp32Dzeour7tRTtWreNOZDLTZKnLit6WlLFatIBQeznPStuIAoKuBlUUzqBmfbA=" ], "X-Amz-Request-Id": [ "7DE4453481B119B1" ] }, "Body": "" } }, { "ID": "497c2a41eac909d2", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "D/QGg3vEiSIb+6JJR5KF0usQT5YcgXwi1lz25gRlqx73cnCbWmWjpxvZbnm2doOixw2cW2vu+9U=" ], "X-Amz-Request-Id": [ "7242F11746ED50C0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1kZWxldGluZzwvS2V5PjxSZXF1ZXN0SWQ+NzI0MkYxMTc0NkVENTBDMDwvUmVxdWVzdElkPjxIb3N0SWQ+RC9RR2czdkVpU0liKzZKSlI1S0YwdXNRVDVZY2dYd2kxbHoyNWdSbHF4NzNjbkNiV21XanB4dlpibm0yZG9PaXh3MmNXMnZ1KzlVPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "bdba605ef2a46ff6", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-deleting", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:13 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pvWOurfzI5dscWVWU/4neRkJ+xp0COoSgLbmRF13HtncAT2razt4hzenrEIl3RcdDY0+qdQXRzs=" ], "X-Amz-Request-Id": [ "4AAD9D7C8047CC24" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/000077500000000000000000000000001367004507500270605ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/ascii-1.replay000066400000000000000000000231721367004507500315310ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPvItYD0f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "39c24fb8faa39a07", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AF8/3Lgtvb0kOMThLcp/KJIQ1FIBvYPvkNNkYVOUtCDtpZBsd1YBQpI523odGAthc/X1xM5SRoo=" ], "X-Amz-Request-Id": [ "BB136284779AC586" ] }, "Body": "" } }, { "ID": "47cef657895a2582", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "U0z0BO/yJTxPxgX5yHUH/1xfOyTE03gQh0XdCiHn4WbKxhzvF8rHPY0EkPPbjTTnJ4JHn52/KbA=" ], "X-Amz-Request-Id": [ "CBE5A0065A739B08" ] }, "Body": "aGVsbG8=" } }, { "ID": "6ca3f467fc9784db", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pCVFIJQPbhwFXDbdbOWzcOa07pm1TRcTqC3kurAxEAZjmad3k931Gy1WqtR0ygc78YxtKUQUVRc=" ], "X-Amz-Request-Id": [ "0FCCC80823BC04D7" ] }, "Body": "" } }, { "ID": "33267bcd6b2b65d3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QWCc8K71V0qQQrg7rLr6smyn18Btc2F+WX4waBBvYtW1ch4knkkWXltPbywIN9QyT2NrE1xdYgQ=" ], "X-Amz-Request-Id": [ "857B044439528802" ] }, "Body": "aGVsbG8=" } }, { "ID": "0a46306e005b987e", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "D0YCERet5slS8QGj8x9MbRHo7aBDJ+Zou7zAyHDpUMSvej2HwXvxLrjXKpZnMLV5obpHh+0E+q8=" ], "X-Amz-Request-Id": [ "931254FD28A9B25C" ] }, "Body": "" } }, { "ID": "385e6dfbd6733b02", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x0____0x1____0x2____0x3____0x4____0x5____0x6____0x7____0x8____0x9____0xa____0xb____0xc____0xd____0xe____0xf__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5dG936xgbTkUWShTddY+9pe3vSoSur+p5eztfo9/XgHh0WPkn8BRt7V4r5ahpj6KbRu344kMszk=" ], "X-Amz-Request-Id": [ "88E08296E986E27F" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/ascii-2.replay000066400000000000000000000233321367004507500315300ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPwF2x1Uf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "4ff92b10a3b032bb", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Fm7+OOLMsmAWRSHZmxVQXRd2/70E4GEJe3Bn2nszfQT4N5V3EWKcQ03qYFuNDFxdMLUrt+ZFuD0=" ], "X-Amz-Request-Id": [ "C3BAFD564460EE85" ] }, "Body": "" } }, { "ID": "6819d7bae835ea56", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "L6bVXHaV/AdYK/eN5Jvrxap/vwa+lVskP2UVojtUw+pa3lm0MP1kQShVryM3QDaDFs9jA0Y7XeY=" ], "X-Amz-Request-Id": [ "9F7C8BF7E8CB970B" ] }, "Body": "aGVsbG8=" } }, { "ID": "fb731616529d5377", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5dhxyqtWJAHJ4Iu0gQvh8aHCarkbCmBj3InMhl/szNx2/wM1VG/ql6AC/oKv24luKp1UCnix/Ew=" ], "X-Amz-Request-Id": [ "72E6D1392C1FDD29" ] }, "Body": "" } }, { "ID": "ae3575b127f97435", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Q6Rq1+4P+w2W9NwTZFd141st8OVrYR8G/w/mh/iv5nV4ExePx9ffkJ3B41W1myeiMqpyFOfMcN8=" ], "X-Amz-Request-Id": [ "4B595D7DCF30BBCF" ] }, "Body": "aGVsbG8=" } }, { "ID": "30d1773655fd1420", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "zhkFjrogrLEwLN9sf90CLCjj4p4oH/MgMWqXd2K7Y7hCE54OG1Zr/ocDGIy9eDkZ2f34paUkMRc=" ], "X-Amz-Request-Id": [ "2C0FC1D666289E1A" ] }, "Body": "" } }, { "ID": "ecaa7261c6543140", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys__0x10____0x11____0x12____0x13____0x14____0x15____0x16____0x17____0x18____0x19____0x1a____0x1b____0x1c____0x1d____0x1e____0x1f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "uEZu++qE/n4AT2BamgJ6Yd3rs2GmHcz0KYE8w1XDlV7gdLjswj3tSDTbDslAY41XFnWrfGBZeYU=" ], "X-Amz-Request-Id": [ "88FF7553B59E20AB" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/ascii-3.replay000066400000000000000000000223261367004507500315330ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPwIdN/8f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "da7ec7a2dd2c2a6c", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "b+s2Ht4eftw3RvULhL8UzW7u7UDWsuVWXytVPn0irA0b65xqzpnS19eLwEapfseYeuZmUoNl+f0=" ], "X-Amz-Request-Id": [ "B7AE0A48FDCF779A" ] }, "Body": "" } }, { "ID": "6fba585ac883aa50", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hlX8rTOXfh2Ib3Qg2yJlRflySiFZUiUsPVyX+Ryu64YNjzfZDa6DLqPTSOLc7m8eLzT+Ev8dQ/w=" ], "X-Amz-Request-Id": [ "EB5D3A017B117CD2" ] }, "Body": "aGVsbG8=" } }, { "ID": "c3ec616806432b1a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GPDV543yyevgamGx1cduXxIb7eWxjGgzYA4mEclGFnHjIPXMiVftZEA7DsNzUWzkMc70vdr7EHA=" ], "X-Amz-Request-Id": [ "43E4057CCFBD1425" ] }, "Body": "" } }, { "ID": "0234bd79de537334", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "mE3mL5WRzay21zguZRFEaqzDNSGr3arR44YsFlzOQ3wVyh3JbYDRWHhxVsdfzj47QDmxPssSrEM=" ], "X-Amz-Request-Id": [ "089D3D364BA46762" ] }, "Body": "aGVsbG8=" } }, { "ID": "c2da633c5a97ed25", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Ia8L7RiqV/VPCHq/YfOU54eLLLMlvlPlq5FubIE3GpoM2qW//kWUBPzvZUO7FbvgktpxpjDJBwg=" ], "X-Amz-Request-Id": [ "C382E7C192CEF390" ] }, "Body": "" } }, { "ID": "752234990e8e4cd0", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-./", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DrSlrpmTjfBWcwNryp5nV1h0UynzaiPOzS7S8Qd16X+W9y09EUyJeKNh1BZ1LJ/nfo2MIe+jcvc=" ], "X-Amz-Request-Id": [ "C313DA5A60EA37E1" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/ascii-4.replay000066400000000000000000000221061367004507500315300ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPwKtnEyf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "abab84ca7d3e55a5", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XA+HYKQ9Ti/mS2n65uSR/i8gYscbn0xWBZlQpz9jPmUNQnIZYcFIXRScPV0lKobGzI4QZ3qovxw=" ], "X-Amz-Request-Id": [ "F64FDFC0D90BCD8D" ] }, "Body": "" } }, { "ID": "f5a3285e2f3f9c38", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "9A/lXZeR8qHUmufEKExkYwZ23v8lYwrNN/loJ96AvWGihFeNhDsa6J4oRzWI2SQcILfYdbhbox8=" ], "X-Amz-Request-Id": [ "26DE47008FC277A9" ] }, "Body": "aGVsbG8=" } }, { "ID": "b141fe2583a99d8c", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "cIzvP0eorcGepnL2OtJXgeJHhcPFuD6Oit/qcv21R5lwq5DbbjFPg0lboUp7yj9rk/G8DKH3Cx4=" ], "X-Amz-Request-Id": [ "CBC5A9D0DABA8188" ] }, "Body": "" } }, { "ID": "b01c53b71b7b4db3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sX9uWukBZUqEFeEraLfU/lu7yb4Igei1CjUDIeqvVMaUtGQ4DYcNaE8cgGVEQBpt41KVXY5rneg=" ], "X-Amz-Request-Id": [ "79FCF2BEEB23A113" ] }, "Body": "aGVsbG8=" } }, { "ID": "02ed09b2055ca13d", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ULQ6evDdjYsEuWj40NCGCRJ8OmtuvrE/LCST7UYwxVpPVhzXgTnSOkmrX3FKq+VIxXf+h/YsBFM=" ], "X-Amz-Request-Id": [ "A7890ACDA87DA657" ] }, "Body": "" } }, { "ID": "fa0ae52ddf164082", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%3A%3B%3C%3D%3E%3F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "v4aLtOFsYXtOcOuMKDxWR2WygNqDxcNdNADTLdY5lvkc+d8Pc5kgeXHiaTFANVJ8+cX8VCQJTLs=" ], "X-Amz-Request-Id": [ "53C81E1289A42217" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/ascii-5.replay000066400000000000000000000217541367004507500315410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPxElAwZ/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "89ba5bf1d6128926", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "CEkXTAJeDwrCbkC8i4hS3DmFkZdoN03jlVuMsq5jhaGNAL6MBQ2GfKw+C4S1okpzClBkbGO7OjU=" ], "X-Amz-Request-Id": [ "B08DE35222158AE6" ] }, "Body": "" } }, { "ID": "1ef39f7e4d26ef76", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "oyKdxGw9dosL7SZzyeF6LFYkQqJyoxiiJuyy/+bOO6pirnjyeZ4tm/P6E9LkPKcRr0TNyyWoODA=" ], "X-Amz-Request-Id": [ "8D3814BCDB2A0A0E" ] }, "Body": "aGVsbG8=" } }, { "ID": "dc9a709b8bbeddce", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VM7oBfaD2FJ1tRfG0hwTLYaIzGCIBEpVT0dGYLbu0o6LL0R0nxi7Gc/IulJlcBVB6qtV5N14VRo=" ], "X-Amz-Request-Id": [ "3F067EB888F585A2" ] }, "Body": "" } }, { "ID": "d64d0d05652d320f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MigQPZF+y/NeoT700ruVBQhnBzOp0nOwOPQ+ns0AIftIZaebMATSYUAgQGwm2ht84huF5YcRXD8=" ], "X-Amz-Request-Id": [ "9C0CDE8F117AD09C" ] }, "Body": "aGVsbG8=" } }, { "ID": "72d3da2dfe275b20", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JMQZj4bnrT7GE7AnVAZCiUQMgdkDswwivkR/UWQnYEhUrWDmiTRA6vUwvyaHepKtxHY/bV0XqUk=" ], "X-Amz-Request-Id": [ "A7EB6A2E32A3BD6F" ] }, "Body": "" } }, { "ID": "d8d39bd4797dac4d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%40", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Au5catO7FtFL8xE5KJRLNP9ARodXpPX7GHyiIBASmIKzJB51Hflo9xRwfO6nbefIpw/BSHmClgA=" ], "X-Amz-Request-Id": [ "A9595EEB90FBDC7A" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/ascii-6.replay000066400000000000000000000220501367004507500315300ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPuKfaVlf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5f8050171128fb7d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "28doChb390ofLCMuKCjyZ8XYKW5dcoCKK0xfhyIr+DxZfVEMsoyfDdSAHfiS57hihC5Jgd65DY8=" ], "X-Amz-Request-Id": [ "45989B930483FF4B" ] }, "Body": "" } }, { "ID": "5a645ad4fc6751cc", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6CFSZECV8QYCNJcCB9nmsHw6sou6dizQ7/U+Y1DyxXdU5i95iisuIIRjlqYxj+dFaI5qUiT5C7Y=" ], "X-Amz-Request-Id": [ "EEFB9701B8EC8E3C" ] }, "Body": "aGVsbG8=" } }, { "ID": "a0d6b21c9c2b7be8", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HFrwQorWJf78dbME1AYpZ8sWKoGBpd8mcHDuX47eozaZjyn0rbPK2es596VydtADkVUI4CYYRNs=" ], "X-Amz-Request-Id": [ "3BC3FB14A21848A4" ] }, "Body": "" } }, { "ID": "0f878e340afaca94", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "kiqHXHPNBfGdQ8K/4K8vStCOK5EivqCW5SSeItgJg/jL0NptsqlgOFvEKrjVNyPzSLhJwDTJ1dc=" ], "X-Amz-Request-Id": [ "B9BD6BE6051DA8BD" ] }, "Body": "aGVsbG8=" } }, { "ID": "bd3d40672d4212c5", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Lbvm2a0XA/3ONjywaBHdlLYONnqt5qE7yRJmi1elI/dvubuq0x/NV1GddpXsH65O4U/ekt4xk2Q=" ], "X-Amz-Request-Id": [ "93DF6ABA39D30361" ] }, "Body": "" } }, { "ID": "a5e2eec7318a9166", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%5B%5C%5D%5E_", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "zITVgXj5+iKrzKPEt7aloF0ahmZ9u0sqEbkVK4g7VlnIt9ZwsA5PJBG6cVZd8WroNWm4viOLxCY=" ], "X-Amz-Request-Id": [ "6C2AE9F3EFCEFB9D" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/ascii-7.replay000066400000000000000000000217541367004507500315430ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPuMtPDDv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "08ea97b1fd1200f0", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rUVftuxzTRudum9C3gFREgPd883D0W76i0zb4/WX9RJ6FdeT5vGCVuc9A3/G1ogU+VguIhkAsVw=" ], "X-Amz-Request-Id": [ "CC451E408BE9A3C0" ] }, "Body": "" } }, { "ID": "7c3fb85f774e1e80", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "lG1PZ3HZLxh81BrZvr1Xgzn0onqnJtNKNwsz3AaXEE+dK8hQUDrFjtIYnVSD+UL5Gjlv4OnGmXM=" ], "X-Amz-Request-Id": [ "FDC00DAB07C2E9C0" ] }, "Body": "aGVsbG8=" } }, { "ID": "dd8601ed78cea398", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "gkhH+a5Fm727TIfyRUb6DtlM5Exg/N0jgGv6YOzSSD05X6iqvrH9rRufw+C2dbQptjpOWvdLm44=" ], "X-Amz-Request-Id": [ "3692464C64372FB6" ] }, "Body": "" } }, { "ID": "1d1ef173eb6c204e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "dvuGFe5UbmJ2wDcTZtqj98I9DJ9k3eAUuha4AXCyDlsMR8vev6U39bSiDIEJxU8KAaf51ravjlc=" ], "X-Amz-Request-Id": [ "A5AF91715F2FD36F" ] }, "Body": "aGVsbG8=" } }, { "ID": "50e7bd2eaf54ac29", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "c3V7/aSrx+eO0XdBSQv1HHJFkJ2UWsqq2mkFgLoxB0mCAVNALs7stX59//hVavgST14AnLL4j9c=" ], "X-Amz-Request-Id": [ "01A18024242BA6DB" ] }, "Body": "" } }, { "ID": "26a38e1277ea8591", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%60", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "03J5f7509VhqLmtXkWvf3zgtmvZBvI5AXE4ARcvD+0iuhVfz0pcsaSyGJjCsbtVfvvXlY5Xr70o=" ], "X-Amz-Request-Id": [ "B8CC95CB4884819E" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/ascii-8.replay000066400000000000000000000220501367004507500315320ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPvLCwT8/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "6cdbfcbee9653a6f", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sYv2ejE9WTsZiv63nb+59ci5bnjsKMUui21DY0FyXFCzXiJXe4FTBA/nvwUNj18UOGXOVFsZXeI=" ], "X-Amz-Request-Id": [ "BCB1105D3178AAF1" ] }, "Body": "" } }, { "ID": "1199622f57fd3a88", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2ADd9LUBIuJpwQsFJd9gSR9Gt6S5E63Kg0ttmQ0oVIM+IrPyN2KwyCQlvf/dnGiJNqZBUvOQQPo=" ], "X-Amz-Request-Id": [ "D4D05A0B8578CE03" ] }, "Body": "aGVsbG8=" } }, { "ID": "b7ce4121f49e39e7", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "PP1o5dnSLwvJjlbj1fBB2LrIE4TkVcbQ4nDgChfSfTIxAN3MOgcGRmkLv/DDZmx2PG7fdonRWqQ=" ], "X-Amz-Request-Id": [ "B16DB44D54082C0A" ] }, "Body": "" } }, { "ID": "64d1289ddb34f0c2", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ngxFB2Pw1kcqYJkkOJX4kMYulPlecf9PVp4KTPQOlG3Wjnh+CMUhEZRnsxBxWnJJPJnsIh2Ob4k=" ], "X-Amz-Request-Id": [ "70CC247F65AE7A20" ] }, "Body": "aGVsbG8=" } }, { "ID": "6e572816e188e8b3", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "lbE0kMjIOZME0Ply5AAzXMJfGKQAb4B5XQoNNEtMctVbOYU9fGbsf2Skl48nohiKJ9sl795m6Pc=" ], "X-Amz-Request-Id": [ "B0E68088654BE26A" ] }, "Body": "" } }, { "ID": "0945e00a12e400a8", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%7B%7C%7D~%7F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "yVKKkQHDXTfYGPrSSMLeyAWsU1PkDc4b9PhQkcBEkLPJ9yKYDxE1V1X3O6eS7BOEmavutmYbI+A=" ], "X-Amz-Request-Id": [ "AA374F8CA6CA6AD1" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/backslashes.replay000066400000000000000000000220641367004507500325650ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPvCIMT+/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "bcb9f7d077be6fa7", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rYnU+PtlQwqXV7MlMSKp+Urhs26hZSp/J29Fi3WYJyh/KTLbbqhFhiwuVXcw4YIUcBi9iJmpdlA=" ], "X-Amz-Request-Id": [ "EC80C05E5F65A8E6" ] }, "Body": "" } }, { "ID": "ed613619f297c759", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "nMnl5b4MGy9kIxEO9nZ+MZ5dNKjmHW4VHemZSKeEfe4wyN8kixJOpoj2XMsv32zUnazXsZjJnLE=" ], "X-Amz-Request-Id": [ "E61D51F7C54A30EA" ] }, "Body": "aGVsbG8=" } }, { "ID": "1453d21027299513", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "n6PbRT4yI5ZinprraeVg4jQr2/431dXYDgX5WPtKvxoL/iaApyxxhFPn4xYPDBT7hdxEmyO/V4M=" ], "X-Amz-Request-Id": [ "4DB0CE7D5443F677" ] }, "Body": "" } }, { "ID": "6aecfb40b7566692", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "vUaS3v+MyA9Zh43DNvdUhRMqLek0Qe5X08kXYgJKr0kIZbFjchwEJ2vPhzEP7creOHWr3k3zWRA=" ], "X-Amz-Request-Id": [ "74C58F677C928147" ] }, "Body": "aGVsbG8=" } }, { "ID": "da5e69f3e0f4e737", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MnKSQvuzdqLGsYZJV2XfntuOUftI+OMONYjA81CjH7O4T2//r2CT47qdmYdgLkzQp1FvVAR9gT4=" ], "X-Amz-Request-Id": [ "32BF065561A01D87" ] }, "Body": "" } }, { "ID": "6cce721dd35ebd83", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%5Cbar%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "y0wab013MgZZPx92gN68c7WtyKTrWxUze9ZgYApnF0C+luVN0AoyloH+oIBsMZKGqZUZ06c2rok=" ], "X-Amz-Request-Id": [ "DC9C31CD1DC67142" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/dotdotbackslash.replay000066400000000000000000000223121367004507500334470ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPvGeAWBP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "9408da1a94cf9643", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "8e41TTF1qfCRcZLjHotOV0QqeI6VYUJDwo6ACLvLBwYbI+X3zsrcRPFhyunWQcAz5K/eu6vEnxg=" ], "X-Amz-Request-Id": [ "DFDA21C4875D76F1" ] }, "Body": "" } }, { "ID": "5777e407a8d017ef", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Em1aXuVDwAiy6c1P3tbvQ5Jt57Ob1ls+4B60iviELgYWqAzGSeapEC/jAEoMsY9ludmYBKdvw7s=" ], "X-Amz-Request-Id": [ "CA05133A99E96441" ] }, "Body": "aGVsbG8=" } }, { "ID": "996fc7af702f6a8a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/eTvre6XqxoZkWslReliDUni5ju6n6xyCceVmhozxWA+lTi76isDb5kJcGSdeAO4kgtur39aMbM=" ], "X-Amz-Request-Id": [ "E500E43F6824C86E" ] }, "Body": "" } }, { "ID": "32d5e98ce4e7e553", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4U8vwv3Np68endJdE9K/SZpH8FIlN9GBXcvy5oTxdbD6/v29186RhOyr4gCZ515piP4SEkipEEY=" ], "X-Amz-Request-Id": [ "1364BC69A7CC74CE" ] }, "Body": "aGVsbG8=" } }, { "ID": "f012eba2db3ef3c6", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rL6eMLYJXlrwdqK5jrQmGaeJKuCN09vXGYD+Vhd9t8AlTqLgMCEv82iR6kne5pIydkRq0wuCwT4=" ], "X-Amz-Request-Id": [ "636228BAE3583D7E" ] }, "Body": "" } }, { "ID": "c285d1c535759def", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "FJYYIeIafLAZYXyy6ZubPUpTWa98IZfGye/DWXZHBtMviiVQ3uLz+U2/5g6OkwQ1nvYlk5KCCHk=" ], "X-Amz-Request-Id": [ "BEC3E89106136526" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/dotdotslash.replay000066400000000000000000000225101367004507500326260ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPxG+pGL/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "fc61ec7482ed7821", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sHUwP/kaJkBlPhzD7b1wJvKgamS6x9uccigf2XlZ4qCb+Ag+1myflZLK3Gn1R9a0AsI4QeS3V/Y=" ], "X-Amz-Request-Id": [ "62C13BA76DF0FFF5" ] }, "Body": "" } }, { "ID": "10321bcf430a3d58", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "4v1DMmLEkNd8l90Y7tgyimqKwxDbYws8E+XxSXOPVtinhpIy0PRNuW6V84fJ34D2eaYj5cWPysA=" ], "X-Amz-Request-Id": [ "D5D70AE3FEA9C9CD" ] }, "Body": "aGVsbG8=" } }, { "ID": "3ba573cdbbd883f5", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "SSWnBslGF9qa8+Ce72zmgoVuKt02zfo6WbBgkzo1Ai5RTukKUzIySuV6z6ZbE7OcoDE6hXSYoH4=" ], "X-Amz-Request-Id": [ "F57482A12A9B2CB8" ] }, "Body": "" } }, { "ID": "2a8fda1d9dd83c62", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "OXO4nLv79+DclnAJEJV4+2YSbIaatVExxS4yN+Nfj3T6XLjX1JpbBS+r9BV15CBvCqrbrG0ZKkw=" ], "X-Amz-Request-Id": [ "2E72ACB3ED8A0AD8" ] }, "Body": "aGVsbG8=" } }, { "ID": "1e7e63e69acd745a", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "oI12ec7q9npGRaGTYuIePyUsri/XEUKvuy2BsKExCpZujhuQdsWVYjhvb2WNHN/CEx5rPWAa474=" ], "X-Amz-Request-Id": [ "BD889D04977BBE5E" ] }, "Body": "" } }, { "ID": "b3dadff31745e81c", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..__0x2f__foo/..__0x2f__bar/..__0x2f__..__0x2f__baz..__0x2f__", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "nZxQ5Y7+mq0joVuSo3n+sxjYZS3WGHZPkP+ARXmN46pTfoLHfuPN32Ya3mT0XYwytZHStxVOHYY=" ], "X-Amz-Request-Id": [ "98B9D2250444ACC0" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/fwdslashes.replay000066400000000000000000000220341367004507500324420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPwM5M7D/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "48e3438143f1358d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "boLEDTEW+2Wf5F82CgpitJ6EC+5C0gE+SHhGgcQPDIJDzOUaqzoTX+ui8cxRfigizq+9F6uzTHQ=" ], "X-Amz-Request-Id": [ "11607090E592962F" ] }, "Body": "" } }, { "ID": "7e260f289142e39b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "N37AUG+7bauOHkvSFEbxpNtyZrwPX6sdCs/+xshNvoS6VC1YPjTO8x2jP+iLcGXo6hYK0BfLl7A=" ], "X-Amz-Request-Id": [ "8A9B3817F426452E" ] }, "Body": "aGVsbG8=" } }, { "ID": "f429a0a0640bccbb", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ndCKi9BWEhV7N6TNGW8dHTEG3lXljCIkxC81wUxuHnnO1wCp3zKRZth79gd57BKavwjVVG4rBlM=" ], "X-Amz-Request-Id": [ "2CB02D2D0D1312FE" ] }, "Body": "" } }, { "ID": "77f65888242a4683", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "A5ZTx1wrEE95UoZ2RQ5246SUYOtp+0ucSbyd3f9B6tt0nY7I0gYFGDuQEWbvdVUrdHvCjUaZYk0=" ], "X-Amz-Request-Id": [ "8E4A1FE545D00B94" ] }, "Body": "aGVsbG8=" } }, { "ID": "6fe75aa2e05e01ec", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3xo/q+qT8kLrSb+I9sTYJ6s60plDsnhCAkXsPqWQunY7IR4AzqdMuAX9LMJOYa93wnNZc2IDJMo=" ], "X-Amz-Request-Id": [ "8735B5C9134AA251" ] }, "Body": "" } }, { "ID": "894fc9532943b9a4", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/bar/baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Jw2EC8gS75blrL9E7GGkQnWhUelLPn5lLBU2aUkAgCzW4Vn8Cn+gNxH4v++rB1PIakdQKdrwMGw=" ], "X-Amz-Request-Id": [ "F1808A24153DB2D7" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/non-UTF8_fails.replay000066400000000000000000000015501367004507500327730ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPuKahNW/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/quote.replay000066400000000000000000000220641367004507500314370ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPuO2e3Uf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "65b0ed5ded5bb42b", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XTxiyfxFVdgt+k13Ax7j69c7MyfbwUcy+188kA8kNGZKnmQWwa2ylu8NbLpjxTQ+j7XgrG0KQ00=" ], "X-Amz-Request-Id": [ "5F6FF4919FE6C518" ] }, "Body": "" } }, { "ID": "91f3c7e6c4a8d640", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xXxNQsr+sTieLaL2FjMLvtrbdDrPkrFG74Pvz6bF79w866Hn+fS4gpKD59gb6wuiyFDGVxvOX20=" ], "X-Amz-Request-Id": [ "4395E3C61D10D8D0" ] }, "Body": "aGVsbG8=" } }, { "ID": "d7c0cf3945869a58", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZeAR/XJD0UD5J5A5n/rWKUl9eBd2yMjqTSbfWrXZK6mx21nsw/IIMeuzKV3ZkTrby84mZnJpUK8=" ], "X-Amz-Request-Id": [ "96CCCC3FCC238378" ] }, "Body": "" } }, { "ID": "c8114d13f21e543f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0Qiq6bZnvKB1kBIiX3T32A1Bw7G6rYsco7yMhS3dSLeSBUZSHvpFWQVlMT82SrjvPwmPzQdPWx4=" ], "X-Amz-Request-Id": [ "4EF229CFF282F085" ] }, "Body": "aGVsbG8=" } }, { "ID": "3309d282629d7e8f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "UDquGfG/xlYce+vnQ+ZiOZKKPsEx/gpbBl0qWCLGYeW1uqF8J+aZ9RqPu9yRE6rbP0nmxXs9EkU=" ], "X-Amz-Request-Id": [ "7A2AA06821F6287C" ] }, "Body": "" } }, { "ID": "55596a4ddd3cdac2", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%22bar%22baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TWni5VgKf+C87vwdNmm70BBF4TUjxwZg1M/PtN0UdAVnMFdOYbXf5hYnIlHtwqZw4GhrNM0WBVY=" ], "X-Amz-Request-Id": [ "7102B6EE6F52081B" ] }, "Body": "" } } ] }repeatedbackslashes.replay000066400000000000000000000222101367004507500342110ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys{ "Initial": "AQAAAA7WcSPvEZeeaf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "ffde03cb7f47a19a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QkJFO8t6uHhvzw1cJksu8oPKb97kmeWwMZHFq4Nwui/oJ3ep1W+nWgKniIyte6mSpG8qJhSnOqU=" ], "X-Amz-Request-Id": [ "39CB323C6C579492" ] }, "Body": "" } }, { "ID": "a008fb39f1edfec4", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Q9M5q6vREhKrRf2vE/RJoP6A7dDBSiVK3ZvzEfg+ZnpOPaXHn+X6O+XoJn2uSr6jqvVjCsP7EdQ=" ], "X-Amz-Request-Id": [ "5B7EB4FA56C31102" ] }, "Body": "aGVsbG8=" } }, { "ID": "2c018504937ef5fe", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "E6YPZ1jfPoTdLjCtNHacKeJE/fCCBqzVpG1jMaADmvNUouNKyY8pvFFFZyu00eRib9Xl1oMlgkU=" ], "X-Amz-Request-Id": [ "4F399DF409F138A0" ] }, "Body": "" } }, { "ID": "93ad8a1891ad5b63", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "FmFSVvUhgxiwaGJVhik4jQeQNV/bPq5c1Y7d+1z4X88EcihrsrusztRnbJI9YFEpacBY+YxjyOE=" ], "X-Amz-Request-Id": [ "AF7496AF81265366" ] }, "Body": "aGVsbG8=" } }, { "ID": "63c791aa2862ffff", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "X2Eq6nl6YELEWz+/iDEhGLOOuLM19O+BYJ45Zr3Tx/X0yZJ2NzFi8vDpgTj5kN4igreHNAB9avs=" ], "X-Amz-Request-Id": [ "4184330AD24FCFFF" ] }, "Body": "" } }, { "ID": "d22f1288cbb43f05", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QlhaecfGpjXaU6zPwjo34hqYnZ8ybDu+EEjLA91sPPDbmAmrZI5tHCQ5691rQDX6TxxmKr4zE8E=" ], "X-Amz-Request-Id": [ "BE2FD8E6444AAD79" ] }, "Body": "" } } ] }repeatedfwdslashes.replay000066400000000000000000000222541367004507500341010ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys{ "Initial": "AQAAAA7WcSPvNoCAAv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e44e9d3cffb25ac3", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "rdV+RS6CP77Kdl4/M9fZ+v1FlnX9yn3tUOABf/VMFNAOdRapl3SysirBchH4h4DbSbBH2/NmzMU=" ], "X-Amz-Request-Id": [ "7A45DEF9DE85DAE5" ] }, "Body": "" } }, { "ID": "186b1d5f6a56d49c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sB94jUFMnKq5SUrY90V08/bRXFxksRSBwaWOb7Q2bgqZFW/7WzKLZzgtK/YmJ/vfF78xdY2EH08=" ], "X-Amz-Request-Id": [ "CE8C559C1307B890" ] }, "Body": "aGVsbG8=" } }, { "ID": "364574d8bd5b4cff", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7MXlHHG9i8drZzZYtWpmQIr4HwA/c7rCiju9J0MWoRySkA9LQkF3IT8hLBjjBH/AWu5smU5pg0A=" ], "X-Amz-Request-Id": [ "0E641F2E0652EC68" ] }, "Body": "" } }, { "ID": "18771419e6d7b27b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0I3bQXJyk8buvyVSp557SKKXiOmpOaQB6niEWnbweJk9ASaEkHeeTsOsd2H7XTXrrr5/OwBjG7M=" ], "X-Amz-Request-Id": [ "07675DC0B2AD2438" ] }, "Body": "aGVsbG8=" } }, { "ID": "df9a5955432328be", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "UekBV21YObQ9KbEGaqMhASTyA2gEiR1viCKN+kBwKxgVSmujDltIRbE9MLM/YWoxv7NAGEaSkTI=" ], "X-Amz-Request-Id": [ "730A849F93E118CA" ] }, "Body": "" } }, { "ID": "623f91325318751b", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo/__0x2f__bar/__0x2f____0x2f__baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Zlur5vsnIXsOi3p53qtOOW7g4q3aciU10ywxVRKUt7uRYokZZ2b8qj+sMF28fBW9h+ergTx9nKQ=" ], "X-Amz-Request-Id": [ "33928CBE4FD62963" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/spaces.replay000066400000000000000000000220641367004507500315600ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPwBcpPfP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "87905c3276a39169", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Bc7koDURQzz6eFzkmNPg4bwI/31OguvWltP3YpztjbqKqXZ+ukeN0hOLGptgx3iPii+8bM3dy+0=" ], "X-Amz-Request-Id": [ "35D6B47C3603B91F" ] }, "Body": "" } }, { "ID": "7aa486cc2fe6e596", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "JmiJHegxWZQM3hFe80jyAUg6MbzclS+0ASecZ7SH5K1OfPWr8/3iSA3WApOBmz/JvfF/8v3e27g=" ], "X-Amz-Request-Id": [ "3D5F4F9BC9DCB2E5" ] }, "Body": "aGVsbG8=" } }, { "ID": "91b1a85d6e1a87e3", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7RVaXJr+5zwbACm7w6ucEI6+g0RuKi2CfqYp0VP7H5crt/c6CPinyeu0Z8H4GpXOJxVPt0lIlAw=" ], "X-Amz-Request-Id": [ "B79BA7E768A234B3" ] }, "Body": "" } }, { "ID": "2af30f87bef5e804", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "x6SKNcvwF/Xs4bLr3JTIDMJ1kWal95TqCgwoMxc9nT+4S74uK2zmaUy5RPnTwg/XCbSBM8tWl1U=" ], "X-Amz-Request-Id": [ "108454BA44670762" ] }, "Body": "aGVsbG8=" } }, { "ID": "0e692d1a10fb2738", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "9hCK51CquVkEfKVzfTUpNuj8pUjtCNMNJDWPnyMrllUeawEa7L4wb5FoMQ/oc2knw9hFanW5P2s=" ], "X-Amz-Request-Id": [ "EDB91FBB2B323819" ] }, "Body": "" } }, { "ID": "17cb4be176d274f3", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keysfoo%20bar%20baz", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZyEdgaoc+a2mMpxLozlVL7tK8aLUHbXNYsvtemrVy7OtOrCH2Dhb7nW3OMOH9VsJiNyWpF9G3Hg=" ], "X-Amz-Request-Id": [ "7B80C3B47A18E0E4" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/startwithdigit.replay000066400000000000000000000217701367004507500333570ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPwDpuCbf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "31a0c676e65e8c70", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "LkQfMFzZkzCUDuC+wZ1+9O5toV/CKj30qqqhM/ZtigQlfV5qDWd4/WPTGB+VK6UsqcWKl8SkFkI=" ], "X-Amz-Request-Id": [ "C276E2DD7305576E" ] }, "Body": "" } }, { "ID": "ac2349e345ae7987", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "uvChl7lhpeR4MObArwwxUqKKfv2iDCQg8kPWwf3urxQolhnIWi+A4kO0zNp12kV4+k143IvC3iA=" ], "X-Amz-Request-Id": [ "AD5866F8A4086A1F" ] }, "Body": "aGVsbG8=" } }, { "ID": "2ae8d2df151da22b", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "jWANB3JtwTC12KOTZ5CFVtxG+kkaIOlU71jrbektmMN1A5YAXboI4kcDixYnPN0Kt9HuYeXdgNY=" ], "X-Amz-Request-Id": [ "A6042107970E7AD4" ] }, "Body": "" } }, { "ID": "e22a752c5a15b68f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "r72Ok0jEHl8Oxg5177hfxTu03btUgWOEfM8ussnwLPLcgNwk7BCbnAcBg9oU3nFMUUcsNfthA8g=" ], "X-Amz-Request-Id": [ "67C73D76A35E8418" ] }, "Body": "aGVsbG8=" } }, { "ID": "abfcf44e2e1b82bb", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "izk9UwMxTNx5i8ZyrmAqibtoYjSspwN0gCgdEbdAJhTQPrdmm2ebb5pB/pootuWe5IQSaF4Wxqo=" ], "X-Amz-Request-Id": [ "1EDAB797D1A23CBB" ] }, "Body": "" } }, { "ID": "10684ea359287214", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys12345", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Ny2rm1A5iIXXkEWLar+S5OBh0BaJ2QquUv6RlrchdAZ1Jy/2nUvlaqWtQbtyB0+KvQW38zRAW48=" ], "X-Amz-Request-Id": [ "6E253B308B4DCF36" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestKeys/unicode.replay000066400000000000000000000221741367004507500317320ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPxAHA8E/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "96eda7c76a4a1bb2", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5JGkXRy+VTao7tnXGbd5HtM9MT38RlVzTz11J5x4nZ99MjWHu50/ryxnlmil6+2HOCnHvElSYwM=" ], "X-Amz-Request-Id": [ "4C21118DE24219C0" ] }, "Body": "" } }, { "ID": "05113cbb9acd98a2", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "gfPjzdqjlIReFECHBdQ9aSGeQ3yX47Xcu61Luydpt57/CP7l0xpJ8ldRgMAZGj+DJ8Hj6Zq/uX4=" ], "X-Amz-Request-Id": [ "02C2C087D0D5D934" ] }, "Body": "aGVsbG8=" } }, { "ID": "86f2df46737dadcd", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "nBl5UcLBBPc2XyakbG5Hv+gF0PnmI2jmj81goG+f1GR8un5qHlkOtgS6+GWjBTQfj7syOX3PZw0=" ], "X-Amz-Request-Id": [ "01AF0127F682990B" ] }, "Body": "" } }, { "ID": "e2add334e19188fc", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0x2Jm69UAzsfLVQ7ewc0sVRYJv6FvZThrKgpYA7mHrYvEy4G0i6nG0/hUTkxvIwtryOfobnjnt8=" ], "X-Amz-Request-Id": [ "ECACF498C7EE3C04" ] }, "Body": "aGVsbG8=" } }, { "ID": "214756805ba7c6e9", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "iUKrBv0bPqO4DWHyookXTE2so+0sJN4PrSgYlVCTleKkxplqMMROqTbhu6j+i8iaLWtldCzIS24=" ], "X-Amz-Request-Id": [ "5C257F824AA038C2" ] }, "Body": "" } }, { "ID": "4c53b156cab1abc9", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/weird-keys%E2%98%BA%E2%98%BA%E2%98%BA", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "iKYAAUEOIY6eH7GWITAj6sP45883upzB6ndMkRtVJD4NcSuFNHybhv42JR+CMQ8L3mLrcgz5nLY=" ], "X-Amz-Request-Id": [ "C7CB952F0B95D692" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList/000077500000000000000000000000001367004507500270605ustar00rootroot00000000000000PaginationConsistencyAfterDelete.replay000066400000000000000000000302211367004507500366350ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList{ "Initial": "AQAAAA7WcSPnIVlUCf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "93f42b48a9af9e35", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "oD7mxolCKbi4MRwk75arG5uAUwBn0tCersJ8/WkKyQlTd1+dRrLGPwwzZZGnfwYN8o7upLDotic=" ], "X-Amz-Request-Id": [ "FDF128A11F9222A9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "8c02f65da0795ae5", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=2\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "2176ZYjQ2RsgoIr4h4tadBuTpyIL+RuiTAnicOTByv5z7mVDPIMLo1BILkLzhm9FYqOW6hopy54=" ], "X-Amz-Request-Id": [ "0A83211D1BFC1C9A" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjI8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzE6NTYuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "3da262bdccd7e915", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-1", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:56 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "+sqyd7YbcEt2YKGDprwtAZSnf59Wj8uMM7ToiFOeQGupV2MvU+H7eMyERbo1GV3J2AsQcEJXl9E=" ], "X-Amz-Request-Id": [ "19945059FCFB11E9" ] }, "Body": "" } }, { "ID": "0227697f3511869a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "SkxLsRS9Zp+ocmiwNLovG3VYhZOkm8tdZM1GGxXS8qhHaeeM6QG2D2zHCKJiHgIu/v62ACJPBOY=" ], "X-Amz-Request-Id": [ "CC2B3FDD34475B38" ] }, "Body": "" } }, { "ID": "886d5a41f6279fcf", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?marker=blob-for-list-1\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "fLXehaVyupVg+KmaCyzrYjMaxR5NqAYibHLvwBBd9d8xaOTQWiw5YZuQZpVrnULyuapnrEw+ZTs=" ], "X-Amz-Request-Id": [ "91678316856DB56A" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPmJsb2ItZm9yLWxpc3QtMTwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTI8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "039d88e9e8dd462a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-1", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2hmKYuN5+k4T4MQw3Xd8i4n52jskPX/xreY/SIY6vOmnv3oVrEgSeEYp9fYXlPStcSiQcmhmjHo=" ], "X-Amz-Request-Id": [ "D776CA25B564BA7B" ] }, "Body": "" } } ] }PaginationConsistencyAfterInsert.replay000066400000000000000000000302241367004507500367020ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList{ "Initial": "AQAAAA7WcSPnEjhyYP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "dd9072305416e454", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "XBtr6iDXptFx0RNGI8yLelyB/HYAoHOAveyEbRVRtnFxt37inoWEcbFU8euJbWcwoBmv21yYC+8=" ], "X-Amz-Request-Id": [ "4B97843739A250F6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "2ec572f135f852bd", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=2\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "mLrw3i70+hr6BQdrFCC9nL1sKzUPMxJyVJRqiacqp2XCX6k3bF0DoJ50l3iW8DHkIMGews8Fe78=" ], "X-Amz-Request-Id": [ "69E62EA64A245CD2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjI8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzE6NTYuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "49edb218d2a49abe", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-0a", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XejJFrTMMdetfdzV9Moqd3Xh/jnplzmZmvIBc/PX+qJ9NCfhn5Dkil7Iv77T2Nxgm9t9eo7M9iU=" ], "X-Amz-Request-Id": [ "883B7B5B809D4C01" ] }, "Body": "" } }, { "ID": "02be3526140697d1", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?marker=blob-for-list-1\u0026max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "Blw3Ym9YZ0p93oFaQMN2NKQqeXNwlP7Oe6ZyNBFVxfcIDSmA6R/MBncOBVVcH1qZNrgTaEZZTNM=" ], "X-Amz-Request-Id": [ "CE1F6279054BD58C" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPmJsb2ItZm9yLWxpc3QtMTwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTI8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "8d07663a04f1172f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-0a", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "POUIn2Y64t33U/iwj0XsFjksAEWiD8vPOQcP9RfQhJdlj38C9ij6iVnhlmolufgH5URQTrHezHI=" ], "X-Amz-Request-Id": [ "9B036E6DACF9BAA9" ] }, "Body": "" } }, { "ID": "b11757d487844d52", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-list-0a", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "W0uBUmAnbb5OO9P90DbgcgHiOnGDvgCz2VlhRcEu/asx/RVpFiVzINszrd0S3+6kvJoGVWPjmd8=" ], "X-Amz-Request-Id": [ "8374EFCDDC4DBC9B" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList/by_1.replay000066400000000000000000000236031367004507500311340ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPmMocKZf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "4a34dbc4e3c882d5", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "nDr6BX9Sh9ISeT5CvHONXmzHhEPFku3SbXuCDRZsJ9T/mnTChQ8nvRdqoqeFfRUE+IX9w0KLm2w=" ], "X-Amz-Request-Id": [ "3D25B4257D7F0FAF" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "bd5904dcf20734b1", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "YfhAaPUyorm57N1ISBKo5KjnmK8/0zqlZshEC4rYeVtDPVgdT9l4OaOQ25QTYXBqu+WWOjhVmoI=" ], "X-Amz-Request-Id": [ "32B6D90C3C729B64" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjE8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "caa28fb44cc30de1", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?marker=blob-for-list-0\u0026max-keys=1\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "Rx5eslpfWWuwmA3PUNPJMmRs1/ggeffOMCEhWo1BD8xEfM7vCDMQ02uqfRfJa2OS+EiVcpVtWNI=" ], "X-Amz-Request-Id": [ "45A0AC748757A1CA" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPmJsb2ItZm9yLWxpc3QtMDwvTWFya2VyPjxNYXhLZXlzPjE8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMTwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAyMC0wNi0wOVQwNjozMTo1Ni4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "8bcdabe338727ea0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?marker=blob-for-list-1\u0026max-keys=1\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "zCHQmxXnba4rimWk8XihprGau63UTXQ65nHVSQqM6xAsa5Xv615cS9jJxgRetz2LQE7SVbiL72A=" ], "X-Amz-Request-Id": [ "E3E71802CFE567FF" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPmJsb2ItZm9yLWxpc3QtMTwvTWFya2VyPjxNYXhLZXlzPjE8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTI8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList/by_2.replay000066400000000000000000000204001367004507500311250ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPnAnx90/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "fbb867a440b91749", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "uldXLm4npm/XKAbU9IvxMATMzo5g3MIaXqawkqjEHYmwzNpoP4mD0jYGCTx7K/ZXYO7ezTQ10uo=" ], "X-Amz-Request-Id": [ "EA4BC1CECA93202D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "473bb4c46e3744e0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=2\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "9Hclu4grWeK32WScQ5RGcPlB5t8PHuovj4lxaeXnQKP75J9aJ8RrNuXMK4cLCIHEv/VUpcYL/n0=" ], "X-Amz-Request-Id": [ "6563979D9ECCDCF1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjI8L01heEtleXM+PElzVHJ1bmNhdGVkPnRydWU8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTE8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzE6NTYuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "4863ff681c1a1e71", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?marker=blob-for-list-1\u0026max-keys=2\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "LBa87es0pP5/M05h5XpY3FIE1jmwqoFDHYcH0rRtJiOShjwbXujxeJguo/eM5+9Y6g8vtN+IQAc=" ], "X-Amz-Request-Id": [ "34E71240EAC7527D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPmJsb2ItZm9yLWxpc3QtMTwvTWFya2VyPjxNYXhLZXlzPjI8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTI8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList/by_3.replay000066400000000000000000000151651367004507500311420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPnCFWTxP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e75e11f0b9a66207", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "RdYpYYF+dJJ4QWkOOn5DRZRWMxbTwK3q2zVo7z3oDTuVok4RwpGeMpZD5ta40UdbnsCX9APNQkk=" ], "X-Amz-Request-Id": [ "E40B58601E3F3C8E" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "2c4c2bf2a24bff1e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=3\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "VUKVjoD7r8ux3uak4WYVSxQwDLsK463h4gU/l3UnxBN/aENrX6tOC7QCTHGF3nw/3k7WyjzBmFU=" ], "X-Amz-Request-Id": [ "FF2C7A53A1ED139F" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjM8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } } ] }exactly_1_object_due_to_prefix.replay000066400000000000000000000134161367004507500363570ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList{ "Initial": "AQAAAA7WcSPmHvEh8/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "48dc7125e81fc978", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "ED3tpMTZhFPDHNuQF0ggJfhDLNE+tmocqpw/rgcLZq2liWAQMMGfRZFY7LQ+XmvK7NkMw6v3Ue4=" ], "X-Amz-Request-Id": [ "EF109FC9B3814464" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "eba75143acc70244", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list-1", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "uGGcnGlFGcKBf+lnShbNle9ypwh9XvEoF2T6gOwPu/Y7uL/3Uwhf1isct7BYbkoaAVF2UV92Wow=" ], "X-Amz-Request-Id": [ "46F4479291F7FB34" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3QtMTwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMTwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAyMC0wNi0wOVQwNjozMTo1Ni4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList/no_objects.replay000066400000000000000000000125621367004507500324310ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPmEFzS3f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "cac9515aa76dd446", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "MqqOQNUIlsjAJnfc7OnHM+ztGO+Csi1/PPEHLkYAoW9KyefxOMkJ41n6UMO1j03fhqS3Wy8Jc7Q=" ], "X-Amz-Request-Id": [ "FE31CDB47B80260D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "b1137e892e46feb1", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=no-objects-with-this-prefix", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "IRihEqllrehQFDZW2eyCpRJ4+eXuhc97Y5uTvyeH2KBBw5P8mMHdFGAMUSwcpdlYjJTr2CpeEB8=" ], "X-Amz-Request-Id": [ "8CAC0C23F5823E47" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pm5vLW9iamVjdHMtd2l0aC10aGlzLXByZWZpeDwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestList/no_pagination.replay000066400000000000000000000151741367004507500331330ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPmKM5clv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "adf5f60605f1f6ba", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "j/pncPw19HpwNRiDRs5wLUKv4IAKMG8qznfbM99QevCqV2ChgZtLx92p6BT2rU2yRONOM/9Nl7E=" ], "X-Amz-Request-Id": [ "DA07E202B849DB2A" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "fe79d08ef946f546", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-list", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:07 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "5QqA8Bg9onAS1x1u3uJJ/Z6rG4D7PtlieGgvh5NXjZ4iV+CjlvflmhPmKK0qAl0V0wGgTlNc5hk=" ], "X-Amz-Request-Id": [ "90845940189610E1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWxpc3Q8L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1saXN0LTA8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItbGlzdC0xPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU2LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWxpc3QtMjwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestListDelimiters/000077500000000000000000000000001367004507500311025ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestListDelimiters/abc.replay000066400000000000000000000770311367004507500330550ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPoMPAXn/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "fe04d8f754769f68", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "hXLjy7ihWZ8iEtaKA1AZXLlNiAzUWUtT6sKldz4qT1tT5/Lyssryvll0WKrihhF16Li6/63qpxA=" ], "X-Amz-Request-Id": [ "F4328F7528997475" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzE6NTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "3731f7e2bd40a638", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "NYVA0xu1bIN1Lwvb/gV8caP+l4pr2tiKLSfOhojTiU84UiGzHbwO30Pj7YFkr0BS2D7FDM2gc3U=" ], "X-Amz-Request-Id": [ "90B81480E97F138E" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzE6NTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNmLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNS4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "2066fb4238b82e94", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "hXZj04GQUtDtjHHbM7ZNDCKDRh9yUu8dOyzTYYzWr3mWyzZ2RlwPBgqeu79SES+LiEDYJSXEbL0=" ], "X-Amz-Request-Id": [ "120867D4852566EF" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiYzwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "6cfa27dd99163d1a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abcdir1abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "E2iR4ef2qnz60WX79yvA5DlRqcg8lXnYdlJgcYbTVFSJp+58112ix9uq5Bdm4YxzcLHYiGDqeyA=" ], "X-Amz-Request-Id": [ "1D33D2DAF53650F7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiYzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPmFiYzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjYi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "06a3c0668cc70ac0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abcdir1abcsubdirabc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "W3JDhIXKIOJbZfJQEmXsemvqLLCJA8b83Ev/bOtSFvwaNV0ivcP8u5GFAHiJzDnOAgCrr+Y6Rlg=" ], "X-Amz-Request-Id": [ "DBCA8FEC46CE3F62" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiY3N1YmRpcmFiYzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPmFiYzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjYy50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIxYWJjc3ViZGlyYWJjZC50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "5268f017d090310e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abcdir2abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "ac+QokOUWxItokbxmyw1WKlvfmXqbHs1qCzRr//C9zKoOR9hkUS7ldwEiekcr7C7oRSXLKA50co=" ], "X-Amz-Request-Id": [ "E570212385E67B6F" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMmFiYzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPmFiYzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1hYmNkaXIyYWJjZS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzE6NTcuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "fc5c5bfa62c2575a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026max-keys=1\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "Fv26q8WPRSF0UJBFlx6fD/FdyGut8CqBeGJo1xPkjEHEO4fi1tWwTyAyb76v93RLQOqzXeNPAo8=" ], "X-Amz-Request-Id": [ "187C54DF6FC71105" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TmV4dE1hcmtlcj5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmM8L05leHRNYXJrZXI+PE1heEtleXM+MTwvTWF4S2V5cz48RGVsaW1pdGVyPmFiYzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD50cnVlPC9Jc1RydW5jYXRlZD48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmM8L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "7849f36b47cd15f9", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026marker=blob-for-delimiters-abcdir1abc\u0026max-keys=1\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "2JjfRcYVtDcP9FO8p9sIoahdAUdos99SjG5IU/P7QM7G1wzgnu630B1TbWA4SdNmO//IKP8dHvM=" ], "X-Amz-Request-Id": [ "94553D4A625DCA33" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PE1hcmtlcj5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjFhYmM8L01hcmtlcj48TmV4dE1hcmtlcj5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmM8L05leHRNYXJrZXI+PE1heEtleXM+MTwvTWF4S2V5cz48RGVsaW1pdGVyPmFiYzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD50cnVlPC9Jc1RydW5jYXRlZD48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmM8L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "800d3a1c92e1a032", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026marker=blob-for-delimiters-abcdir2abc\u0026max-keys=1\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "cLPkS7tMiPm6sodItBYVoJbHNwW95vsny+juc3Sw37ihJu5NFTiUHpbTPCTMI5ZqoiKX5EI2IJA=" ], "X-Amz-Request-Id": [ "5B77626934769C47" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PE1hcmtlcj5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2RpcjJhYmM8L01hcmtlcj48TWF4S2V5cz4xPC9NYXhLZXlzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "a927c4a26f89343f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-abcdir2abce.txt", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "KJHn12x5OAja9sueU9ys4xkRPrXkGWKwCtJ9RoJHJZ6kZWcY7O3NCfUzWn77J4R6xoQAOFDR+BI=" ], "X-Amz-Request-Id": [ "BE601099A27F6383" ] }, "Body": "" } }, { "ID": "b862e0339f081425", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-abcdir2abce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GOr78hwxB1/xvXnVk6YtKzXrT9PuwyD8CaUSWYJ1zNEVtDSMCfugbrxz0lTh634q6Y4f2AuOHfg=" ], "X-Amz-Request-Id": [ "DF74BD7545EFFB47" ] }, "Body": "" } }, { "ID": "5ce625c79de23da6", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=abc\u0026max-keys=1000\u0026prefix=blob-for-delimiters-abc", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "p301ZSEDv/BHfW5jejJTgKsldwyS3nI1FXqQbhJZhLoRr18maKcA6qF+ssMIy744GriWX2rgYMY=" ], "X-Amz-Request-Id": [ "467A1E125DC61F3D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+YWJjPC9EZWxpbWl0ZXI+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLWFiY2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtYWJjZGlyMWFiYzwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "fa81abf8dd4c02db", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-abcdir2abce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QTy4SDedCV2tQ7OKJZnAWMCANfWITWAHxjrh/LE/e6e/+9ELbQ5m0NKrJYmShWDkQgJRo8iPkS0=" ], "X-Amz-Request-Id": [ "EF266C917D942B02" ] }, "Body": "" } } ] }backslash.replay000066400000000000000000000764751367004507500342170ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestListDelimiters{ "Initial": "AQAAAA7WcSPoF0u96/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "48feb62794431dc0", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "nNs+sCmSVt5l8DLyCNr4yclmvoM9CO8pE0rECorvRMMcOGWfCkoiofG/dw89RVOZrdemtnObodg=" ], "X-Amz-Request-Id": [ "9EEF798B716660F4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcYS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVxiLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXHN1YmRpclxjLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXHN1YmRpclxkLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIyXGUudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU3LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGYudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "c8135cbd50ccc23c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "7OtWCu0d3loZH1Qg/lE1VzB/PJdntaoxea4Vyp+AG5jKPbUq6gyMCTXuv7lo6C8qI7Q8tDBlCGk=" ], "X-Amz-Request-Id": [ "3F9864200D69E6FF" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcYS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVxiLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXHN1YmRpclxjLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXHN1YmRpclxkLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIyXGUudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU3LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGYudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "6739b696f4d5e34e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "+/6Y2hsrv4ZiJRVpNzRAHnLOPMiPOr87Omz84SYGezVwUtFHQSdNLsRO7aLqnZocvXsVwaIvuPo=" ], "X-Amz-Request-Id": [ "FBA7B514BCE52F27" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPlw8L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGYudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIyXDwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "53106f21bc21b583", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5Cdir1%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "YaunFDqPCe0KaGuyhul75YWi5XG2Y4jZ60ati1eLPCr4RtHTBNfs3Pt6vPACJuo47t0kIVfkjJs=" ], "X-Amz-Request-Id": [ "78F985384F38DA4B" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+XDwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVxhLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIxXGIudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXDwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "76ff4f00cc07554c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5Cdir1%5Csubdir%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "Pis22MD1N5b0Vy9d9EOMVwVSsW8uCNrkkwaZwVmR6ROgln/is+JhZUZ3rhKoH1zOI0rKob1HdYY=" ], "X-Amz-Request-Id": [ "97CB91A1F9514561" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXDwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPlw8L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXGMudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcc3ViZGlyXGQudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "a18b26f02781a9a3", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5Cdir2%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "/VXAfsL+H8pgTJy40LZ26Wf8TS60y0cGc2ou+SOVDc3hecXVgffDVN9kq3Cwk6eApcDdBc9Ct8o=" ], "X-Amz-Request-Id": [ "7A14A9648B35B5BE" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjJcPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+XDwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMlxlLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAyMC0wNi0wOVQwNjozMTo1Ny4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "25e367bcac43e492", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026max-keys=1\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "fqxe3xoc+QFbioGTdNxC41OjMmwnYTizBqwJLPqCO3A7pTTzcsJcqwS/S9ehK5chkpFqJRK51rA=" ], "X-Amz-Request-Id": [ "387E1B5E79C2CFDC" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE5leHRNYXJrZXI+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVw8L05leHRNYXJrZXI+PE1heEtleXM+MTwvTWF4S2V5cz48RGVsaW1pdGVyPlw8L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+dHJ1ZTwvSXNUcnVuY2F0ZWQ+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVw8L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "fb2d109eaeaa703c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026marker=blob-for-delimiters-%5Cdir1%5C\u0026max-keys=1\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "6S+Cyk+igUMNzHgjvqL5OnUwgdpEWwufD851ehbreRZ2DjkKOK/CfZnFXhUN6IVhVp2oAqsvesc=" ], "X-Amz-Request-Id": [ "1C128B9634DF02AD" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxNYXJrZXI+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMVw8L01hcmtlcj48TmV4dE1hcmtlcj5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIyXDwvTmV4dE1hcmtlcj48TWF4S2V5cz4xPC9NYXhLZXlzPjxEZWxpbWl0ZXI+XDwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD50cnVlPC9Jc1RydW5jYXRlZD48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLVxkaXIyXDwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "011be64d4029f141", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026marker=blob-for-delimiters-%5Cdir2%5C\u0026max-keys=1\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "dUyGV+KvUxui+1sAZh0x/coV/ZW1c2lEHlSV8cjKgc5JhGRdPJT7ofRUz+8Ss+Iwhhu9jARKRsQ=" ], "X-Amz-Request-Id": [ "996B85E7E9F8D996" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxNYXJrZXI+YmxvYi1mb3ItZGVsaW1pdGVycy1cZGlyMlw8L01hcmtlcj48TWF4S2V5cz4xPC9NYXhLZXlzPjxEZWxpbWl0ZXI+XDwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy1cZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "1cd524d9ffb5b9c8", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-%5Cdir2%5Ce.txt", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "HiFMzfHodamS7sw8/Ypzcu9BTGOzQks8WG63JD0NHgB+hrSh+jD/bNRZmQ13EyXRsmVUl4WQS1k=" ], "X-Amz-Request-Id": [ "2BF7958CA93E3A38" ] }, "Body": "" } }, { "ID": "3636334d370fe9f8", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-%5Cdir2%5Ce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "AwvZzf8SUkDFjrDcTLehU+30OfU0Vk+B/vQs7amdl0UzGLmNYh5f5UVyM25YzA2susQqavHvUe8=" ], "X-Amz-Request-Id": [ "D733DA1C8FBD3F2D" ] }, "Body": "" } }, { "ID": "cee568e38fa5052e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%5C\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%5C", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "YgrW1xonFWwIuT/FsEAjIKqalw2mtkwTaEWA4+IBmz92OuWjXrEfoOQ/rFxnQxlJL+NPJCUWLeo=" ], "X-Amz-Request-Id": [ "051787C0DD3CE476" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXDwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPlw8L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtXGYudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI1LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtXGRpcjFcPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "d00eff4fb0566214", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-%5Cdir2%5Ce.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Atr/FizR1k2oTzGcIsdQCmP0Xo2oAXuoJhxKM9sV7XargmGoYbldM0Y2K1xI/Qv3dj2E+WhNuOg=" ], "X-Amz-Request-Id": [ "8B4C317ED3026179" ] }, "Body": "" } } ] }fwdslash.replay000066400000000000000000000764611367004507500340720ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestListDelimiters{ "Initial": "AQAAAA7WcSPoAVnuiv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "233ec44104a0f4b8", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "YQKwYVcT4QOqzit5yHxHwqFKN3Gyt4UTUFyOb4sshyyrDnsALJtNe4G63M23gxFU+1OZ7zmbsMY=" ], "X-Amz-Request-Id": [ "A091DCB2ED12F429" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9kLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU3LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "deb3370779c8242b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "o4ZqA6qyCwqOzy3igXmKu2C0stOQwAs0t5Xt+iEO3BifBcsS3AhEY8UduPqeqkCD2KJofWUJUHw=" ], "X-Amz-Request-Id": [ "94BC7CF7364B45F9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvYS50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9iLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9jLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL3N1YmRpci9kLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyL2UudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMxOjU3LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "8861dc73ece69bf5", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "3ZooNAjJ+HMExvlLD+BPzNcjzKYnjd14f/OQ6HviV9u7J4mCnSPsTrIeU/NQMlWCUJy6WG9mzXc=" ], "X-Amz-Request-Id": [ "76A18B4C4CF79FFE" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPi88L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLzwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "a49b6a006f82838f", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2Fdir1%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "PBXcYtmq9uwTiTcB0napuv37Qs7bihaeOmAng43tlJcAydG/6VgazLh6S6g3NG4hvA8YhlimbuM=" ], "X-Amz-Request-Id": [ "6F77C6BF63B050B1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS9hLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIxL2IudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyLzwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "2dd52b03aed9d70e", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2Fdir1%2Fsubdir%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "IcRNMIxujTq1XBauiVatPd50GyBbJf9oeBa+f/g+CjnWoimMCdrb7f6myfg68pvZo0/51vydzMQ=" ], "X-Amz-Request-Id": [ "C7BF321C5E0D3EE5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyLzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPi88L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2MudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvc3ViZGlyL2QudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "db8ffd523b78e2e4", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2Fdir2%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "dPCqyj1Or+WDzRs9t85BwWH5MHb5YoGnv1vvgbUnxe64gQTuCPmYw688BxNqu4Wx5tw/AU1vFK4=" ], "X-Amz-Request-Id": [ "D463897853096EE4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjIvPC9QcmVmaXg+PE1hcmtlcj48L01hcmtlcj48TWF4S2V5cz4xMDAwPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi9lLnR4dDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAyMC0wNi0wOVQwNjozMTo1Ny4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "6ee783af889aa260", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026max-keys=1\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "XmKvrHbpkZH70mEM4kkJ5adHG34ihi0vJRhPIeBNFH/9CPFmhUg6Fyuei7+Et1awtcV4yAwVl4Q=" ], "X-Amz-Request-Id": [ "1E45315BF16D950C" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE5leHRNYXJrZXI+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS88L05leHRNYXJrZXI+PE1heEtleXM+MTwvTWF4S2V5cz48RGVsaW1pdGVyPi88L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+dHJ1ZTwvSXNUcnVuY2F0ZWQ+PENvbW1vblByZWZpeGVzPjxQcmVmaXg+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS88L1ByZWZpeD48L0NvbW1vblByZWZpeGVzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "12dbbeb9aa451cff", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026marker=blob-for-delimiters-%2Fdir1%2F\u0026max-keys=1\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "4epxOIRffTVal1ebAwb/O2JHcmAkKvWdjD2bIet7nh9C7OXHxkciBg9rLz1pPBA7QBLCjlzBrUw=" ], "X-Amz-Request-Id": [ "0BABB77107E86D5C" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxNYXJrZXI+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMS88L01hcmtlcj48TmV4dE1hcmtlcj5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLzwvTmV4dE1hcmtlcj48TWF4S2V5cz4xPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD50cnVlPC9Jc1RydW5jYXRlZD48Q29tbW9uUHJlZml4ZXM+PFByZWZpeD5ibG9iLWZvci1kZWxpbWl0ZXJzLS9kaXIyLzwvUHJlZml4PjwvQ29tbW9uUHJlZml4ZXM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "b9976587436a8646", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026marker=blob-for-delimiters-%2Fdir2%2F\u0026max-keys=1\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "k9L6wAB1pYceRgFzth1eLzZD2RVMset7+YfRRUsebvtHHSDs0VooZ/INtTEem5ghA7Dp4Ijel84=" ], "X-Amz-Request-Id": [ "961E973B42CF6E19" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxNYXJrZXI+YmxvYi1mb3ItZGVsaW1pdGVycy0vZGlyMi88L01hcmtlcj48TWF4S2V5cz4xPC9NYXhLZXlzPjxEZWxpbWl0ZXI+LzwvRGVsaW1pdGVyPjxJc1RydW5jYXRlZD5mYWxzZTwvSXNUcnVuY2F0ZWQ+PENvbnRlbnRzPjxLZXk+YmxvYi1mb3ItZGVsaW1pdGVycy0vZi50eHQ8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "4b6a9712d51e3a5b", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-/dir2/e.txt", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:31:57 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YENMBi5LBKfz7GTjrspOP+Gq7jlV0z4YAXvsl1uA/s0oPjiaaOtCBiwaZJgMvA3NleODsd0Uw98=" ], "X-Amz-Request-Id": [ "69C11B09C7532B52" ] }, "Body": "" } }, { "ID": "b6026ae3caca5963", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-/dir2/e.txt", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "soLgrjUNyPFvgev05/hvH415qP0Z54CgVBKFoSuCqkCASbezR7OovxDx7Ag1Ed2dkAotveCFgYw=" ], "X-Amz-Request-Id": [ "6D67897A00C0D4A8" ] }, "Body": "" } }, { "ID": "3636268d1b2f14bf", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?delimiter=%2F\u0026max-keys=1000\u0026prefix=blob-for-delimiters-%2F", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "XbUjm89H+G9yJAZIRYYQH+lSjwnS0wC7netiG8h6n04J9Simh3neIbabFtzoq2YF4NXhjSeVR4w=" ], "X-Amz-Request-Id": [ "45B6E1F9EFE9D475" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtLzwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48RGVsaW1pdGVyPi88L0RlbGltaXRlcj48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLWRlbGltaXRlcnMtL2YudHh0PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb21tb25QcmVmaXhlcz48UHJlZml4PmJsb2ItZm9yLWRlbGltaXRlcnMtL2RpcjEvPC9QcmVmaXg+PC9Db21tb25QcmVmaXhlcz48L0xpc3RCdWNrZXRSZXN1bHQ+" } }, { "ID": "7d38aae0e9679922", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-delimiters-/dir2/e.txt", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:09 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "eJddYL4PtJeueXJQ4kLCHsurttgS8segBLGAoeIjEGr4mWt8/svZS5ZI/gBgNf39QE17BANYCyk=" ], "X-Amz-Request-Id": [ "D2CCB41F91AAE080" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestListWeirdKeys.replay000066400000000000000000000515701367004507500321350ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPnMikarP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "285280d7a310d121", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=list-weirdkeys-", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "JThPRenKOdmwtEHvObsrPKrZGJjywQQHjRmaM5Vy04iKCRCObztp47mdXKJfdRdW3Oay91y650s=" ], "X-Amz-Request-Id": [ "7989B2E0CE83268A" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pmxpc3Qtd2VpcmRrZXlzLTwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLSAhJnF1b3Q7IyQlJmFtcDsmYXBvczsoKSorLC0uLzwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLlxmb29cLi5cYmFyXC4uXC4uXGJhei4uXDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLlxmb29cXGJhclxcXGJhejwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLTEyMzQ1PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLTo7Jmx0Oz0mZ3Q7PzwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1APC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLVtcXV5fPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLV9fMHgwX19fXzB4MV9fX18weDJfX19fMHgzX19fXzB4NF9fX18weDVfX19fMHg2X19fXzB4N19fX18weDhfX19fMHg5X19fXzB4YV9fX18weGJfX19fMHhjX19fXzB4ZF9fX18weGVfX19fMHhmX188L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtX18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX188L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtYDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhejwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1mb28mcXVvdDtiYXImcXVvdDtiYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vL19fMHgyZl9fYmFyL19fMHgyZl9fX18weDJmX19iYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vL2Jhci9iYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vXGJhclxiYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMte3x9fn88L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMt4pi64pi64pi6PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } }, { "ID": "5690e1513f4c71a9", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=list-weirdkeys-", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "rdNx9I6GM2VaRqfaYf4qv+N7VrOwMt/3WUx09ICxQPrmzyLapA2kJYXio9rtxWwJO9JM8tLVrMk=" ], "X-Amz-Request-Id": [ "33DB11BF9D70CFF3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4Pmxpc3Qtd2VpcmRrZXlzLTwvUHJlZml4PjxNYXJrZXI+PC9NYXJrZXI+PE1heEtleXM+MTAwMDwvTWF4S2V5cz48SXNUcnVuY2F0ZWQ+ZmFsc2U8L0lzVHJ1bmNhdGVkPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLSAhJnF1b3Q7IyQlJmFtcDsmYXBvczsoKSorLC0uLzwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLlxmb29cLi5cYmFyXC4uXC4uXGJhei4uXDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLlxmb29cXGJhclxcXGJhejwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy0uLl9fMHgyZl9fZm9vLy4uX18weDJmX19iYXIvLi5fXzB4MmZfXy4uX18weDJmX19iYXouLl9fMHgyZl9fPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLTEyMzQ1PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLTo7Jmx0Oz0mZ3Q7PzwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1APC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLVtcXV5fPC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5Pmxpc3Qtd2VpcmRrZXlzLV9fMHgwX19fXzB4MV9fX18weDJfX19fMHgzX19fXzB4NF9fX18weDVfX19fMHg2X19fXzB4N19fX18weDhfX19fMHg5X19fXzB4YV9fX18weGJfX19fMHhjX19fXzB4ZF9fX18weGVfX19fMHhmX188L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtX18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX188L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtYDwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1mb28gYmFyIGJhejwvS2V5PjxMYXN0TW9kaWZpZWQ+MjAxOS0wMy0wN1QxNjo1MDoyNC4wMDBaPC9MYXN0TW9kaWZpZWQ+PEVUYWc+JnF1b3Q7NWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTImcXVvdDs8L0VUYWc+PFNpemU+NTwvU2l6ZT48T3duZXI+PElEPmUxZjgwODRjZGZhZTRhOTZjMGNhOGQzNDNmZTMwYmZjMTg5OTdkZDc4NmFiMDkzMGIyNDkyYTAxZjVmODViM2I8L0lEPjxEaXNwbGF5TmFtZT5ydmFuZ2VudDwvRGlzcGxheU5hbWU+PC9Pd25lcj48U3RvcmFnZUNsYXNzPlNUQU5EQVJEPC9TdG9yYWdlQ2xhc3M+PC9Db250ZW50cz48Q29udGVudHM+PEtleT5saXN0LXdlaXJka2V5cy1mb28mcXVvdDtiYXImcXVvdDtiYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vL19fMHgyZl9fYmFyL19fMHgyZl9fX18weDJmX19iYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vL2Jhci9iYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMtZm9vXGJhclxiYXo8L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMte3x9fn88L0tleT48TGFzdE1vZGlmaWVkPjIwMTktMDMtMDdUMTY6NTA6MjQuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJnF1b3Q7PC9FVGFnPjxTaXplPjU8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PENvbnRlbnRzPjxLZXk+bGlzdC13ZWlyZGtleXMt4pi64pi64pi6PC9LZXk+PExhc3RNb2RpZmllZD4yMDE5LTAzLTA3VDE2OjUwOjI0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjwvTGlzdEJ1Y2tldFJlc3VsdD4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMD5.replay000066400000000000000000000336161367004507500277610ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPtOEf8JP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "69766802bf41dfc5", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-aaa", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "RPR/ZNjPcRIgN0/Rp/TyFPh3hPInf0TGPiSqSNgDaSCkuUYKXGNcMkEw6oMv/9a828YedAY+ud0=" ], "X-Amz-Request-Id": [ "91ED6E5AA95C4110" ] }, "Body": "" } }, { "ID": "a5b57b3e3ad32511", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-bbb", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "7" ], "Content-Md5": [ "afqrYmg1ApVVDefVh7wyPQ==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "82e35a63ceba37e9646434c5dd412ea577147f1e4a41ccde1614253187e3dbf9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "Z29vZGJ5ZQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"69faab6268350295550de7d587bc323d\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NsXrFcdOH5JgX9oosOcNfJ9EH1UuTFIoDL0G4vjDU0+bH6jTkgbwJnjCWzuPJ4e5K9W60njLbhc=" ], "X-Amz-Request-Id": [ "9EA83424D569CC15" ] }, "Body": "" } }, { "ID": "49915aa582c08e49", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-aaa", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "p1E8oEyNoYkH0RgZKaAK01IfBQUq/bRceFfKQSJM5NXjud+lqsCCduiD4d+wi0tuCBTB5BpCaXM=" ], "X-Amz-Request-Id": [ "ECCB6B5E8D417E10" ] }, "Body": "" } }, { "ID": "a10f2f292d5542f3", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-bbb", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "7" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"69faab6268350295550de7d587bc323d\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "+h8+4qdc7TOTx1K/6U8Fr+RV1vYiTnI49HtuefiOnM13BsUrJb9FXdLFn8PzYwh1xTDQQ5K/Wq4=" ], "X-Amz-Request-Id": [ "5A438E8644A8B98F" ] }, "Body": "" } }, { "ID": "7e06596486b38b20", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/?max-keys=1000\u0026prefix=blob-for-md5-", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Bucket-Region": [ "us-west-1" ], "X-Amz-Id-2": [ "yxM0FEBAIfvkBkOUVBou2yB3W79QPPxQsLSr3bWcXlhjGiJ3697njRbw0oTuCGGcBUdO4UaZkeA=" ], "X-Amz-Request-Id": [ "D33AF4144960645D" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPExpc3RCdWNrZXRSZXN1bHQgeG1sbnM9Imh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2RvYy8yMDA2LTAzLTAxLyI+PE5hbWU+Z28tY2xvdWQtdGVzdGluZzwvTmFtZT48UHJlZml4PmJsb2ItZm9yLW1kNS08L1ByZWZpeD48TWFya2VyPjwvTWFya2VyPjxNYXhLZXlzPjEwMDA8L01heEtleXM+PElzVHJ1bmNhdGVkPmZhbHNlPC9Jc1RydW5jYXRlZD48Q29udGVudHM+PEtleT5ibG9iLWZvci1tZDUtYWFhPC9LZXk+PExhc3RNb2RpZmllZD4yMDIwLTA2LTA5VDA2OjMyOjE0LjAwMFo8L0xhc3RNb2RpZmllZD48RVRhZz4mcXVvdDs1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MiZxdW90OzwvRVRhZz48U2l6ZT41PC9TaXplPjxPd25lcj48SUQ+ZTFmODA4NGNkZmFlNGE5NmMwY2E4ZDM0M2ZlMzBiZmMxODk5N2RkNzg2YWIwOTMwYjI0OTJhMDFmNWY4NWIzYjwvSUQ+PERpc3BsYXlOYW1lPnJ2YW5nZW50PC9EaXNwbGF5TmFtZT48L093bmVyPjxTdG9yYWdlQ2xhc3M+U1RBTkRBUkQ8L1N0b3JhZ2VDbGFzcz48L0NvbnRlbnRzPjxDb250ZW50cz48S2V5PmJsb2ItZm9yLW1kNS1iYmI8L0tleT48TGFzdE1vZGlmaWVkPjIwMjAtMDYtMDlUMDY6MzI6MTUuMDAwWjwvTGFzdE1vZGlmaWVkPjxFVGFnPiZxdW90OzY5ZmFhYjYyNjgzNTAyOTU1NTBkZTdkNTg3YmMzMjNkJnF1b3Q7PC9FVGFnPjxTaXplPjc8L1NpemU+PE93bmVyPjxJRD5lMWY4MDg0Y2RmYWU0YTk2YzBjYThkMzQzZmUzMGJmYzE4OTk3ZGQ3ODZhYjA5MzBiMjQ5MmEwMWY1Zjg1YjNiPC9JRD48RGlzcGxheU5hbWU+cnZhbmdlbnQ8L0Rpc3BsYXlOYW1lPjwvT3duZXI+PFN0b3JhZ2VDbGFzcz5TVEFOREFSRDwvU3RvcmFnZUNsYXNzPjwvQ29udGVudHM+PC9MaXN0QnVja2V0UmVzdWx0Pg==" } }, { "ID": "50d18e9bf2d78edf", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-bbb", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "7" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"69faab6268350295550de7d587bc323d\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6UlhyvhwWq0KO8L5qxF9a91VC4sjw/zXpD5LZwZgnPb4rzbQoOg/0A0trNxvDlfl4zRNke2jDC8=" ], "X-Amz-Request-Id": [ "BD6302A0BB662AE1" ] }, "Body": "" } }, { "ID": "ec0dcb4f74706007", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-bbb", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "LDFsV2ZUJkG2yvjXxvVHu9Q/WzoigSW9DNiLoPNWHJUGDWlBn/epi0PRwQ9ejEKFkQQy+KDwjtU=" ], "X-Amz-Request-Id": [ "1BEB30AA88B97158" ] }, "Body": "" } }, { "ID": "a970ac43f067a7e9", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-aaa", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5FmDIxq5laHmqQh2Bl5tv1hOPX/6+2zvKyvzWX5c+UH09XEsf16vzC7BzbLZuURXoVXp5CJJ3V0=" ], "X-Amz-Request-Id": [ "260DAF06D5A588F3" ] }, "Body": "" } }, { "ID": "d55fcee3ac8d5b53", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-md5-aaa", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:15 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MPbXZjL4aJkGbPxgk6VwfmDF6uFapuOuRWSBsHHI3ByYoUhNO5uPh5FKq2bH8R4cP/AjSlDCaFE=" ], "X-Amz-Request-Id": [ "09C2303C82834132" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata/000077500000000000000000000000001367004507500276655ustar00rootroot00000000000000duplicate_case-insensitive_key_fails.replay000066400000000000000000000015501367004507500403560ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata{ "Initial": "AQAAAA7WcSPtG9lquf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata/empty.replay000066400000000000000000000142221367004507500322420ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPtD9P+yf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5ba9daf393b88161", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "1ORUZTT/uNWq8tUYy4wD9nqsLcm1XOgNvY//Vsq2sFy1ZPyNmyIusGt/XL+ED7Ez9koWjbLxV+E=" ], "X-Amz-Request-Id": [ "6EE9761E39702A09" ] }, "Body": "" } }, { "ID": "38ca160b4fcc60bc", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5DgrhhIa6Yc26W/wYWFytlhrEoe4Adc8ecrmBKDPRnkzrvnTrAELSn0Ku6Gf5HOXr/x0Pd8TR9c=" ], "X-Amz-Request-Id": [ "3BE030FB9058A6AF" ] }, "Body": "" } }, { "ID": "ecc06b231aaeaf72", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "sipiVCL5D+pek0jL6feZFVNKcCRH4i+A0N33LkTU6icNupOC5TB0tdmoEYsGTFQzjA4KUAABkdc=" ], "X-Amz-Request-Id": [ "3062B1EC8C809EE2" ] }, "Body": "" } }, { "ID": "595afa22f21ff2be", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "b0vXY64QYB3KTBbdIl+2rqpyy7PKnA2tToMO3gWwdlFkO+R45sjc41Bnwf8NGTOFxVww/0PPm0o=" ], "X-Amz-Request-Id": [ "B04A7D4A41301750" ] }, "Body": "" } } ] }empty_key_fails.replay000066400000000000000000000015501367004507500342110ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata{ "Initial": "AQAAAA7WcSPtG53BiP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }non-utf8_metadata_key.replay000066400000000000000000000015501367004507500352130ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata{ "Initial": "AQAAAA7WcSPtN+u9Yv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }non-utf8_metadata_value.replay000066400000000000000000000015501367004507500355370ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata{ "Initial": "AQAAAA7WcSPtOBpLI/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }valid_metadata.replay000066400000000000000000000153551367004507500337740ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata{ "Initial": "AQAAAA7WcSPtG/WeLv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "6e5bf55851722039", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-Key_a": [ "value-a" ], "X-Amz-Meta-Key_b": [ "value-b" ], "X-Amz-Meta-Key_c": [ "vAlUe-c" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "eQ6I2DeURCa0XjLT8TqASBxgQLUKQlG007VDMFG9brTEUCM4EWoZhynBwNxow8A/v7NwgwKFSaE=" ], "X-Amz-Request-Id": [ "A8EC04F3D7307BB2" ] }, "Body": "" } }, { "ID": "adad4c78672b7b53", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ofzyUOp+Ir/7ijh2gAv7s/mQ+XJRJ/8hLtkC1lYHVJByZX8kVc1KwYinuKvhWdTqiCwI+5iR6ug=" ], "X-Amz-Meta-Key_a": [ "value-a" ], "X-Amz-Meta-Key_b": [ "value-b" ], "X-Amz-Meta-Key_c": [ "vAlUe-c" ], "X-Amz-Request-Id": [ "2D2B046CFD271C67" ] }, "Body": "" } }, { "ID": "9c47d53898e7516d", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NQfwXKzdvLzs7sCB9v4b7SlYSO0rRO3PvWOJvWVaUU/SS1qLUz6nJs/RQDOYcu3dh12i2cmXeMg=" ], "X-Amz-Meta-Key_a": [ "value-a" ], "X-Amz-Meta-Key_b": [ "value-b" ], "X-Amz-Meta-Key_c": [ "vAlUe-c" ], "X-Amz-Request-Id": [ "5CC689A3D4918E8E" ] }, "Body": "" } }, { "ID": "67fcfeaebb8cd505", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6P8LBwpkuxy4DZMF+ZzrEevzI1eSY2QHKkNoIiL+MkTXnQrZ78HIA4ejk1ko188u93tMrGeP6oo=" ], "X-Amz-Request-Id": [ "FFE25B6F28A55638" ] }, "Body": "" } } ] }valid_metadata_with_content_type.replay000066400000000000000000000144531367004507500376200ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata{ "Initial": "AQAAAA7WcSPtKRpR6P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5c28cf5e2b9bf97a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-Foo": [ "bar" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "dJ3QCkzI5avwzfhFinpIQwJF5tgfMPQHZBHqerE1+OyKrMqadIVvtNnoHdLV0ijpN7+LV2c12gQ=" ], "X-Amz-Request-Id": [ "F4F2641FE7B977D8" ] }, "Body": "" } }, { "ID": "7cd68e805590875f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "7YjFAL0G9trGPqIUqGnOUrEBcHIts96GLR3RaudSKSK3PoEKU6IcLJrfeAlHnEb7um1s/7ELSHw=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "AB75C15AE1E8ADA2" ] }, "Body": "" } }, { "ID": "b0844eb288293688", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "exHKo57cQojjAi2yWI+0El2joOuBPmfJWz7wxWbD7FnGpwbzNI7D6KBmVq3d0aJ/jZjkTtxv4i0=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "671D21025195D493" ] }, "Body": "" } }, { "ID": "e1801eb0ea456814", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Afjlfab7UZxZ4w8F8T99NBRXZ2+WSoRPg5+DEg8qvP0C7z1fjJc9QX93gcqnoX2iPIJ/jEFHThw=" ], "X-Amz-Request-Id": [ "30BC19C2275587E9" ] }, "Body": "" } } ] }valid_metadata_with_empty_body.replay000066400000000000000000000145111367004507500372530ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata{ "Initial": "AQAAAA7WcSPtIo9SYf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5642f9d7494ab63a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-Foo": [ "bar" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5aaB1EjUX2cnhgO7uRfe1SWhyQlI4GFuSYndrmsFwrQX/rNQMfMWqGlGsl0IDbtmAHQ/yd/2hwQ=" ], "X-Amz-Request-Id": [ "9AB75784921B18A3" ] }, "Body": "" } }, { "ID": "b431203bd4cb611d", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XpSVeEqMayK9O54rBX/tD6pYRhLf+L3J3oVWwDOg76D2Ovn9L8lm/ed4vPzuBNopxiT+zNp2iTk=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "A22465E4635A8A64" ] }, "Body": "" } }, { "ID": "3a0741a76591a24c", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hnlnlSSSs1ylfpDD1NxrvN0HhqEbE7+wCpTssf3oUZcPsv/azF8AKGGy/vWPPmB5kvN5EvxEb0A=" ], "X-Amz-Meta-Foo": [ "bar" ], "X-Amz-Request-Id": [ "E34D81B1F14221A0" ] }, "Body": "" } }, { "ID": "d6677ca060fa87fe", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "iK9IboOS0L1UHd6tZ0S/pwicsZsJU+oo1zZo3+8PXpcN/R2SiOCoVJm0rNwmsxkfq8ey5Lrwgvc=" ], "X-Amz-Request-Id": [ "1558D2860E5C0D6C" ] }, "Body": "" } } ] }weird_metadata_keys.replay000066400000000000000000000267731367004507500350500ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestMetadata{ "Initial": "AQAAAA7WcSPtLuUyfv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "44e38b8cb9d0a4bb", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "5" ], "Content-Md5": [ "XUFAKrxLKna5cZ2REBfFkg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Meta-%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f": [ "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ], "X-Amz-Meta-%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f": [ "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ], "X-Amz-Meta-%20%21%22%23$%25\u0026%27%28%29%2a+%2c-.%2f": [ "%20%21%22%23$%25\u0026%27%28%29%2A+%2C-.%2F" ], "X-Amz-Meta-%5b%5c%5d%5e_": [ "%5B%5C%5D%5E_" ], "X-Amz-Meta-%60": [ "%60" ], "X-Amz-Meta-%7b%7c%7d~%7f": [ "%7B%7C%7D~%7F" ], "X-Amz-Meta-%e2%98%ba%e2%98%ba%e2%98%ba": [ "%E2%98%BA%E2%98%BA%E2%98%BA" ], "X-Amz-Meta-..%2ffoo%2f..%2fbar%2f..%2f..%2fbaz..%2f": [ "..%2Ffoo%2F..%2Fbar%2F..%2F..%2Fbaz..%2F" ], "X-Amz-Meta-..%5cfoo%5c%5cbar%5c%5c%5cbaz": [ "..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz" ], "X-Amz-Meta-..%5cfoo%5c..%5cbar%5c..%5c..%5cbaz..%5c": [ "..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C" ], "X-Amz-Meta-12345": [ "12345" ], "X-Amz-Meta-Foo%20bar%20baz": [ "foo%20bar%20baz" ], "X-Amz-Meta-Foo%22bar%22baz": [ "foo%22bar%22baz" ], "X-Amz-Meta-Foo%2f%2fbar%2f%2f%2fbaz": [ "foo%2F%2Fbar%2F%2F%2Fbaz" ], "X-Amz-Meta-Foo%2fbar%2fbaz": [ "foo%2Fbar%2Fbaz" ], "X-Amz-Meta-Foo%5cbar%5cbaz": [ "foo%5Cbar%5Cbaz" ], "X-Amz-Meta-__0x3a__%3b%3c__0x3d__%3e%3f": [ ":%3B%3C=%3E%3F" ], "X-Amz-Meta-__0x40__": [ "@" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "fTd+ZC6hpVZLSRYZ5UmdDpjrqF1BrPeSKzPCO+68i848D4EXsz1eR7B7IJokOqGLDp3FXaUke3s=" ], "X-Amz-Request-Id": [ "4B0EFF730D841D56" ] }, "Body": "" } }, { "ID": "e4c13d3e8c0a1e74", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "oTmfX76/pfnRFO42u4m5aBSSKpIq14qYaMgAENh401Q/VIxNArysVhnr9jXavoRs4L/NHkfPHdI=" ], "X-Amz-Meta-%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f": [ "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ], "X-Amz-Meta-%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f": [ "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ], "X-Amz-Meta-%20%21%22%23$%25\u0026%27%28%29%2a+%2c-.%2f": [ "%20%21%22%23$%25\u0026%27%28%29%2A+%2C-.%2F" ], "X-Amz-Meta-%5b%5c%5d%5e_": [ "%5B%5C%5D%5E_" ], "X-Amz-Meta-%60": [ "%60" ], "X-Amz-Meta-%7b%7c%7d~%7f": [ "%7B%7C%7D~%7F" ], "X-Amz-Meta-%e2%98%ba%e2%98%ba%e2%98%ba": [ "%E2%98%BA%E2%98%BA%E2%98%BA" ], "X-Amz-Meta-..%2ffoo%2f..%2fbar%2f..%2f..%2fbaz..%2f": [ "..%2Ffoo%2F..%2Fbar%2F..%2F..%2Fbaz..%2F" ], "X-Amz-Meta-..%5cfoo%5c%5cbar%5c%5c%5cbaz": [ "..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz" ], "X-Amz-Meta-..%5cfoo%5c..%5cbar%5c..%5c..%5cbaz..%5c": [ "..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C" ], "X-Amz-Meta-12345": [ "12345" ], "X-Amz-Meta-Foo%20bar%20baz": [ "foo%20bar%20baz" ], "X-Amz-Meta-Foo%22bar%22baz": [ "foo%22bar%22baz" ], "X-Amz-Meta-Foo%2f%2fbar%2f%2f%2fbaz": [ "foo%2F%2Fbar%2F%2F%2Fbaz" ], "X-Amz-Meta-Foo%2fbar%2fbaz": [ "foo%2Fbar%2Fbaz" ], "X-Amz-Meta-Foo%5cbar%5cbaz": [ "foo%5Cbar%5Cbaz" ], "X-Amz-Meta-__0x3a__%3b%3c__0x3d__%3e%3f": [ ":%3B%3C=%3E%3F" ], "X-Amz-Meta-__0x40__": [ "@" ], "X-Amz-Request-Id": [ "23731CD07128CB30" ] }, "Body": "" } }, { "ID": "4205bd4b527224e7", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Etag": [ "\"5d41402abc4b2a76b9719d911017c592\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "tjEU8L4FjEYQhDGgFocHzY0l4O1lxOMkhwUZzf9sdJCkCCgJVJQ6ib0SFKjnkF3LCuR79AFxIzQ=" ], "X-Amz-Meta-%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f": [ "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F" ], "X-Amz-Meta-%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f": [ "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F" ], "X-Amz-Meta-%20%21%22%23$%25\u0026%27%28%29%2a+%2c-.%2f": [ "%20%21%22%23$%25\u0026%27%28%29%2A+%2C-.%2F" ], "X-Amz-Meta-%5b%5c%5d%5e_": [ "%5B%5C%5D%5E_" ], "X-Amz-Meta-%60": [ "%60" ], "X-Amz-Meta-%7b%7c%7d~%7f": [ "%7B%7C%7D~%7F" ], "X-Amz-Meta-%e2%98%ba%e2%98%ba%e2%98%ba": [ "%E2%98%BA%E2%98%BA%E2%98%BA" ], "X-Amz-Meta-..%2ffoo%2f..%2fbar%2f..%2f..%2fbaz..%2f": [ "..%2Ffoo%2F..%2Fbar%2F..%2F..%2Fbaz..%2F" ], "X-Amz-Meta-..%5cfoo%5c%5cbar%5c%5c%5cbaz": [ "..%5Cfoo%5C%5Cbar%5C%5C%5Cbaz" ], "X-Amz-Meta-..%5cfoo%5c..%5cbar%5c..%5c..%5cbaz..%5c": [ "..%5Cfoo%5C..%5Cbar%5C..%5C..%5Cbaz..%5C" ], "X-Amz-Meta-12345": [ "12345" ], "X-Amz-Meta-Foo%20bar%20baz": [ "foo%20bar%20baz" ], "X-Amz-Meta-Foo%22bar%22baz": [ "foo%22bar%22baz" ], "X-Amz-Meta-Foo%2f%2fbar%2f%2f%2fbaz": [ "foo%2F%2Fbar%2F%2F%2Fbaz" ], "X-Amz-Meta-Foo%2fbar%2fbaz": [ "foo%2Fbar%2Fbaz" ], "X-Amz-Meta-Foo%5cbar%5cbaz": [ "foo%5Cbar%5Cbaz" ], "X-Amz-Meta-__0x3a__%3b%3c__0x3d__%3e%3f": [ ":%3B%3C=%3E%3F" ], "X-Amz-Meta-__0x40__": [ "@" ], "X-Amz-Request-Id": [ "5652AAF441997A75" ] }, "Body": "" } }, { "ID": "f12a24af4eeb06f3", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-metadata", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:14 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xRL0SzV+HTppoWVYgc4Dipl7sCSa8Kdhg9R5NUMSmXqOhEaOdnvt7xwXxv1xMrKiyv2e0ylwPUE=" ], "X-Amz-Request-Id": [ "FA6631B94BE32005" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestRead/000077500000000000000000000000001367004507500270205ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestRead/length_0_read.replay000066400000000000000000000144561367004507500327430ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPpHpSoCv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "7c255a640ce55a5e", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3f8q2UsGUHgsRE2ylGfgg0JZTt8vDwzbg0xP2T+QWn3TNQVCyjlb0jovgINVfAFxS2djOPCilbA=" ], "X-Amz-Request-Id": [ "7C4E1436768C9549" ] }, "Body": "" } }, { "ID": "395ca53b6aedb85b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Range": [ "bytes=0-0" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "1" ], "Content-Range": [ "bytes 0-0/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "5W1PixHFarwepQ/SyHSP1SUpnrjEUrlp8i0eCAgy+DJ5r64fp3ARQjHoYuVNCzMJJLqlmPKEDcQ=" ], "X-Amz-Request-Id": [ "97608A71F1D8BEF5" ] }, "Body": "YQ==" } }, { "ID": "1e4155017c865372", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "djJsj4DB+83NDoxB58QQIixazNF9Bb4GigRRS4i7J4Zfn2tW45yJix29fLP9yORl28QEhFzIO24=" ], "X-Amz-Request-Id": [ "ACD790249A30DF59" ] }, "Body": "" } }, { "ID": "d4590f9eecfe2787", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "yCapWGJiezejvOFd1+keIgTHFkKF4Y/ZXdmn9HTHvOn0gikBRL417lQACvnr3knebFcLKcSGzBA=" ], "X-Amz-Request-Id": [ "B5FBF5A17370E50C" ] }, "Body": "" } } ] }negative_offset_fails.replay000066400000000000000000000015501367004507500345060ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestRead{ "Initial": "AQAAAA7WcSPpHkA7Bv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }read_a_part_in_middle.replay000066400000000000000000000144661367004507500344370ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestRead{ "Initial": "AQAAAA7WcSPpLUr5aP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "00b245c42b74b52d", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hgZROW4I6P1/sjHi0PF6WLLfQ2EQTdpxunsrm/WyzYDGS9vqAFAqFQv6TN3T71WQm0WjUBwPupM=" ], "X-Amz-Request-Id": [ "41901FA93256F2FA" ] }, "Body": "" } }, { "ID": "5ebc7b10ae1f1f64", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Range": [ "bytes=10-14" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "5" ], "Content-Range": [ "bytes 10-14/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YMqxqCTs0a0mZV6VN4QLubO8da+w/q7ad+o8fBxo8D+mcR/pzYkUvITTxuRdq30yduMpvXrXKwM=" ], "X-Amz-Request-Id": [ "23E7266E8EA262CF" ] }, "Body": "a2xtbm8=" } }, { "ID": "02485e5b87c82b5d", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "N+BkYRIaC9M/CaQsZDzoczuM+GdAiIrF8cTE7MH2jIZzo5niG4GRAje+Pt8uIVE4RcOhIK92Mbk=" ], "X-Amz-Request-Id": [ "93B1DE691AE7D64C" ] }, "Body": "" } }, { "ID": "df64a16927472f25", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TJd3LDwvkCPnrr8oNZv+tG4kjf8EbZ6RX/0wLwJWaifK9Kbud1hWejRxCb+HGmkXJ9QibsC7Ygg=" ], "X-Amz-Request-Id": [ "7176BD73C61718FB" ] }, "Body": "" } } ] }read_from_positive_offset_to_end.replay000066400000000000000000000145051367004507500367420ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestRead{ "Initial": "AQAAAA7WcSPpJsI/av5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "c48e110527a56f3b", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "BtRgCb15W/cVNZEreCu6MvCr0CpUhdKJSvcN4ckoTGkgjZPMs9xaWyDWidHZHqWSd1b6e0rzr9E=" ], "X-Amz-Request-Id": [ "F1DCD9AB334F8FCB" ] }, "Body": "" } }, { "ID": "ab96e85a965b4d89", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Range": [ "bytes=10-" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 206, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "17" ], "Content-Range": [ "bytes 10-26/27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "t75IXWBmJEqaojRV2RJLxXnUAkxCa86wEdeCIebo+5zYOKIMPtEw2dhtzBQz4EFOw6ZKpSu45Xk=" ], "X-Amz-Request-Id": [ "0651031A15758485" ] }, "Body": "a2xtbm9wcXVyc3R1dnd4eXo=" } }, { "ID": "c46d7553cb8c7c35", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "kc7YiFKq5EZoHLRBjfy8heQ+k2IN4taIU2s8QVqhDD5abOMUpOwDPUPG2PKcbEi/IwU/isSa9f8=" ], "X-Amz-Request-Id": [ "AA8BE9DE6407E29B" ] }, "Body": "" } }, { "ID": "5a460f5b68f97f99", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "KxKsaQb61gFh7dXyipu2aMnhDTxkpfY+gMwmGRyFSfn7sTjmZqtNdWVSbmTHXD/BnMf6JiGdCLU=" ], "X-Amz-Request-Id": [ "238E0E12933CBE0D" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestRead/read_in_full.replay000066400000000000000000000144171367004507500326700ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPpNKvbPP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e5c631d2229128b1", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "nZ2Kq3gDAxdHl1M4OWII+RGGZHheclXtzX7rBOhFqouJd6jKJQHVOwvdYR+vo56dfbSmFNmWcX8=" ], "X-Amz-Request-Id": [ "C12274B65C3548B1" ] }, "Body": "" } }, { "ID": "5410dab8f95a388c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DrAWy4QXzzqzmI89Zd8a5ZyVgNEGP7IECngg8Ou0PfMt8lrnTqGQM/b64PUOh2NBROUWVRG7x1Y=" ], "X-Amz-Request-Id": [ "4F07EB4927B7B8E0" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "b1193ce7c3b25fcf", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "z/oL1jJiNeHcgZHwLG/0/Z8Ps8GdLHMgVwDLm6q7L2oM5Nye2knriIIJAMv/osf+9UjwYN/d2lA=" ], "X-Amz-Request-Id": [ "9KANCQ1QBTBX7M4W" ] }, "Body": "" } }, { "ID": "e2479267ae2407cc", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "2ZTA+C25mbmsoN/iZdbY2pLTxOhlhT7oA5ee9ZancZuB1BDRTHKwJu2gp1NgITl6xGIU/fNOBI0=" ], "X-Amz-Request-Id": [ "0FA7326CFADCC204" ] }, "Body": "" } } ] }read_in_full_with_negative_length_not_-1.replay000066400000000000000000000144171367004507500402440ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestRead{ "Initial": "AQAAAA7WcSPqAKuYF/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "2def544901582601", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "YjvV7JFsC3QoQ5WGw2HLn/wMw+MFqvjgaPNx3s8Ges0q8e83g/iJ8LoQfuUGEGdOxA32yxIWOTE=" ], "X-Amz-Request-Id": [ "BC2230DF91ABC0C7" ] }, "Body": "" } }, { "ID": "e412bcba96c9a3a9", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "t0qHTdC4/lvWwpp2h4U8SI8d9iEzLwExwZ7hjU+ZK4ZrpeU95I4E5X3YI7uNyXnGKW5HN4wVyqo=" ], "X-Amz-Request-Id": [ "6D9A1C08E760D5EF" ] }, "Body": "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" } }, { "ID": "2d6bb6fe3d9cb3b1", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MPTRzFS7vaS6r78PmHuiNconT+s7+2YW3zDSqCFt/55b+3ebzI9PUFx4H/u94GnzL0wWLsqlEg0=" ], "X-Amz-Request-Id": [ "31108F30312DD4D4" ] }, "Body": "" } }, { "ID": "889d4b97f5166988", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "XldQa6kvMz0UDHGw0Fz4pXgEg71PsWoSrL1ApqTZln/oawhuTbp6YdcRTMIDCrGLU6vHEtoFayM=" ], "X-Amz-Request-Id": [ "1234EB6FB2BDB56C" ] }, "Body": "" } } ] }read_of_nonexistent_key_fails.replay000066400000000000000000000145031367004507500362450ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestRead{ "Initial": "AQAAAA7WcSPpERQ68v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "66f3804d3dc8913f", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "27" ], "Content-Md5": [ "PflsWr6X8pZ9OAEIcAMKXw==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "355c18667d5796dc2b15043b99f68331b6af560f4f9facb5c4719ba9d09147c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "YWJjZGVmZ2hpamtsbW5vcHF1cnN0dXZ3eHl6" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "g6RwQHOnXq5UBsatUw0uolmymkh5TVoaFiyVibD64aKniRuOCydBCIOZHnLSHabpkLn00yu4p7Q=" ], "X-Amz-Request-Id": [ "32B97111719B80EB" ] }, "Body": "" } }, { "ID": "0e837861436cbb72", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/key-does-not-exist", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:08 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "wpr7lsEheDOxaDuv/R+kzaZxWvfbVoMc7Ss6DYse07fkZN86A81yUw7VZ2A8DAitUw+pqbLR00Q=" ], "X-Amz-Request-Id": [ "DAA6D20E80BECF76" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5rZXktZG9lcy1ub3QtZXhpc3Q8L0tleT48UmVxdWVzdElkPkRBQTZEMjBFODBCRUNGNzY8L1JlcXVlc3RJZD48SG9zdElkPndwcjdsc0VoZURPeGFEdXYvUitremFaeFd2ZmJWb01jN1NzNkRZc2UwN2ZrWk44NkE4MXlVdzdWWjJBOERBaXRVdytwcWJMUjAwUT08L0hvc3RJZD48L0Vycm9yPg==" } }, { "ID": "ac8b1c8e0d0631b6", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "27" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Etag": [ "\"3df96c5abe97f2967d38010870030a5f\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "na35jt5Sq00LCHNYePcO/4ymUO8ICrysNtEeYxBvlylWBdqDJxTYmpf1riBUE/UuJbPTHIJjNbk=" ], "X-Amz-Request-Id": [ "436A0F070774A997" ] }, "Body": "" } }, { "ID": "da492ef41d2969a9", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "WNL1thbig7/ii4RLbBXnbzjINPCyemJu0h8PiMQwFmW8YrgFtEA97Otgm2I4ulz6xuoUPPT9/54=" ], "X-Amz-Request-Id": [ "8A611627D413D653" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestSignedURL.replay000066400000000000000000001412711367004507500311650ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPxJXvUL/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "194257e2591d0a22", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3p902r3zj8NV99vMcVfP+4EB+tbLwtsfELskXACYDXYDTC0xEW5q+K8Nh/xG2tzFZDPLf5dsgLw=" ], "X-Amz-Request-Id": [ "5F8D644A9B0366D8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKMDQ2MDM3NWExYzgwYjU0ZDAxZjYyYWQ5ZTg4NjJkMDU4Y2NkOWUxNmY2YmE2MGIxNWQzMmQzMjBmYTJmODcwNjwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD5iZWE2YTViY2QzNTMyM2JkZjFlZjU2NTExMjdiNWViNGE1NDhjNjFlYTUxZWFlZTQxZmNkOTQxMjkyNDE5MTY5PC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzAgMzQgMzYgMzAgMzMgMzcgMzUgNjEgMzEgNjMgMzggMzAgNjIgMzUgMzQgNjQgMzAgMzEgNjYgMzYgMzIgNjEgNjQgMzkgNjUgMzggMzggMzYgMzIgNjQgMzAgMzUgMzggNjMgNjMgNjQgMzkgNjUgMzEgMzYgNjYgMzYgNjIgNjEgMzYgMzAgNjIgMzEgMzUgNjQgMzMgMzIgNjQgMzMgMzIgMzAgNjYgNjEgMzIgNjYgMzggMzcgMzAgMzY8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QKaG9zdDpnby1jbG91ZC10ZXN0aW5nLnMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tCgpob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2OCA2ZiA3MyA3NCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+NUY4RDY0NEE5QjAzNjZEODwvUmVxdWVzdElkPjxIb3N0SWQ+M3A5MDJyM3pqOE5WOTl2TWNWZlArNEVCK3RiTHd0c2ZFTHNrWEFDWURYWURUQzB4RVc1cStLOE5oL3hHMnR6RlpEUExmNWRzZ0x3PTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "b895cfd9338b0cf3", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:16 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "evGAmotsgx7M7WYRlxbRrbV6tGfpaiISCXDl95maemEvqEPEnGfKYF6KF3nJsssdlmtFtV2AJGY=" ], "X-Amz-Request-Id": [ "3C791FCD27B6E478" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKMDQ2MDM3NWExYzgwYjU0ZDAxZjYyYWQ5ZTg4NjJkMDU4Y2NkOWUxNmY2YmE2MGIxNWQzMmQzMjBmYTJmODcwNjwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD5kY2Y1Y2RjOWFlMDExMjlkMzdjMmIzYjBiYWU1MzE2YWIyNjgxNGMxOTNlN2RmZWQ4MGI0NWI3YWIzNmViNjhlPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzAgMzQgMzYgMzAgMzMgMzcgMzUgNjEgMzEgNjMgMzggMzAgNjIgMzUgMzQgNjQgMzAgMzEgNjYgMzYgMzIgNjEgNjQgMzkgNjUgMzggMzggMzYgMzIgNjQgMzAgMzUgMzggNjMgNjMgNjQgMzkgNjUgMzEgMzYgNjYgMzYgNjIgNjEgMzYgMzAgNjIgMzEgMzUgNjQgMzMgMzIgNjQgMzMgMzIgMzAgNjYgNjEgMzIgNjYgMzggMzcgMzAgMzY8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QKaG9zdDpnby1jbG91ZC10ZXN0aW5nLnMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tCgpob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2OCA2ZiA3MyA3NCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+M0M3OTFGQ0QyN0I2RTQ3ODwvUmVxdWVzdElkPjxIb3N0SWQ+ZXZHQW1vdHNneDdNN1dZUmx4YlJyYlY2dEdmcGFpSVNDWERsOTVtYWVtRXZxRVBFbkdmS1lGNktGM25Kc3NzZGxtdEZ0VjJBSkdZPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "eae5a17a1ca28763", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "26QyJna/S2y+9VO4E7svzkD/1XVuOgm2sl6Ejh0hW8BuJgRZqZ8FTdvvBw1HvW335GZjrjL68GI=" ], "X-Amz-Request-Id": [ "200CC08B77A9DCA5" ] }, "Body": "" } }, { "ID": "f665f72ffd64068b", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6C1nVLAOmhM5OAnP3J/J/cPmYrm1rY1L/nPRgxwk3b/IpCu4qg1nfJidvJB8iWob2EOIaMPDZ00=" ], "X-Amz-Request-Id": [ "5A3CAF261081497B" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKMmFmYTMxMjEyOTUxNDlhZjAzZWU3YWMxYjNlNmZlODU1MjVkZmMzMzBlMGI3ZGFhMmQwN2VmMWFiZDdjZmUyZDwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD5jNjlkYWU1N2ZiMTcxNWI0NjEwM2U0Yzk1NjZiYTYxOWJmYzhhMjcxMWE4MmI1MzJhNGMzYWZmMjE5OTJiZjI4PC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzIgNjEgNjYgNjEgMzMgMzEgMzIgMzEgMzIgMzkgMzUgMzEgMzQgMzkgNjEgNjYgMzAgMzMgNjUgNjUgMzcgNjEgNjMgMzEgNjIgMzMgNjUgMzYgNjYgNjUgMzggMzUgMzUgMzIgMzUgNjQgNjYgNjMgMzMgMzMgMzAgNjUgMzAgNjIgMzcgNjQgNjEgNjEgMzIgNjQgMzAgMzcgNjUgNjYgMzEgNjEgNjIgNjQgMzcgNjMgNjYgNjUgMzIgNjQ8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSA2MSA3MCA3MCA2YyA2OSA2MyA2MSA3NCA2OSA2ZiA2ZSAyZiA2ZiA2MyA3NCA2NSA3NCAyZCA3MyA3NCA3MiA2NSA2MSA2ZCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+NUEzQ0FGMjYxMDgxNDk3QjwvUmVxdWVzdElkPjxIb3N0SWQ+NkMxblZMQU9taE01T0FuUDNKL0ovY1BtWXJtMXJZMUwvblBSZ3h3azNiL0lwQ3U0cWcxbmZKaWR2SkI4aVdvYjJFT0lhTVBEWjAwPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "14720575ebe0d0e1", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "W+fJ1u1d4s3Uj7L7145m/ViziUSB3KHXV8wJ6VbVBW35OUxj9e7jsY96iUO+YdhqNUqER7SEaeU=" ], "X-Amz-Request-Id": [ "2CDCD5FD84935D13" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKOWNiNDE4NDE2MDgxYWM1NjI5MDczNmU0M2MzNmJlOGIxN2YxM2Y5OWJkOTI4MWM3YzA0NTE2MDY0ZWVlMTQ2YTwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD5jNjlkYWU1N2ZiMTcxNWI0NjEwM2U0Yzk1NjZiYTYxOWJmYzhhMjcxMWE4MmI1MzJhNGMzYWZmMjE5OTJiZjI4PC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzkgNjMgNjIgMzQgMzEgMzggMzQgMzEgMzYgMzAgMzggMzEgNjEgNjMgMzUgMzYgMzIgMzkgMzAgMzcgMzMgMzYgNjUgMzQgMzMgNjMgMzMgMzYgNjIgNjUgMzggNjIgMzEgMzcgNjYgMzEgMzMgNjYgMzkgMzkgNjIgNjQgMzkgMzIgMzggMzEgNjMgMzcgNjMgMzAgMzQgMzUgMzEgMzYgMzAgMzYgMzQgNjUgNjUgNjUgMzEgMzQgMzYgNjE8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOgpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+MkNEQ0Q1RkQ4NDkzNUQxMzwvUmVxdWVzdElkPjxIb3N0SWQ+VytmSjF1MWQ0czNVajdMNzE0NW0vVml6aVVTQjNLSFhWOHdKNlZiVkJXMzVPVXhqOWU3anNZOTZpVU8rWWRocU5VcUVSN1NFYWVVPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "3cfe4e6d0ea2b867", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "C42+TJ/Q7du/CKLnRjDhqXEWULHpMFvT+1NOgK4qB+6fj4vrwF3CF5cqb9MLSQX/gi1uUG93tG8=" ], "X-Amz-Request-Id": [ "9A599AA070F9642F" ] }, "Body": "" } }, { "ID": "82dc267b0f0236ce", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/octet-stream", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QsOSCYTO3H9IZmUAJ+s2CzaAMdgDBHFHeHUQFIP5Bo2UIspfTxrvQJ/pfQk+f0pp+oU1KU8Bitc=" ], "X-Amz-Request-Id": [ "288DB19CB5CD600B" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKMmFmYTMxMjEyOTUxNDlhZjAzZWU3YWMxYjNlNmZlODU1MjVkZmMzMzBlMGI3ZGFhMmQwN2VmMWFiZDdjZmUyZDwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD43NWRlNTBkY2I5OGZjN2QwNmRmNWFkZmM4MDE0ODk3M2NiNDY4MGViNjhiMjU3MjYzN2QzNjgyYTM0ZDhlZDVkPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzIgNjEgNjYgNjEgMzMgMzEgMzIgMzEgMzIgMzkgMzUgMzEgMzQgMzkgNjEgNjYgMzAgMzMgNjUgNjUgMzcgNjEgNjMgMzEgNjIgMzMgNjUgMzYgNjYgNjUgMzggMzUgMzUgMzIgMzUgNjQgNjYgNjMgMzMgMzMgMzAgNjUgMzAgNjIgMzcgNjQgNjEgNjEgMzIgNjQgMzAgMzcgNjUgNjYgMzEgNjEgNjIgNjQgMzcgNjMgNjYgNjUgMzIgNjQ8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PlBVVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz41MCA1NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSA2MSA3MCA3MCA2YyA2OSA2MyA2MSA3NCA2OSA2ZiA2ZSAyZiA2ZiA2MyA3NCA2NSA3NCAyZCA3MyA3NCA3MiA2NSA2MSA2ZCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+Mjg4REIxOUNCNUNENjAwQjwvUmVxdWVzdElkPjxIb3N0SWQ+UXNPU0NZVE8zSDlJWm1VQUorczJDemFBTWRnREJIRkhlSFVRRklQNUJvMlVJc3BmVHhydlFKL3BmUWsrZjBwcCtvVTFLVThCaXRjPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "ea2ef81a8e7a9bf7", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "0/ncMXTdeI+cNYNOAzpwcLzhaNUUS0+wIgSmrD5w8uGJ5ndJt6VF0qJaItklp8reakQeXAQlhuk=" ], "X-Amz-Request-Id": [ "51A1B68E1A61CFC4" ] }, "Body": "" } }, { "ID": "01251549174d9801", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "qY1ugOWEn5PkDcn0p8jj94YM3OoLPNNN8PJyPQxDbhIy7P1KqbjWjeVWUPD9YO8gtaQ9gCE1F/4=" ], "X-Amz-Request-Id": [ "ED3CBCE90CF973A4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKZjA0MWViYWFkZjEwOTJjZTc0NThhNmYzNjQ0YzdiYTBjMmYyZWE1ZjJiZGIyMTRlMTFkYTI4NWRiNjU4MWU3NjwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD5kY2Y1Y2RjOWFlMDExMjlkMzdjMmIzYjBiYWU1MzE2YWIyNjgxNGMxOTNlN2RmZWQ4MGI0NWI3YWIzNmViNjhlPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgNjYgMzAgMzQgMzEgNjUgNjIgNjEgNjEgNjQgNjYgMzEgMzAgMzkgMzIgNjMgNjUgMzcgMzQgMzUgMzggNjEgMzYgNjYgMzMgMzYgMzQgMzQgNjMgMzcgNjIgNjEgMzAgNjMgMzIgNjYgMzIgNjUgNjEgMzUgNjYgMzIgNjIgNjQgNjIgMzIgMzEgMzQgNjUgMzEgMzEgNjQgNjEgMzIgMzggMzUgNjQgNjIgMzYgMzUgMzggMzEgNjUgMzcgMzY8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PkdFVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QKaG9zdDpnby1jbG91ZC10ZXN0aW5nLnMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tCgpob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz40NyA0NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2OCA2ZiA3MyA3NCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+RUQzQ0JDRTkwQ0Y5NzNBNDwvUmVxdWVzdElkPjxIb3N0SWQ+cVkxdWdPV0VuNVBrRGNuMHA4amo5NFlNM09vTFBOTk44UEp5UFF4RGJoSXk3UDFLcWJqV2plVldVUEQ5WU84Z3RhUTlnQ0UxRi80PTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "1f411c16849189f7", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "aWNXTvJPhjxRV/gaj5RBs1WskSgHOtOSoEKK20xkG9OPIs9jcrKgvByhDUXdw30iPw0JBCs6KSs=" ], "X-Amz-Request-Id": [ "FDFCE02BEAB1DA84" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKNjhmYTMyMmM0MjVhZWMzYTllYjIwYWI4ZDNjODg0MTJlN2ZkY2VlYjBkNmNlMzAxMmUwNjgwZGM1MTU0MTU0NjwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD43NWRlNTBkY2I5OGZjN2QwNmRmNWFkZmM4MDE0ODk3M2NiNDY4MGViNjhiMjU3MjYzN2QzNjgyYTM0ZDhlZDVkPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzYgMzggNjYgNjEgMzMgMzIgMzIgNjMgMzQgMzIgMzUgNjEgNjUgNjMgMzMgNjEgMzkgNjUgNjIgMzIgMzAgNjEgNjIgMzggNjQgMzMgNjMgMzggMzggMzQgMzEgMzIgNjUgMzcgNjYgNjQgNjMgNjUgNjUgNjIgMzAgNjQgMzYgNjMgNjUgMzMgMzAgMzEgMzIgNjUgMzAgMzYgMzggMzAgNjQgNjMgMzUgMzEgMzUgMzQgMzEgMzUgMzQgMzY8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PkdFVAovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOgpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz40NyA0NSA1NCAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+RkRGQ0UwMkJFQUIxREE4NDwvUmVxdWVzdElkPjxIb3N0SWQ+YVdOWFR2SlBoanhSVi9nYWo1UkJzMVdza1NnSE90T1NvRUtLMjB4a0c5T1BJczlqY3JLZ3ZCeWhEVVhkdzMwaVB3MEpCQ3M2S1NzPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "78d68cf30fa3537c", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "aiseMRldyfOUmg1PCNJ7vrXjAGdROdi/mY3+AKC2liOFZfEUJr+SnnaDlReR3at0XT3fT+9SP9g=" ], "X-Amz-Request-Id": [ "163A97590CD0D7BE" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPkFjY2Vzc0RlbmllZDwvQ29kZT48TWVzc2FnZT5BY2Nlc3MgRGVuaWVkPC9NZXNzYWdlPjxSZXF1ZXN0SWQ+MTYzQTk3NTkwQ0QwRDdCRTwvUmVxdWVzdElkPjxIb3N0SWQ+YWlzZU1SbGR5Zk9VbWcxUENOSjd2clhqQUdkUk9kaS9tWTMrQUtDMmxpT0ZaZkVVSnIrU25uYURsUmVSM2F0MFhUM2ZUKzlTUDlnPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "8cd935e458f315cb", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "binary/octet-stream" ], "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:18 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "e+8EpKntkhQj1Mk2l4MaT0BERiWZ9JAQPVDEND+IDsgL349kUwnY+i07fng+FuaW0qsh1FFP29o=" ], "X-Amz-Request-Id": [ "14BB1AFC40030AD7" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "882139dc7a4d228a", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Ae3KCJmHke0xOjv8wO0FEV3yzfEMX528I2S6YZ7kMiPom7bw9XsrtAdOpZrksldtChufPLSeBSY=" ], "X-Amz-Request-Id": [ "BFE010D6A300577E" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKMjM0NWI1YjU3OTQ5NjkzOGVmYzFjMTM3MTUwNGYyMTA4ODExNzRiZjk5MjU0ZDRkZjYwNGVjMDljODZjZTZhYjwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD5iZWE2YTViY2QzNTMyM2JkZjFlZjU2NTExMjdiNWViNGE1NDhjNjFlYTUxZWFlZTQxZmNkOTQxMjkyNDE5MTY5PC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgMzIgMzMgMzQgMzUgNjIgMzUgNjIgMzUgMzcgMzkgMzQgMzkgMzYgMzkgMzMgMzggNjUgNjYgNjMgMzEgNjMgMzEgMzMgMzcgMzEgMzUgMzAgMzQgNjYgMzIgMzEgMzAgMzggMzggMzEgMzEgMzcgMzQgNjIgNjYgMzkgMzkgMzIgMzUgMzQgNjQgMzQgNjQgNjYgMzYgMzAgMzQgNjUgNjMgMzAgMzkgNjMgMzggMzYgNjMgNjUgMzYgNjEgNjI8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PkRFTEVURQovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QKaG9zdDpnby1jbG91ZC10ZXN0aW5nLnMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tCgpob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz40NCA0NSA0YyA0NSA1NCA0NSAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2OCA2ZiA3MyA3NCAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+QkZFMDEwRDZBMzAwNTc3RTwvUmVxdWVzdElkPjxIb3N0SWQ+QWUzS0NKbUhrZTB4T2p2OHdPMEZFVjN5emZFTVg1MjhJMlM2WVo3a01pUG9tN2J3OVhzcnRBZE9wWnJrc2xkdENodWZQTFNlQlNZPTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "075316f17a652825", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=content-type%3Bhost", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 403, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "VM00Ob8asguL8kmNI84b0fqBR0E0Ta1f4R1jfpl+rmPqPOyxXa+xVEBh1YzqDQr6kMJNEAtCWz4=" ], "X-Amz-Request-Id": [ "6F1483873A98CD92" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPlNpZ25hdHVyZURvZXNOb3RNYXRjaDwvQ29kZT48TWVzc2FnZT5UaGUgcmVxdWVzdCBzaWduYXR1cmUgd2UgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIHlvdSBwcm92aWRlZC4gQ2hlY2sgeW91ciBrZXkgYW5kIHNpZ25pbmcgbWV0aG9kLjwvTWVzc2FnZT48QVdTQWNjZXNzS2V5SWQ+QUtJQUpVR1AzRE1KWVFBUjZQREE8L0FXU0FjY2Vzc0tleUlkPjxTdHJpbmdUb1NpZ24+QVdTNC1ITUFDLVNIQTI1NgoyMDIwMDYwOVQwNjMyMTdaCjIwMjAwNjA5L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QKZTA3OTIzMDkxMjViNjk3ZDU3YzRkMjlhYTgxODUxMDE1ZDQ1ODY4ZTQyMDBhMGFlM2Q2OTY4NjcwNGE0NzYyZTwvU3RyaW5nVG9TaWduPjxTaWduYXR1cmVQcm92aWRlZD43NWRlNTBkY2I5OGZjN2QwNmRmNWFkZmM4MDE0ODk3M2NiNDY4MGViNjhiMjU3MjYzN2QzNjgyYTM0ZDhlZDVkPC9TaWduYXR1cmVQcm92aWRlZD48U3RyaW5nVG9TaWduQnl0ZXM+NDEgNTcgNTMgMzQgMmQgNDggNGQgNDEgNDMgMmQgNTMgNDggNDEgMzIgMzUgMzYgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgNTQgMzAgMzYgMzMgMzIgMzEgMzcgNWEgMGEgMzIgMzAgMzIgMzAgMzAgMzYgMzAgMzkgMmYgNzUgNzMgMmQgNzcgNjUgNzMgNzQgMmQgMzEgMmYgNzMgMzMgMmYgNjEgNzcgNzMgMzQgNWYgNzIgNjUgNzEgNzUgNjUgNzMgNzQgMGEgNjUgMzAgMzcgMzkgMzIgMzMgMzAgMzkgMzEgMzIgMzUgNjIgMzYgMzkgMzcgNjQgMzUgMzcgNjMgMzQgNjQgMzIgMzkgNjEgNjEgMzggMzEgMzggMzUgMzEgMzAgMzEgMzUgNjQgMzQgMzUgMzggMzYgMzggNjUgMzQgMzIgMzAgMzAgNjEgMzAgNjEgNjUgMzMgNjQgMzYgMzkgMzYgMzggMzYgMzcgMzAgMzQgNjEgMzQgMzcgMzYgMzIgNjU8L1N0cmluZ1RvU2lnbkJ5dGVzPjxDYW5vbmljYWxSZXF1ZXN0PkRFTEVURQovYmxvYi1mb3Itc2lnbmluZwpYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZhbXA7WC1BbXotQ3JlZGVudGlhbD1BS0lBSlVHUDNETUpZUUFSNlBEQSUyRjIwMjAwNjA5JTJGdXMtd2VzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmYW1wO1gtQW16LURhdGU9MjAyMDA2MDlUMDYzMjE3WiZhbXA7WC1BbXotRXhwaXJlcz0zNjAwJmFtcDtYLUFtei1TaWduZWRIZWFkZXJzPWNvbnRlbnQtdHlwZSUzQmhvc3QKY29udGVudC10eXBlOgpob3N0OmdvLWNsb3VkLXRlc3RpbmcuczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20KCmNvbnRlbnQtdHlwZTtob3N0ClVOU0lHTkVELVBBWUxPQUQ8L0Nhbm9uaWNhbFJlcXVlc3Q+PENhbm9uaWNhbFJlcXVlc3RCeXRlcz40NCA0NSA0YyA0NSA1NCA0NSAwYSAyZiA2MiA2YyA2ZiA2MiAyZCA2NiA2ZiA3MiAyZCA3MyA2OSA2NyA2ZSA2OSA2ZSA2NyAwYSA1OCAyZCA0MSA2ZCA3YSAyZCA0MSA2YyA2NyA2ZiA3MiA2OSA3NCA2OCA2ZCAzZCA0MSA1NyA1MyAzNCAyZCA0OCA0ZCA0MSA0MyAyZCA1MyA0OCA0MSAzMiAzNSAzNiAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0MyA3MiA2NSA2NCA2NSA2ZSA3NCA2OSA2MSA2YyAzZCA0MSA0YiA0OSA0MSA0YSA1NSA0NyA1MCAzMyA0NCA0ZCA0YSA1OSA1MSA0MSA1MiAzNiA1MCA0NCA0MSAyNSAzMiA0NiAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSAyNSAzMiA0NiA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyNSAzMiA0NiA3MyAzMyAyNSAzMiA0NiA2MSA3NyA3MyAzNCA1ZiA3MiA2NSA3MSA3NSA2NSA3MyA3NCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NCA2MSA3NCA2NSAzZCAzMiAzMCAzMiAzMCAzMCAzNiAzMCAzOSA1NCAzMCAzNiAzMyAzMiAzMSAzNyA1YSAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA0NSA3OCA3MCA2OSA3MiA2NSA3MyAzZCAzMyAzNiAzMCAzMCAyNiA1OCAyZCA0MSA2ZCA3YSAyZCA1MyA2OSA2NyA2ZSA2NSA2NCA0OCA2NSA2MSA2NCA2NSA3MiA3MyAzZCA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAyNSAzMyA0MiA2OCA2ZiA3MyA3NCAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYSAwYSA2OCA2ZiA3MyA3NCAzYSA2NyA2ZiAyZCA2MyA2YyA2ZiA3NSA2NCAyZCA3NCA2NSA3MyA3NCA2OSA2ZSA2NyAyZSA3MyAzMyAyZSA3NSA3MyAyZCA3NyA2NSA3MyA3NCAyZCAzMSAyZSA2MSA2ZCA2MSA3YSA2ZiA2ZSA2MSA3NyA3MyAyZSA2MyA2ZiA2ZCAwYSAwYSA2MyA2ZiA2ZSA3NCA2NSA2ZSA3NCAyZCA3NCA3OSA3MCA2NSAzYiA2OCA2ZiA3MyA3NCAwYSA1NSA0ZSA1MyA0OSA0NyA0ZSA0NSA0NCAyZCA1MCA0MSA1OSA0YyA0ZiA0MSA0NDwvQ2Fub25pY2FsUmVxdWVzdEJ5dGVzPjxSZXF1ZXN0SWQ+NkYxNDgzODczQTk4Q0Q5MjwvUmVxdWVzdElkPjxIb3N0SWQ+Vk0wME9iOGFzZ3VMOGttTkk4NGIwZnFCUjBFMFRhMWY0UjFqZnBsK3JtUHFQT3l4WGEreFZFQmgxWXpxRFFyNmtNSk5FQXRDV3o0PTwvSG9zdElkPjwvRXJyb3I+" } }, { "ID": "bcd80afa0d27dd94", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:19 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ZeEff4U3yHSnBHbudpQa7DPWS+VKgKoS9gGGbo/KwAfodThY8QsY1k5UNVthyZ/Xe/hlkQtib18=" ], "X-Amz-Request-Id": [ "8AAD58C3E1C55EB6" ] }, "Body": "" } }, { "ID": "91ee79542a7fe3b6", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-signing?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=CLEARED\u0026X-Amz-Expires=3600\u0026X-Amz-SignedHeaders=host", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:17 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "q1K4xjdtZEiY+xMCRN1vaVqc1GYF/i5OuhWUAR73memCR1kGUgonJUM4zBgKkNnI9Atg7qfjJGA=" ], "X-Amz-Request-Id": [ "47EC660F0BA8DA69" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1zaWduaW5nPC9LZXk+PFJlcXVlc3RJZD40N0VDNjYwRjBCQThEQTY5PC9SZXF1ZXN0SWQ+PEhvc3RJZD5xMUs0eGpkdFpFaVkreE1DUk4xdmFWcWMxR1lGL2k1T3VoV1VBUjczbWVtQ1Ixa0dVZ29uSlVNNHpCZ0trTm5JOUF0ZzdxZmpKR0E9PC9Ib3N0SWQ+PC9FcnJvcj4=" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite/000077500000000000000000000000001367004507500272375ustar00rootroot00000000000000ContentType_is_discovered_if_not_provided.replay000066400000000000000000000553721367004507500410220ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPqKumIQf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "3eb988dff10de289", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "6354" ], "Content-Md5": [ "D2p8n/PT13C49/oZwq4Z0A==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "354accec7d08850d6f2e6803abecdc0870c3ee9544b6e77ffdae6beafd86a1c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/html", "BodyParts": [ "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "fEgobdsCZYib+/0q2EDxi29qNy6X7EZPC7ciymSb3F6wfjGXjYpAYRHeMraZQ9inTIMt3Bw13fQ=" ], "X-Amz-Request-Id": [ "E42B0254197BA01E" ] }, "Body": "" } }, { "ID": "b965423c3e1abd02", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "6354" ], "Content-Type": [ "text/html; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "mvkpVvvotxBeLdS8BKjcgDj9Ur4rX2F6L/t6GPxfBtktaxHhtBo7k5bi9D0DBVSa5E9QIGGGkag=" ], "X-Amz-Request-Id": [ "A133C22C905177AB" ] }, "Body": "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" } }, { "ID": "dae1b4fa5f5fcb11", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "6354" ], "Content-Type": [ "text/html; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pBVEGP7ficEbDQ8xZle+nezFE+rdvs0zmqpFQii0leAs7H5b4aIuzyTuaU8VjUnnyK0Dzy7811c=" ], "X-Amz-Request-Id": [ "BK8P4P3N2T7G2Z7W" ] }, "Body": "" } }, { "ID": "00c3e5d82a80ea3d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "CFvBXbX1FJvmgeCQgLVFrGLKJIAReGj/ZLMGhw/BmK55Ut86YLZcfFaZDsffrS5vBGjbOdQFgGw=" ], "X-Amz-Request-Id": [ "829F806398E16FAC" ] }, "Body": "" } } ] }Content_md5_did_not_match,_blob_existed.replay000066400000000000000000000143671367004507500402430ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPrDa+RoP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "71a037e228d16bd2", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "16" ], "Content-Md5": [ "dH9B/ScP7BuCvgMMwc1IAQ==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "131fc6fe7a8464937c72db19863b153ad1ac1b534889ca7dbfc69cfd08088335" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "ZXhpc3RpbmcgY29udGVudA==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"747f41fd270fec1b82be030cc1cd4801\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DUnhSefmDU2oeJWI+9ga+pCfSvekYLvoydJ8XP2fDuwMgQibkTPEPkx7lpuuzTllZLVK3LSmK+E=" ], "X-Amz-Request-Id": [ "DC74D31E432779B0" ] }, "Body": "" } }, { "ID": "0ee1c816747541cd", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "16" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"747f41fd270fec1b82be030cc1cd4801\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "l4M2DtD4lKC3adT2eGcvdZR/HL/9yez9IH20jbz4m4fEd6AumjZbw7BRfu009CUTSMSs5qMlQZs=" ], "X-Amz-Request-Id": [ "AE003F9DAA3B66C9" ] }, "Body": "ZXhpc3RpbmcgY29udGVudA==" } }, { "ID": "91124231e86dd244", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "16" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"747f41fd270fec1b82be030cc1cd4801\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "NlzNSSAkhykXcTiH0ToseZvjQk5eh3Sqs3HFiBfGWOtfSnf7uFfZRiEPOxmw5J2nKNuNJ45y6uE=" ], "X-Amz-Request-Id": [ "775F9A5B1BC7B5AD" ] }, "Body": "" } }, { "ID": "dc22fab34f40d2da", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "uoiVbltWDmPkqtHHCGDBTBwrbQr4nYejIruniYJ5Zt9GiiEF1whh2IM3SSQRTxFxzuXLUb/Ctb0=" ], "X-Amz-Request-Id": [ "EBAB5BAF5308546C" ] }, "Body": "" } } ] }Content_md5_did_not_match.replay000066400000000000000000000046221367004507500354350ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPrCuzxbv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "ed309187c0ec7a00", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "REabrmzt3998qVNG6WP92eZ5mb4ceOGLaz417TkY0enrLy+7bcIo+sbCeTU/gj4sXtNIPTqRLVE=" ], "X-Amz-Request-Id": [ "03DFD2FC1A1CE9F3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1yZWFkaW5nPC9LZXk+PFJlcXVlc3RJZD4wM0RGRDJGQzFBMUNFOUYzPC9SZXF1ZXN0SWQ+PEhvc3RJZD5SRWFicm16dDM5OThxVk5HNldQOTJlWjVtYjRjZU9HTGF6NDE3VGtZMGVuckx5KzdiY0lvK3NiQ2VUVS9najRzWHROSVBUcVJMVkU9PC9Ib3N0SWQ+PC9FcnJvcj4=" } } ] }Content_md5_match.replay000066400000000000000000000143471367004507500337420ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPrAVcLCv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "7448ca098d3a88cf", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "11" ], "Content-Md5": [ "XrY7u+Ae7tCTyyK7j1rNww==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "aGVsbG8gd29ybGQ=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "6sfXlp2+OhlxFs5IE7DEfYg+lCWYHRuqnh1egRatZ6rBjjdhv7IgSXOA2u5WoHbkBD2VZ+Fg4/E=" ], "X-Amz-Request-Id": [ "79A90B3C345E9ED0" ] }, "Body": "" } }, { "ID": "d9340243a29d7436", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "3d2OrK1cOV/uKlN4e5nt86okK/SvsbOG0AsGWQxRNzQVj0tbP8+mOoSxp0R9m39myMtfMFuMArQ=" ], "X-Amz-Request-Id": [ "7D8171B858D648AE" ] }, "Body": "aGVsbG8gd29ybGQ=" } }, { "ID": "47dbb85041e231d1", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "11" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"5eb63bbbe01eeed093cb22bb8f5acdc3\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "V5Ftpy+VSAw2+1QE0qBAEGzUw3aCWsdnc97asGt9yvqxmU0xvWPA1syFa2Yyou2zTXomAg/55PQ=" ], "X-Amz-Request-Id": [ "1A04DB0EB5172371" ] }, "Body": "" } }, { "ID": "d77dd98f1732c3fb", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "xIL/uQ6PS7X/8eRSrrFwB1I8so2ODL19toQoI/TGamRp3dKECYKG7TviRxn2H2qy2S0grXNIsF4=" ], "X-Amz-Request-Id": [ "4A1D0A5C1690E8B3" ] }, "Body": "" } } ] }a_large_jpg_file.replay000066400000000000000000003244021367004507500336340ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPrIOUtav5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "56232d0d630edd5a", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "38430" ], "Content-Md5": [ "YtQ/og5wv6H9siUQ0cBg0g==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "3b38fbf9a6c411c2094468b6eaaa30d8d860e11bd7a8457b5e13428023d9445b" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "image/jpeg", "BodyParts": [ "/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAH0A+gDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKDRzQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFMkkSJS7sFUdSTQA+iq/wBth3Fd65xnGamV1YZByKAHUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAAGBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFNd1QEsQAOpNADqKwr3xhoVg+y41O2jbjgyDv0qXSfE+ka2hfT76GcA7TtbkH6UAbFFICD0NLQAUUUUAFFGRRQAUUmaTcPWgB1FN3j1FKWA7igAZgqknoK8H+InjWbVNZfSLB7zCtsWOA43sD349vf8ACvV/Getx6H4Wvb9tx2R4G3sTwDXm3wm8OQS2cmuXRWe6uJGdXcElBnpzQBg23w/8ZzWx1VdRe2ugQ8VqJTwPQt612HgDx3qt/q02haxAqXlumWIBBbnuO3avTFjQRYwOBXjscsQ+O935TNkxBWA4Gdo6468etAHtkbbkBp9RQf6sfSpaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAzzRRRQAUUUhIHU0ALRTd6+op2QaACiiigAooooAKKKSgBaKKKACiiigAooooAKKKKACkzzS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAjHCk+leGfFLx1Lcu+jaeWVt+C5yuSO3PHPrXtWoXAtrCaYnARCa+f/CsVpr/AMTrm4kh27GJH/TQjvQBteDPhLb3lrDqOuhppZIx+5YkY5zzg81ual8Jbe0/03wzdy6bfpkptfcjcdDnJ/KvTII0hhAHAAqG21S0unZIpkZkOGAPSgDzjw58R7iz1FNC8URi11PzCgbGFcdiPY9K9PhuEmQMjAgjNeY/GDwuuraL/adoyx31mCwbpuTuMiuK0r4u3dn4dWK2t/PvEUKzHO1T0+tAH0M0iqMkiqN7rVhYQmS5uooVHJLuAAK8bt9b8b+I51tSk1sHhwxQfu8nnduAz07Z61sxfDDU7u1SS91udpjy6uisufUZHB/GgDrbvx5pdtG0yTfaI1++0QyE6dfzFY//AAtrRxbzvtuGkjJxEqZLc4GCOOfrUtn8KdFifzLjzbgk5Ikbg57YHaujtPB+iWciywWECSKMbggzigDz+/8AjEpkENhp879N7MCpXjJ4I7fWs+38ZeM9TZpNP064G9SYy8W5Poc4A7cjNewLo1gq4FrCBnOAg61Zjto4wAqKAOmBQB5E918S4oTO0NvgA5QqWJ54IA6fmaW3uPiUbIl4UM8pUpkj5Fzzn3wf0r2DYuMYFARR2FAHjEuieP8AVdMeO+lhk8zG23lVQFI65I/+vUdnYfELSVjgiht4oUXhLeNNuc/d59QeuO1e17B6UFAe1AHkJ1P4kral5LW3B3bQvl7mJ9eD07Dp71xOneIbnS/HtzfavpzQXHypcm35AY45Oe2PSvpQxqR0FUP7HsvPkmFvGJJDl22DLfWgDldD+JWg6mgCzvC27afPQqAc9CwyM/jXaQXUU6bkdWHqDmuO8Q/DTStaVmiZ7Nnbe4twArtggMR689f8K4dPCPjvwlqAbR7yXUbJWBWIyhV285BDd/cUAe35FLXmWj/FKKG6+xeI7cabMuMlycZ98jjPNei2l9b30KTW0qyRsMqynINAFiiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkJAHNDMFUk14/8Svik2ku+j6Q2b8nYxGcqT6Y70AdX4z+I+l+E0WJmE94+QkKHOD746V5i+vfEfxvI0mnIdOt1YDumee2eTWt4E+Hd3qdxFrPibdNPnekbnOOc5P8AhXssNjDCiqiABemBQB4LeeGPiNpdp9rbV5rnaQzJFKxbaBzycelbPgv4k6hFd29lrMwlE+7bIy4KlTjHGc+tezmNSuCARXm/xA8HW0Wh3OraVFFb3to5vC2OHI5bd+FAHpEUgkjV1OQRmn1zHgjXBrfh2zuiyF3jBYIcgHvXT0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUCigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDm/HAu/8AhGLr7Jy+35lClsr36V4F4V1P+yvHscqPuieQq+8EHBPvX09KgkQowyCMGvCvif4Hk066XW9LgJgiO6ZUYIUHc5oA9vgkE1sD1BFeF+LdS1Dwd4s8+CSRoZpCxYrhR7H1r0jwf4lh1Tw/bzLICdoUgsD04NR+JfCFr4ihfdEjyEEpuJ2nPrigCDw74ms/F2nK6uCRw6MO/wBK85tLaDwf8UrnT57Um01Ah4eBjJI7exroPCngHWfC3irfAXksHHzlnGB9PU/hXoeueD9M8Q/ZpL2FvPt23wzRsVdD7EUAatlbxrEpRQBjjAq6BUdtCIIEjBJCgDJ6mpaACiiigAooooAKKKKACiiigAooooAKTaKWigDmPFnhKz1+xYmygmukH7vzRgH2J9K8ut18VfDAtcmyku9IL5ljik3LCM9VHX8694qOWFJkKOoKngg0AYnhrxXpvifTY72wuFkVuGXoynuCOxrf615l4h+H13pt1Jrng2b7Dfg7pLVR+5n9iOgPvT/C/wAUoL27Ok65bHS9WiKpJDKRhiRxtNAHpVFRxyrIqkHORUlABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVa/keOxnaLmURsUGcZOOOaAPNfix4/Gh6c+l6dMpv5/kyhyUB6/Q1zfw5+Hvk3S6xrDia4kXKIQSFzzk5715idahtvFM97rllNc3CSNiLO75857mtS/8AiP4k1W+SbSEmtYYQFjRTlQfU9j+NAH1NbNFHGFUjgVP5qk4Br5k0i6+J2syzPb3txFIcYUqFTBHXNbF/YfEnwzbNrl7rxniiw0sSMSAM+mAMc0AfQqnNRXltFd2c1vMu6KVCjqe4IwRWT4T1pdd8P2t9n5pE+b69622+6aAPHfhQyaTr+r6MVdHimb5cgrgMRwevQDrXsleFWVw9l8b9SSGDejNyzM3yBgDkDpyT+le4RSB0BHTFAEtFFFABRRRQAUUUUAFFFFABSb1zjIzXGePfHEXhayEEGJNQnGIowRkZ4Bx1PPavJp7nxvcvJqckOooWVZPMVDwvU4xyOO2B0oA+jcg0V4l4d+KN3pl3Fb6zPFd2Uj7Eu425QcD5hjOM8ZNeyWV/b39vHPbyrJG43KVOcigCzRRRQAUUUUAFFFFABQM45oooAKKKKACiijFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACMcKTXkvxX8cPpsf9iWNsZ7q4jOcgNt/4Dg5rr/GfjO28Lae0hTz7huEhVwGOe/Nee/D7wzceINduvFOsRyM0r/6OJjk7fXGPyxQBw2gp4m8Hz2zzwsIZz54DcKOuVx2r6D8Oa7bavYQTxkB3UNs3AkfXFR+KPCNt4j0OWwfZG5H7qUpkxt6iub8HfDm88MysTdpIdy/OAQWUHoc0AekqB1xwafSKMACloAKKKKACiiigAprNtHNQXN5DbRs8jgBQTXk/ib4nHzZLPSZvtN0GwIYoWLNg84PT/P4UAeszXkNuheWRVAGck4rIu/FemWgQyXMY3HH3xgcZ5ryo6J498TuiNs0q0YjIaUvJj/P0rorH4M6SrmW/uru9Z1AkE0nBPqMcigDoJviT4bhKhtTg2scAq2f5fStey8UaTfQiWC+hlQ91auePwm8KnP/ABLEyV2n526enWqFz8GNAaN0s3u7TcAMxTH8+c0Ad/FqdrM5RJkZ1ALKGyRmrSyK3Qg14xqnwl8QQSxz6T4ou96YUGWRgQmOmRwfyrNtPGPi/wAATxw+KIzdWJcr5wIZwBnBOPXjrQB73RWFoXifTtds457KdZFYZ6YrcBB6UALRRRQAhFcJ49+Hdl4rtvtEP+j6nD80M6Hbkjs3qK7ykIzQB5R4E8Z3sOoyeGPEMMkGp254ZyMSDtg9+Oc16Y+o2kKAyzxp0HzMBzXnvxb8L3F5ow1zSJHh1PTyZQ0fV1A5B+grzz4e+H38d2klze63dvMshEyMxJz26nGPwoA9guviV4dtZpInumby+rJEzL+YFRzfE/w5FKsYuJZCcZ8uJm2k9jgdam0L4f6Nom54YmllY5LytuPTFaR8JaOZXm+wwiRyCzBcE4II/kKADRvFuk65G72dyGCMVIYFTkdeDWzHPFKMo6kH0NcNq3wt0W6gdrKN7O5bJEsUjDJPrz0rjLHwd448Jy3UtnqsdxCpXyoSSxcDtg8LQB7gKK8x0T4pQrNFYa7by2V8ZPJIdMBnx25OByOtekwXEdxGHjYEHmgCWiiigAooooAKKKKACop4EnQqyg5GOalooA4w/D3QU1c3rWELvJnJdQ3P49K37fRbC0j2Q20SKOgVQBVy9uBbWrykZCjNeHax8ZNdu76Wy0DSVkkRmBcqzAAH0GKAPZha28N0SgVc8kCuU+JGrWVn4N1SNp4RNJAyohkClieOK4C3n+J/iLT3hZ1t1n+UyeRtKg475+tOh+Ceu6iqHWvEUsgUAbFLNx+JoAr/AAv8fW+neGja3swQ20nVmABB5rvY/i74edMO86ZztYxHDfTFZGkfArSLOM/apnncjjtiuug+G/huGFY/7LtzjqdnJ/GgD551/wAW3f8Awnd/renxXAjlOFDcE4AwenT2r0X4ffFu8vNTTSfEVutrLJgRSlSgY+hB716oPCejKBixiyvQlc15x8Z9MtLfw/aXcapFcRXAMbKBu6HPHftQB7DG4kQOpyD0p1c74L1JdT8M2M6ur7ohyvTI4NdFQAUUUUAFFFFABRRQelAHhHjRbfVPi5psMkhZVlAIC4K7e3X1HoK9straMQKAoxivEviXbxaX8QLK+l3ojyK4kCA7TkdDn869ig1W2h0xLiWZFiCbixPbGaAMzXPAWga4h+1WSh+MPESjDGccj6mvJdO1zUvhd4wk0vVJrm40eXLRyMdwRScAj+tdzqXxp8KWbvGLiWR1BxsjPzEehryHxr42/wCEs1azbStMupkjyNkiEs+e3HbvQB9M6Xq9pq1lHdWkySxSKCrKcgiru9c4yM18ueHrr4hWmbDR7C6tY2zKUlQquTzwx/lXXaXp/wATpA1zdPtfj5GlGT/hQB7o0iKOWA+ppv2mHOPNTJ7bhXicvhrx9NObi9kNwrc7DKCI/YAde361Wm8MeLZFP+hlkzgMu4MuAexP+c0Ae7+bGf41/OnBgehFeFjSPFltNvlhvmhUqMRTMMdOncioodZ8RaYRFNdarHwSEADgEDOORn8M96APeqK8LtPilrxkSGYwCQrv2zRMm0e/ua6nTfig77Beaa7DgGS2bzByM5xjNAHpdFc7pnjXRNUYRxXqJKf+WcvyN+RrfSVJEDI4ZT0INAD6O9FFAATiiikJA70ALRWXqHiLSdLLC8v4IioywZxkD1I9KXT9f0vVP+PK+gmOM4RwePWgDTooBzRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWXr+s2+haRPf3LAJGucE9T6CtMnAzXivxZ11tV1a18PWe+TDBpFRScseAOv40AUfD+lTePPF82ramubVCNsbgMCOw9OPpXt9nZx2kKxxqFUAAADpXO+CfDkPh/R0hXl3O52xjJNdZQAmDmloooAKKKKACiiigAqlql9Hp1jJcybiqDkKuTVwkKCT0FeR/EfxfcXV3F4e0O6zcXLbGePDAdiCCD/kUAZN/wCI9V8feJZNG0WdodNjH76dAQR0zyRj1GPavRvC/gbS/DlikVvCrPnc0rqNzH1zVfwF4Pg8M6UIgTJPJ880p/iau0AxQA1Y1UABQKfRRQAYooqGS6gibDyKp9CaAJsVla34e07X7NrbULWOeMjow6e4q7He28rFUlViOuDnFTggjigDwTVvhz4g8BiTVfCt956oWJgeL5tp984OPwrrfhv8R28Ro1jqqRW+pxHDRA/f9wK9MkjWRSrAEHgg14P8QdHk8F+L7LxHpqxpDJIA0YQD6gdOtAHvKtuAPrTqzdGvl1HTYLlCdsiBgD15FaVABRRRQAySNZEKsMg14TfwN8NvifHIg26Vq0pdnx91jnK+mM4Ne8E4ryv46WLXXgoTxKDLbzrJnbkgdyD2oA9OtpVlhRgc5GanriPhjrX9s+ELO4aQvIF2Mx6kjiu3oAKjlhWUEEdqkoPFAHnfjz4f2OtW73xkliniG7zIkBbAHbHNc58PPGFxp+tTeG9SnMsasRaXDnHmqOwzn1r1y5vII0bzXVVA5LHAr56+JNsPDnjTT9SslIidlKOvRSDyue/rz69aAPo5G3qD606sjw5qMeqaNb3URJSRAwJrXoAKKKKACiiigBAc0tFFAFbUI5JLGZIQpkKELuOBXh3wndYvFmtabc7fO8zeFYc5BINe8P8AcOOteFJatofxw3hfLivSJAAf73X9aAPdFjVVACin4pFOQDUN1KYbaWRQSVUsAO/FAEjyIn3iBVG81zTrBS11ewQgcnfIBXzh4h8b+KNf197SK+e0j3lFjU7dpH6nGOtdDYfCaS/ijudR1qeYnDlVUDJ7gk5yKAOz1z41eHNOLw2bvf3A4CRDg/jXnkms+Lfibqf2eO3+yWBYqf3WVVfUk9T0/wDrVn6r4RtPCfj/AEvZt+wTSKhDqXOT65GBzivofTLWCGBPLRQMdhQBB4S0NtA0SCyaUysg5Y1vZAqB50RCSwGBXG+LPGkOjWMsguFj2jO88ge31NAHaS3UMK7nkAHua5/UfHvh3Sw/2jUoA6ZygbJ4ryG2m8U+O939mh7ezJ+a4uMjPsq9xXf+HfhjpOnW0RuIlubnO6SWZAxY49xwPpQBHN8aPD6k+Rb6hcjGf3VuTn/PP5Vp23xS8MzwCSW7kt2xuMc8LowHrjHT36V0UGhWFsoEVvGvrtQDNU9a8JaPrsCRahYwzKhyu5RkcY4PUUAWNK8UaPrW7+z7+CfacNscEj6itOS4jijLs4CgZJJ7V4V4u+HVl4WE2r6Nq8mmyKMxopPJx0zye1cTB428aeLbVNEgnlcr8ssiDLOM9WIHHTtQB1/xj+IOkalZLpVhH9qm35EwyAuCRx69PpXLaJoni/x7NaQXc9zHp6KoYlWRCAPTuceld34P+DjJNb3+uXUk86YYIrEgY6ZJ5/CvZrWyhtYwkaKoA4AFAHlenfAvRIh/pFxcOOcgEKCCc449Oa9A0zwlpOlIgtrSJSi7Q+3LY+vWt2igCAWsS8BAB9KlVAO1OozQAmB6UYHpS0UAJtB6io3toZCC8asR0yKlooA5rUfAuh6lcG4kt2jmJyXicqc4x2rm7v4R2hG+x1S7gnByGZtw/Hpnv3716TSDmgDya/8Ah3rJRxFdLKcD95Kfm4HGMDP+etY2nah4x8JsZbi1urm3UBXjPzIuDjIORj6V7nUFzaQXcLRTxJIjdVYZFAHlA+NsEF6IbuzZEwFJCk/N39gOnevSdI8QWGs6el5aXCSRN3U5xXC+NvhtHqjJLYfut/EgXAI989ef6V5Ott4s8Naw3hjTdQjuTdgB4kcv5fr6Y/OgD3XxP8RNL8PObcCS6u8f6qIcLxkbieBXmVx4x8ceMb1k0ZZLe23gDyU28d8sc812nhr4W6Xa20c+qxte3jANI0zs4yPQE13ltbWtogSNEQKOmMAUAeMWfwc1XUpEutY1yVpicsMb+vXkn+lZPibwXP8ADyS1vrPVbpYDwSqA5YHOCMgdK+hYriCVikUiMy8EA5Irj/im0cfgm6aRcncojwoOGz15B96ANPwTq11rHh6C6u12uw44xx27mukrlfh/A9v4UtY5EVCF4CnII9eAP5V1VABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSc59qAFooooAKKKKACiiigAooooAqahdJZ2cszkBUUkk15R4Mg/4STxdf6424xiQqFKbVyMY4z1/Kui+KmpT23h2W2gKDzxsYnOcHrjHSrPw60ZdI8PQRhQHb53Oc5J96AO0jQIoApxOBmgUY5oAWiiigAopOc0tABRRRQBn63ci00e6mJj+WM4EjbQTj1rxz4W6NJrOv3fiO7WM7mKRbVHH+feu2+Ld4bXwZMBHG+9guHzx9MEc1Z+G+mLp3hKxQRorNGGbb0JPNAHYxoEXAFOxz1paKACiiigDL13U10vTZZ2YDapPNeAya/rHjTxI+n2N09umCfMychRxxj616F8YL2W20CfbIEwuef4vYVz/wAOpdG07w6l9LeReaylmZ35XuR1oA841lfEvgzxFFanVy0sieYpVyARngH8q9J+H3xdm1C6+xawYxtGBIhwD065NeOeO/EUfiTxfNewybrYYSLdkAKPr0qnpDSWt7bnywQScYbryMGgD7bjdZEDKQQRkEVxfxS0WHVvBN6XQGW3QzRt02kVueFJZJvDlm8ow5jGQauavbQXml3NvcIrwyRsrq3QgigDjPhTqp1HwrbBiN0WU4AxgdOhPavQa8I+Dxex1a7sFuEkiDHYglDYXPXivdh0oAWs7WNasdEsZLy/uI4YkBOWOM47D1NaDHAJrwDxdcXPjz4iHSFYrZ2WV2FhgHPLEevTFAGzqPxqvri3E+heG7q5g3bTNIDt/DaP61yPij4keJdX0a50+/0IQRXKmMSbGyT3IB/Hv2r2/RNNstO0+G0hRVjiAAHrir17ptld25SaBHVieCOh9aAPHPhd8QtP063h0S7gkt5VYIHCcEn1A5Fe8RSCRAw7186/EDwQnhvVDrsChLNSoCxMcq3bg/QdK9l8C6s+s+F7K8dSrPGMg9/egDqKyfEeprpGjXF2zbQi5zWtXEfFSC4n8F3KW5+Y4zzjigDxXxDq3inxL52oAyw6cD5aNGTgehIzyCa4bU77VIZDb3k8m1lD7AeGB75966q48ciw8Ox6R9nDRyQiMhSQyMD1+hri9S1D7b5UqhVZE2YBycDj9aAPpv4Oagt34MtEVyxjyrcjr+dek15F8C7Ka28JiWZcedIWXjHHT+leu0AFFFFABRRRQAUUUUAFeR/Fy0bT9V0XXoY8eU5ilcYz1BX3PU165XC/Fuy+2eAbxhnMLLINoyeuP60Adfpl0t5psE6nIdAaluU3wOvPIxxXCfCPWxqvg+3RnJkg/dtnrxXfuMqRQB8eeNLJ9L12+cMFkt7xl256huc4/D9a6ew+J3i06Y89lo6PaQx4eRkbHAPOcit34reFmg8Y22rLBFLaXWEdXYcyZxyD2x6e9Fzf65daFLYWGgW9laeSY3a4k2AAjnAx2H8qAOGtb3xR438T2d1MGlEbJKViPyqoOMgZ69a9g8WeO5PDYs9NtPKlvZgAyOx3L6YA7nPWsb4PNaPplxAGVp4JWViMHjPrXn/xL1WWH4gXE7xIzQN5akkg4HTvigC9rHxB8VaBf+Tc38d15iBpIj/B7AjHvVnwvYaj8Q9fS+1NSunxkFYP4WI9fWvP7O0u9c1t+EaR2BkLHjH+RX058PvD66Vo8AZFD4GcUAdbpelwWFtHHFGEVRjaBWkAAMDigDA4paACuN8beO7XwtaeXGonvnB2RBgNvuf8O9a3inxHb+GdEn1CcFyg+SNfvOx6AV8/WcepeOteuLmOEy3EjL5ssg2rGM5A4OfyoAzb0+IPHOrNLKJ23Z89yfkiXP3QO3Tp717p4A8E2XhnR1ihiJdzuZ2AySfU1c8L+DrHRtNWD7OhJO6Q4J3N68k11kcaRqFVcAdB6UAKqhRgDFOorE8SeKdM8L6c15qM4jQfdXqXPoB60AbLOqAlmAArifEHxO0TR5TbW7PqF7natvajexPpx0ric+KfifetOlzPpWgZxHEpKvMvckg85rvPDnw70Xw+Ee3tVMw5MrElifxNAHOP4w8fajI/9neF47WNV3gXbks49iMAH2rPufEvxVtQssvh+3cAfMIjuz+TZzXsSxIowFFKY1JyQKAPH4vjHdaazReINDurORDgkKSCfyrtfDvxC0LxHEDZ3aeaesTHDj8K6Sawtp1IkhVs9ciuE1X4R6HcM1zpYk029GSk0DkAH/dzigD0BJ436MKkr5+Os+KvAXiu3ttenlnsGJVLnPyOOMZHY/417XomvWetWaT2sySKw6qc0Aa1FFFABRRRQBw/xK8Wjw5oyW9uUa/uzsiRienc8c1mfD7wU+nvLrWpYa/uuTxwg64Gcmum1nwXpuua7Z6peoZHtfuIWO3PqRVnxLcSad4fuGtreaWQLhUhByPy7UAYnirx1baLK1hbI0t1tyzKQREMdSM8/SvLYtR8RatqLz3V5ESzhYvNl2q6/wC7yMnPTPatbw58Mv8AhI5zrWqQzWrSSEm2cnp+hFdNL8JrCKB/sckgZnDAO5wv0oA6Pwnoh02JriY5nlUBjuzgAdM964v4iXuoeIvE9n4c0uPzIIWDXDldwVscZ9MCur8Ua5F4L8IlizNNtEMA5ZmfHFZPww8PtbWMusXiyfb79vMl8zg/l2oA73S7c22nwxMAGVACBxVygDFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFBz2ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKQnAzQAtFFIehoA8j+KMd1qOr2NhDCH3Nkhmxx+dekaDaiz0uCAY+RAP0ryv4nGX/hI9IljRWj8/BwOc5H5V61pf8Ax4xk+goAv0UA5ooAKKKKACiiigAooooA80+MshXw7bKFDbpwMbAx/wDrV2XhtFj0W1RcYEajj6Vz/wAU4oz4RlmktoZjGw2+b/CfUe9X/Ad+L7wxZSblY+WAdvTigDqqKKKACiiigDiviR4VTxPoDQiOR5UPGyQJx3znjFfLeseHLnQbuSO5RpIgzKAHwwIOORX2yRmue1bwXomsySSXVmheT77AAFvxoA+NYrP5opUO5sj92BuOa9P+HPw7v9X1aLVL6F4bYPkApjOOePSvb7P4deHrSbetjG+37gYZ2109vaw2sQjhjVEHQKMCgBbeEQQrGowAMCo9QkSKwnkfOxY2Jx6YqzWJ4s1CHTPDl7czyrGixHk+vpxQB4/8IAlx4o1WaNsRpIwiDDJZSfX8K943BUyTgDqa8b+EFhJFDPeSs3znKq3JAPI5zzVj4g+O7xrkeHdAUy3U+Y5GUZx2IHpj6UAdT4n+I2kaFA4VzcyjK7IumcZxu6flmvCNRuPFUeuN4l0rw/cWkc56rGZC2fX/APUK9e8HfDDTLGwguNRt1ub0/vGaTkKevA/E16JHp9vHEI1jUKOgAoA8d0HxjqMUKi/huBdbctE8YTp/KtmT4iNLbSRxeRDOB0d84+uK7vUPDWmajzPZxOQD1Xr9ao2ngnRreR5P7PtvNcYZljxkUAeE+MvEK6pFLA95LqFzKoAjQYii56jjn617N8NLZrPwjYxSkbxGMjPSqviT4W6LrVqVigS2nUYjkjXla4PRPEOr+AddbStXQGAyEq2f9YpOAw6gHjpkUAe+jpVW/sYtQtWgmUFT2IyKWxu1vLVJl6OMgelWc0AeJeJvgdBfX013ZzkNK5YpkIFznpwe9cLrngay8KaHHDcxxtrN3KURPMDMieoXv6cetfSut6raaNpFzf3kgSGFSSSQM+3NeH+EBdePvHUmuXkSG3hYhI2G7YoztA464Oc5/pQB6x4B0uHTPC1lDDGUXywcHrzya6qo4IlhhVFAAUYAFSUAFFFFABRRRQAUUUUAFQXkC3NnLCyqwdCuCM9qnoPSgDxH4SSHTPE+taQ6vEySbhE+Mr+XFe29q8Q8SN/winxntbyOVxb6gAZVJ4BORxx0yPevbIXEkSsO4oA8++L1oJvCDXAVQ0EgbcewPB/nXD2fhHSbnRLS/wBW165MEZEjxyXAK57g/wAuK9h8W2B1Lw1f2qHDvC2364yK+fvDEOkarbXH9vSMyW2WUtOQBnqCAeuR+vtQBtaTrOk6J8Sha6GEktL1AjJbgAIwHU/lWV8V9GW18QNrE1s09tKgA2gkI3Oc8/SpIry01fxHpx8I6LO0Vq582QAKrDPU/TrzXQ/FuSWDw40bYVnUjGPzoA5H4S6TLqmqG5C/ulfLkqCD7V9IWdqlrH8q4z79K8o+CdtCNBWVRyxORjpzXsDOQvt60AWBTC4+b2FVJL1Ily7AAVzHiXxna6VoF9dLIFkjjbZ0OW+lAHmPjO+vPHPxDbSLFRLY2eEcknCt3OM8/iK9W8LeF7bRLbEMYDNy5AxmvN/g9plxI95rOoFlkvJCyqc4xk817fCFCDGKAJdvHFLQKDQBl+INdtPD2kT6jeNiOIZxnlj2A968S8K6ZqPxJ8Tv4h1ku+mo5EFu5ynXgAZ6Ditzx/d/8Jr40tvCVm5NvaMJLx19f7v4f1r0vw7oVroenpa2sYSNRwPegC/ZWENnGEiRVUDAAGAKt0UhYAckUALR3pokU9CD+NOoAKKKKAMvXdFtNc0qexu4leKVCpBFeCSrq3wo8RKsJa40x3AAkJ+QZ/lX0fXHfELw1Hr2gy/JukjXIGOooA3dD1eDWNNiuYXDB1ycHoa1K8K+E/iSbS9en8N37MFOWgL9cZ6GvdQcjNABRRRQAU1kVxhgCO4NOooAQKFGAAKpatqlpo+ny3t7MsUMalmZjir1cV4z8GXPi+7tYpbxoLGDLbUGSzHjnnH060AeO+Pdd1DxRP8A27H50VhYufsymEFAM4DE55Jx36V6R8MfHttr2nJazMiXsfyug4z7iu007wxp2maSNPgt08kLtKlevrmvD/G/hOX4d+IrTW9FaSOzdyTGgJ2nOSCfQ0AfRQIIyKWud8IeJLbxJosF7A3DLyDjKnuDXQigBaKKKACiiigAooooAKTvS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAYooooAKQ9KWkPQ4oA8p+KER/tLRpASo+0c7VyfWvStN/484sN/CO1edfFaNo7SyuFk2vFPuBLAf8A167DwlNLLpMQlkEhA4YelAHRUUUUAFFFFABRRRQAUUUUAY/ifTV1Xw9eWjRmQtGdqrjJPbGeK86+FWoy2kt5o1yJQ8EmR5iBcZ7cfhXrhGRivF/iNp8nhDxBbeJbESRwyuRP5fOW9/rj6UAe0KdwzS1zXhXxRZ+INOjnt36qCVPUV0uaACiiigAooooAKKKKACvIfjJrjzxWvhuyaRprlszLF1C9uMc+uPavRvEGv2eg6ZNd3UqosakjJxk+lfPmhy6j8QPHf9qyNK0UUoxj5cLngfSgD03RLCbwt4LmuBExuIoSThMlsAgHArifhht1fxlfahcyyyPHlsSnjcTzgHpXtxsEn0uS2dcq6bSD0rwXXNM1X4c+I4NbgSSYSZN4GcFWUkdB2Pt7UAfRUIGwYPGKmrkfDPjjRdesY5LO/hdyoLR7huX2Ircm1uwt0LzXUaIBklmAxQBpUV5re/GzwraX5tRPLIB1mRMoPTmr/h34maPr+9UuYkkUn5d3UevNAHdHGK8I+OTJDrOkSLG5fDBnHCquR37fX2r0HWviRoWlWjyLqNpLKpwUE44+uM/lXhHiHxZH4x8dW15eMDptsAI3RSuR75HqaAPozwk06+H7UXMwlcoDvxjIqzrfiTTNAtPP1C7jgQ8DceW9gO9eLP8AFfV7uX7DoFjHFGija8rZd+3yjpSxeDfEviy7tbrVrgyZOWVmJQDqeM4BwcYAxQBoXWp6j8WNZeyspZ7XQIGwzKoPnng5Ofr79K9Y0DQLXQ7JYLeNQepIUDJ7nApdC0Gz0W0WG1gSNRzhRitigAooooAKKKKACiiigAooooAKKO9FAHlvxksHXTbTVE2f6PKC27OcjpjA+td34avl1HQrS4V1bfGCSp4zjmmeK9P/ALS8OXkIClwm5d0Yfkc9DxXG/CLVml0a402YAS2czIQD2/pQB6POgeNge4r5W8Q6Jp+l/ES5s5jLLbzzbmiVyig57k9e9fVcgJQ7etfPXxU0yWy8YfblTEbqG+Xg479/XNAHsnhnRbDT9NjS0hREK547nrnPeuP+MfhufU/C8lxbAmSD5iAccZGf0zXZ+DLoXvhqynByWiGeMVt3NulzA8UgyrAjFAHlXwckhPhtYhgSox344zzXomr38en24kkYKGOMnoK8sjM/gX4gS27tEumXpBRVwNnYEj6it74ka3pw8Kuk1ygkJDxKG+YkZweo4z9elAHBalquufETxHdWFhcz2WlWhKl4iQ0pzjr+dYOq/C7U4pEgs7uYhz+881sgj6d6m+G/jSw0PWbiDUJVSC7ffHIpyqE9Q3pXvNvLY6msN3a3Mbqw+UqQVagD57jvPGHgFh9te4+z7R5ZiQvEOehz0r2bwD8RrPxPH5DsI7tFBZOua6vULWxlsGW4jjZcfMGAxjvXzppd3aL8TpE0SJo7Vpx+7GUAOec4yMZoA+pVYMOKralcrZ6dcXDttEcbNn6D8afasWgQnrjmuN+LV89n4AvtkojaVkjB9csOP0oA5X4SWH2681PX5iWmu5my2zAIBPSvYRhVznAFcZ8NrJbTwlYoFAPlhjjuTXYzgtA6gZJUjrigDkPE3jqz01Ta2dzA964by1Ykgkdsj34rgb/WPFuo2VvLNJOEkILJaJuXBPdsfpivO/HUs+l+IZ0k8ouHYIyqcsOnOeKl0b4matpOiQqUimCsQc5+YDoPY/SgDes/iNrGl+I/ImnuGskc71kGWUZ6gDBwMdK958Oa9ba9psdzbzCTI54wQfcdq+NdT1mTWNflv58hZHLbOoUGvbvgtq0gPkuVCynjjrxxjigD3WigdKKACmuoZSD0NOpD0oA+cvGbJoXxbsbiByjtKoZuMYPFfQtlL5tpG+c5UV89fGtVXxbBNG2243KoVRnPIINe7eG3Z9GtixO7y1znr0oA2KKKKACiiigAooooAMjOM81l+IdKGs6FeWGdpmiZAwxxkVqUUAfOfw21O68J+Mn0G83QxO7JscgDcDwR65r6JikEkYYHORXhvxk8NvpuoR+JrVz5gYFUCDhgcn3NeleAtbOu+GrW8dBHI6AugOcHvQB1dFFFABRRRQAUYxRRQAUUUUAFFFFABRRRQAUUCigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooPSgDz34rWiXPhp3Eqo8Tq4JXPetDwBdC40K2bdlig3cY/SpfG1mb3wzqETAH92xGcdcVzvwx1JTp8FoxBkQYJ3g5oA9PooFFABRRRQAUUUUAFFFFABVW+sob63aGeNZEbqrDINWqKAPDPEHg/UPAesNrfhoS/ZWy00G75R9FA6V3fhPx/Ya1bJ50ghuMfOjHofr0rsri3juI2R1DAjBB715rr3w1b7c99o5t4ZpOGDIRge2Dj9KAPTEmjkUFHUg+hp+R614kqeN9HeKKGykdR8pZZiRj3pD4+8T2N60U2nSsq5BPPJ/GgD27Io3D1rxVvi7fRK/2jS3DKORG27Jzjr+tRz/FTUZYGFtbOJ84VNnA4/vZ65NAHtM11DAuZJFUe5rmta8d6RpNu8k1wFUA8txkjsPU15ZDf+OPEMa3kQjt/mICzIxJXjkD/APVWh4b+Heo6hqDXviV/tknVA4IVPoM0Ac/qVzqvxL1weTI66ZFINsbKBuP0NeveDPCkOhaeF+zrFK2d5AHzcnmtrTNCsdOQC3t44yBj5VArVAA6UAIq4GKpalpNlq1v5F7bRzx/3XXIq/RQB4d8RfhPpVnpl1rOm28ySRDeYbchRj1HHbFeJw2T3dzaeZcu6TuAElcjd6+o6n9a+2J4lmiZHUMrDBB7188a94Z02w+IX2ax08ukcqsIlB2xs2Dnjtx06UAa/wDwo7RnslkhuLmNzgsd2eO4HpXA6Z8OIta1iaCwvybaNjlzndgHoQQPzr6L1e9XTPCN3ckf6qBjgE56e1ef/DLQsPcagzNIJCdrOoBz36cnt1oA898EeBdP1Dxze6XqMTSxWpIGZB8xDegr3qH4ceHFVR/Z6BRztUkL+Q+tee6BaJZfGO+CMz7pSWIUbVyM4Jx1r3EdKAMu38O6XasGhsoEYcAiMZ9K0kiRBhVAHsKfRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA2RBJGyHowwa8T8Pr/AMIp8Wp9KiMgguwSS4zuPUYPsK9urxT4qRDSPHeg6xDGVZ5AHcHAPIH8sUAe1A5WvMfjHooufDyanFbwyzWjZPmHGV9M5FekWcnm2kb+qg1neKdObVvDOo2MePMmt3VM/wB7HH60AYfw3uUl8KWjJkKV6Z7967M8ivGvg9q/lW8mizNtlgdvkPHfng89TXsg5X8O1AHiHxq1SEPaxR2iG7RxiVlG5Bntn1qh4R+FEeqQW99r1xcXTMAyQPISqDqB71Q8eadLJ8VYoL0vOkrxlW2cFc9DgEHnive9KtkitY1RQAoGMelAHC6z8ItF1VFMUP2V17w/LmuZtvhLr+hyl9I1yVU2kbM4wexH6V7mAKMA0AeFX3gTx3rkE8F/rZFucKqtnLDB5O09efyri/D1g/gDxqLPXrdM+Z+7nIwMHHzAntX1OYwe1ebfGTSLa48I/a3jXzYJkKv3UE46igDv9NuUubNJI2VlIyCD1rz742XGzwhHGIg+Zw5J52gd8fjU3wtuZf7GMDRukKN+6Ehydp5pnxasp7rw+xjRpFQEkHbtHB5we/T/AD1AOp8Hbf8AhHbLAH+pX7vTpXQ9RXBfC+/e88I2O+QSSKoVmxjOOK76gDwn4z+BNS1C/wD7YsLT7UDGI9qhiynvwOPxNeFXlpqFq4tbiylt2iXDqUIPPc190socYYZrkPEXw28P+JJZJbu02zOMNJGxUn0Jx1/GgD4/sd32sKkIdmGMNX0L8F9AniWfUJ7fy0ZsRluWbGcn9T9a6DTfgr4b02YyJHM2eu+TOB6V6FY6fb6fbpBbxLHGgwFUYAoAtUUUUAFNY4Uk9BTqp6rdLZaZcXDZwiEnFAHzv46Da38ULK0jZiZJgeuRtB9vpX0LpUPk2iLjGFFeBeCI/wDhIfifdXjqGSzVsOpyCxP696+hbWPy4VBOeO9AE9FFFABRRRQAUUUUAFFFFAGbrulwaxo9zZTxq6yIQAw4Bxwa8n+Et3Jo2saj4duE2SRyGRDn7w6GvajXjnjWOPwp8SNN1wQsLe7BSVk3Yz79qAPYgcilqvZXEdzaxzRsCjqCCKsUAFFFFABRRRQAUUUUAFFFFABRRjmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKAc0UAFFFFABRRRQAUUUUAcx4sndNKu0RAT5ZIz9K4D4SyedFI8gj84SnJCkMfrmu88WuV066ZRkqmQM15b8KGuBrF5OwJSSXGc5GcmgD3sdKWmocoKdQAUUUUAFFFFABRRRQAUUUUAFIQDS0UAMaFGHKiqs2m28v3olJHTirtFAGM/h2xfrbx/lSxeHbCI5W3jUn0UVsUUAU4tPhhUBUAx6VZWJVPAFPooAKKKKACiiigAPIrznxR4Y1xtdbVdIKyFlz5TSEAMBxxnmvRefWloA8c1HRPiHqtjLY3L2ogniIfaq8HGNvuD17Yz36V1vgTwpc+GdDW1uZVkk+8SOxPOPf0zXa4FB6GgDxfQ4tnxg1ElSZGkJbKbdoxkYPft+dezqflFeR6TcxH4wasvlksBjzDn0HHP0x+FeozajbWluZbiZIkXqzsAP1oAu0Vwd98W/C1nM0S3pnK/eaFCyjr3/AA7VLpfxQ8N6kqEXqxF32Kso2kn6envQB29FRQzx3EayRMGVhkEd6loAKKKKACiiigAooooAKKKKACiiigArhfirpMeoeDri68oPPZ4mjwuWHrjiu6qjrMJuNHu4lfYzRNhtu7Bx6d6AMPwBria54XtZ1I3qgR19GFdSwypFeO/BLUvk1TS9+5YLgsp6ZyT2r2OgD5+80+F/i41nPvWOW5d48NwRJyM/nXvVs/mQqeua8V+MsX9k+KdI1yEojqRvZhuztPpj0NeuaFex3+mwzxtuR1DA4xQB5z8ZPDN/eJY65pURe6siS2xdzYHIxx65/OpPBfxW0i+05ItUuobO9iXbMkp2jI4PWvU5YlmjZHAKkcg14l8TfBnhzRbKTU4NPUXkz/KsZKj1JwCKAPUbfxloFyF8jVrNy3ACzKea2UuYpACrr+deC+HPhbZa/wCGob3dLZ3cy71YMWHXIJB/lWN4hk8W/DzW9OWPWptQixvMOSflGAcg5wDQB9M7ga4P4u7T4CuuMv5ke0Zxk7x/9eubsPjno4IivbO9t5ApPMYIJHbg1znijxZffEkxWWlWcyafG4Ylg2ZmHbjpjNAHoPw2i8rRYFdt8pHzHIPP4V1+tWEd/p0sL5wQQcHFZfg3SptM0WCC4ULIi845/nXTlQRzQB4n4N1mXwj4sl8O6gsiwTyM1rLK2c+2e9e1RyK6ggjpXCeOvCY1e03wuyXEZ3xupxyO2fWuV8K/ES/0WV9O8UAgRfKk4jPzdOD70Ae0UVU0/UbbUrVLi2lWSNxkMpyDVugAopCM0tABRRSE4oAUnAryj4weK/7P0mSxglKyMMHGO4+tdf4x8TR6FYHZMFuCCQNueB36182XKXnxB8ZQ21mHZHbEsyg4x3PPTjtQB6Z8DtFZdMudSYbDdPkADoBXtqABQB0FYXhXQY9A0iGziHyIoUZrfoAKKKKACiiigAooooAKKKKACuJ+KOhLrfg25VYEkmhxJGWbG3HU5+ldtVTU0Mmm3KL1aNgMru7enegDmfhxqX2/wnZklS0a+W23kZHHBrsa8h+D+puZ9V0x2/497liq7duAT6dBXrw6UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFHagDjPGd7b2VvN9oLbTExwBngCuV+E2mo9hJd+WVEkxZM9evemfFnV2hBsxcbDKMKofBb1GB1rpPhjaiDwzbsHlfeN2ZVw3PtQB3YGBiloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApG+6aWo5shGIOAAc0AfOOp+KtQT4j6ymgQxzTSSbfMyxxjjGDx1Hb1rck8BeKvE0cEuqamXz8xV84U56AduKvfD2ztLzxbq99GdrySsGRmD55PINexxxIqqQOgoA87034V2NuwNzcTzKQCRuI55z0NaGr/DnRL2waKO2W2mVT5c8Q2lD1z+YrtyQv4V5/8AETx9YeH9JubSC6zqcqFIkVd2Ce59KAM34TeIL+8ju9JvJjP9icxiQgAnkjGB2GOteqDkV5Z8HdDmsdBN1OiLLO5c7VwfxOa9ToAKMc5oooAKZLKsMLyucKilifQCn1U1S3+16XdW5yRLCyEDGTkY70AeeW+seI/FM017pmoJZWyTFBCUB3KDwTnkEg/qPStPwJ4rutRnudI1Vw+p2rsJCq4BGeORwa8fk13xH4f0290dUS2MUuZZwuGUFh0PTjpxXs3gXw8ml28l48rTXN2RLJISeTj0J4zQB2tFFBGRigAooooAKbIu6Mr6inUUAeDac0nhT4zzWjs6W1zgICMBs9PXgYx2r3dG3ICO9eI/G2xmsNV03XreFgUdFeXOBkNwP0r13QL4ahotrdA58yNW/MUAcZ8YNNW48NR3oCbreTBZlzhW4P8ASovhRrq32jtYkYktTtJHQ57j05zxXa+JrBdS8PXtsVDFoiVBz94cjp7gV4t8K7oWXjK5s8ALPCHyWJJYHB+v1oA9+rxT4pw/2v4007THIEbKE+YE4JOSwHA/nXtanIFch488H/8ACT6Uy2xhgv05juWTLL7Aj2zQBo6JbQ2OlwW8WAsahcAdhXkfxLunm+I+l28UgHlhGGxcuGycjA9RWLr2s/EH4cQRW1xdxXNs7FY53G4sfTk5o8Faf4k8TeMYtZ1GJ8CQOZJIAOMEYHHFAHuNnoNjd2ym4tIZCy4O+MHI961LPRrGwjKWttFEpOdqIFH6VZtYjHCqnqBU9ACAAAAcYpaKKAGuiyLtYZFcH4x8FpqKm6tYF+0KwORxkZHX8BXfUhAIwRQB4Jpeq+IPA3nCGNbuwLFhb5IeP1Ht616J4e+Juh615MRuFguHH+rkYAhvT610up6Bp2rWr293axyI/XI5/OuGv/g5otzG4iaeMliwxKeCRjP8vyoA9GiuYpV3I4I9ql3DPWvJLX4eeK9IumbT/EDeSVCiOZmbA46e/v8A/rqvLoPxLt2VYtRRw2QX8zJXPc54/SgD1i61Ozs1Zri4jjCjJ3MBgV5t4s+N2haKWttNzqN2QQPJ5RT2ye/4Vhv8G9X1b5tT1uUO77ppASzP7e3Wuw8N/CTw54fWORLJJ7pP+W03zHPr6D8KAPII/D/jT4jX732pJ9jtZ2DYZcHb7D6ete4+C/BVj4X0yOCCEBhyWPJJrpYLGKDkLk9s9qs4oAUcCiiigAooooAKKKKACiiigAooooAKa4yhHqKdQelAHi/g+wm0v4parGXQBwSETAGM8ZUV7OvQV5neutj8YkYqpNzagZL9Me2P8a9LQ5UUAOooooABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRXEohgZ2OAB1qWsXxBqMVlYyuzj5FLMO+PpQB8+/Ee+m1nxzBbQXhCq4Ux7yVUjuR75r3rwegXQLXoT5Y5AwK8K8NxR+LfG89+ke1FmAJKYORkjBGR0HevoywhEFskargAUAW6KKKACiiigAooo5zQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+JrlrXw3qEyffWB9v1xxWtXM+P7lbXwbqEjBDiPgPjGe1AHAeAtX0vRdIlubyVYWkmI+Zskk8nqa6a/+Keg6fa+c0xePgIUIO7Iz2PT/AANea2Pw21XxLbrNHqMVvaS/MFQu2MgBhjOOfr9K7rSPgxodl5TTB5nQ7yWxy2APTgcZAoAwNV+K+sa0VsfDekss0vy+dMwZR16bT/XrS+APh1dPqq63rayPcEhiLhdzbiOTkn1/GvWLLw9p1gQ0FqiMBjcBzWmqKvQAUAR29vHboEjUKo6AVNRRQAUUUUAFI33T9KWkb7poA+cPGEMraz4ykjjZo28tUkAxuIIyOTzjmvb/AAazP4Y09mXDG3QkZ9hXifiuCWzbxRbzxiMS3UKKAdy7C+QRgcen+Fe8eH0SLR7dEwVWNQD68UAatFFFABRRRQAUUUUAcZ8T/DreIfBd3DCm64iHmRD1I/GqHwi1t9U8JxQSxlJbQ+S2RgnHqPWu+miWaF43UMrKQQe9eRfD5Z/D3j7V9HuI/JincyQoBwQD19qAPX3UMpU9D1r5w15JfCvxHdIo2iQTboiicBCc4yMDnPT2r6Rrx740aPmG21OPeGJ8pynrzg4HXr+lAHqWk3QurKOQc7lBq8RkV518MvEBvtBt1mYCRV2uD6ivQxKpXduGPWgDxP49QJONGhOR87tuzx2HSvU/DNpHBpFsq84jHP4V5P8AF51uvHWi2zIzxqq7xztwzH0H9a9l0iNYrCJEXChQAKAL9FFFABRRRQAUUUUAFFFFABijAoooAMUUUUAFB5FFFABRRRQAUUUUAFFFFAARRRRQAUUUUAFIaCM0UAeS/EEyWPxF8P3/AJR8tj5YbHGSeefyr1W2bdAp9q82+LANvcaDftGWihuwHIXkA4744r0TT3WWyidehUEUAW6KKKACiigUAFGaKTNAC0Ug6UtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIehrx34u6ndadpDWtvLB5l2+0/OAwHtmvYZGCoSTgYrwTxVKviz4nW1la2rSfZAUmcqQAPfIoA7D4W+HZNM0GFrhU8xgG+UDH4Yr0tRgYqjpVqtrZxxqOFUAVfFAC0UUUAFFFFABRRRQAUUUUAFFFFABRR0ooAKKKKACiiigAooooAKKKKACiiigAooooAK87+LFwjaRaae0TOLqbBYcBcDucEc9K9EryT4izw3viuztJ3k8qBA21T/GTx9e3pQB3nhawhstHgiiXamMgFcda36oaTG0dhErkltozmr9ABRRRQAUUUUAFFFFABTX4U/SlJAqveXMdtaSzOQFRCxP0FAHy34/vp08ba9pzOssVxKnlNjJQqwOOO/WvobwHK83hPT2kYM4hUMcY5AxXzx4ysZpdM/t6VAJJ9T52gjIK5GD+Fe+fDtfs/hSyRpPMLRhg315oA7KikDBuhpaACiiigAooooAK8Y8asnhr4r6bqqytEt4mJMKADjjk17PXnXxa0eO50SPU87ZLPJyIt5YHBxntyKAO+s51ubSKZTkOoIrm/H2mPqnhXUYY3ZHWEspUZPA549xkVP4Eu/tvhGwm3ht0QOcVu3MQlhdD0ZSDQB8s+CtAl1m8vI7TVrvT7qKT5WhkbH1xxkV3cWseOPAFwh1tjrWiD5WniXMiL6kdfrnP1rD0W1Xwv8V3sVkDxyllyOMt1/OveYkjuYFDKCD3xQB4B4h8YaT4w8YaPdWhkMcYVZdyYMZ3cZzwB+NfRGmEfYo8HIwK8G+JXh+10zxto88EUEUNwwEgWPbvweSccGvd9KwLGLGMbRjFAF6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDy/41hf8AhHrNyrELcrkqM12/hh1l0K0kXODEvXr0rkfjDZJdeF0d5lj8qdW+aIuPTnHT61v+CJkn8LWRhlVh5YG4A4P580AdRRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGD4w1VdH8N3l2WAKRkj59pP0ODzXCfDTS/PuLzVyXzdsG2tL5hHfn0PNZ/xW8RzX2rWvh7T5kZmfM2wZKgds9sntXpfhexNppMCuPn2DcffFAG4q4UCnUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFIWAGScCgMCODQAd6WiigAooooAZK4jjZ2OABkmvEReLrnje8v1dvIEnlcKGBGQP7xwcdx6V6d441X+yPCl7cq4SXYVjJGfmPt3rzbwDYzTamnKMuVllbaoPfGBjI6/5yaAPZrZdsCD2qamoMKBTqACiiigAooprOqKWYgAckmgBxOK5XxV40s/D1odrxSXLYEaM2FznHJ/zmuf8eePpbLy9K0SJLu6ugyK6PwhHY8fXj2rD0H4d3WuSi+8UlZHkXm3jyoB9yMUAVL34rX11dNBEyhAwQfZ87z7gdSMc8VkeIPEHjjWorqx0y3vXgKhWcw7fMUqR8vPAJ59a9osfCOj2USJDp9uoTG392CfzrZW0iXogoA+Y20rxdqnh86I2g3SpuWRDIAoRsk5yQOPb3rV/wCEm+IPha0gtLrSPLjwAjRJuA7fw5/Kvoj7NED9wUPaxOPmUH60AeB+G/i3rUd2sOqxMdkgSTfGYwR7ZGN3fBx1r3DSdZtNXtFuLaZHUgE7WBxkZ7VW1fwxpms6fJZ3dsjpJycDBB9QfWvKrvTPEPwvupb6zke+0IFfMiyWdBnBOPp7gUAe4UVheGfE1h4l05buylDqeozyp9DW7QAUUUUAFZ+tWLajot3aJKY3ljKq4AJU9jg1oUHpQB5X8I9Suo47/RrwtvtJiqZXAx6CvVOoryHxYsvhT4g6ZqsTWdtZ3L+VIRlWfd1yBwcHv9K9YgmE0IZTnIoA+e/jLZ3WkeL7TULGUxzSMHiOM4PQ9vWtLw98UtX0iFF8VaZJDakYjvIIiUY+/wCFb/xwtF/sbTtRa28429wcrkdxnnjkce1bHg2yttX8JWRuoIZAUBKFQVBx6HNAHm/jLxRZeLdU0W50y5ZofOZH38BSMYO0ivetIBGnwgtuIUDPrXinxM0Sw03XNMjsLS2t8/OdgVcYOc4yD29+le06Kc6ZAc9UBoA0aKKKACiiigAooooAKKKKAADFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUfSiigDzz4xO0fgtyqb8zIGG7Ax6k1Z+F8jP4TtQzqzKCp2n/OayvjRGZtBs4hgbp8klsdB9ak+D6NH4bKFw+2VuQc96APS6KKKACik5zxS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFVdRuls7CadzhUQsTkD+dWq5/xlfJp/hi9ncxhQhB8w4Bz2oA8k8F2yeKvHWpalcbpVgm/d73BK/gBg/WvdbdAkSgDHFeQ/BeGWTT7i7eCOKOR8LsGA2O+MV7Eq4AoAdRRRQAUUUUAFFFFABRRRQAUUUjEKpJoAWiqkWo20t09ssqGZBlk3cgVJdXUdpbSTyECONSzEnGBQBPRXO6N4y0vXBKbSUERyGMnPUj09RW4J49mSwxQAT3MNsm+aRUUdSxwBXOap4/0DS7d5pb+JwvQRtuLH0HrXnfxJ8RKPEKadNqTQ25AdlESkBcY69T+Vc79r8JCxVhO1yrEny/s+GJ5HpwPpQB2v8AwuqzlvUWK1YwyPsUscHHqeMAV6NZ6zb3VolwsiFGGQQeK+avtr6lo9zb6d4ftlaAlppiuxVAPB4Pp710vgPw5eeIdPQ399J9mic7YY5flP4D3z3oA9suPE2k2wbzb6AMoyy+YMj61x918TJZbsw6ZpjXSbgBIGJyCOuAOnar1j4C0+2uHmkkml34JRn+U857dR7Gt9LSzsYRHBDGgHACqABQBwe7xv4gs5J7i7XTLdSWCRIVkwB7/wBa1Pht4ludV01oL6ZpbiJuWbOWUnjtWxrniHR9BsWe+vYow3CpnczE+gHJrgPhc8S6/fwwF9hYn51AJGeD7fjQB7SORS0i/dFLQAUUUjHapJ7UAeV/GG+YwWenoVy5LEOpwc8demeTwa0vhzpX2O3MmYzvUNhMHb14Jx/n2rj9fnbXvHM91JDG8MJEEK/aVUuOTnrkfQjnPWvXdAtVttLgVYwmEAxnP60Aa1FFFACEgDJqJbiJujg/jVbWdP8A7U0m4sxK0RlQqHUnKn8K8O07w/dW+t3WjT6xe2OoRHfFJDMQrrnjIxgmgD3ozoELkgKOa8l8T+NtT8Q6tN4e8MxB40Pl3VySRgcggEdOnXNc54u1LxHoiJpdvrD6ks6hWikwJFP+8uDg4713/wAP9Bj0/Q4M2yQzOoeXGTljyeTzQBB4S8AQaXOLy8PnXjc7j0Ukc4H9a9EhhWNQAB60yJFUnjBqyuMUAKBgYFFFFABRRRQAVFNbxzxtHIoZWGCD3FS0UAeSa1pl18O/EA13TC/9iXMoF9arjERI4dc9s4GK9L07U4L+zS5jkVkdQwINS6jYwahZS21xEkkcilWVhkEV8/SXmveEtYuPC+nXiRoZMQGXn5W6YGM/5NAH0Bc6la2ah7ieOJMgbnYKOenWn2t/bXoY28ySBTg7TnBrw7VtBvpNLfUPEWtXE8MKgvChChm7AfnW18GrGa2tby7cSJHcy5RWYkY9RkUAewUUDpRQB5/8WvD8Gs+FWnaKdp7RvMiaDll9eO44q98PNdj1vwvbTAneqhXzwcjrXVX1nDf2ctrcRrJFIu1kYcEV5J4KR/CPjXU/D0sEkcUrmW3kLYUr6AE/XpQBv/GOVY/A8j7CZPNCoAMnkEVZ+GULR+DrFGCg7OgBGD+Nch8YNWGpXWn6BbqZn3ec6xjcQ38PGc9M/nXpfhayNrotspi8tigLITyDQB5f8bLVxf6RMArLlh8wBxzz29xXqnhaWOXQrVoirL5ajKnjgVwPxwQf2HZOygospzxk9Mjt/hXXfD9ETwpZLGyFfLH3elAHV0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUmKAPNPjMsT+G7fdnzFmDIApPI9x0pnwfR00B1K7V85sEfxCofjXPGmj2IberCYkOvbirvwgj2+E4yQd29ixLZyc9aAPR6WkxS0AFFFFABQaKKAAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXm/wAWlZtDcpH5jKjfKS2PrxxXo5615l8YHm/sZUhWVmPVVk2oR/tY5NAFv4Tqi+DrLbt+6f516EK80+EOf+ERt8ED5jwAeOenNelgcUALRRRQAUUUUAFFFFABRRmomuIk3bnA28nJoAlqOZgIzzWBf+NNIs96JP58qruKRAnA9Sewrkrz4g3+t2EQ8PabPLLOxUuVIWMDuSwAIP8AWgDP0W6ki+MupxeYTGYQcE59Oa9N1VPP0e6Qoj5jI2vjB4714Jol/feHviy8OrzJJJd91YkDPTrz+Fe/b1msmBPDLz9KAPmbTfFcvhbV7y1SwWacy71WBvl/QH07V2tm3jfxnEgmzp1ky5ASQo2fw5I9jXOaBollB8T763uIZfLVmMPnemete2WWraRaQiM3tshTjBkAx+tAHhPjbwTNot3DLPPJco4DMztkgjPrk11HwxsdPf7VaTWcBuYHJWYrkspJ55q38S9d0rXLGW10lDeX0Q+eWGLcI17/ADdK4nwbe6ydQaPTGVJLpELO7AcLwcZB54oA9O0yytbXxXrWmiNAtyqzLhcDBG0/qKx9G1vSvCGuXkN/qJhP/PGViR16qCO/tWYbPxNp/jHTNT1W9iaGV/s+Y1yQDkgE4Gc/StDWdN0qXx5BLewLJI7BQZMkYwMYAXHX1JoA3n+I91qkgi8OaNdagp+UXGNkO76+lT2/g/xHrMjSa7r8qwSEs1paDywB/d3dcf410YutM0PT/MnmgtoVzjOFHr0rJk+KvhqEER3M0zBchYoGO76cUAaGn+APD+kuJrXT4VkXkOwLEfQnOK5HQVTTfipq1qN7ediRSx+6MZ49smr8nxM1G+UnR/C+pXK54dwEUj15rl77UbmHx9puoahbyw3EqKWgXDFeSPT0x0PagD3RDlRTqhtn8yBT7VNQAVm67qEel6Ld3chQCOMkb3CAnsMngVpV5j8VNf8AIW10qEh2d1aZNxUhe3Qjg4OaAOQ8FRDUPEELgPsLmVcOGKduuD2K9MV7zAgSJVHQCuD8BaZDFEZgT8p2IrDhAOwJFd+OnFAC0UUUAFcV468M/wBq2RvrQtFqNspaF0bGT1wfUZArtazddkEGi3kpO0JCzZ9MCgDxPwhZyax4imk1W3mN1j995uDHnjgD8K9cvb2PQtFuLxkysETPtHHQZrz74YWNu9qdSgYv57YzwMY7bQOPzNdj41uFg8GalJJvCLAc7CAfzNAHG2fxusJ0klu9Kv4Ykk2NJGnmJn/eFdBp3xc8L3UzwNf+QV53XCGNT9Ca4X4UGCw8Jahf6gFW2EzOWYZOBjr610X/AAn/AIFv3CSXds2cDEsOPzyKAOoHxQ8JZCnXLMN6b/fHWrI+IvhYrIw1uy2oQCfOGMkZ4PfofyrFtrTwXc22YrfSWik9FjIPf/Cnf2J4JtY5J/selRqWy5KIBkcf5+tAFuf4seD7eTy21q3d/wDpmC4/MAiptG+JOha7q406xlleRh8r+SwU98Zxx+NRWemeH95WwgsVdeqxIufxxXC6dMy/Fq6tYGMO2UElTlXGwcY7d/zoA9xByKKZEcoM0+gAI4rxT40aS9vPZ6xbrl9wUgJkgqcjB9TyK9rrhfilaNdeFHERAmWRSjZxjsee3BNAHnD67/wnc1jpNlvWBU33RIHJIIA/D1Br2Dw9pkWnWMUEYCrGoVceleH/AA2ntLTxhc2yyjM8e9ADu7/MCfXJPbtX0HYY8v1IoAvDpRRRQAVx3jTwPF4pNvcLcSW11bEmORDz/OuxooA838IfC+HSJTfavMb/AFElSJpDu2hegGf516MqBFwo4p1FAHnvxYtPtXhyFt23y51xlAQSeOc9B/jVX4Q30s2jTQNtaOGUqhXAAHoAO1dL4/sxeeD75TH5m1d4X6enofeuE+DUuXvI4mYwrtABHT29PyoA9iooooAKKKKACiiobm6hs7d553EcSDLMe1AE1FVbLULbUIRLbSrIh6EHNOvbyDT7SW7upVigiUs7t0AFAFiiqWnarZatAJrG5jnjPdDmrtABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUdqAPF/jleNBJpcaumCWZk4J+uDXbfDe0a28JWYdcOyBiMdM1wHxlVo/ENjcu0fleSUwRk59eOccivTPA0bx+FrFXOWES8jPp780AdLRRRQAhApaMZooATvS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVwfxMtJrnSAVV/JXPmOjhSo+pI/ka7snArnvF9rb3+gzxT7igG7Cru6e2DQBw3wauBJpt1EpxGkxCLvLEfia9aByOteEfCDUxbaxqGmSSEYkJVPTBxjNe6xnKA+tAD6KKTGKAFooqOdmSF2RC7AZCjvQBX1DU7TTLdprqZI0UZJJrgr74waZHOLbTrC7vrgttCRgc/1/SvOtUE3iTxrfQeIdRksbVGJjV2UfLnkZ6dq7Gz8R+DfDQW3h8vzM8vDHuJx3LAUAS3XiXx5qzltL0ZrOM/dNwVXH1ByT+n40yPwn4kvZmk1zxISjAhooolGR25I/pU4+IjXpcaVpF/cKoBSQQfKx9Ac+9Z6aB4z8SytJqN4dMtpD/q4SPM2+nGf50AXDpHgnwlHvu3i8wNuPnSF2Lf7vr+FWU8ZtdkQeH9Du7xFUfP5flIue3zY/StPSPhrotjJHcTxPeXQOfOuWLnP0PArso7WKJcKgH0FAHz9438NavJbp4iurGODU42DmKIl1I4611nhb4paPcaSYr68WG4iUKVY5LHHbjn0xivRNYtoprZw2MY/CvMtW8GeFJ2FzfS28Euc4QhS/Hp1oA4Oy0uXx18QdRvIr27istxCSAkNj0Gegr17RfhpoFpaos1kty3UtcZck+vNYGjap4X8N7IrF5WL5YADG4/jj2rbuPFfiC4AbR9CeSFhlXmO3I+mRQBa8Z6Tb2vgy9t7CBIBswPLVVCjue1eN+DtThXxDYCOVwI2MZQnqCOpI4659K9HvdI8Z+IbVk1G+t7GM4HlRKSGGDnPPvXjd9oKaL4mls4L5N1uPMGS3BHJBwP5UAel+O/GWku1rp9tOkk9tcI7gAEdcYBPf6VY8c21w8NtqFsVRyiv5knKoQR6DI/Ouc8vwld+C57lvsS6iyNIN8g37/bJyPapdQ+IGlXPgizgku5ftS7VkRODx9QQelAHaeGfh/a6hHb6prN5c6lcyKr4mc+Wp68L/jXodro1jZoFhtoox/sIBXl+h/FPRLDS7azg+23lwsagKkeWbnHU4FS3XxcvJJ0j07QLiXcQBubJ6c8KCOPrQB6p5ESJwuBjHSvJvigbaz1/RJ0cPcyEoITHv3DI5HzDHWhfEXxC1qW3gg08WAlJ3zGHIC4HPJODz6c1b0T4Uyyat/aviTUJdRuQcxrIxIQ/Xj9AKAPTdLZmsIS3UoM4GO1XajhiWGJY14CjAqSgCG6uI7W1lnlYJHGpZmPYCvn24vT4o8Xz6izE/vSIIyu0FQMDkjn1/HivQ/in4ol0bS4rS0lCz3DEMuAcpg5HPTPSs/4aWAKyu8SiMgMnyjofw9jQB2vhvTG0+wijdmb5QTuYsQfxroBTEUKoA6U+gAoopkjlFyBn6UAPrnPHM8UPg/UvOdkR4ShZU3EZ46d+tb/AJq4PPSuE+Kt3Evg6VXmMcZkUO69QM9vf8qAIvh1ZPbeGrUSPIzkE5k4JGfTtxXQ+JNF/t/QrnTS4jM67QxBO0+vas/wxIkGj2sfm7isa8k9eK6MXETqPn/I0AeM51r4cyHT59Pn1XSHBc3EKEsgx90j/PWqXhqLTPGfjiW7+wwrZRw+WiPb435554xkf4V2/wASfEAsdJjtLcxtdX7+Qis3OD1PHPt269RWx4A0KDSNGijVVL9SwAyc80ARx/DPw6hEn9nQjb91RkAV538QtK8G6DIJZdPieeQlvLDN859AAe9e63MyQwMzEAAc14qLW28X+OzfyBHsrFikasvV88k888jrQBwnh3ULXTddj1WTZpflg7bS1gZ3de4Zj9K7vwDBdav48v8AXZrWWNJC3lF4tuFyMDkdce9ekRaZpRbcbaAnGCSgrRtmtYeECLjgYxQBrJ90U6qa3kQHLjripPtcIGd4x9aALFZet2y3ljJASV3DIYHkEcg1NLqlumR5i7h2z0rC1fXI442+Yb8AqM9KAPm3SZF0bxcrAqlzbam0ZPHKscdvx7mvqzSpBJao4OcqDXybPJ9o+JUplYbZLzzPlXgnqBX1P4dk/wBAjz/dFAG5RRRQAUUUUAFFFFAFe9hFxaSwkAh1K4PuK8Z+HuoDRvGGoaTcmPJk2qQ+45Hp6D+Ve2kDrXgviBTp/wARr2Wa4hzHIjxiRMMwPIUEKc9x+VAHvSnKg0tVdOuVvNPgnT7roGFWqACiiigArm/HNy9t4XuDHEZTIQhQMQxB9Md66SuR+Icbv4ZZgsZCSqx8xsDrjrketAFD4d232fTW2zq5X5CgUKBj6d/xNVfi7qjWvgt7UqfMvJFjAABHBzznp0rU8A2wTSFm2Ro0h+ZYzlVxxgHJ44rj/jFdS3GpaXpUUe5TmThsHOcD69KANf4R6fdW+kNc3U4kebAwFAwBx1HWvTK5jwNAYfDlqpQKQg4H+TXT0AFBFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSH1oA8T+MqouvaazJbFShDF8l+vtz+NereHih0e2ZM7TGvX6V5h8aIpFvtLnSKN1ZthLqeOfyr0zw1ltDtsjB8sdPpQBtUd+lNA29B1p1ABRRSUALRRRnjmgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgurqG0geaeVY41GWZiABU5rwj4wa/dXepR6PbyuIN6q8aKQWPc5yOPwNAGx4w+LWyb+z/DLRXE4JEs+Cwj6dB3znr0rhxrHjHUUkZ9Yvyzj7hhUJg+5AH4Cuv8LfDwS20LXcKRQjDBAoDk+7D/APXXp1jotlp9qIoYlUfnzigD5z8Gi80j4g2y3VxuLyfMzIVLkj3HT3r6ftW3QKfUV478VtLj06+0vXreGMGCZRK5YcDPYGvU9DvY7vTYJUZWDoDwfagDWooooAD0pMcYpaKAPEviz4Yij1O11QFdpkBcSMcdeevQV1nhbwzoMUYubWygDSLnzMbiQeSMmuj8VaFb67pEtvNgHGQ3oa8e8JX+tJd3ujaZfW5WGQj5uGUZwSvUUAe3w21rBHtVEA9B2qG81Ww0+ESXFzBEvq7gVwI8NavNI0d5rdw8EmAYwSQVyCRmtGHwVolr5kl2RMjYOJmGF9/8aALl18QLfyS2mWNzf9iyKVXPpkiqwv8Axlq1xsSG3021I5dxvk/AZon8WeF9AgaCKWMmM48m3TJz2GBxzXN3vxWuZ9W+waFost0+4AOc4YevA4Ge5oA3JPB+oXasuoa5cyK3UKzLx6dcUyDwPoNpGBM7yhQBiaclfrgnHWsWO0+IfiC5lF2ttYWrjG0sSR7jac5+pp9l8Ir1rZ4b7XLl0LDITIBwc85JoA2pNY8IaBCR9otcx5+VDvbjHHH1H51i3fxStrlGh0Cwe6udp2qyt17cAHP510Fh8JPDtoYzJbvcFOnnyFuevTpXV6f4d03TVAtbOGED+4gFAHjsl18UdaAEFrHZxbeRLhCx7+4rgvEXgXVrDVVn1u9jfdhpJizMOegG4V9ZeSn90Vk6x4ds9XUCaJMgbd20Eken0oA+XbbRPDlvbD7Zfme5Afb5KjYcDjr7j8aqaUthBZXcd1pU0jg5glVScg8AcYyPx719KWnw50KCOVJLOOTzl2yZUDcPoOKcPhv4eimgkgsUi8kggISAR6Edx/hQBx3wz8K29zZPd3+mQFyf3TPGNwU846dK9UttKtLVQsVvGgHQKoAqa3tYrZQkMaogGAFHAqxQBGIY1OQuKdwCB3pxooAKraheR6fYy3UxIjiUs2Bk4FWa8o+K3ifJTQLRgZWIknBYqCvOBke4z+FAHD3d+njLxnLqcgmMcbKsCgj5QM8EZ/XNe7aHYR29mjrGFZlG49z9TXC+BvDENvOlylq8cW3I3OOp9ABwK9QjQKuO1ADhwKWiigBCcDNee+MPiMvh/Uo7GK0M0kgIyX2gcZ/pXoTfdNeJ6pa/2z8UDHgPHbgvknIDdP8AOaAMK+17x8JprmVZhbyDMaoGPr2U8dR37Vy+qXvjjWbGa0ZmmhdvnUfxcdOeR34r6YttIgeGNpY1JxyDUg0W1D/LDGM+goA+aLN/H9jbpFGs4xEMblx5ft78fWtiLXfH0VwjCCd45F2urqMocHnPf2r6EOmW5/5ZLgjrikGmwbcbF46cUAfKF3qPiTU/FVvDfmZ7mIkxgpjHuBX0x4ZhuodKgEoIYICQTzXAzWUP/C6yko+VLQFBt4J+ufrxXrsEYEahQABQByPj7Urmx8MXssDhJFjPNeK6NofjR9EtpNNMcSF/Mz0J69a9S+Msktt4OlaEZy6hsHB69v0q/wDDvbdeFLORkIJXJDdc0Aed/wBjfEt7YPJdRZcD5QOR9SPp+tUy/wARLOZYzpd1LKON6sChHQd/xr6ISCPGAoxT/s0eANo4oA8Js7/4lNEY5fD0JZl4LSbdv15q5DefEWKMJNpER7ZWQADj0z/WvbFgRf4RTvLT+6PyoA8JudW8c2r7W0BpQevlycZzXP694s1l4pIbzQbyKQowRmhbHTnJHBr6UaCNhyi/lWVqenwPA++IMu0kj2oA+SrQ30fiG01K3hKOyCQlssuemDnp0r2fw58Tkt4xBqto1s69XU71PuMVS8Gx6drV3qcEcI8gTYVJFBPI5FdXd/DjRbiPzFs0VwSQUJXn14oA67TPENnqFss0NwjoTjIP+cVso4dcg5ryWXwheaPbtJpt1KSSDsOOfqa7nwnqMt3pyLcLiZRhqAOjooooAKKKKAAjNeUfFvSHMdpqkEKtNG2xpCGJA4I6ds16vXI/Ea2a58I3Zjj3vEBIFyB0PuMH6UAWPAmof2j4Ws5eM7AOPaumry34RaqG02TTnJ82JskFcbQexHY+1epUAFFFFABXPeNI5ZfDF2I7eOf5clHJHA7jHJP4iuhqte2iXtpJbuAVcEHIzigDkvh/qIuvDsLi3MK5ICBiQADgYzziuL+I3max44sbWCN3+yBASgY7SxyT6DitGK08X+Ebqa3srAajZs+UkMxyoJ9McU3w14O1O71+bVNbt385nbLeeQp5zwuM45xgntQB6RoVkLHSoIB0VABWnTI02IFHQCn0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABQelFFAHjvxwQQw6ZdFJXIkIAV/l455Fd74Ju1u/DVnMq4DRg4Ncn8cNPmufCUV1Ark28uWKdlI5P+fWr3wm1JL7wjbAbgYhsO45PHrQB6HSZ5xQKWgAoopMc0AKfakIBHPNLRQAUUUUAFFFGaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK828beBr3VdSj1TTzB58TBgZFyQB1AFek0UAeOx+PtbsporOXRXEiD96VGR+h4/GqsnjfxRqTuLeMWq7tuBAzsOevQ/yr2GXTLKWTzHtozIP4tozQmnW0WPLhRfooFAHher+G9f8bRyo9zOIkXhrkEbj6hVwMj3rY+E3iGaC4m8O33Fxa/KuZd+QOPWvYvs8YHCgV4j440O98HeMIfEGjx3LQ3JJuBFGGVfrigD3FG3AEU6ua8I+JIfEOkx3MeVb7ro3BVvSuloAKKKKAGsoYEEZB6ivHPEGg6loPi+XVdF04NCRl1xhMHk7RnrmvZaaUU9QDQB4TcQfEbX7mGSFBaQN95CxRQPww3b9a1D8KdY1VE/tPXHAXHyxK5Hb+8x9K9iEarjCgYpcAUAcBYfCTw1atulshcNxkynIOPbpXXWOh6fp0ax2tpDCijAEaAVpUYoAYI0AwBin4oooAO1FFFABRRRQAho60tFABRRRQAUUVXu7uKzt3mmcIiDJJoApeINZh0PR7m/l5ESZC56nsPzrxjQ9Hu/GHi+bVL5JGCnzFkU4UHsFIzkD19qb4g1m58fa3JFbS7LS2YJsGSeTxwOpPH0r1bwl4fGkWYLyySSOASXxx7dPrQBuWVosECKFwQMVcoooAKMUUUAMmbZCzHoBmvIPCPl3fxB1KdVfjJwWyFye49eK9P8AEF/Fpui3VxNIqKqHlumfSvIPhFP9p1jVZWDbnl3FuMHnnpwKAPcEA28UtIn3RSlgo5NABikbgU0zJn7wp2QQDQB4/wDEMTaF4/0TXEJMMw+zPnO1ee/1DcdOler2T74FPqAa474q2P2nwXPOhZZbR1nR1AJGOp59q3PCuppqOg2VxGxdZIVO4jGeOtAHP/Fm2abwXeSAHbFsY7Dhh84yQas/Di0S38K2UaoUCoDtLbsZ56961vGNi+o+EtVt42KyPbvtI6ggZ/pWd8NmR/B9g6xGMGPBB7kcZ/HrQB2KjApaKKACikyKWgAqlqcRlsJkUgMyMBn6Vdqrftts5W9EJ/SgDwT4TK0eu6gjAgo5UhjXvEaAQ7cdq8O+Dn+k6jqlwY8K8xwce9e7oMR4oA5vxX+48NXswk8po49wcdiKh8B3Au9DgmLByRyao/E+/ay8FagVYAsmOe+fSmfCuPyfCdqVZiGG7a2cjPbmgD0KigdKKACiiigAqvfWyXdnNA6grIhUg98irFB6UAfPvhidvDHjiS0mkliHnmJlcEKeeAOTzXv8T74w2eteI/FfSYNH1qHWVlECS8gsxI8z2UeuBz+NeieANei1zwzaXCS+YdgVj/tDrQB1tFFFABRRRQAhUN1FAUDpS0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAc546sH1HwfqVvGxVjEWyD6c4/SvMPgtqRNxeWRLbVwwDBvpxkmva7uPzrWWPOCylcjtXz54EaXR/iTcW01wCzyOjKAASc5BNAH0SvSlpkZyo9MU+gAooooAKQjNLRmgAooooAOlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVk+I9Gg13Q7mwuE3pKhGM457VrUY4oA+c/BfiGXwF4hvNH1RrnyUIGWT7p+p7V9A2N7Fe20c0TBkdQQR3Fcj478BW3iW1ee1SKHUgPknaMNnHIB9q5Hwb4svdG19PDusTOZvuqHQjn2JPT/ADxQB7PRUcUqyJkGpKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqte3sFhbSXFxKscUalmZjgAUASXFxHbQvLKwVEGWJPQV4H418Xaj4u8Q22l6Y8kdirMroCVYtnHzDg+nFL45+INx4kv4NM0iO5k04uVmaIOhJz6gdOD+ddd8N/Cr2gnuriMxrI2FgOcLjvzzQBpfD/wAGR6FYh5Ubz5Tufcc5x0/Cu/CgDApEUKoAGMU6gAooooAKKKKAMPxcJD4avPKkEbbPvHtXl3wbtDDPqEhlEpaYkkZwDk5xXo3jiWQ+Gr6CKJpJHhYqB3IHFcJ8G45Psl28vMhmJcbQMN34FAHrk0yW1s8shwiKWJz2FePajrmveLfGFzpukai1rZRxDLREOOfUjoecjB7V69eQtPZTRKcMyFQcZ7V4n4R1a28I+JtTstbZbWW4lBjkdcKevBP+cfhQAzW9D8VeEbVNSk8TXVxaRuoKc888Z56Z6+tet+GtTOqaHa3LSpI0iAlkOQT7VU1q/wBPfw7dSyTKYREzblIPAGeOtcp8HWnOhzNuU2jTsYAo4A/T+VAHomrWq3ul3Ns4VlkjZSGGRyMVwPwnuh/Yk9gH3LaTNEDjjHbsOPwr0lhlTXlfhaVLD4k6/pkXl+S7B1WM8KRwRjHB5HQmgD1G5iW4tniblXUgj1BrjPhur2Wm3WlzzCR7S5kRcEcLuOOB0rtVwYwfavOI86N8WpY12+VfweZtwAdw6njrQB6ZWdrOtWWh2LXd7JsjX8Savo25Qa4D4qC8/sMPDFGYF5llOMoM9skdf6d6AKFt4/1nWLm4bTNN821jDeW6xs24joMkgc/pir+k/EbfeW1hrGn3VldTyGNd8TBCeoGff8a2vCsNmuhWgtFUReWMAdq534ovbLosKji6SUSwlACysvOee3r9aAPRUkEi5HSsjxXP9l8K6rP/AM87SVumeimn+HbmS90O0uJV2vJErMPQkVS8cyNF4N1hlOCLSTB9PlNAHl/wMgB0+5kKEO0uc8jPHpXuJ+Vc15D8F4VGhM4i2lnI3HOWAr1xs+TnvQB5p8X5RH4QuEL4yR1HXmtP4YMW8J2I5BEYBB7Vz/xjmK+HBGzEb3AI7n6cGun+HSGLw7aoChQINpXjjFAHbY4paKKACiiigAooooA4/wCIegnWfDzNDEJLm2y8SEAgnvwa85+EesSWmtX2jysE+YyKm3b7HA7c/Wvc5oxLEyH+IYr5/wDFulXHgnxqNZtgxUsgLbc71P3iTwBQB9AowZQQadWXoWpQ6ppkN1A4aORQwI961KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAQjIxXh2qA2fxnhR7ss7Hcq7AAqkdM17lXzt8X0u0+I+n/2WwW7mVVU4OQ2cfyoA99W9giiDPIqjHc4qW3u4LoboZUcf7JzXjWn/DDVNaTz/Emv3s5PIhjkKoo9KVtJf4Y+I9ObTr6eXT76TypbeZ87T6g496APa6KjhbfEr+ozUlAAeKTrS0Y5oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKO3FAAfeuC8f+Ax4jNtqVjItvqVo25JMZ3L1wa7wccUYoA8h8H+OtU0/Vjo/ih4I2ztjn+4GPHBzXrFtdw3MSvFIrqehU5Fc34u8Ead4lspA9tD9q6q7L3968tutY8SfC55be5MU+mn5rchcKvP3R/nvQB77RXO+EfESeI9Dt79MjzFGQRjBroqACiiigAooooAKKKKACijtSbh3oAWioZbqKEZdgB6k1mX3ifSNORnu9QtoQoyQ8gBoA2aY8qRjLMAK8t1T406YJJodGs7nUnjBLPGu1B+J5x+FcVrV34x8YQXb3V+2m28OcWseUJOM4zxu498UAer+KPiToPhlCs9yJrn+GCH5nP19PxrxzXfFeqeOb+Czu9Ri0+ynkA+xrLhth/vY5yfetT4baDp955iTwv52AxaVQTID33YJro/HfgJ5bSPUdGRUuoCp8uMY3gf4A0AbfhHwdBpUcJR1EaA4RR97Pqe9d/DEsaAKBj2rzH4a+LZdVR7a9lthMpwsaONwA7Yr1FDkAjFADqKKKACiiigAooooA434kSLF4Q1Bvl3NCUGWCjJ9zXM/ByPy9FIDpJ8331B5+tbHxZvUsvCFw7xrIGO3axIz+VUfhKmNJY+V5cZclFB4UegoA9MByOKy9Y8OaVrtv5Oo2UNwm4Nh1zyK1Fp1AHk198FbW5u2Carcx2Mjl2tx0HOcL2A7dOleiaHodroWmQ2Nom2KJQoHetXFGKAGkcGvI4oxZ/HC+KBV+0W6ltxJJOByOMdvXtXrrdK8lvrdrr40F2KqsFuuMMAxyPzI5oA9WiOYwDivKvH7f2d8SvCt4MJ5pkhZy2MjI4/8eNeqQ/6sD2rx34zSKPEXhbEsYeOd2AJIOcpj8OKAPYbVt8Kn2pmoWEGpWMtpcorxSrtZSAR+tRaS5axi3HLbRk1foA8v03wz4r8JXd0unNb32nytujikfZ5XHOB2zz+NUJtG8X+KdWifVbOOysiSrxq4J25POcZz36d69fIB6ik2gHOKAK9larZ2scCKAkahQB2Fc18Rbz7F4H1SVwOYtg43ZyQOnfrXXVwPxbVpPA1zGhjDeYmC/Tr+v0oApfCazW28LWxXb8/zHb78/hXo7DKHPFcf4BhWLw7ZqoAUIDjGO1di/Kc9PegDxn4zNGBYpIygFuVZsA+h/Miu38CxsuhwK2wsqgZQmuA+NLLLqOj242lmf7uRzyBXpnhCLZo8A8sIdgyBQB0g6UtIOlLQAUUhz2pec+1ABRRRQAVynj7Rf7X8N3KRopl24BKk/wAufeurpCoIwQDQB4x8NNcudA1Q+GNVZExnysuCc9x1r2dWDDINebfEnwxFcaadTsmhtLq2PmCQ7UyRyDk8DmsvwL8VrW8MelatOF1FTtYqMo2O+RxQB69RUUM6TKGRgRjqKloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAIbqdLa2kmc4VFJJzXzlpl7F4s+M0l4VHkwkugycjHHOa734y+OLPRtCm0eOUtfXIGYwP4M85PavFPBcXiW51C4k8MWu15WAaZ8N5Y9MmgD6Y1zxHpvhnRjc3soGOEjU5Zz6Ad64nQNC1fxtrUXiPXyYbeM/6LZquMLnILe/frSaR8Jrm/u11DxVqc1/OGDJHvIVPYV6vZ2sdpbrFGMKowPpQBNGuyNVxjAp9JgdaWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAry341yxx+F4oXQN50wUg+nWvUq8h+M80qTaOgO1GlIzvZf1H+FAG98MbSK38LW8cb7geT8wPX3FbHifVNW0SIXdlbC7g6OnAMY9c9xWL8Mk8rS5sNuXzTgiXzM/jWp8RtSOm+C9RnRdzmPYBkjrx2oA8+0T4620kc66tbvFMpwPJXcP51pQ/GzTmUM8ZXPCocFjjrnB47cYrK+FHh6C7spZLq1Rmb74kGck8967+T4Y+FZpzO+kQGQnJwCB+WcUAYH/C5tMMiFIS8JxudW5XIzyKuWvxa0ie9MTB1jwT5nYfX0rQk+FnhKRNraNBz/dyP1Bqm/wc8JPgNYSFR0H2mTj/AMeoA1U+IegSSpGL2MblLAswA49zWRd/GTwpatsF20jdD5abgD25HFKnwd8J7gWsGIUbQDO/TrzzzWhH8MfCqQpF/ZMJCnOSSTn65oA5K4+NaXhMOiaRc3UxOEMmEX3z9BWKviz4laope1isokcEqNvvwOfwr2K38NaXbBRFZxLtORhRWgtnCmNsYGKAPnibTfHHiC4SHVr6+kgYgukEe1VyPwz2/OrVp8I52mEksPnBehdmBP1BBFfQC20S9EFPEarnAHNAHnnhv4bWWnWXlXSCYMPmRhx34x0xya6q78P2s+mTWQhQRyJtxt46Vt4ooA+f7ayv/h54x23Twva3IBZlkKKuSBkKele1WlxFeQKyOrqwBBByDWF8QPCMXiTSHeO2SS+hQ+ST/Lr/ADryTwz421HwhdXFprZvQI2IdJEDZ5xweMfmRxQB03i7Rm8I+J4vENjAxtZJAZ9spyGOc4XGMHjnNeo+H9TTVdLguowQsqBgG61414y+JVj4h05dJ0lLuSaV1DMEwAM8jGcn6e1ereDNPGmeHrW3UMAEHBBGD347fSgDpqKQHNLQAUUUA5oAKKKDQB5d8Y7/AMnw9Cik4kl2/KMk8HpyK0fhlaNb+HomfdlxnkYrA+M8wj061QjAably5G0Y6iup+HWz/hHbfYxZcZzQB2oGBS0dqKACiiigBkjhUYnoBXlPhvfrPxC1rVD5bRRyG3RkOfukY/ka0vij4wj0jTRpVo4bUrzCJGOwJxnpVr4feHl0HRokKf6RKA8zddzkcnNAHbJhYyelfP3xkvTfeNrWGEyuljbgyBOiszDHfnqO1e5avqcOkaXc39y+2GCMyMfYV8vHWJNY183kqP5moXZnYIfuop+XPtn3/hoA+oPDrbtJtzz/AKscEYxxWvWR4dDrpNuJCC4QZwcjpWvQAUUUUAITgZNeZ/GuZk8AzbGKt50eGHY5r0xvunNeX/GCUzeG5LXA2E5x7gUAbvw7Yy+FtPdydzQLuBHtXYv9yuW8CR+V4asVCbP3K8fhXTynCE+1AHiXxMFvJ450pZIpGKgAYbAOTzXrmgxLHYRqoKgDjNeJeNbqaf4tWtuJFEaou7Jwe5H64r3LSc/Yoic/dFAGjRRRQAUUd6KACiiigApCcUtch8QPGEPhTQmmLETyHbHhd2PqMigDzn4veJ5bu4bSYWk+zJwUQ43sM9+T1H04rm9J+E92fDaarMkjXTjzDAnDBcduDz3xit74eeGJfF2sy+J9ZQsqvi2jI2huepXJ9u9e2kRWtuxYqscY5zxigDwDQPGXiDwXGyXEcuoaYkm1ssd8Ptz/APq+le4eHfFOn+IrBLqzmDA8FTwVPoRXj3jIHxZrc8dhGbaEfKJEPzSkd9vcVRvPA3iHwcbS+0m+mUkbpnjjdgTjqyjIP40AfRYIPQ0teM+D/i23nrp3iQrDcY4nwArfUDocV6xY6raajCkttMkqOMhkbINAF6ikDA9DS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTXYKhJPSlJwK8u+KfxHttAsm0ewIuNTuVKbEbmMHucd/SgDyr4k3/8AwlvxHWxstr7XEOPLAz65IPP6V9AeD/DltoWi29tHEqbUGcDqa88+Dvglra0fWtRgYXU5yokXBUV7QiBVAHSgBcYpaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArjviJ4YbxFoX+jxB7y3YSRYA3HHUAnpmuxooA+eND8eXPhO5ayudNlhjMzNNHIeUJ64PcDHpS+MfGzeOHh03T4m+wo4Msjgjce46jGPfrXvU+l2VyzNNbRSFhglkByKz4PCml2lx51tbrAS+91iG1XPuKAMrwH4dTRNIQDfuf5jubOPTHtXY01VCDCjAp1ABRRRQAUUUUAFFFBoAKKKKACiiigAPNc5rvgrQtfmSfULBJpU4BJI49ODXR0UAcBZfDHQbS8S7FnskVy6qJDgZ46fStDW/GWleG0iSVy5ZtuF7Duam8Z+JrXQdJmMlwYZ2Q+XhC3NYPhjwlHeJHquqg3E0igpHIvES9cAeueaAJ5viro8chjEdwTtVlYptU7unJ6fjU1l8S9LuGYTn7NGrbPMdxgn/PrWjrGmaVZ6a8k9rG0cI3AFecgYGMflXlCeCG8bu18IRp0AI8oqN24eu3oO2KAPQ5Piz4WilMX9oKxDFdwBxkenHP1HFVZfizpS2UV1HBcywyMRuRRgY9zXIX3wk02x01pjfuJflJluDnBAxwBjnFVPDmh6Ba3cfm6nLcsrMzI6bUZyeoBGfwFAHrmkeM9I1oL9luQWPRDwa6IMHFePax4ORAt/ody0LwfOYwzNk9eBng11/gnxC+q2EgmlSSSFyhZQQD+fegDkPjikv8AZVvsTcsjEOTjaBj+db3wpYDwrZxhydsYPPoaPipGlx4ZmXIDhSVwMnPtWH4H8XaVYaPZW8lyiyrEqsAp/oKAPYRS1zdt4y0eV2j+2orL1D5X+f1rQj8QabMf3d7A30cUAalQXcy29s8rttVFLEnsKpXeu2NpEZJbmNUHcsK8q8R+L73xfI+m6QG+ylgC4I2svct/QUAVbCJPGHj+81h1ka0tyogDD5D23Zz7V6vZuxiUqCFA4I71ieGNEWy0uO3djlQATk5JrS1zWLLw9pE17dyCOC3jLE9z6CgDhvjF4oistC/sSNt15qLKgjU8hN3JP16fjXlngfSxdaxOfJaSRR5UAldcjtk/TAxVVdWPibxnc6zeFwS+63i3btpH3RjqQOOldt4DtHXX7uzeQSSo6uXKksOmevA6e9AHuOhWv2PTLe3yT5cYXJPtWpVS1KpEoyM4q0CCKAFooooARuleSfGKbZpcMO1h50oUMDjBz1r1osOfavI/ivcR3Os6Dp6fO5nMjgdAg9fx/lQB3XhbbHpUEa5+RAP0rXvZlW2ZmOB+Vcbpuvw21gXWWMckBc8gjrXM+MfiPb2VqUiuYmlbIEQyxb8ulAHLeIJI7740wIJjtUIQFUnkf5/WvoHTwFtkyOa+dfA2kalrfi19beF4lZg+5c4bkdz9OlfRtpGy26buDjmgC1RRRQAUUUUAFFFFACE4rwD4i6nPc+Njpk1yfKlmSNleAYVOcYznPJ64/SvoCvOPiB4GbVLuPW7Qb7uEjcrn+Edlz0oA6vRba203SoooEVUVflCgD8q4jx74whknk0eC8SKEIfPkjAkYt3QDt/n3rL1P4h6lp+k3FsmmtFdJGNrO2RzxkAc+ntWL4F8EarrZS71gSC0di5jYjD85zggn+VAHcfDvTYNjzwRbISdwzbmMnPPf+lejeUhXaVBHvUNjZQ2NskEKBUUYAA6VZoA5TxF8P9E8Rw+XdWwQ7t2+L5Tnvn1rzK+8F+LPAU8l74ene6t2bHlld5Cj2xx+Fe8UhUHrQB45oHxheAC28SafNZXAbaG28MR14PSvRdH8W6RrKqbO9jkLDcFDcge47VJrfhTSNetmgvrKKQMMZ2jI+hry3xD8HpbGeS+8O3LxOoBjiiAVwe/Pf6cUAe2BgRkHNLXzraeNvG/hW98vVy91bg874vmB9OAK9E0P4vaBqUaC5uBay45WXgfnQB6NRWXp+v6ZqW4Wd7BPtxny3BxWmGU9CKAFooooAKKKCcUAFFJketGR60ALRSZFMeeNBlnUD60ASUhIHWuV1j4ieGNGjka61e13IM7EkDM3sAO9eX6h8QvFHjbWF0Xw3ANOtpAS0zEO+z1P936daANv4pfEG7sLiLRPDt4BqEjYl2JuaMUzwF8MJYr/APt7xBJ9qv3+Zc8qufb1rX8DfDGLQ5Dfam4u9QZtxlOT/OvSkQIgUDAFADIYEhUKigKO1S0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRzmigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopCcUtABRRRQAU122oW9BmnVBeRvLZzRxuUdkIDDqDQB5lp8Fx4p8X315c3E62dpN5aW8i4DEE/pz0r0y3iWJMKAMdK8j8L6zd+FtVudO1oBFlmLrOzg4JOMHvj0r1iC9ilQMrqQQORQBxXjm4N/qlhoUYyJn3z8sMIPp9O9dZZWkdvaoiIqoqjAAxgCuN8Y3KaX4o03VH2+WcxyPgZAJAHcevvXa2lzHPbIVYEEfnQB5l4quJ9cuL3yrhktrBirwKSBIVIJJJHH1FcBJcajd+Rc2cX/EvjGwOriVl9eSK9A8TB9A8STNc29t/Z2qN5X7r72ccEr375PTj8+O3aj4aWa0gtTc2Vw37uZSXVQcBQF3dvY+lAHT/DvV5r+7u7OZxIygPvyvzA9OAOOK2NGt5dL8cXlksyCCZTOkWQOvXAznrnnHeoPh5ol3psM1zfCLfJ90LGFIX0J71Jb36ah8SJ/LlXybWFRuCg7jzkZ9OaAOm1/w8uuaVcWc6qyyqeT2rx+7+D9ylwxhu2hBPygZIB+mc174L2FU5kX865PxH448P6KB9puPNm7RxJuJ59enb17UAeZD4deKEDbLq0kj6BZEznHrnr0qhrGna1oVm8+oQWqLtz8km3OOcAd+nSusm8da3rl39h0S1jhLtt84kOV5644GMZp+l+AtZ1TWTe65M2ApUIspcN055zgcdPegDymLRvEPie6DWlvKsIPzHc3AP8J/Lt717D4K8HS6HGjTA+a2N/J5Nd3pui2mlRiGKJIlJ4CjqT1NWb26ttPTzZpUjTbuJY4GB1NAFa7voNKtWnuZUijQZZ3OAPqa+ePHnje88YasttbRFtMtpOEjyzSEH7/A6f5711/jHV9T+IGoDw9oihLIMHmmZseYAcg4646H8RXUeD/hpFpGJ70pPcFt2SgO04xwev8A+vpQB4pothrVpfw3jaTclQWIl8snGe9dRb6xq2k3dxc/ZngncAnMf3+ccYPJ5r6CTTIEIXy12g56U+TSLWfiSFGGeMigDxS2+JOpQuqTz26sUVtsgZTk9QePpXS2XxNYRRNLJBLuXLbGHHX361383hrTbhcS2sLfVBWXP8PPDc+7fpVsdxyfkHNAGMfihZQSBbhkXI6hhjP1qRPirocinZcKSOvP6fyp1x8IPCk5UnTVUr02Ow/rUSfB3w0kBiWKZFJz8spz+dAEsnxM8PvF/wAhCJWY4wxwRXifjnxLHdeL4ryxnW8hVSqKhO7cc55/pXqOpfBHTJgDaXM0XB+V8MD9as+HfhLpmjNHLOi3EyfKrMv3aAPJNB0rxV4kLQ2pNnCW+Z5Mg47gc16f4d+EFhZqsl9/pM27cSxOM/jXpdppNtaALFGigdgK0FUUAZunaNbadGqQxKgxwAK1BwMUYpaACiiigAooooAKKKKACggEYIyKKKAKUukafNMJntIWlAxuKDNWY4UiGEUAe1SUUAFFFFABRRRQAUhANLRQBTu9Ms70AXFvHJg5G5Qa8z8SfCKzup3udPjjA2sPKcexxhuufrXrFFAHy5N4Q1TR1WSGa806dDiRmf5XGOMMMYPPT/Ctm21vx3pKCdNRW4BbcUl4IBOOjV9A3Vha3sLRXECSxt1V1yDWO/gzQ5GJOn2/IwcoORQB5tb/ABY1vTmA1fTbdo1GZHhlGV6Dkc+tS6h8c9Oj025VLaVbwDCRv0I9c12E3w10Sa5LNAPJP/LIcDPrx35rB8QfC3Sk069ubaFDKsDBN8QbHH0yTQB1PgTxHL4l8O29/NEEdx0Gfz5rqeK88+E11NN4St/O270Jj4GOAcV6GfXvQB498UfGGo+GfFFj9gDuSikxjJDDOMdcD69ax5PjN4jjuWtx4fiSULkBpi3b2wP1qv8AFbF58RrO1QkOYFQEHBGSeR713Wk/CzQjpQW4tS00q5kkLksTj1PNAHn83xT8Y3SsVOn2cT5UMQSQfz61yl/qeu6nEkl34kv5mlXKW0CuN2Tj1xg+tfQ1j8PdAsYfLSwhcFs5dQT9PpWrH4Z0iOUSrYQBwRg7BxigDwnwz8HL7U5o7jUkSGA4bY65Yggcdua9t8P+ENJ8Ow7LCyihz95lHJ+prfSNUGFAAp1ACAADApaKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABSY4xS0UAc5r3hHTdaBea3UuevbPvx3rirjwjr2hzJLpupXrwg8Q53BQBxnJ79+K9YprIGUgjOaAPDNb1PxBf6fd2OqaNHdIn3HZgjZ52nGeO361m+FPibPokq2OqWF3FZLgJK53CMHoM+le8XOl21yuJoUfnPIrndf+Hmia/DHHc2igocq68Ef4/jQBFff2X4y0MqsqTwyqMNG344yOledXmkeJ/D8cQsXV4FYhvNcuuOMfTv0FbFx8OdV8O2bHw9qV6SPuw71C+vPT6cVjw6x8QLOTypdLS7jTAPnL5bN+vP4CgCOLxX4xuLVo30nZBICPOtkZic5HHPHY5pdC+H+orElxcRsWn3NNH9oZX5IIPoCKlPjrxDbMRP4aZIwCQAG3NgjoMe/61YPxTvYYVkOjqrM5QI7spJGAQRt96AEl+G+pSyKqXcqxA5xLKSxXGNucfr798c7enfC/To5TJetLO4AVNzk7FByFHtmqB+LhjSLzdDuE81tm8uMA8jnj2NSN8Vbsp5MHh27e8JIKg/JtHG4NjkcelAHotlpNvbRqqRKu3oQKvuYYEyzBVAySeAK8oHjrxjeSE2egpFEEDATElm57Y+uaqQ6H4v8asH166uLKzddptY22fXp1/H1oA6rxF8R9HsyyadINQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DWi1oGQI/4jBwiL4B/4S4PAEoVTz7r5wjdFH8ICBoTaXYXCcj9NW1auhScw5wN41jIVoCmuGh/s=" ], "X-Amz-Request-Id": [ "2BA17F6588C322CC" ] }, "Body": "" } }, { "ID": "685d18c641aee0fa", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "39ljP8OGtnEvI/32MONo221D+xbzwoDmM6FaRX0aIiNftx9mdMWNwYMlsov7drQnfPXDNREm7dY=" ], "X-Amz-Request-Id": [ "8A620CCF98DEA66A" ] }, "Body": "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" } }, { "ID": "9334541d754ea61f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "GBpictOmBE1J78VZmcVZza/AWw7I7Gq29/bqtjRGm/ECjX6+VPjmeO6qUq9wDzQCV1j+SdlBdMw=" ], "X-Amz-Request-Id": [ "5F0C58A20D7DB680" ] }, "Body": "" } }, { "ID": "f17c7f7ba1809cbc", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Y0O3yY3AXExGImzpyiiNTsDPXdM6blbWqxoO9hcYGrMnUIaBoTm93lYaxNxOIcmtwwY6uX+UXxU=" ], "X-Amz-Request-Id": [ "8B42001800CB9A5C" ] }, "Body": "" } } ] }a_large_jpg_file_written_in_two_chunks.replay000066400000000000000000003244021367004507500403420ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPrLgYzkP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "b51d3d38c493fd11", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "38430" ], "Content-Md5": [ "YtQ/og5wv6H9siUQ0cBg0g==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "3b38fbf9a6c411c2094468b6eaaa30d8d860e11bd7a8457b5e13428023d9445b" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "image/jpeg", "BodyParts": [ "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pPxFHLdXijnWGTBQbXuGE1YjO7dPd8a+2Z/mHM8WxY7cSpkQNVQsshpRGGmb9KPxf1ULQADNqnk=" ], "X-Amz-Request-Id": [ "B4958A0C096EF868" ] }, "Body": "" } }, { "ID": "871522c6c6f045a2", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pEj+B6R4bX4D012qFmdQbikFWlbp5GMmJrHxkG/ED+mQf1SUb9je49n0qePeyDblZxGp9kTzOto=" ], "X-Amz-Request-Id": [ "E9408706670DB44F" ] }, "Body": "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NQu4GCulv823Pv06iufTwprfjG5W58Q3MogJ3LaoNqICOAMEg/jXTaP8OdL0rGyEO3AJZF6D6D9a7K3sY4YgqggAYHtQBmaJ4fs9MiAgt40AGMquDW6IxwMUJGFGOcVJQA3aDTsUUUAFFFFABRRRQAUhGaWigBoQA5Ap1FFABRRRQAUCiigAooooAKKKKAAdKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqOsI0mlXMaruLRsuMZ6j0q9TZF3IRQB5N8MtV8m1n06RGSWGZsfJtDDPXpivSJNSMcO5oyD7mvHPElmngbxu+pmCeSyuvmHlE4Ru4wBirt/wCNZvEMS6X4dtrl5Z12POQcRDHp60Ac5I7+Lvi7LeQITHbuqAhdwwvGa+h7ddsCA9QK4b4f+B/+Ecs/MnObmU7nAOQDXfAYFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAIRmloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBpUHtVdrRCc4HtVqigCi+nwsclAe4JFQvpFs64aFDnrkVpkUY6UAYf/COaeIti2cIUnLARjBP/wCupl0S0QkLbxjPXCjmtbAoxzQBSWxiRQAg4wOlWBbopGB0qUCloAjVMAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRSY96AFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCpf6baanavbXcKSwv95WHWqml+HNM0hStlaxxAnJ2jqa1qKAAADoKKKKACiiigAooooAKKKKACiiigAooooAKKTNLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRQKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9FGOaACiiigAopAR0zzS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFGc0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFIeKKKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKQnkCiigBaKKKACiiigAooooAKKKKACiiigAooooA//Z" } }, { "ID": "fde158873040344f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "38430" ], "Content-Type": [ "image/jpeg" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"62d43fa20e70bfa1fdb22510d1c060d2\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "Q/yn1xf5dCvlUQq2S14VVYbIr7iM0ZOLlLTuN350W2GLMzLyT8tTpLCZg/26vl+XR7+sj6h898s=" ], "X-Amz-Request-Id": [ "C62AA3A19E9A6CC5" ] }, "Body": "" } }, { "ID": "0c6480cde71ea581", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QBQnwc1QW2GuTngva9CbNW6KzaFGSWOl+F/vtDnyABVsj8MSji8vlu4E6KUQYnd0W0X0vxh4RBM=" ], "X-Amz-Request-Id": [ "23380A2DE7FD72F3" ] }, "Body": "" } } ] }a_small_text_file.replay000066400000000000000000000143771367004507500340650ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPrFOkrM/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "70f4b91e0ac6f1b5", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "20" ], "Content-Md5": [ "PzMJMSzDJkoTibLSY97OjQ==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "9be104294df7d5a59c328241d49ac062e2c7b9660636e7f511e3a1dc3d919377" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "VGhpcyBpcyBhIHRleHQgZmlsZS4=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"3f3309312cc3264a1389b2d263dece8d\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "ODbGTcM1xwlcAdXWj3BJd7v95vEjY6iB/Pys5xqXCFUaJdVV1vpgTq4wBatoj4ZkHuV4tQwtBpM=" ], "X-Amz-Request-Id": [ "AA41B509CC9E0499" ] }, "Body": "" } }, { "ID": "fadc70d1ec1cbf64", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "20" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"3f3309312cc3264a1389b2d263dece8d\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "J7xk2bCxDWfI2nv/EZx6WGQCIXZV+tyenZzvP6crZEQyvMgUgcWwojWo7+GYl+TyF+HBKPFtOWs=" ], "X-Amz-Request-Id": [ "804D5721E4609FE5" ] }, "Body": "VGhpcyBpcyBhIHRleHQgZmlsZS4=" } }, { "ID": "238407d464bf157f", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "20" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Etag": [ "\"3f3309312cc3264a1389b2d263dece8d\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "44FLOdYs6WYkT0S0LaHPhr6XzYCYSo+btjnNJU9BhT3YzF3kngl6I5OaCiDMXZ8P+SunZDQrtN8=" ], "X-Amz-Request-Id": [ "4EB4AC1E3AFE5645" ] }, "Body": "" } }, { "ID": "5d2c5e45f7581137", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:12 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "DFQ54ks/Gaa0oZUWwcHNJGw2kOAce3mM4LoUITCJC7YZHAYG4Oz4UcxKpK9TRZyTcvf73d5az7w=" ], "X-Amz-Request-Id": [ "A9DF4CD192A9595E" ] }, "Body": "" } } ] }invalid_ContentType_fails.replay000066400000000000000000000046221367004507500355420ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPqJ1nlCP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "73bbe35875ec1560", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Type": [ "application/xml" ], "Date": [ "Tue, 09 Jun 2020 06:32:10 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "pE8BlAyxoitx2UNAYmhWk2CJ/zuLyX8t1Mir4cRzUzVdLQZ/eCL0903+MHQkkTy6LWf6sSARy24=" ], "X-Amz-Request-Id": [ "B6EEEF13A01067A5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEVycm9yPjxDb2RlPk5vU3VjaEtleTwvQ29kZT48TWVzc2FnZT5UaGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdC48L01lc3NhZ2U+PEtleT5ibG9iLWZvci1yZWFkaW5nPC9LZXk+PFJlcXVlc3RJZD5CNkVFRUYxM0EwMTA2N0E1PC9SZXF1ZXN0SWQ+PEhvc3RJZD5wRThCbEF5eG9pdHgyVU5BWW1oV2syQ0ovenVMeVg4dDFNaXI0Y1J6VXpWZExRWi9lQ0wwOTAzK01IUWtrVHk2TFdmNnNTQVJ5MjQ9PC9Ib3N0SWQ+PC9FcnJvcj4=" } } ] }no_write_then_close_results_in_empty_blob,_blob_existed.replay000066400000000000000000000143041367004507500437130ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPqH/ZWOP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "f20c3f65285457f5", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "Content-Md5": [ "1B2M2Y8AsgTpgAmY7PhCfg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "cFmi9Woykxm8CuRoNaAUkeuMxKWyCyaFK4xhrBdDEPhdoX2zvG7AqdBEv5UCJLYnfZn8jnOQEJc=" ], "X-Amz-Request-Id": [ "3486A19861C2ACCC" ] }, "Body": "" } }, { "ID": "53b3bcab77e89582", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "WhA+KvR0KKdB4VyLOz/tT4jpaavBkhaCaBhKHfc0UwtIgSCHkhQ86Aj6J47tIBoglsmpQCDIirI=" ], "X-Amz-Request-Id": [ "5BB43662DD23E94E" ] }, "Body": "" } }, { "ID": "dd9f6a58476a5a67", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "MfiZxkuOzjH2NVOVGfV9q6tVqvK9stBSNLHi9axeSDEkuniEwEje15O14Rii4VX1WWhytx2RPbY=" ], "X-Amz-Request-Id": [ "A26584C875413F61" ] }, "Body": "" } }, { "ID": "0906fb121ae00075", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "QTvxV22i+ENKtxkYEJ9wkMaOOpQGfC5vC03/YJm+hyjYXwtQ/KA/oPSVqSlPhZKteBLnzVPQK+o=" ], "X-Amz-Request-Id": [ "EA0A5E62BA72550B" ] }, "Body": "" } } ] }no_write_then_close_results_in_empty_blob.replay000066400000000000000000000143041367004507500411140ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPqF/StSP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d496aa5743d62337", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "0" ], "Content-Md5": [ "1B2M2Y8AsgTpgAmY7PhCfg==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "text/plain", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "n7BY7ohlB51hE4uQJq3wbr/jEW5BIG/Teet5/eo+971B8NjafhNeRxi8qAE5vJfRuLBR3aG2Ghg=" ], "X-Amz-Request-Id": [ "01725F0D2060B786" ] }, "Body": "" } }, { "ID": "b873140617e7313a", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "hivmiehMAA9TA947oJE3TMID1RBJgh+cRjX0OATj/ioqhxBNDJUZT6UVXQNIZ1CYgFmqE1kO11s=" ], "X-Amz-Request-Id": [ "B257613D3949C27E" ] }, "Body": "" } }, { "ID": "e6a9e37b54694149", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "0" ], "Content-Type": [ "text/plain; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"d41d8cd98f00b204e9800998ecf8427e\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TQ8Zjw2gGb8ns7pUofLKQMl/9kkRHQpBbB5dww5zvX9aMCjeSsvDUy3ChOqQh9BhWK3WPDBoaYE=" ], "X-Amz-Request-Id": [ "2BAB6B7FB1ADC88E" ] }, "Body": "" } }, { "ID": "31f76768df05131d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "+yIxZsRVXQ3Ve9qLI7pXfltj/8h/b6cqitfFMwkc9uS+J2FmOMTuOCCs0J1o+z7Ucvm+1Uc1u+I=" ], "X-Amz-Request-Id": [ "0AB533E696298CDF" ] }, "Body": "" } } ] }write_to_empty_key_fails.replay000066400000000000000000000015501367004507500354770ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPqF7zirf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }write_with_explicit_ContentType_overrides_discovery.replay000066400000000000000000000553611367004507500432030ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestConformanceUsingLegacyList/TestWrite{ "Initial": "AQAAAA7WcSPqNJhxkv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "81be3252b49cf73e", "Request": { "Method": "PUT", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "6354" ], "Content-Md5": [ "D2p8n/PT13C49/oZwq4Z0A==" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "354accec7d08850d6f2e6803abecdc0870c3ee9544b6e77ffdae6beafd86a1c6" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "0" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "TLbwNmOEDTTXq8lTxoxKGyBrqSiJsyO2irsRrzhrHAhyV9eFgl9H9OZtKurqoWQJGaPlYtAlNoY=" ], "X-Amz-Request-Id": [ "BDA5F125BC37F2BF" ] }, "Body": "" } }, { "ID": "297e24f35d0aad7b", "Request": { "Method": "GET", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "6354" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "/cgKscWPNSzV2rVS3ofZyQCfqS46obcXLfQYsPJ/3Hx2tOwPfR9yAgT2rbwvS8Hr6w9K1dy63xg=" ], "X-Amz-Request-Id": [ "173AA128C75FC3E6" ] }, "Body": "PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPgo8aGVhZCBwcm9maWxlPSJodHRwOi8vYTkuY29tLy0vc3BlYy9vcGVuc2VhcmNoLzEuMS8iPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgPGxpbmsgaHJlZj0iLy0vYm9vdHN0cmFwLm1pbi5jc3M/dj04YmVjMWJiYTNlMjNlY2JhMjJjZmZiMTk3YTJkNDQwYWY0MTBiMTVkIiByZWw9InN0eWxlc2hlZXQiPgogIDxsaW5rIGhyZWY9Ii8tL3NpdGUuY3NzP3Y9N2Q4MWY0MTA0Yzg5ZGJlMzc2MzQ1ZjZiZmUzZTYyYjRlNDBkM2QwNiIgcmVsPSJzdHlsZXNoZWV0Ij4KICA8dGl0bGU+R29Eb2M8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5Pgo8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWRlZmF1bHQiIHJvbGU9Im5hdmlnYXRpb24iPgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CiAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CiAgICA8L2J1dHRvbj4KICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPjxzdHJvbmc+R29Eb2M8L3N0cm9uZz48L2E+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIj4KICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogICAgICAgIDxsaSBjbGFzcz0iYWN0aXZlIj48YSBocmVmPSIvIj5Ib21lPC9hPjwvbGk+CiAgICAgICAgPGxpPjxhIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dDwvYT48L2xpPgogICAgPC91bD4KICAgIDxmb3JtIGNsYXNzPSJuYXZiYXItbmF2IG5hdmJhci1mb3JtIG5hdmJhci1yaWdodCIgaWQ9Ingtc2VhcmNoIiBhY3Rpb249Ii8iIHJvbGU9InNlYXJjaCI+PGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJ4LXNlYXJjaC1xdWVyeSIgdHlwZT0idGV4dCIgbmFtZT0icSIgcGxhY2Vob2xkZXI9IlNlYXJjaCI+PC9mb3JtPgogIDwvZGl2Pgo8L2Rpdj4KPC9uYXY+CjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgCjxkaXYgY2xhc3M9Imp1bWJvdHJvbiI+CiAgICA8aDI+U2VhcmNoIGZvciBHbyBQYWNrYWdlczwvaDI+CiAgICAKICA8Zm9ybT4KICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9InEiIGF1dG9mb2N1cz0iYXV0b2ZvY3VzIiB2YWx1ZT0iIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvciBwYWNrYWdlIGJ5IGltcG9ydCBwYXRoIG9yIGtleXdvcmQuIiB0eXBlPSJ0ZXh0Ij4KICAgICAgPHNwYW4gY2xhc3M9ImlucHV0LWdyb3VwLWJ0biI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiPkdvITwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2Rpdj4KICA8L2Zvcm0+Cgo8L2Rpdj4KCjxwPkdvRG9jIGhvc3RzIGRvY3VtZW50YXRpb24gZm9yIDxhIGhyZWY9Imh0dHA6Ly9nb2xhbmcub3JnLyI+R288L2E+IHBhY2thZ2VzCm9uIEJpdGJ1Y2tldCwgR2l0SHViLCBHb29nbGUgUHJvamVjdCBIb3N0aW5nIGFuZCBMYXVuY2hwYWQuICBSZWFkIHRoZSA8YQogIGhyZWY9Ii8tL2Fib3V0Ij5BYm91dCBQYWdlPC9hPiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWRkaW5nIHBhY2thZ2VzIHRvIEdvRG9jCmFuZCBtb3JlLgoKPGRpdiBjbGFzcz0icm93Ij4KICA8ZGl2IGNsYXNzPSJjb2wtc20tNiI+CiAgICAKICAgICAgPGg0PlBvcHVsYXIgUGFja2FnZXM8L2g0PgogICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQiPgogICAgICAgIDxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby9hd3MiPmdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28vYXdzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9kZ3JpamFsdmEvand0LWdvIj5naXRodWIuY29tL2RncmlqYWx2YS9qd3QtZ288L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dpbi1nb25pYy9naW4iPmdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbjwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXMiPmdpdGh1Yi5jb20vZ28tcmVkaXMvcmVkaXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2dvLXNxbC1kcml2ZXIvbXlzcWwiPmdpdGh1Yi5jb20vZ28tc3FsLWRyaXZlci9teXNxbDwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3Byb3RvIj5naXRodWIuY29tL2dvbGFuZy9wcm90b2J1Zi9wcm90bzwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29tb2R1bGUvcmVkaWdvL3JlZGlzIj5naXRodWIuY29tL2dvbW9kdWxlL3JlZGlnby9yZWRpczwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQiPmdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQ8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltIj5naXRodWIuY29tL2h5cGVybGVkZ2VyL2ZhYnJpYy9jb3JlL2NoYWluY29kZS9zaGltPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9qaW56aHUvZ29ybSI+Z2l0aHViLmNvbS9qaW56aHUvZ29ybTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vbGliL3BxIj5naXRodWIuY29tL2xpYi9wcTwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcGtnL2Vycm9ycyI+Z2l0aHViLmNvbS9wa2cvZXJyb3JzPC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1cyI+Z2l0aHViLmNvbS9wcm9tZXRoZXVzL2NsaWVudF9nb2xhbmcvcHJvbWV0aGV1czwvYT48bGk+PGEgaHJlZj0iL2dpdGh1Yi5jb20vcm9iZmlnL2Nyb24iPmdpdGh1Yi5jb20vcm9iZmlnL2Nyb248L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3NpcnVwc2VuL2xvZ3J1cyI+Z2l0aHViLmNvbS9zaXJ1cHNlbi9sb2dydXM8L2E+PGxpPjxhIGhyZWY9Ii9naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0Ij5naXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0PC9hPjxsaT48YSBocmVmPSIvZ2l0aHViLmNvbS91bml4cGlja2xlL2thaG9vdC1oYWNrIj5naXRodWIuY29tL3VuaXhwaWNrbGUva2Fob290LWhhY2s8L2E+PGxpPjxhIGhyZWY9Ii9nby51YmVyLm9yZy96YXAiPmdvLnViZXIub3JnL3phcDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9jcnlwdG8vc3NoIj5nb2xhbmcub3JnL3gvY3J5cHRvL3NzaDwvYT48bGk+PGEgaHJlZj0iL2dvbGFuZy5vcmcveC9uZXQvY29udGV4dCI+Z29sYW5nLm9yZy94L25ldC9jb250ZXh0PC9hPjxsaT48YSBocmVmPSIvZ29sYW5nLm9yZy94L29hdXRoMiI+Z29sYW5nLm9yZy94L29hdXRoMjwvYT48bGk+PGEgaHJlZj0iL2dvb2dsZS5nb2xhbmcub3JnL2dycGMiPmdvb2dsZS5nb2xhbmcub3JnL2dycGM8L2E+PGxpPjxhIGhyZWY9Ii9nb3BrZy5pbi9tZ28udjIiPmdvcGtnLmluL21nby52MjwvYT48bGk+PGEgaHJlZj0iL2dvcGtnLmluL3lhbWwudjIiPmdvcGtnLmluL3lhbWwudjI8L2E+PGxpPjxhIGhyZWY9Ii9sYWJpeC5vcmcvdjIvbWdvIj5sYWJpeC5vcmcvdjIvbWdvPC9hPgogICAgICA8L3VsPgogICAgCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iY29sLXNtLTYiPgogICAgPGg0Pk1vcmUgUGFja2FnZXM8L2g0PgogICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIj4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL2dvIj5HbyBTdGFuZGFyZCBQYWNrYWdlczwvYT4KICAgICAgPGxpPjxhIGhyZWY9Ii8tL3N1YnJlcG8iPkdvIFN1Yi1yZXBvc2l0b3J5IFBhY2thZ2VzPC9hPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9nb2xhbmcub3JnL3dpa2kvUHJvamVjdHMiPlByb2plY3RzIEAgZ28td2lraTwvYT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zZWFyY2g/bz1kZXNjJmFtcDtxPWxhbmd1YWdlJTNBZ28mYW1wO3M9c3RhcnMmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5Nb3N0IHN0YXJzPC9hPiwgCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3NlYXJjaD9vPWRlc2MmYW1wO3E9bGFuZ3VhZ2UlM0FnbyZhbXA7cz1mb3JrcyZhbXA7dHlwZT1SZXBvc2l0b3JpZXMiPm1vc3QgZm9ya3M8L2E+LCAKICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2VhcmNoP289ZGVzYyZhbXA7cT1sYW5ndWFnZSUzQWdvJmFtcDtzPXVwZGF0ZWQmYW1wO3R5cGU9UmVwb3NpdG9yaWVzIj5yZWNlbnRseSB1cGRhdGVkPC9hPiBvbiBHaXRIdWIKICAgIDwvdWw+CiAgPC9kaXY+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGlkPSJ4LWZvb3RlciIgY2xhc3M9ImNsZWFyZml4Ij4KICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dvbGFuZy9nZGRvL2lzc3VlcyI+V2Vic2l0ZSBJc3N1ZXM8L2E+CiAgICA8c3BhbiBjbGFzcz0idGV4dC1tdXRlZCI+fDwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2dvbGFuZy5vcmcvIj5HbyBMYW5ndWFnZTwvYT4KICAgIDxzcGFuIGNsYXNzPSJwdWxsLXJpZ2h0Ij48YSBocmVmPSIjIj5CYWNrIHRvIHRvcDwvYT48L3NwYW4+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ieC1zaG9ydGN1dHMiIHRhYmluZGV4PSItMSIgY2xhc3M9Im1vZGFsIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvYnV0dG9uPgogICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9oND4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4/PC9iPjwvdGQ+PHRkPiA6IFRoaXMgbWVudTwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj4vPC9iPjwvdGQ+PHRkPiA6IFNlYXJjaCBzaXRlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5mPC9iPjwvdGQ+PHRkPiA6IEp1bXAgdG8gaWRlbnRpZmllcjwvdGQ+PC90cj4KICAgICAgICAgIDx0cj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmc8L2I+PC90ZD48dGQ+IDogR28gdG8gdG9wIG9mIHBhZ2U8L3RkPjwvdHI+CiAgICAgICAgICA8dHI+PHRkIGFsaWduPSJyaWdodCI+PGI+ZzwvYj4gdGhlbiA8Yj5iPC9iPjwvdGQ+PHRkPiA6IEdvIHRvIGVuZCBvZiBwYWdlPC90ZD48L3RyPgogICAgICAgICAgPHRyIGNsYXNzPSJ0ZXh0LW11dGVkIj48dGQgYWxpZ249InJpZ2h0Ij48Yj5nPC9iPiB0aGVuIDxiPmk8L2I+PC90ZD48dGQ+IDogR28gdG8gaW5kZXg8L3RkPjwvdHI+CiAgICAgICAgICA8dHIgY2xhc3M9InRleHQtbXV0ZWQiPjx0ZCBhbGlnbj0icmlnaHQiPjxiPmc8L2I+IHRoZW4gPGI+ZTwvYj48L3RkPjx0ZD4gOiBHbyB0byBleGFtcGxlczwvdGQ+PC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCBzcmM9Ii8tL2pxdWVyeS0yLjAuMy5taW4uanM/dj1mYmY5Yzc3ZDBjNGUzYzM0YTQ4NTk4MGMxZTUzMTZiNjIxMjE2MGM4Ij48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL2Jvb3RzdHJhcC5taW4uanM/dj01YWRhN2MxMDNmYzFkZWFiYzkyNWNjMWZkYmJiNmU0NTFjMjFmYzcwIj48L3NjcmlwdD4KPHNjcmlwdCBzcmM9Ii8tL3NpdGUuanM/dj0zNzFkZTczMWMxOGQ5MWM0OTlkOTBiMWFiMGJmMzllY2Y2NmQ2Y2Y3Ij48L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+" } }, { "ID": "76a7a45d5730a0ea", "Request": { "Method": "HEAD", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Accept-Ranges": [ "bytes" ], "Content-Length": [ "6354" ], "Content-Type": [ "application/json" ], "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Etag": [ "\"0f6a7c9ff3d3d770b8f7fa19c2ae19d0\"" ], "Last-Modified": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "aWiwdEW+tGCSsa2Q9fs5aRlMEam3quqoX8gxSdP1zLu6zdWcEGIl+yZ25C25xZgDmn2mDP3h6QE=" ], "X-Amz-Request-Id": [ "CB4A8500F81D1C3A" ] }, "Body": "" } }, { "ID": "ccad9d9e71d9464d", "Request": { "Method": "DELETE", "URL": "https://go-cloud-testing.s3.us-west-1.amazonaws.com/blob-for-reading", "Header": { "Accept-Encoding": [ "gzip" ], "User-Agent": [ "CLEARED" ], "X-Amz-Content-Sha256": [ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "", "BodyParts": [ "" ] }, "Response": { "StatusCode": 204, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Date": [ "Tue, 09 Jun 2020 06:32:11 GMT" ], "Server": [ "AmazonS3" ], "X-Amz-Id-2": [ "c7R/o3fTXMmA2DBnBWcg4PNZzkU2lwTVX4mpXzuroNp6etDSY7hYX7ULcGhqUi2vMiWuqAvwOpk=" ], "X-Amz-Request-Id": [ "E88A894FB93B8C22" ] }, "Body": "" } } ] }go-cloud-0.20.0/blob/s3blob/testdata/TestOpenBucket/000077500000000000000000000000001367004507500221235ustar00rootroot00000000000000go-cloud-0.20.0/blob/s3blob/testdata/TestOpenBucket/empty_bucket_name_results_in_error.replay000066400000000000000000000015501367004507500325150ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPzDB8cmv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/blob/s3blob/testdata/TestOpenBucket/success.replay000066400000000000000000000015501367004507500250120ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSPzDG5mI/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/doc.go000066400000000000000000000040011367004507500144000ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /* Package cloud contains a library and tools for open cloud development in Go. The Go Cloud Development Kit (Go CDK) allows application developers to seamlessly deploy cloud applications on any combination of cloud providers. It does this by providing stable, idiomatic interfaces for common uses like storage and databases. Think `database/sql` for cloud products. At the core of the Go CDK are common "portable types", implemented on top of service-specific drivers for supported cloud services. For example, objects of the blob.Bucket portable type can be created using gcsblob.OpenBucket, s3blob.OpenBucket, or any other Go CDK driver. Then, the blob.Bucket can be used throughout your application without worrying about the underlying implementation. The Go CDK works well with a code generator called Wire (https://github.com/google/wire/blob/master/README.md). It creates human-readable code that only imports the cloud SDKs for drivers you use. This allows the Go CDK to grow to support any number of cloud services, without increasing compile times or binary sizes, and avoiding any side effects from `init()` functions. For non-reference documentation, see https://gocloud.dev/ URLs See https://gocloud.dev/concepts/urls/ for a discussion of URLs in the Go CDK. As See https://gocloud.dev/concepts/as/ for a discussion of how to write service-specific code with the Go CDK. */ package cloud // import "gocloud.dev" go-cloud-0.20.0/docstore/000077500000000000000000000000001367004507500151335ustar00rootroot00000000000000go-cloud-0.20.0/docstore/awsdynamodb/000077500000000000000000000000001367004507500174435ustar00rootroot00000000000000go-cloud-0.20.0/docstore/awsdynamodb/benchmark_test.go000066400000000000000000000107461367004507500227730ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb import ( "fmt" "net/http" "strconv" "testing" "github.com/aws/aws-sdk-go/aws" awscreds "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/dynamodb" dyn "github.com/aws/aws-sdk-go/service/dynamodb" "github.com/aws/aws-sdk-go/service/dynamodb/expression" ) var benchmarkTableName = collectionName3 func BenchmarkPutVSTransact(b *testing.B) { // This benchmark compares two ways to replace N items and retrieve their previous values. // The first way makes N calls to PutItem with ReturnValues set to ALL_OLD. // The second way calls BatchGetItem followed by TransactWriteItem. // // The results show that separate PutItems are faster for up to two items. sess, err := awsSession(region, http.DefaultClient) if err != nil { b.Fatal(err) } db := dynamodb.New(sess) for nItems := 1; nItems <= 5; nItems++ { b.Run(fmt.Sprintf("%d-Items", nItems), func(b *testing.B) { var items []map[string]*dynamodb.AttributeValue for i := 0; i < nItems; i++ { items = append(items, map[string]*dynamodb.AttributeValue{ "name": new(dyn.AttributeValue).SetS(fmt.Sprintf("pt-vs-transact-%d", i)), "x": new(dyn.AttributeValue).SetN(strconv.Itoa(i)), "rev": new(dyn.AttributeValue).SetN("1"), }) } for _, item := range items { _, err := db.PutItem(&dynamodb.PutItemInput{ TableName: &benchmarkTableName, Item: item, }) if err != nil { b.Fatal(err) } } b.Run("PutItem", func(b *testing.B) { for n := 0; n < b.N; n++ { putItems(b, db, items) } }) b.Run("TransactWrite", func(b *testing.B) { for n := 0; n < b.N; n++ { batchGetTransactWrite(b, db, items) } }) }) } } func putItems(b *testing.B, db *dynamodb.DynamoDB, items []map[string]*dynamodb.AttributeValue) { for i, item := range items { item["x"].SetN(strconv.Itoa(i + 1)) in := &dynamodb.PutItemInput{ TableName: &benchmarkTableName, Item: item, ReturnValues: aws.String("ALL_OLD"), } ce, err := expression.NewBuilder(). WithCondition(expression.Name("rev").Equal(expression.Value(1))). Build() if err != nil { b.Fatal(err) } in.ExpressionAttributeNames = ce.Names() in.ExpressionAttributeValues = ce.Values() in.ConditionExpression = ce.Condition() out, err := db.PutItem(in) if err != nil { b.Fatal(err) } if got, want := len(out.Attributes), 3; got != want { b.Fatalf("got %d attributes, want %d", got, want) } } } func batchGetTransactWrite(b *testing.B, db *dynamodb.DynamoDB, items []map[string]*dynamodb.AttributeValue) { keys := make([]map[string]*dynamodb.AttributeValue, len(items)) tws := make([]*dyn.TransactWriteItem, len(items)) for i, item := range items { keys[i] = map[string]*dynamodb.AttributeValue{"name": items[i]["name"]} item["x"].SetN(strconv.Itoa(i + 2)) put := &dynamodb.Put{TableName: &benchmarkTableName, Item: items[i]} ce, err := expression.NewBuilder(). WithCondition(expression.Name("rev").Equal(expression.Value(1))). Build() if err != nil { b.Fatal(err) } put.ExpressionAttributeNames = ce.Names() put.ExpressionAttributeValues = ce.Values() put.ConditionExpression = ce.Condition() tws[i] = &dynamodb.TransactWriteItem{Put: put} } _, err := db.BatchGetItem(&dynamodb.BatchGetItemInput{ RequestItems: map[string]*dynamodb.KeysAndAttributes{ benchmarkTableName: {Keys: keys}, }, }) if err != nil { b.Fatal(err) } _, err = db.TransactWriteItems(&dynamodb.TransactWriteItemsInput{TransactItems: tws}) if err != nil { b.Fatal(err) } } func awsSession(region string, client *http.Client) (*session.Session, error) { // Provide fake creds if running in replay mode. var creds *awscreds.Credentials return session.NewSession(&aws.Config{ HTTPClient: client, Region: aws.String(region), Credentials: creds, MaxRetries: aws.Int(0), }) } go-cloud-0.20.0/docstore/awsdynamodb/codec.go000066400000000000000000000171101367004507500210470ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb import ( "errors" "fmt" "reflect" "strconv" "time" dyn "github.com/aws/aws-sdk-go/service/dynamodb" "gocloud.dev/docstore/driver" ) var nullValue = new(dyn.AttributeValue).SetNULL(true) type encoder struct { av *dyn.AttributeValue } func (e *encoder) EncodeNil() { e.av = nullValue } func (e *encoder) EncodeBool(x bool) { e.av = new(dyn.AttributeValue).SetBOOL(x) } func (e *encoder) EncodeInt(x int64) { e.av = new(dyn.AttributeValue).SetN(strconv.FormatInt(x, 10)) } func (e *encoder) EncodeUint(x uint64) { e.av = new(dyn.AttributeValue).SetN(strconv.FormatUint(x, 10)) } func (e *encoder) EncodeBytes(x []byte) { e.av = new(dyn.AttributeValue).SetB(x) } func (e *encoder) EncodeFloat(x float64) { e.av = encodeFloat(x) } func (e *encoder) ListIndex(int) { panic("impossible") } func (e *encoder) MapKey(string) { panic("impossible") } func (e *encoder) EncodeString(x string) { if len(x) == 0 { e.av = nullValue } else { e.av = new(dyn.AttributeValue).SetS(x) } } func (e *encoder) EncodeComplex(x complex128) { e.av = new(dyn.AttributeValue).SetL([]*dyn.AttributeValue{encodeFloat(real(x)), encodeFloat(imag(x))}) } func (e *encoder) EncodeList(n int) driver.Encoder { s := make([]*dyn.AttributeValue, n) e.av = new(dyn.AttributeValue).SetL(s) return &listEncoder{s: s} } func (e *encoder) EncodeMap(n int) driver.Encoder { m := make(map[string]*dyn.AttributeValue, n) e.av = new(dyn.AttributeValue).SetM(m) return &mapEncoder{m: m} } var typeOfGoTime = reflect.TypeOf(time.Time{}) // EncodeSpecial encodes time.Time specially. func (e *encoder) EncodeSpecial(v reflect.Value) (bool, error) { switch v.Type() { case typeOfGoTime: ts := v.Interface().(time.Time).Format(time.RFC3339Nano) e.EncodeString(ts) default: return false, nil } return true, nil } type listEncoder struct { s []*dyn.AttributeValue encoder } func (e *listEncoder) ListIndex(i int) { e.s[i] = e.av } type mapEncoder struct { m map[string]*dyn.AttributeValue encoder } func (e *mapEncoder) MapKey(k string) { e.m[k] = e.av } func encodeDoc(doc driver.Document) (*dyn.AttributeValue, error) { var e encoder if err := doc.Encode(&e); err != nil { return nil, err } return e.av, nil } // Encode the key fields of the given document into a map AttributeValue. // pkey and skey are the names of the partition key field and the sort key field. // pkey must always be non-empty, but skey may be empty if the collection has no sort key. func encodeDocKeyFields(doc driver.Document, pkey, skey string) (*dyn.AttributeValue, error) { m := map[string]*dyn.AttributeValue{} set := func(fieldName string) error { fieldVal, err := doc.GetField(fieldName) if err != nil { return err } attrVal, err := encodeValue(fieldVal) if err != nil { return err } m[fieldName] = attrVal return nil } if err := set(pkey); err != nil { return nil, err } if skey != "" { if err := set(skey); err != nil { return nil, err } } return new(dyn.AttributeValue).SetM(m), nil } func encodeValue(v interface{}) (*dyn.AttributeValue, error) { var e encoder if err := driver.Encode(reflect.ValueOf(v), &e); err != nil { return nil, err } return e.av, nil } func encodeFloat(f float64) *dyn.AttributeValue { return new(dyn.AttributeValue).SetN(strconv.FormatFloat(f, 'f', -1, 64)) } //////////////////////////////////////////////////////////////// func decodeDoc(item *dyn.AttributeValue, doc driver.Document) error { return doc.Decode(decoder{av: item}) } type decoder struct { av *dyn.AttributeValue } func (d decoder) String() string { return d.av.String() } func (d decoder) AsBool() (bool, bool) { if d.av.BOOL == nil { return false, false } return *d.av.BOOL, true } func (d decoder) AsNull() bool { return d.av.NULL != nil } func (d decoder) AsString() (string, bool) { // Empty string is represented by NULL. if d.av.NULL != nil { return "", true } if d.av.S == nil { return "", false } return *d.av.S, true } func (d decoder) AsInt() (int64, bool) { if d.av.N == nil { return 0, false } i, err := strconv.ParseInt(*d.av.N, 10, 64) if err != nil { return 0, false } return i, true } func (d decoder) AsUint() (uint64, bool) { if d.av.N == nil { return 0, false } u, err := strconv.ParseUint(*d.av.N, 10, 64) if err != nil { return 0, false } return u, true } func (d decoder) AsFloat() (float64, bool) { if d.av.N == nil { return 0, false } f, err := strconv.ParseFloat(*d.av.N, 64) if err != nil { return 0, false } return f, true } func (d decoder) AsComplex() (complex128, bool) { if d.av.L == nil { return 0, false } if len(d.av.L) != 2 { return 0, false } r, ok := decoder{d.av.L[0]}.AsFloat() if !ok { return 0, false } i, ok := decoder{d.av.L[1]}.AsFloat() if !ok { return 0, false } return complex(r, i), true } func (d decoder) AsBytes() ([]byte, bool) { if d.av.B == nil { return nil, false } return d.av.B, true } func (d decoder) ListLen() (int, bool) { if d.av.L == nil { return 0, false } return len(d.av.L), true } func (d decoder) DecodeList(f func(i int, vd driver.Decoder) bool) { for i, el := range d.av.L { if !f(i, decoder{el}) { break } } } func (d decoder) MapLen() (int, bool) { if d.av.M == nil { return 0, false } return len(d.av.M), true } func (d decoder) DecodeMap(f func(key string, vd driver.Decoder, exactMatch bool) bool) { for k, av := range d.av.M { if !f(k, decoder{av}, true) { break } } } func (d decoder) AsInterface() (interface{}, error) { return toGoValue(d.av) } func toGoValue(av *dyn.AttributeValue) (interface{}, error) { switch { case av.NULL != nil: return nil, nil case av.BOOL != nil: return *av.BOOL, nil case av.N != nil: f, err := strconv.ParseFloat(*av.N, 64) if err != nil { return nil, err } i := int64(f) if float64(i) == f { return i, nil } u := uint64(f) if float64(u) == f { return u, nil } return f, nil case av.B != nil: return av.B, nil case av.S != nil: return *av.S, nil case av.L != nil: s := make([]interface{}, len(av.L)) for i, v := range av.L { x, err := toGoValue(v) if err != nil { return nil, err } s[i] = x } return s, nil case av.M != nil: m := make(map[string]interface{}, len(av.M)) for k, v := range av.M { x, err := toGoValue(v) if err != nil { return nil, err } m[k] = x } return m, nil default: return nil, fmt.Errorf("awsdynamodb: AttributeValue %s not supported", av) } } func (d decoder) AsSpecial(v reflect.Value) (bool, interface{}, error) { unsupportedTypes := `unsupported type, the docstore driver for DynamoDB does not decode DynamoDB set types, such as string set, number set and binary set` if d.av.SS != nil || d.av.NS != nil || d.av.BS != nil { return true, nil, errors.New(unsupportedTypes) } switch v.Type() { case typeOfGoTime: if d.av.S == nil { return false, nil, errors.New("expected string field for time.Time") } t, err := time.Parse(time.RFC3339Nano, *d.av.S) return true, t, err } return false, nil, nil } go-cloud-0.20.0/docstore/awsdynamodb/codec_test.go000066400000000000000000000067661367004507500221250ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb import ( "reflect" "testing" dyn "github.com/aws/aws-sdk-go/service/dynamodb" dynattr "github.com/aws/aws-sdk-go/service/dynamodb/dynamodbattribute" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "gocloud.dev/docstore/driver" "gocloud.dev/docstore/drivertest" ) func TestEncodeValue(t *testing.T) { av := func() *dyn.AttributeValue { return &dyn.AttributeValue{} } avn := func(s string) *dyn.AttributeValue { return av().SetN(s) } avl := func(avs ...*dyn.AttributeValue) *dyn.AttributeValue { return av().SetL(avs) } var seven int32 = 7 var nullptr *int for _, test := range []struct { in interface{} want *dyn.AttributeValue }{ {nil, nullValue}, {0, avn("0")}, {uint64(999), avn("999")}, {3.5, avn("3.5")}, {"", nullValue}, {"x", av().SetS("x")}, {true, av().SetBOOL(true)}, {nullptr, nullValue}, {seven, avn("7")}, {&seven, avn("7")}, {[]int(nil), nullValue}, {[]int{}, av().SetL([]*dyn.AttributeValue{})}, {[]int{1, 2}, avl(avn("1"), avn("2"))}, {[...]int{1, 2}, avl(avn("1"), avn("2"))}, {[]interface{}{nil, false}, avl(nullValue, av().SetBOOL(false))}, {map[string]int(nil), nullValue}, {map[string]int{}, av().SetM(map[string]*dyn.AttributeValue{})}, { map[string]int{"a": 1, "b": 2}, av().SetM(map[string]*dyn.AttributeValue{ "a": avn("1"), "b": avn("2"), }), }, } { var e encoder if err := driver.Encode(reflect.ValueOf(test.in), &e); err != nil { t.Fatal(err) } got := e.av if !cmp.Equal(got, test.want, cmpopts.IgnoreUnexported(dyn.AttributeValue{})) { t.Errorf("%#v: got %#v, want %#v", test.in, got, test.want) } } } func TestDecodeErrorOnUnsupported(t *testing.T) { av := func() *dyn.AttributeValue { return &dyn.AttributeValue{} } sptr := func(s string) *string { return &s } for _, tc := range []struct { in *dyn.AttributeValue out interface{} }{ {av().SetSS([]*string{sptr("foo"), sptr("bar")}), []string{}}, {av().SetNS([]*string{sptr("1.1"), sptr("-2.2"), sptr("3.3")}), []float64{}}, {av().SetBS([][]byte{{4}, {5}, {6}}), [][]byte{}}, } { d := decoder{av: tc.in} if err := driver.Decode(reflect.ValueOf(tc.out), &d); err == nil { t.Error("got nil error, want unsupported error") } } } type codecTester struct{} func (ct *codecTester) UnsupportedTypes() []drivertest.UnsupportedType { return []drivertest.UnsupportedType{drivertest.BinarySet} } func (ct *codecTester) NativeEncode(obj interface{}) (interface{}, error) { return dynattr.Marshal(obj) } func (ct *codecTester) NativeDecode(value, dest interface{}) error { return dynattr.Unmarshal(value.(*dyn.AttributeValue), dest) } func (ct *codecTester) DocstoreEncode(obj interface{}) (interface{}, error) { return encodeDoc(drivertest.MustDocument(obj)) } func (ct *codecTester) DocstoreDecode(value, dest interface{}) error { return decodeDoc(value.(*dyn.AttributeValue), drivertest.MustDocument(dest)) } go-cloud-0.20.0/docstore/awsdynamodb/create_tables.sh000077500000000000000000000042451367004507500226040ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Creates the DynamoDB tables needed for tests. # # If a table already exists, this script will fail. To re-create the table, run # aws dynamodb delete-table --table-name ... # and wait until the deletion completes. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail # except we want to keep going if there is a failure. set -uxo pipefail # The docstore-test-1 table has a single partition key called "name". aws dynamodb create-table \ --table-name docstore-test-1 \ --attribute-definitions AttributeName=name,AttributeType=S \ --key-schema AttributeName=name,KeyType=HASH \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 # The docstore-test-2 table has both a partition and a sort key, and two indexes. aws dynamodb create-table \ --table-name docstore-test-2 \ --attribute-definitions \ AttributeName=Game,AttributeType=S \ AttributeName=Player,AttributeType=S \ AttributeName=Score,AttributeType=N \ AttributeName=Time,AttributeType=S \ --key-schema AttributeName=Game,KeyType=HASH AttributeName=Player,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --local-secondary-indexes \ 'IndexName=local,KeySchema=[{AttributeName=Game,KeyType=HASH},{AttributeName=Score,KeyType=RANGE}],Projection={ProjectionType=ALL}' \ --global-secondary-indexes \ 'IndexName=global,KeySchema=[{AttributeName=Player,KeyType=HASH},{AttributeName=Time,KeyType=RANGE}],Projection={ProjectionType=ALL},ProvisionedThroughput={ReadCapacityUnits=5,WriteCapacityUnits=5}' go-cloud-0.20.0/docstore/awsdynamodb/dynamo.go000066400000000000000000000536511367004507500212730ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package awsdynamodb provides a docstore implementation backed by Amazon // DynamoDB. // Use OpenCollection to construct a *docstore.Collection. // // URLs // // For docstore.OpenCollection, awsdynamodb registers for the scheme // "dynamodb". The default URL opener will use an AWS session with the default // credentials and configuration; see // https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more details. // To customize the URL opener, or for more details on the URL format, see // URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // awsdynamodb exposes the following types for As: // - Collection.As: *dynamodb.DynamoDB // - ActionList.BeforeDo: *dynamodb.BatchGetItemInput or *dynamodb.PutItemInput or *dynamodb.DeleteItemInput // or *dynamodb.UpdateItemInput // - Query.BeforeQuery: *dynamodb.QueryInput or *dynamodb.ScanInput // - DocumentIterator: *dynamodb.QueryOutput or *dynamodb.ScanOutput // - ErrorAs: awserr.Error package awsdynamodb import ( "context" "fmt" "reflect" "strings" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" dyn "github.com/aws/aws-sdk-go/service/dynamodb" "github.com/aws/aws-sdk-go/service/dynamodb/expression" "github.com/google/wire" "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" ) // Set holds Wire providers for this package. var Set = wire.NewSet( wire.Struct(new(URLOpener), "ConfigProvider"), ) type collection struct { db *dyn.DynamoDB table string // DynamoDB table name partitionKey string sortKey string description *dyn.TableDescription opts *Options } // FallbackFunc is a function for executing queries that cannot be run by the built-in // awsdynamodb logic. See Options.RunQueryFunc for details. type FallbackFunc func(context.Context, *driver.Query, RunQueryFunc) (driver.DocumentIterator, error) type Options struct { // If false, queries that can only be executed by scanning the entire table // return an error instead (with the exception of a query with no filters). AllowScans bool // The name of the field holding the document revision. // Defaults to docstore.DefaultRevisionField. RevisionField string // If set, call this function on queries that we cannot execute at all (for // example, a query with an OrderBy clause that lacks an equality filter on a // partition key). The function should execute the query however it wishes, and // return an iterator over the results. It can use the RunQueryFunc passed as its // third argument to have the DynamoDB driver run a query, for instance a // modified version of the original query. // // If RunQueryFallback is nil, queries that cannot be executed will fail with a // error that has code Unimplemented. RunQueryFallback FallbackFunc // The maximum number of concurrent goroutines started for a single call to // ActionList.Do. If less than 1, there is no limit. MaxOutstandingActionRPCs int // If true, a strongly consistent read is used whenever possible, including // get, query, scan, etc.; default to false, where an eventually consistent // read is used. // // Not all read operations support this mode however, such as querying against // a global secondary index, the operation will return an InvalidArgument error // in such case, please check the official DynamoDB documentation for more // details. // // The native client for DynamoDB uses this option in a per-action basis, if // you need the flexibility to run both modes on the same collection, create // two collections with different mode. ConsistentRead bool } // RunQueryFunc is the type of the function passed to RunQueryFallback. type RunQueryFunc func(context.Context, *driver.Query) (driver.DocumentIterator, error) // OpenCollection creates a *docstore.Collection representing a DynamoDB collection. func OpenCollection(db *dyn.DynamoDB, tableName, partitionKey, sortKey string, opts *Options) (*docstore.Collection, error) { c, err := newCollection(db, tableName, partitionKey, sortKey, opts) if err != nil { return nil, err } return docstore.NewCollection(c), nil } func newCollection(db *dyn.DynamoDB, tableName, partitionKey, sortKey string, opts *Options) (*collection, error) { out, err := db.DescribeTable(&dyn.DescribeTableInput{TableName: &tableName}) if err != nil { return nil, err } if opts == nil { opts = &Options{} } if opts.RevisionField == "" { opts.RevisionField = docstore.DefaultRevisionField } return &collection{ db: db, table: tableName, partitionKey: partitionKey, sortKey: sortKey, description: out.Table, opts: opts, }, nil } // Key returns a two-element array with the partition key and sort key, if any. func (c *collection) Key(doc driver.Document) (interface{}, error) { pkey, err := doc.GetField(c.partitionKey) if err != nil || pkey == nil || driver.IsEmptyValue(reflect.ValueOf(pkey)) { return nil, nil // missing key is not an error } keys := [2]interface{}{pkey} if c.sortKey != "" { keys[1], _ = doc.GetField(c.sortKey) // ignore error since keys[1] is nil in that case } return keys, nil } func (c *collection) RevisionField() string { return c.opts.RevisionField } func (c *collection) RunActions(ctx context.Context, actions []*driver.Action, opts *driver.RunActionsOptions) driver.ActionListError { errs := make([]error, len(actions)) beforeGets, gets, writes, afterGets := driver.GroupActions(actions) c.runGets(ctx, beforeGets, errs, opts) ch := make(chan struct{}) go func() { defer close(ch); c.runWrites(ctx, writes, errs, opts) }() c.runGets(ctx, gets, errs, opts) <-ch c.runGets(ctx, afterGets, errs, opts) return driver.NewActionListError(errs) } func (c *collection) runGets(ctx context.Context, actions []*driver.Action, errs []error, opts *driver.RunActionsOptions) { const batchSize = 100 t := driver.NewThrottle(c.opts.MaxOutstandingActionRPCs) for _, group := range driver.GroupByFieldPath(actions) { n := len(group) / batchSize for i := 0; i < n; i++ { i := i t.Acquire() go func() { defer t.Release() c.batchGet(ctx, group, errs, opts, batchSize*i, batchSize*(i+1)-1) }() } if n*batchSize < len(group) { t.Acquire() go func() { defer t.Release() c.batchGet(ctx, group, errs, opts, batchSize*n, len(group)-1) }() } } t.Wait() } func (c *collection) batchGet(ctx context.Context, gets []*driver.Action, errs []error, opts *driver.RunActionsOptions, start, end int) { // errors need to be mapped to the actions' indices. setErr := func(err error) { for i := start; i <= end; i++ { errs[gets[i].Index] = err } } keys := make([]map[string]*dyn.AttributeValue, 0, end-start+1) for i := start; i <= end; i++ { av, err := encodeDocKeyFields(gets[i].Doc, c.partitionKey, c.sortKey) if err != nil { errs[gets[i].Index] = err } keys = append(keys, av.M) } ka := &dyn.KeysAndAttributes{ Keys: keys, ConsistentRead: aws.Bool(c.opts.ConsistentRead), } if len(gets[start].FieldPaths) != 0 { // We need to add the key fields if the user doesn't include them. The // BatchGet API doesn't return them otherwise. var hasP, hasS bool var nbs []expression.NameBuilder for _, fp := range gets[start].FieldPaths { p := strings.Join(fp, ".") nbs = append(nbs, expression.Name(p)) if p == c.partitionKey { hasP = true } else if p == c.sortKey { hasS = true } } if !hasP { nbs = append(nbs, expression.Name(c.partitionKey)) } if c.sortKey != "" && !hasS { nbs = append(nbs, expression.Name(c.sortKey)) } expr, err := expression.NewBuilder(). WithProjection(expression.AddNames(expression.ProjectionBuilder{}, nbs...)). Build() if err != nil { setErr(err) return } ka.ProjectionExpression = expr.Projection() ka.ExpressionAttributeNames = expr.Names() } in := &dyn.BatchGetItemInput{RequestItems: map[string]*dyn.KeysAndAttributes{c.table: ka}} if opts.BeforeDo != nil { if err := opts.BeforeDo(driver.AsFunc(in)); err != nil { setErr(err) return } } out, err := c.db.BatchGetItemWithContext(ctx, in) if err != nil { setErr(err) return } found := make([]bool, end-start+1) am := mapActionIndices(gets, start, end) for _, item := range out.Responses[c.table] { if item != nil { key := map[string]interface{}{c.partitionKey: nil} if c.sortKey != "" { key[c.sortKey] = nil } keysOnly, err := driver.NewDocument(key) if err != nil { panic(err) } err = decodeDoc(&dyn.AttributeValue{M: item}, keysOnly) if err != nil { continue } decKey, err := c.Key(keysOnly) if err != nil { continue } i := am[decKey] errs[gets[i].Index] = decodeDoc(&dyn.AttributeValue{M: item}, gets[i].Doc) found[i-start] = true } } for delta, f := range found { if !f { errs[gets[start+delta].Index] = gcerr.Newf(gcerr.NotFound, nil, "item %v not found", gets[start+delta].Doc) } } } func mapActionIndices(actions []*driver.Action, start, end int) map[interface{}]int { m := make(map[interface{}]int) for i := start; i <= end; i++ { m[actions[i].Key] = i } return m } // runWrites executes all the writes as separate RPCs, concurrently. func (c *collection) runWrites(ctx context.Context, writes []*driver.Action, errs []error, opts *driver.RunActionsOptions) { var ops []*writeOp for _, w := range writes { op, err := c.newWriteOp(w, opts) if err != nil { errs[w.Index] = err } else { ops = append(ops, op) } } t := driver.NewThrottle(c.opts.MaxOutstandingActionRPCs) for _, op := range ops { op := op t.Acquire() go func() { defer t.Release() err := op.run(ctx) a := op.action if err != nil { errs[a.Index] = err } else { errs[a.Index] = c.onSuccess(op) } }() } t.Wait() } // A writeOp describes a single write to DynamoDB. The write can be executed // on its own, or included as part of a transaction. type writeOp struct { action *driver.Action writeItem *dyn.TransactWriteItem // for inclusion in a transaction newPartitionKey string // for a Create on a document without a partition key newRevision string run func(context.Context) error // run as a single RPC } func (c *collection) newWriteOp(a *driver.Action, opts *driver.RunActionsOptions) (*writeOp, error) { switch a.Kind { case driver.Create, driver.Replace, driver.Put: return c.newPut(a, opts) case driver.Update: return c.newUpdate(a, opts) case driver.Delete: return c.newDelete(a, opts) default: panic("bad write kind") } } func (c *collection) newPut(a *driver.Action, opts *driver.RunActionsOptions) (*writeOp, error) { av, err := encodeDoc(a.Doc) if err != nil { return nil, err } mf := c.missingKeyField(av.M) if a.Kind != driver.Create && mf != "" { return nil, fmt.Errorf("missing key field %q", mf) } var newPartitionKey string if mf == c.partitionKey { newPartitionKey = driver.UniqueString() av.M[c.partitionKey] = new(dyn.AttributeValue).SetS(newPartitionKey) } if c.sortKey != "" && mf == c.sortKey { // It doesn't make sense to generate a random sort key. return nil, fmt.Errorf("missing sort key %q", c.sortKey) } var rev string if a.Doc.HasField(c.opts.RevisionField) { rev = driver.UniqueString() if av.M[c.opts.RevisionField], err = encodeValue(rev); err != nil { return nil, err } } dput := &dyn.Put{ TableName: &c.table, Item: av.M, } cb, err := c.precondition(a) if err != nil { return nil, err } if cb != nil { ce, err := expression.NewBuilder().WithCondition(*cb).Build() if err != nil { return nil, err } dput.ExpressionAttributeNames = ce.Names() dput.ExpressionAttributeValues = ce.Values() dput.ConditionExpression = ce.Condition() } return &writeOp{ action: a, writeItem: &dyn.TransactWriteItem{Put: dput}, newPartitionKey: newPartitionKey, newRevision: rev, run: func(ctx context.Context) error { return c.runPut(ctx, dput, a, opts) }, }, nil } func (c *collection) runPut(ctx context.Context, dput *dyn.Put, a *driver.Action, opts *driver.RunActionsOptions) error { in := &dyn.PutItemInput{ TableName: dput.TableName, Item: dput.Item, ConditionExpression: dput.ConditionExpression, ExpressionAttributeNames: dput.ExpressionAttributeNames, ExpressionAttributeValues: dput.ExpressionAttributeValues, } if opts.BeforeDo != nil { if err := opts.BeforeDo(driver.AsFunc(in)); err != nil { return err } } _, err := c.db.PutItemWithContext(ctx, in) if ae, ok := err.(awserr.Error); ok && ae.Code() == dyn.ErrCodeConditionalCheckFailedException { if a.Kind == driver.Create { err = gcerr.Newf(gcerr.AlreadyExists, err, "document already exists") } if rev, _ := a.Doc.GetField(c.opts.RevisionField); rev == nil && a.Kind == driver.Replace { err = gcerr.Newf(gcerr.NotFound, nil, "document not found") } } return err } func (c *collection) newDelete(a *driver.Action, opts *driver.RunActionsOptions) (*writeOp, error) { av, err := encodeDocKeyFields(a.Doc, c.partitionKey, c.sortKey) if err != nil { return nil, err } del := &dyn.Delete{ TableName: &c.table, Key: av.M, } cb, err := c.precondition(a) if err != nil { return nil, err } if cb != nil { ce, err := expression.NewBuilder().WithCondition(*cb).Build() if err != nil { return nil, err } del.ExpressionAttributeNames = ce.Names() del.ExpressionAttributeValues = ce.Values() del.ConditionExpression = ce.Condition() } return &writeOp{ action: a, writeItem: &dyn.TransactWriteItem{Delete: del}, run: func(ctx context.Context) error { in := &dyn.DeleteItemInput{ TableName: del.TableName, Key: del.Key, ConditionExpression: del.ConditionExpression, ExpressionAttributeNames: del.ExpressionAttributeNames, ExpressionAttributeValues: del.ExpressionAttributeValues, } if opts.BeforeDo != nil { if err := opts.BeforeDo(driver.AsFunc(in)); err != nil { return err } } _, err := c.db.DeleteItemWithContext(ctx, in) return err }, }, nil } func (c *collection) newUpdate(a *driver.Action, opts *driver.RunActionsOptions) (*writeOp, error) { av, err := encodeDocKeyFields(a.Doc, c.partitionKey, c.sortKey) if err != nil { return nil, err } var ub expression.UpdateBuilder for _, m := range a.Mods { // TODO(shantuo): check for invalid field paths fp := expression.Name(strings.Join(m.FieldPath, ".")) if inc, ok := m.Value.(driver.IncOp); ok { ub = ub.Add(fp, expression.Value(inc.Amount)) } else if m.Value == nil { ub = ub.Remove(fp) } else { ub = ub.Set(fp, expression.Value(m.Value)) } } var rev string if a.Doc.HasField(c.opts.RevisionField) { rev = driver.UniqueString() ub = ub.Set(expression.Name(c.opts.RevisionField), expression.Value(rev)) } cb, err := c.precondition(a) if err != nil { return nil, err } ce, err := expression.NewBuilder().WithCondition(*cb).WithUpdate(ub).Build() if err != nil { return nil, err } up := &dyn.Update{ TableName: &c.table, Key: av.M, ConditionExpression: ce.Condition(), UpdateExpression: ce.Update(), ExpressionAttributeNames: ce.Names(), ExpressionAttributeValues: ce.Values(), } return &writeOp{ action: a, writeItem: &dyn.TransactWriteItem{Update: up}, newRevision: rev, run: func(ctx context.Context) error { in := &dyn.UpdateItemInput{ TableName: up.TableName, Key: up.Key, ConditionExpression: up.ConditionExpression, UpdateExpression: up.UpdateExpression, ExpressionAttributeNames: up.ExpressionAttributeNames, ExpressionAttributeValues: up.ExpressionAttributeValues, } if opts.BeforeDo != nil { if err := opts.BeforeDo(driver.AsFunc(in)); err != nil { return err } } _, err := c.db.UpdateItemWithContext(ctx, in) return err }, }, nil } // Handle the effects of successful execution. func (c *collection) onSuccess(op *writeOp) error { // Set the new partition key (if any) and the new revision into the user's document. if op.newPartitionKey != "" { _ = op.action.Doc.SetField(c.partitionKey, op.newPartitionKey) // cannot fail } if op.newRevision != "" { return op.action.Doc.SetField(c.opts.RevisionField, op.newRevision) } return nil } func (c *collection) missingKeyField(m map[string]*dyn.AttributeValue) string { if v, ok := m[c.partitionKey]; !ok || v.NULL != nil { return c.partitionKey } if v, ok := m[c.sortKey]; (!ok || v.NULL != nil) && c.sortKey != "" { return c.sortKey } return "" } // Construct the precondition for the action. func (c *collection) precondition(a *driver.Action) (*expression.ConditionBuilder, error) { switch a.Kind { case driver.Create: // Precondition: the document doesn't already exist. (Precisely: the partitionKey // field is not on the document.) c := expression.AttributeNotExists(expression.Name(c.partitionKey)) return &c, nil case driver.Replace, driver.Update: // Precondition: the revision matches, or if there is no revision, then // the document exists. cb, err := revisionPrecondition(a.Doc, c.opts.RevisionField) if err != nil { return nil, err } if cb == nil { c := expression.AttributeExists(expression.Name(c.partitionKey)) cb = &c } return cb, nil case driver.Put, driver.Delete: // Precondition: the revision matches, if any. return revisionPrecondition(a.Doc, c.opts.RevisionField) case driver.Get: // No preconditions on a Get. return nil, nil default: panic("bad action kind") } } // revisionPrecondition returns a DynamoDB expression that asserts that the // stored document's revision matches the revision of doc. func revisionPrecondition(doc driver.Document, revField string) (*expression.ConditionBuilder, error) { v, err := doc.GetField(revField) if err != nil { // field not present return nil, nil } if v == nil { // field is present, but nil return nil, nil } rev, ok := v.(string) if !ok { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "%s field contains wrong type: got %T, want string", revField, v) } if rev == "" { return nil, nil } // Value encodes rev to an attribute value. cb := expression.Name(revField).Equal(expression.Value(rev)) return &cb, nil } // TODO(jba): use this if/when we support atomic writes. func (c *collection) transactWrite(ctx context.Context, actions []*driver.Action, errs []error, opts *driver.RunActionsOptions, start, end int) { setErr := func(err error) { for i := start; i <= end; i++ { errs[actions[i].Index] = err } } var ops []*writeOp tws := make([]*dyn.TransactWriteItem, 0, end-start+1) for i := start; i <= end; i++ { a := actions[i] op, err := c.newWriteOp(a, opts) if err != nil { setErr(err) return } ops = append(ops, op) tws = append(tws, op.writeItem) } in := &dyn.TransactWriteItemsInput{ ClientRequestToken: aws.String(driver.UniqueString()), TransactItems: tws, } if opts.BeforeDo != nil { asFunc := func(i interface{}) bool { p, ok := i.(**dyn.TransactWriteItemsInput) if !ok { return false } *p = in return true } if err := opts.BeforeDo(asFunc); err != nil { setErr(err) return } } if _, err := c.db.TransactWriteItemsWithContext(ctx, in); err != nil { setErr(err) return } for _, op := range ops { errs[op.action.Index] = c.onSuccess(op) } } // RevisionToBytes implements driver.RevisionToBytes. func (c *collection) RevisionToBytes(rev interface{}) ([]byte, error) { s, ok := rev.(string) if !ok { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "revision %v of type %[1]T is not a string", rev) } return []byte(s), nil } // BytesToRevision implements driver.BytesToRevision. func (c *collection) BytesToRevision(b []byte) (interface{}, error) { return string(b), nil } func (c *collection) As(i interface{}) bool { p, ok := i.(**dyn.DynamoDB) if !ok { return false } *p = c.db return true } // ErrorAs implements driver.Collection.ErrorAs. func (c *collection) ErrorAs(err error, i interface{}) bool { e, ok := err.(awserr.Error) if !ok { return false } p, ok := i.(*awserr.Error) if !ok { return false } *p = e return true } func (c *collection) ErrorCode(err error) gcerrors.ErrorCode { ae, ok := err.(awserr.Error) if !ok { return gcerrors.Unknown } ec, ok := errorCodeMap[ae.Code()] if !ok { return gcerrors.Unknown } return ec } var errorCodeMap = map[string]gcerrors.ErrorCode{ dyn.ErrCodeConditionalCheckFailedException: gcerrors.FailedPrecondition, dyn.ErrCodeProvisionedThroughputExceededException: gcerrors.ResourceExhausted, dyn.ErrCodeResourceNotFoundException: gcerrors.NotFound, dyn.ErrCodeItemCollectionSizeLimitExceededException: gcerrors.ResourceExhausted, dyn.ErrCodeTransactionConflictException: gcerrors.Internal, dyn.ErrCodeRequestLimitExceeded: gcerrors.ResourceExhausted, dyn.ErrCodeInternalServerError: gcerrors.Internal, dyn.ErrCodeTransactionCanceledException: gcerrors.FailedPrecondition, dyn.ErrCodeTransactionInProgressException: gcerrors.InvalidArgument, dyn.ErrCodeIdempotentParameterMismatchException: gcerrors.InvalidArgument, "ValidationException": gcerrors.InvalidArgument, } // Close implements driver.Collection.Close. func (c *collection) Close() error { return nil } go-cloud-0.20.0/docstore/awsdynamodb/dynamo_test.go000066400000000000000000000151411367004507500223220ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb import ( "context" "errors" "fmt" "io" "testing" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/session" dyn "github.com/aws/aws-sdk-go/service/dynamodb" "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/docstore/drivertest" "gocloud.dev/gcerrors" "gocloud.dev/internal/testing/setup" ) // To create the tables and indexes needed for these tests, run create_tables.sh in // this directory. // // The docstore-test-2 table is set up to work with queries on the drivertest.HighScore // struct like so: // table: "Game" partition key, "Player" sort key // local index: "Game" partition key, "Score" sort key // global index: "Player" partition key, "Time" sort key // The conformance test queries should exercise all of these. // // The docstore-test-3 table is used for running benchmarks only. To eliminate // the effect of dynamo auto-scaling, run: // aws dynamodb update-table --table-name docstore-test-3 \ // --provisioned-throughput ReadCapacityUnits=1000,WriteCapacityUnits=1000 // Don't forget to change it back when done benchmarking. const ( region = "us-east-2" collectionName1 = "docstore-test-1" collectionName2 = "docstore-test-2" collectionName3 = "docstore-test-3" // for benchmark ) type harness struct { sess *session.Session closer func() } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { sess, _, done, state := setup.NewAWSSession(ctx, t, region) drivertest.MakeUniqueStringDeterministicForTesting(state) return &harness{sess: sess, closer: done}, nil } func (*harness) BeforeDoTypes() []interface{} { return []interface{}{&dyn.BatchGetItemInput{}, &dyn.TransactWriteItemsInput{}, &dyn.PutItemInput{}, &dyn.DeleteItemInput{}, &dyn.UpdateItemInput{}} } func (*harness) BeforeQueryTypes() []interface{} { return []interface{}{&dyn.QueryInput{}, &dyn.ScanInput{}} } func (*harness) RevisionsEqual(rev1, rev2 interface{}) bool { return rev1 == rev2 } func (h *harness) Close() { h.closer() } func (h *harness) MakeCollection(_ context.Context, kind drivertest.CollectionKind) (driver.Collection, error) { switch kind { case drivertest.SingleKey, drivertest.NoRev: return newCollection(dyn.New(h.sess), collectionName1, drivertest.KeyField, "", &Options{ AllowScans: true, ConsistentRead: true, }) case drivertest.TwoKey: // For query test we don't use strong consistency mode since some tests are // running on global secondary index and it doesn't support ConsistentRead. return newCollection(dyn.New(h.sess), collectionName2, "Game", "Player", &Options{ AllowScans: true, RunQueryFallback: InMemorySortFallback(func() interface{} { return new(drivertest.HighScore) }), }) case drivertest.AltRev: return newCollection(dyn.New(h.sess), collectionName1, drivertest.KeyField, "", &Options{ AllowScans: true, RevisionField: drivertest.AlternateRevisionField, ConsistentRead: true, }) default: panic("bad kind") } } func collectHighScores(ctx context.Context, iter driver.DocumentIterator) ([]*drivertest.HighScore, error) { var hs []*drivertest.HighScore for { var h drivertest.HighScore doc := drivertest.MustDocument(&h) err := iter.Next(ctx, doc) if err == io.EOF { break } if err != nil { return nil, err } hs = append(hs, &h) } return hs, nil } type highScoreSliceIterator struct { hs []*drivertest.HighScore next int } func (it *highScoreSliceIterator) Next(ctx context.Context, doc driver.Document) error { if it.next >= len(it.hs) { return io.EOF } dest, ok := doc.Origin.(*drivertest.HighScore) if !ok { return fmt.Errorf("doc is %T, not HighScore", doc.Origin) } *dest = *it.hs[it.next] it.next++ return nil } func (*highScoreSliceIterator) Stop() {} func (*highScoreSliceIterator) As(interface{}) bool { return false } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) CollectionCheck(coll *docstore.Collection) error { var db *dyn.DynamoDB if !coll.As(&db) { return errors.New("Collection.As failed") } return nil } func (verifyAs) QueryCheck(it *docstore.DocumentIterator) error { var so *dyn.ScanOutput var qo *dyn.QueryOutput if !it.As(&so) && !it.As(&qo) { return errors.New("DocumentIterator.As failed") } return nil } func (v verifyAs) ErrorCheck(k *docstore.Collection, err error) error { var e awserr.Error if !k.ErrorAs(err, &e) { return errors.New("Collection.ErrorAs failed") } return nil } func TestConformance(t *testing.T) { // Note: when running -record repeatedly in a short time period, change the argument // in the call below to generate unique transaction tokens. drivertest.MakeUniqueStringDeterministicForTesting(1) drivertest.RunConformanceTests(t, newHarness, &codecTester{}, []drivertest.AsTest{verifyAs{}}) } func BenchmarkConformance(b *testing.B) { sess := session.Must(session.NewSession(&aws.Config{ Region: aws.String(region), })) coll, err := newCollection(dyn.New(sess), collectionName3, drivertest.KeyField, "", &Options{AllowScans: true}) if err != nil { b.Fatal(err) } drivertest.RunBenchmarks(b, docstore.NewCollection(coll)) } // awsdynamodb-specific tests. func TestQueryErrors(t *testing.T) { // Verify that bad queries return the right errors. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() dc, err := h.MakeCollection(ctx, drivertest.TwoKey) if err != nil { t.Fatal(err) } coll := docstore.NewCollection(dc) defer coll.Close() // Here we are comparing a key field with the wrong type. DynamoDB cares about this // because even though it's a document store and hence schemaless, the key fields // do have a schema (that is, they have known, fixed types). iter := coll.Query().Where("Game", "=", 1).Get(ctx) defer iter.Stop() err = iter.Next(ctx, &h) if c := gcerrors.Code(err); c != gcerrors.InvalidArgument { t.Errorf("got %v (code %s, type %T), want InvalidArgument", err, c, err) } } go-cloud-0.20.0/docstore/awsdynamodb/example_test.go000066400000000000000000000033201367004507500224620ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb_test import ( "context" "log" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/dynamodb" "gocloud.dev/docstore" "gocloud.dev/docstore/awsdynamodb" ) func ExampleOpenCollection() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. sess, err := session.NewSession() if err != nil { log.Fatal(err) } coll, err := awsdynamodb.OpenCollection( dynamodb.New(sess), "docstore-test", "partitionKeyField", "", nil) if err != nil { log.Fatal(err) } defer coll.Close() } func Example_openCollectionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/docstore/awsdynamodb" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // docstore.OpenCollection creates a *docstore.Collection from a URL. coll, err := docstore.OpenCollection(ctx, "dynamodb://my-table?partition_key=name") if err != nil { log.Fatal(err) } defer coll.Close() } go-cloud-0.20.0/docstore/awsdynamodb/query.go000066400000000000000000000460151367004507500211450ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb import ( "bytes" "context" "errors" "fmt" "io" "sort" "strings" "time" "github.com/aws/aws-sdk-go/aws" dyn "github.com/aws/aws-sdk-go/service/dynamodb" "github.com/aws/aws-sdk-go/service/dynamodb/expression" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" ) // TODO: support parallel scans (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html#Scan.ParallelScan) // TODO(jba): support an empty item slice returned from an RPC: "A Query operation can // return an empty result set and a LastEvaluatedKey if all the items read for the // page of results are filtered out." type avmap = map[string]*dyn.AttributeValue func (c *collection) RunGetQuery(ctx context.Context, q *driver.Query) (driver.DocumentIterator, error) { qr, err := c.planQuery(q) if err != nil { if gcerrors.Code(err) == gcerrors.Unimplemented && c.opts.RunQueryFallback != nil { return c.opts.RunQueryFallback(ctx, q, c.RunGetQuery) } return nil, err } if err := c.checkPlan(qr); err != nil { return nil, err } it := &documentIterator{ qr: qr, limit: q.Limit, count: 0, // manually count limit since dynamodb uses "limit" as scan limit before filtering } it.items, it.last, it.asFunc, err = it.qr.run(ctx, nil) if err != nil { return nil, err } return it, nil } func (c *collection) checkPlan(qr *queryRunner) error { if qr.scanIn != nil && qr.scanIn.FilterExpression != nil && !c.opts.AllowScans { return gcerr.Newf(gcerr.InvalidArgument, nil, "query requires a table scan; set Options.AllowScans to true to enable") } return nil } func (c *collection) planQuery(q *driver.Query) (*queryRunner, error) { var cb expression.Builder cbUsed := false // It's an error to build an empty Builder. // Set up the projection expression. if len(q.FieldPaths) > 0 { var pb expression.ProjectionBuilder hasFields := map[string]bool{} for _, fp := range q.FieldPaths { if len(fp) == 1 { hasFields[fp[0]] = true } pb = pb.AddNames(expression.Name(strings.Join(fp, "."))) } // Always include the keys. for _, f := range []string{c.partitionKey, c.sortKey} { if f != "" && !hasFields[f] { pb = pb.AddNames(expression.Name(f)) q.FieldPaths = append(q.FieldPaths, []string{f}) } } cb = cb.WithProjection(pb) cbUsed = true } // Find the best thing to query (table or index). indexName, pkey, skey := c.bestQueryable(q) if indexName == nil && pkey == "" { // No query can be done: fall back to scanning. if q.OrderByField != "" { // Scans are unordered, so we can't run this query. // TODO(jba): If the user specifies all the partition keys, and there is a global // secondary index whose sort key is the order-by field, then we can query that index // for every value of the partition key and merge the results. // TODO(jba): If the query has a reasonable limit N, then we can run a scan and keep // the top N documents in memory. return nil, gcerr.Newf(gcerr.Unimplemented, nil, "query requires a table scan, but has an ordering requirement; add an index or provide Options.RunQueryFallback") } if len(q.Filters) > 0 { cb = cb.WithFilter(filtersToConditionBuilder(q.Filters)) cbUsed = true } in := &dyn.ScanInput{ TableName: &c.table, ConsistentRead: aws.Bool(c.opts.ConsistentRead), } if cbUsed { ce, err := cb.Build() if err != nil { return nil, err } in.ExpressionAttributeNames = ce.Names() in.ExpressionAttributeValues = ce.Values() in.FilterExpression = ce.Filter() in.ProjectionExpression = ce.Projection() } return &queryRunner{c: c, scanIn: in, beforeRun: q.BeforeQuery}, nil } // Do a query. cb = processFilters(cb, q.Filters, pkey, skey) ce, err := cb.Build() if err != nil { return nil, err } qIn := &dyn.QueryInput{ TableName: &c.table, IndexName: indexName, ExpressionAttributeNames: ce.Names(), ExpressionAttributeValues: ce.Values(), KeyConditionExpression: ce.KeyCondition(), FilterExpression: ce.Filter(), ProjectionExpression: ce.Projection(), ConsistentRead: aws.Bool(c.opts.ConsistentRead), } if q.OrderByField != "" && !q.OrderAscending { qIn.ScanIndexForward = &q.OrderAscending } return &queryRunner{ c: c, queryIn: qIn, beforeRun: q.BeforeQuery, }, nil } // Return the best choice of queryable (table or index) for this query. // How to interpret the return values: // - If indexName is nil but pkey is not empty, then use the table. // - If all return values are zero, no query will work: do a scan. func (c *collection) bestQueryable(q *driver.Query) (indexName *string, pkey, skey string) { // If the query has an "=" filter on the table's partition key, look at the table // and local indexes. if hasEqualityFilter(q, c.partitionKey) { // If the table has a sort key that's in the query, and the ordering // constraint works with the sort key, use the table. // (Query results are always ordered by sort key.) if hasFilter(q, c.sortKey) && orderingConsistent(q, c.sortKey) { return nil, c.partitionKey, c.sortKey } // Look at local indexes. They all have the same partition key as the base table. // If one has a sort key in the query, use it. for _, li := range c.description.LocalSecondaryIndexes { pkey, skey := keyAttributes(li.KeySchema) if hasFilter(q, skey) && localFieldsIncluded(q, li) && orderingConsistent(q, skey) { return li.IndexName, pkey, skey } } } // Consider the global indexes: if one has a matching partition and sort key, and // the projected fields of the index include those of the query, use it. for _, gi := range c.description.GlobalSecondaryIndexes { pkey, skey := keyAttributes(gi.KeySchema) if skey == "" { continue // We'll visit global indexes without a sort key later. } if hasEqualityFilter(q, pkey) && hasFilter(q, skey) && c.globalFieldsIncluded(q, gi) && orderingConsistent(q, skey) { return gi.IndexName, pkey, skey } } // There are no matches for both partition and sort key. Now consider matches on partition key only. // That will still be better than a scan. // First, check the table itself. if hasEqualityFilter(q, c.partitionKey) && orderingConsistent(q, c.sortKey) { return nil, c.partitionKey, c.sortKey } // No point checking local indexes: they have the same partition key as the table. // Check the global indexes. for _, gi := range c.description.GlobalSecondaryIndexes { pkey, skey := keyAttributes(gi.KeySchema) if hasEqualityFilter(q, pkey) && c.globalFieldsIncluded(q, gi) && orderingConsistent(q, skey) { return gi.IndexName, pkey, skey } } // We cannot do a query. // TODO: return the reason why we couldn't. At a minimum, distinguish failure due to keys // from failure due to projection (i.e. a global index had the right partition and sort key, // but didn't project the necessary fields). return nil, "", "" } // localFieldsIncluded reports whether a local index supports all the selected fields // of a query. Since DynamoDB will read explicitly provided fields from the table if // they are not projected into the index, the only case where a local index cannot // be used is when the query wants all the fields, and the index projection is not ALL. // See https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html#LSI.Projections. func localFieldsIncluded(q *driver.Query, li *dyn.LocalSecondaryIndexDescription) bool { return len(q.FieldPaths) > 0 || *li.Projection.ProjectionType == "ALL" } // orderingConsistent reports whether the ordering constraint is consistent with the sort key field. // That is, either there is no OrderBy clause, or the clause specifies the sort field. func orderingConsistent(q *driver.Query, sortField string) bool { return q.OrderByField == "" || q.OrderByField == sortField } // globalFieldsIncluded reports whether the fields selected by the query are // projected into (that is, contained directly in) the global index. We need this // check before using the index, because if a global index doesn't have all the // desired fields, then a separate RPC for each returned item would be necessary to // retrieve those fields, and we'd rather scan than do that. func (c *collection) globalFieldsIncluded(q *driver.Query, gi *dyn.GlobalSecondaryIndexDescription) bool { proj := gi.Projection if *proj.ProjectionType == "ALL" { // The index has all the fields of the table: we're good. return true } if len(q.FieldPaths) == 0 { // The query wants all the fields of the table, but we can't be sure that the // index has them. return false } // The table's keys and the index's keys are always in the index. pkey, skey := keyAttributes(gi.KeySchema) indexFields := map[string]bool{c.partitionKey: true, pkey: true} if c.sortKey != "" { indexFields[c.sortKey] = true } if skey != "" { indexFields[skey] = true } for _, nka := range proj.NonKeyAttributes { indexFields[*nka] = true } // Every field path in the query must be in the index. for _, fp := range q.FieldPaths { if !indexFields[strings.Join(fp, ".")] { return false } } return true } // Extract the names of the partition and sort key attributes from the schema of a // table or index. func keyAttributes(ks []*dyn.KeySchemaElement) (pkey, skey string) { for _, k := range ks { switch *k.KeyType { case "HASH": pkey = *k.AttributeName case "RANGE": skey = *k.AttributeName default: panic("bad key type: " + *k.KeyType) } } return pkey, skey } // Reports whether q has a filter that mentions the top-level field. func hasFilter(q *driver.Query, field string) bool { if field == "" { return false } for _, f := range q.Filters { if driver.FieldPathEqualsField(f.FieldPath, field) { return true } } return false } // Reports whether q has a filter that checks if the top-level field is equal to something. func hasEqualityFilter(q *driver.Query, field string) bool { for _, f := range q.Filters { if f.Op == driver.EqualOp && driver.FieldPathEqualsField(f.FieldPath, field) { return true } } return false } type queryRunner struct { c *collection scanIn *dyn.ScanInput queryIn *dyn.QueryInput beforeRun func(asFunc func(i interface{}) bool) error } func (qr *queryRunner) run(ctx context.Context, startAfter avmap) (items []avmap, last avmap, asFunc func(i interface{}) bool, err error) { if qr.scanIn != nil { qr.scanIn.ExclusiveStartKey = startAfter if qr.beforeRun != nil { asFunc := func(i interface{}) bool { p, ok := i.(**dyn.ScanInput) if !ok { return false } *p = qr.scanIn return true } if err := qr.beforeRun(asFunc); err != nil { return nil, nil, nil, err } } out, err := qr.c.db.ScanWithContext(ctx, qr.scanIn) if err != nil { return nil, nil, nil, err } return out.Items, out.LastEvaluatedKey, func(i interface{}) bool { p, ok := i.(**dyn.ScanOutput) if !ok { return false } *p = out return true }, nil } qr.queryIn.ExclusiveStartKey = startAfter if qr.beforeRun != nil { asFunc := func(i interface{}) bool { p, ok := i.(**dyn.QueryInput) if !ok { return false } *p = qr.queryIn return true } if err := qr.beforeRun(asFunc); err != nil { return nil, nil, nil, err } } out, err := qr.c.db.QueryWithContext(ctx, qr.queryIn) if err != nil { return nil, nil, nil, err } return out.Items, out.LastEvaluatedKey, func(i interface{}) bool { p, ok := i.(**dyn.QueryOutput) if !ok { return false } *p = out return true }, nil } func processFilters(cb expression.Builder, fs []driver.Filter, pkey, skey string) expression.Builder { var kbs []expression.KeyConditionBuilder var cfs []driver.Filter for _, f := range fs { if kb, ok := toKeyCondition(f, pkey, skey); ok { kbs = append(kbs, kb) continue } cfs = append(cfs, f) } keyBuilder := kbs[0] for i := 1; i < len(kbs); i++ { keyBuilder = keyBuilder.And(kbs[i]) } cb = cb.WithKeyCondition(keyBuilder) if len(cfs) > 0 { cb = cb.WithFilter(filtersToConditionBuilder(cfs)) } return cb } func filtersToConditionBuilder(fs []driver.Filter) expression.ConditionBuilder { if len(fs) == 0 { panic("no filters") } var cb expression.ConditionBuilder cb = toFilter(fs[0]) for _, f := range fs[1:] { cb = cb.And(toFilter(f)) } return cb } func toKeyCondition(f driver.Filter, pkey, skey string) (expression.KeyConditionBuilder, bool) { kp := strings.Join(f.FieldPath, ".") if kp == pkey || kp == skey { key := expression.Key(kp) val := expression.Value(f.Value) switch f.Op { case "<": return expression.KeyLessThan(key, val), true case "<=": return expression.KeyLessThanEqual(key, val), true case driver.EqualOp: return expression.KeyEqual(key, val), true case ">=": return expression.KeyGreaterThanEqual(key, val), true case ">": return expression.KeyGreaterThan(key, val), true default: panic(fmt.Sprint("invalid filter operation:", f.Op)) } } return expression.KeyConditionBuilder{}, false } func toFilter(f driver.Filter) expression.ConditionBuilder { name := expression.Name(strings.Join(f.FieldPath, ".")) val := expression.Value(f.Value) switch f.Op { case "<": return expression.LessThan(name, val) case "<=": return expression.LessThanEqual(name, val) case driver.EqualOp: return expression.Equal(name, val) case ">=": return expression.GreaterThanEqual(name, val) case ">": return expression.GreaterThan(name, val) default: panic(fmt.Sprint("invalid filter operation:", f.Op)) } } type documentIterator struct { qr *queryRunner items []map[string]*dyn.AttributeValue curr int limit int count int // number of items returned last map[string]*dyn.AttributeValue asFunc func(i interface{}) bool } func (it *documentIterator) Next(ctx context.Context, doc driver.Document) error { if it.limit > 0 && it.count >= it.limit || it.curr >= len(it.items) && it.last == nil { return io.EOF } if it.curr >= len(it.items) { // Make a new query request at the end of this page. var err error it.items, it.last, it.asFunc, err = it.qr.run(ctx, it.last) if err != nil { return err } it.curr = 0 } if err := decodeDoc(&dyn.AttributeValue{M: it.items[it.curr]}, doc); err != nil { return err } it.curr++ it.count++ return nil } func (it *documentIterator) Stop() { it.items = nil it.last = nil } func (it *documentIterator) As(i interface{}) bool { return it.asFunc(i) } func (c *collection) QueryPlan(q *driver.Query) (string, error) { qr, err := c.planQuery(q) if err != nil { return "", err } return qr.queryPlan(), nil } func (qr *queryRunner) queryPlan() string { if qr.scanIn != nil { return "Scan" } if qr.queryIn.IndexName != nil { return fmt.Sprintf("Index: %q", *qr.queryIn.IndexName) } return "Table" } // InMemorySortFallback returns a query fallback function for Options.RunQueryFallback. // The function accepts a query with an OrderBy clause. It runs the query without that clause, // reading all documents into memory, then sorts the documents according to the OrderBy clause. // // Only string, numeric, time and binary ([]byte) fields can be sorted. // // createDocument should create an empty document to be passed to DocumentIterator.Next. // The DocumentIterator returned by the FallbackFunc will also expect the same type of document. // If nil, then a map[string]interface{} will be used. func InMemorySortFallback(createDocument func() interface{}) FallbackFunc { if createDocument == nil { createDocument = func() interface{} { return map[string]interface{}{} } } return func(ctx context.Context, q *driver.Query, run RunQueryFunc) (driver.DocumentIterator, error) { if q.OrderByField == "" { return nil, errors.New("InMemorySortFallback expects an OrderBy query") } // Run the query without the OrderBy. orderByField := q.OrderByField q.OrderByField = "" iter, err := run(ctx, q) if err != nil { return nil, err } defer iter.Stop() // Collect the results into a slice. var docs []driver.Document for { doc, err := driver.NewDocument(createDocument()) if err != nil { return nil, err } err = iter.Next(ctx, doc) if err == io.EOF { break } if err != nil { return nil, err } docs = append(docs, doc) } // Sort the documents. // OrderByField is a single field, not a field path. // First, put the field values in another slice, so we can // return on error. sortValues := make([]interface{}, len(docs)) for i, doc := range docs { v, err := doc.GetField(orderByField) if err != nil { return nil, err } sortValues[i] = v } sort.Sort(docsForSorting{docs, sortValues, q.OrderAscending}) return &sliceIterator{docs: docs}, nil } } type docsForSorting struct { docs []driver.Document vals []interface{} ascending bool } func (d docsForSorting) Len() int { return len(d.docs) } func (d docsForSorting) Swap(i, j int) { d.docs[i], d.docs[j] = d.docs[j], d.docs[i] d.vals[i], d.vals[j] = d.vals[j], d.vals[i] } func (d docsForSorting) Less(i, j int) bool { c := compare(d.vals[i], d.vals[j]) if d.ascending { return c < 0 } else { return c > 0 } } // compare returns -1 if v1 < v2, 0 if v1 == v2 and 1 if v1 > v2. // // Arbitrarily decide that strings < times < []byte < numbers. // TODO(jba): find and use the actual sort order that DynamoDB uses. func compare(v1, v2 interface{}) int { switch v1 := v1.(type) { case string: if v2, ok := v2.(string); ok { return strings.Compare(v1, v2) } return -1 case time.Time: if v2, ok := v2.(time.Time); ok { return driver.CompareTimes(v1, v2) } if _, ok := v2.(string); ok { return 1 } return -1 case []byte: if v2, ok := v2.([]byte); ok { return bytes.Compare(v1, v2) } if _, ok := v2.(string); ok { return 1 } if _, ok := v2.(time.Time); ok { return 1 } return -1 default: cmp, err := driver.CompareNumbers(v1, v2) if err != nil { return -1 } return cmp } } type sliceIterator struct { docs []driver.Document next int } func (it *sliceIterator) Next(ctx context.Context, doc driver.Document) error { if it.next >= len(it.docs) { return io.EOF } it.next++ return copyTopLevel(doc, it.docs[it.next-1]) } // Copy the top-level fields of src into dest. func copyTopLevel(dest, src driver.Document) error { for _, f := range src.FieldNames() { v, err := src.GetField(f) if err != nil { return err } if err := dest.SetField(f, v); err != nil { return err } } return nil } func (*sliceIterator) Stop() {} func (*sliceIterator) As(interface{}) bool { return false } go-cloud-0.20.0/docstore/awsdynamodb/query_test.go000066400000000000000000000444741367004507500222130ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb import ( "fmt" "strings" "testing" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/dynamodb" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "gocloud.dev/docstore/driver" "gocloud.dev/docstore/drivertest" ) func TestPlanQuery(t *testing.T) { c := &collection{ table: "T", partitionKey: "tableP", description: &dynamodb.TableDescription{}, opts: &Options{AllowScans: true, RevisionField: "rev"}, } // Build an ExpressionAttributeNames map with the given names. eans := func(names ...string) map[string]*string { m := map[string]*string{} for i, n := range names { m[fmt.Sprintf("#%d", i)] = aws.String(n) } return m } // Build an ExpressionAttributeValues map. Filter values are always the number 1 // and the keys are always :0, :1, ..., so we only need to know how many entries. eavs := func(n int) map[string]*dynamodb.AttributeValue { if n == 0 { return nil } one := new(dynamodb.AttributeValue).SetN("1") m := map[string]*dynamodb.AttributeValue{} for i := 0; i < n; i++ { m[fmt.Sprintf(":%d", i)] = one } return m } // Ignores the ConsistentRead field from both QueryInput and ScanInput. opts := []cmp.Option{ cmpopts.IgnoreFields(dynamodb.ScanInput{}, "ConsistentRead"), cmpopts.IgnoreFields(dynamodb.QueryInput{}, "ConsistentRead"), } for _, test := range []struct { desc string // In all cases, the table has a partition key called "tableP". tableSortKey string // if non-empty, the table sort key localIndexSortKey string // if non-empty, there is a local index with this sort key localIndexFields []string // the fields projected into the local index globalIndexPartitionKey string // if non-empty, there is a global index with this partition key globalIndexSortKey string // if non-empty, the global index has this sort key globalIndexFields []string // the fields projected into the global index query *driver.Query want interface{} // either a ScanInput or a QueryInput wantPlan string }{ { desc: "empty query", // A query with no filters requires a scan. query: &driver.Query{}, want: &dynamodb.ScanInput{TableName: &c.table}, wantPlan: "Scan", }, { desc: "equality filter on table partition field", // A filter that compares the table's partition key for equality is the minimum // requirement for querying the table. query: &driver.Query{Filters: []driver.Filter{{[]string{"tableP"}, "=", 1}}}, want: &dynamodb.QueryInput{ KeyConditionExpression: aws.String("#0 = :0"), ExpressionAttributeNames: eans("tableP"), ExpressionAttributeValues: eavs(1), }, wantPlan: "Table", }, { desc: "equality filter on table partition field (sort key)", // Same as above, but the table has a sort key; shouldn't make a difference. tableSortKey: "tableS", query: &driver.Query{Filters: []driver.Filter{{[]string{"tableP"}, "=", 1}}}, want: &dynamodb.QueryInput{ KeyConditionExpression: aws.String("#0 = :0"), ExpressionAttributeNames: eans("tableP"), ExpressionAttributeValues: eavs(1), }, wantPlan: "Table", }, { desc: "equality filter on other field", // This query has an equality filter, but not on the table's partition key. // Since there are no matching indexes, we must scan. query: &driver.Query{Filters: []driver.Filter{{[]string{"other"}, "=", 1}}}, want: &dynamodb.ScanInput{ FilterExpression: aws.String("#0 = :0"), ExpressionAttributeNames: eans("other"), ExpressionAttributeValues: eavs(1), }, wantPlan: "Scan", }, { desc: "non-equality filter on table partition field", // If the query doesn't have an equality filter on the partition key, and there // are no indexes, we must scan. The filter becomes a FilterExpression, evaluated // on the backend. query: &driver.Query{Filters: []driver.Filter{{[]string{"tableP"}, ">", 1}}}, want: &dynamodb.ScanInput{ FilterExpression: aws.String("#0 > :0"), ExpressionAttributeNames: eans("tableP"), ExpressionAttributeValues: eavs(1), }, wantPlan: "Scan", }, { desc: "equality filter on partition, filter on other", // The equality filter on the table's partition key lets us query the table. // The other filter is used in the filter expression. query: &driver.Query{Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"other"}, "<=", 1}, }}, want: &dynamodb.QueryInput{ KeyConditionExpression: aws.String("#1 = :1"), FilterExpression: aws.String("#0 <= :0"), ExpressionAttributeNames: eans("other", "tableP"), ExpressionAttributeValues: eavs(2), }, wantPlan: "Table", }, { desc: "equality filter on partition, filter on sort", // If the table has a sort key and the query has a filter on it as well // as an equality filter on the table's partition key, we can query the // table. tableSortKey: "tableS", query: &driver.Query{Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"tableS"}, "<=", 1}, }}, want: &dynamodb.QueryInput{ KeyConditionExpression: aws.String("(#0 = :0) AND (#1 <= :1)"), ExpressionAttributeNames: eans("tableP", "tableS"), ExpressionAttributeValues: eavs(2), }, wantPlan: "Table", }, { desc: "equality filter on table partition, filter on local index sort", // The equality filter on the table's partition key allows us to query // the table, but there is a better choice: a local index with a sort key // that is mentioned in the query. localIndexSortKey: "localS", query: &driver.Query{Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"localS"}, "<=", 1}, }}, want: &dynamodb.QueryInput{ IndexName: aws.String("local"), KeyConditionExpression: aws.String("(#0 = :0) AND (#1 <= :1)"), ExpressionAttributeNames: eans("tableP", "localS"), }, wantPlan: `Index: "local"`, }, { desc: "equality filter on table partition, filter on local index sort, bad projection", // The equality filter on the table's partition key allows us to query // the table. There seems to be a better choice: a local index with a sort key // that is mentioned in the query. But the query wants the entire document, // and the local index only has some fields. localIndexSortKey: "localS", localIndexFields: []string{}, // keys only query: &driver.Query{Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"localS"}, "<=", 1}, }}, want: &dynamodb.QueryInput{ KeyConditionExpression: aws.String("#1 = :1"), FilterExpression: aws.String("#0 <= :0"), ExpressionAttributeNames: eans("localS", "tableP"), }, wantPlan: "Table", }, { desc: "equality filter on table partition, filter on local index sort, good projection", // Same as above, but now the query no longer asks for all fields, so // we will only read the requested fields from the table. localIndexSortKey: "localS", localIndexFields: []string{}, // keys only query: &driver.Query{ FieldPaths: [][]string{{"tableP"}, {"localS"}}, Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"localS"}, "<=", 1}, }}, want: &dynamodb.QueryInput{ IndexName: aws.String("local"), KeyConditionExpression: aws.String("(#0 = :0) AND (#1 <= :1)"), ExpressionAttributeNames: eans("tableP", "localS"), ExpressionAttributeValues: eavs(2), ProjectionExpression: aws.String("#0, #1"), }, wantPlan: `Index: "local"`, }, { desc: "equality filter on table partition, filters on local index and table sort", // Given the choice of querying the table or a local index, prefer the table. tableSortKey: "tableS", localIndexSortKey: "localS", query: &driver.Query{Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"localS"}, "<=", 1}, {[]string{"tableS"}, ">", 1}, }}, want: &dynamodb.QueryInput{ IndexName: nil, KeyConditionExpression: aws.String("(#1 = :1) AND (#2 > :2)"), FilterExpression: aws.String("#0 <= :0"), ExpressionAttributeNames: eans("localS", "tableP", "tableS"), }, wantPlan: "Table", }, { desc: "equality filter on other field with index", // The query is the same as in "equality filter on other field," but now there // is a global index with that field as partition key, so we can query it. globalIndexPartitionKey: "other", query: &driver.Query{Filters: []driver.Filter{{[]string{"other"}, "=", 1}}}, want: &dynamodb.QueryInput{ IndexName: aws.String("global"), KeyConditionExpression: aws.String("#0 = :0"), ExpressionAttributeNames: eans("other"), }, wantPlan: `Index: "global"`, }, { desc: "equality filter on table partition, filter on global index sort", // The equality filter on the table's partition key allows us to query // the table, but there is a better choice: a global index with the same // partition key and a sort key that is mentioned in the query. // (In these tests, the global index has all the fields of the table by default.) globalIndexPartitionKey: "tableP", globalIndexSortKey: "globalS", query: &driver.Query{Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"globalS"}, "<=", 1}, }}, want: &dynamodb.QueryInput{ IndexName: aws.String("global"), KeyConditionExpression: aws.String("(#0 = :0) AND (#1 <= :1)"), ExpressionAttributeNames: eans("tableP", "globalS"), }, wantPlan: `Index: "global"`, }, { desc: "equality filter on table partition, filter on global index sort, bad projection", // Although there is a global index that matches the filters best, it doesn't // have the necessary fields. So we query against the table. // The query does not specify FilterPaths, so it retrieves the entire document. // globalIndexFields explicitly lists the fields that the global index has. // Since the global index does not have all the document fields, it can't be used. globalIndexPartitionKey: "tableP", globalIndexSortKey: "globalS", globalIndexFields: []string{"other"}, query: &driver.Query{Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"globalS"}, "<=", 1}, }}, want: &dynamodb.QueryInput{ IndexName: nil, KeyConditionExpression: aws.String("#1 = :1"), FilterExpression: aws.String("#0 <= :0"), ExpressionAttributeNames: eans("globalS", "tableP"), }, wantPlan: "Table", }, { desc: "equality filter on table partition, filter on global index sort, good projection", // The global index matches the filters best and has the necessary // fields. So we query against it. globalIndexPartitionKey: "tableP", globalIndexSortKey: "globalS", globalIndexFields: []string{"other", "rev"}, query: &driver.Query{ FieldPaths: [][]string{{"other"}}, Filters: []driver.Filter{ {[]string{"tableP"}, "=", 1}, {[]string{"globalS"}, "<=", 1}, }}, want: &dynamodb.QueryInput{ IndexName: aws.String("global"), KeyConditionExpression: aws.String("(#0 = :0) AND (#1 <= :1)"), ProjectionExpression: aws.String("#2, #0"), ExpressionAttributeNames: eans("tableP", "globalS", "other"), ExpressionAttributeValues: eavs(2), }, wantPlan: `Index: "global"`, }, } { t.Run(test.desc, func(t *testing.T) { c.sortKey = test.tableSortKey if test.localIndexSortKey == "" { c.description.LocalSecondaryIndexes = nil } else { c.description.LocalSecondaryIndexes = []*dynamodb.LocalSecondaryIndexDescription{ { IndexName: aws.String("local"), KeySchema: keySchema("tableP", test.localIndexSortKey), Projection: indexProjection(test.localIndexFields), }, } } if test.globalIndexPartitionKey == "" { c.description.GlobalSecondaryIndexes = nil } else { c.description.GlobalSecondaryIndexes = []*dynamodb.GlobalSecondaryIndexDescription{ { IndexName: aws.String("global"), KeySchema: keySchema(test.globalIndexPartitionKey, test.globalIndexSortKey), Projection: indexProjection(test.globalIndexFields), }, } } gotRunner, err := c.planQuery(test.query) if err != nil { t.Fatal(err) } var got interface{} switch tw := test.want.(type) { case *dynamodb.ScanInput: got = gotRunner.scanIn tw.TableName = &c.table if tw.ExpressionAttributeValues == nil { tw.ExpressionAttributeValues = eavs(len(tw.ExpressionAttributeNames)) } case *dynamodb.QueryInput: got = gotRunner.queryIn tw.TableName = &c.table if tw.ExpressionAttributeValues == nil { tw.ExpressionAttributeValues = eavs(len(tw.ExpressionAttributeNames)) } default: t.Fatalf("bad type for test.want: %T", test.want) } if diff := cmp.Diff(got, test.want, opts...); diff != "" { t.Error("input:\n", diff) } gotPlan := gotRunner.queryPlan() if diff := cmp.Diff(gotPlan, test.wantPlan); diff != "" { t.Error("plan:\n", diff) } }) } } func TestQueryNoScans(t *testing.T) { c := &collection{ table: "T", partitionKey: "tableP", description: &dynamodb.TableDescription{}, opts: &Options{AllowScans: false}, } for _, test := range []struct { q *driver.Query wantErr bool }{ {&driver.Query{}, false}, {&driver.Query{Filters: []driver.Filter{{[]string{"other"}, "=", 1}}}, true}, } { qr, err := c.planQuery(test.q) if err != nil { t.Fatalf("%v: %v", test.q, err) } err = c.checkPlan(qr) if test.wantErr { if err == nil || !strings.Contains(err.Error(), "AllowScans") { t.Errorf("%v: got %v, want an error that mentions the AllowScans option", test.q, err) } } else if err != nil { t.Errorf("%v: got %v, want nil", test.q, err) } } } // Make a key schema from the names of the partition and sort keys. func keySchema(pkey, skey string) []*dynamodb.KeySchemaElement { return []*dynamodb.KeySchemaElement{ {AttributeName: &pkey, KeyType: aws.String("HASH")}, {AttributeName: &skey, KeyType: aws.String("RANGE")}, } } func indexProjection(fields []string) *dynamodb.Projection { var ptype string switch { case fields == nil: ptype = "ALL" case len(fields) == 0: ptype = "KEYS_ONLY" default: ptype = "INCLUDE" } proj := &dynamodb.Projection{ProjectionType: &ptype} for _, f := range fields { f := f proj.NonKeyAttributes = append(proj.NonKeyAttributes, &f) } return proj } func TestGlobalFieldsIncluded(t *testing.T) { c := &collection{partitionKey: "tableP", sortKey: "tableS"} gi := &dynamodb.GlobalSecondaryIndexDescription{ KeySchema: keySchema("globalP", "globalS"), } for _, test := range []struct { desc string queryFields []string wantKeysOnly bool // when the projection includes only table and index keys wantInclude bool // when the projection includes fields "f" and "g". }{ { desc: "all", queryFields: nil, wantKeysOnly: false, wantInclude: false, }, { desc: "key fields", queryFields: []string{"tableS", "globalP"}, wantKeysOnly: true, wantInclude: true, }, { desc: "included fields", queryFields: []string{"f", "g"}, wantKeysOnly: false, wantInclude: true, }, { desc: "included and key fields", queryFields: []string{"f", "g", "tableP", "globalS"}, wantKeysOnly: false, wantInclude: true, }, { desc: "not included field", queryFields: []string{"f", "g", "h"}, wantKeysOnly: false, wantInclude: false, }, } { t.Run(test.desc, func(t *testing.T) { var fps [][]string for _, qf := range test.queryFields { fps = append(fps, strings.Split(qf, ".")) } q := &driver.Query{FieldPaths: fps} for _, p := range []struct { name string proj *dynamodb.Projection want bool }{ {"ALL", indexProjection(nil), true}, {"KEYS_ONLY", indexProjection([]string{}), test.wantKeysOnly}, {"INCLUDE", indexProjection([]string{"f", "g"}), test.wantInclude}, } { t.Run(p.name, func(t *testing.T) { gi.Projection = p.proj got := c.globalFieldsIncluded(q, gi) if got != p.want { t.Errorf("got %t, want %t", got, p.want) } }) } }) } } func TestCompare(t *testing.T) { tm := time.Now() for _, test := range []struct { a, b interface{} want int }{ {1, 1, 0}, {1, 2, -1}, {2, 1, 1}, {1.5, 2, -1}, {2.5, 2.1, 1}, {3.8, 3.8, 0}, {"x", "x", 0}, {"x", "xx", -1}, {"x", "a", 1}, {tm, tm, 0}, {tm, tm.Add(1), -1}, {tm, tm.Add(-1), 1}, {[]byte("x"), []byte("x"), 0}, {[]byte("x"), []byte("xx"), -1}, {[]byte("x"), []byte("a"), 1}, } { got := compare(test.a, test.b) if got != test.want { t.Errorf("compare(%v, %v) = %d, want %d", test.a, test.b, got, test.want) } } } func TestCopyTopLevel(t *testing.T) { type E struct{ C int } type S struct { A int B int E } s := &S{A: 1, B: 2, E: E{C: 3}} m := map[string]interface{}{"A": 1, "B": 2, "C": 3} for _, test := range []struct { dest, src interface{} want interface{} }{ { dest: map[string]interface{}{}, src: m, want: m, }, { dest: &S{}, src: s, want: s, }, { dest: map[string]interface{}{}, src: s, want: m, }, { dest: &S{}, src: m, want: s, }, } { dest := drivertest.MustDocument(test.dest) src := drivertest.MustDocument(test.src) if err := copyTopLevel(dest, src); err != nil { t.Fatalf("src=%+v: %v", test.src, err) } if !cmp.Equal(test.dest, test.want) { t.Errorf("src=%+v: got %v, want %v", test.src, test.dest, test.want) } } } go-cloud-0.20.0/docstore/awsdynamodb/testdata/000077500000000000000000000000001367004507500212545ustar00rootroot00000000000000go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/000077500000000000000000000000001367004507500243465ustar00rootroot00000000000000go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/ActionsOnStructNoRev.replay000066400000000000000000000357561367004507500316600ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNcGvQa7v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "c5a85fe7cbe340cc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "9N5HFKB8U97LBTDQS4OEIJJJMRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "ac262b15f6319681", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "155" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "761567374" ], "X-Amzn-Requestid": [ "4C16BV9I9EOFEFQTELE2PBVRC7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MSwiSXRlbXMiOlt7Im5hbWUiOnsiUyI6InRlc3RTZXJpYWxpemVSZXZpc2lvbiJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5MGU1YzQxNS00ZTQxLTQ3YmMtODE2MC0wOTk4NDQ0Y2I5NmMifSwieCI6eyJOIjoiMSJ9fV0sIlNjYW5uZWRDb3VudCI6MX0=" } }, { "ID": "ef1594408fcddf88", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "241" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiOTBlNWM0MTUtNGU0MS00N2JjLTgxNjAtMDk5ODQ0NGNiOTZjIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFNlcmlhbGl6ZVJldmlzaW9uIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "R88MCDBEP2AK4FURJE2J982SHRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "7d269e1fcb098650", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "177" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJJIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6ImNyZWF0ZWFuZHJlcGxhY2UifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FC7AEEC4RGLBL1UKVLL0DUM4INVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "167df5add3088503", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "82" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkkiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoicHV0YW5kdXBkYXRlIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "K7UJSTHBQAT060KTDBDB94FRCVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b3d634c62b89421d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJjcmVhdGVhbmRyZXBsYWNlIn19LHsibmFtZSI6eyJTIjoicHV0YW5kdXBkYXRlIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "148" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:49 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1437423900" ], "X-Amzn-Requestid": [ "LA2K9L6RMSLUEG9Q584UNQTDI7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJJIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InB1dGFuZHVwZGF0ZSJ9fSx7IkkiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoiY3JlYXRlYW5kcmVwbGFjZSJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "8a7734bad4b9a96e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "173" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJJdGVtIjp7IkkiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoiY3JlYXRlYW5kcmVwbGFjZSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:49 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PSVMSOEB1MN27IKC7LJBU7MLUFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f2b1be0c22d9e785", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "243" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiSSJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7Ik4iOiIxIn19LCJLZXkiOnsibmFtZSI6eyJTIjoicHV0YW5kdXBkYXRlIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiU0VUICMxID0gOjBcbiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:49 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "2FEN7551AL3C8DBGNPCSP4SMORVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "67cb8eae8143beaa", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJFeHByZXNzaW9uQXR0cmlidXRlTmFtZXMiOnsiIzAiOiJJIiwiIzEiOiJuYW1lIn0sIktleXMiOlt7Im5hbWUiOnsiUyI6ImNyZWF0ZWFuZHJlcGxhY2UifX0seyJuYW1lIjp7IlMiOiJwdXRhbmR1cGRhdGUifX1dLCJQcm9qZWN0aW9uRXhwcmVzc2lvbiI6IiMwLCAjMSJ9fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "148" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:49 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1494456817" ], "X-Amzn-Requestid": [ "JDTNKO896IKOL96AEHI14GR75JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJJIjp7Ik4iOiIxIn0sIm5hbWUiOnsiUyI6InB1dGFuZHVwZGF0ZSJ9fSx7IkkiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoiY3JlYXRlYW5kcmVwbGFjZSJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/ActionsWithCompositeID.replay000066400000000000000000000613351367004507500321300ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNdFB6Jev5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "32388e62960f6a29", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1407" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:49 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "856804657" ], "X-Amzn-Requestid": [ "J19LRPB1TQCF4GBUVUEM0JHU1RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6IkdhbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9LHsiQXR0cmlidXRlTmFtZSI6IlBsYXllciIsIkF0dHJpYnV0ZVR5cGUiOiJTIn0seyJBdHRyaWJ1dGVOYW1lIjoiU2NvcmUiLCJBdHRyaWJ1dGVUeXBlIjoiTiJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDc5MTY0NjFFOSwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyI6W3siSW5kZXhBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yL2luZGV4L2dsb2JhbCIsIkluZGV4TmFtZSI6Imdsb2JhbCIsIkluZGV4U2l6ZUJ5dGVzIjoxMDcsIkluZGV4U3RhdHVzIjoiQUNUSVZFIiwiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJQbGF5ZXIiLCJLZXlUeXBlIjoiSEFTSCJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJLZXlUeXBlIjoiUkFOR0UifV0sIlByb2plY3Rpb24iOnsiUHJvamVjdGlvblR5cGUiOiJBTEwifSwiUHJvdmlzaW9uZWRUaHJvdWdocHV0Ijp7Ik51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9fV0sIkl0ZW1Db3VudCI6MSwiS2V5U2NoZW1hIjpbeyJBdHRyaWJ1dGVOYW1lIjoiR2FtZSIsIktleVR5cGUiOiJIQVNIIn0seyJBdHRyaWJ1dGVOYW1lIjoiUGxheWVyIiwiS2V5VHlwZSI6IlJBTkdFIn1dLCJMb2NhbFNlY29uZGFyeUluZGV4ZXMiOlt7IkluZGV4QXJuIjoiYXJuOmF3czpkeW5hbW9kYjp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOnRhYmxlL2RvY3N0b3JlLXRlc3QtMi9pbmRleC9sb2NhbCIsIkluZGV4TmFtZSI6ImxvY2FsIiwiSW5kZXhTaXplQnl0ZXMiOjEwNywiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJHYW1lIiwiS2V5VHlwZSI6IkhBU0gifSx7IkF0dHJpYnV0ZU5hbWUiOiJTY29yZSIsIktleVR5cGUiOiJSQU5HRSJ9XSwiUHJvamVjdGlvbiI6eyJQcm9qZWN0aW9uVHlwZSI6IkFMTCJ9fV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJOdW1iZXJPZkRlY3JlYXNlc1RvZGF5IjowLCJSZWFkQ2FwYWNpdHlVbml0cyI6NSwiV3JpdGVDYXBhY2l0eVVuaXRzIjo1fSwiVGFibGVBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yIiwiVGFibGVJZCI6IjVjNGM2MDE0LTdlNmEtNGRiNy05M2RlLWExNzQ1NTJjZjc4ZCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiIsIlRhYmxlU2l6ZUJ5dGVzIjoxMDcsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "ff1f98c2ccbd9167", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "54" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "207" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:49 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2936345782" ], "X-Amzn-Requestid": [ "BVJUFN9O2S64AKSL92JPMR5M83VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MSwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMjVUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoic3RlcGgifSwiU2NvcmUiOnsiTiI6IjI0In0sIkdhbWUiOnsiUyI6IkRheXMgR29uZSJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI1NGRhODMzZC0wODdhLTRkNGQtYWJjNC03YzE5MWNlNTRmMGUifX1dLCJTY2FubmVkQ291bnQiOjF9" } }, { "ID": "cb7eb1587e1ff13f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "252" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNTRkYTgzM2QtMDg3YS00ZDRkLWFiYzQtN2MxOTFjZTU0ZjBlIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiRGF5cyBHb25lIn0sIlBsYXllciI6eyJTIjoic3RlcGgifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:49 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "A9DLE1F0CL1P31DRFTFIJ7RB4FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "de190b973c5827c6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "324" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5MzBhZDBkZi02MzM0LTQwMzktYjU0Ni02MzZlMDMzOTc3ODkifSwiR2FtZSI6eyJTIjoiZjNiNDY5YzYtMTlmMS00YzQ4LWE3ODYtMWM0OGViMDlmYzk3In0sIlBsYXllciI6eyJOVUxMIjp0cnVlfSwiU2NvcmUiOnsiTiI6IjAifSwiVGltZSI6eyJTIjoiMDAwMS0wMS0wMVQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "167" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:49 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2041333382" ], "X-Amzn-Requestid": [ "LQ17Q1THK7QK1CESDRI258ACK7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uLmNvcmFsLnZhbGlkYXRlI1ZhbGlkYXRpb25FeGNlcHRpb24iLCJtZXNzYWdlIjoiT25lIG9yIG1vcmUgcGFyYW1ldGVyIHZhbHVlcyB3ZXJlIGludmFsaWQ6IFR5cGUgbWlzbWF0Y2ggZm9yIGtleSBQbGF5ZXIgZXhwZWN0ZWQ6IFMgYWN0dWFsOiBOVUxMIn0=" } }, { "ID": "3707d819eefc9592", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImRlOTNhNGQ0LWVmZTEtNDVkZi1hNzY3LTVlYzI5ZjlmNjI3NyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJUaW1lIjp7IlMiOiIyMDE5LTAzLTEzVDAwOjAwOjAwWiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "BOVNAE6PPKIIHRS6VEQG3SN7KJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ab75d88d72433318", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "207" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImEyNzVmM2NkLTJjZTMtNGI1My1hMzA5LTk0MDc5N2MwYWViMCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoiZnJhbiJ9LCJTY29yZSI6eyJOIjoiMzMifSwiVGltZSI6eyJTIjoiMjAxOS0wMy0yMFQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "TJEG61HBNOEF4U3J7AEJESHP0RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "7d00e969a9959e9a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "207" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ2YzkyMDE2LTFjMDctNDhlYy1hOWVhLTk3OGU1ZjIxZTExZCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiVGltZSI6eyJTIjoiMjAxOS0wNC0wMVQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "O2OOSDBNUF892T1NR5RUFFG327VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5bea26b79e9aacd7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "216" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijc5YjA5YjhlLTM0YWYtNDNjYi04MTk3LWI2YmY4MmIwMWEwMyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoiYW5keSJ9LCJTY29yZSI6eyJOIjoiODEifSwiVGltZSI6eyJTIjoiMjAxOS0wMi0wMVQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "43ENV3KMJAU1UHNS36C1SU28FVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "a87acd98f2edc8cc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "210" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQxNGMwZTVlLTA4OTctNGUzZi04ZjQwLWEyNTg3ZTNkNTBkNCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiVGltZSI6eyJTIjoiMjAxOS0wNC0xMFQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "3NMR9JOJSCV9D29BI1QTKN8P47VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "78f27216d9f544bb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijg2NDYxOGJmLTE3MTUtNDkzMi04MDE2LTlkOWJkMzBlOGEwYyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJUaW1lIjp7IlMiOiIyMDE5LTA0LTEwVDAwOjAwOjAwWiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "45COMCLJDQ1FGIBBF9FB37N71RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1de36a7b42503aa8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "216" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijc2ODMyMjBkLTcwNjItNGZhOS05NTQ2LTc4ODI4YjY3NDU5MiJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoiZnJhbiJ9LCJTY29yZSI6eyJOIjoiMzMifSwiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QFGOS200OGCTHRR7VUEQ7SIG5FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "67a1767a8348ca7d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "207" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU1ZjJkODIxLTI3NmUtNDEzZS1hZjgyLWQ4NjRiZTkxMWMxMiJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiIxOTAifSwiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FTDTTLSAA92B9IST4C9H2O3DIFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "832ea63b488486c7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "504" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0yIjp7IkNvbnNpc3RlbnRSZWFkIjpmYWxzZSwiS2V5cyI6W3siR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6InBhdCJ9fSx7IkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiUGxheWVyIjp7IlMiOiJtZWwifX0seyJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoiYW5keSJ9fSx7IkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiUGxheWVyIjp7IlMiOiJmcmFuIn19LHsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6InBhdCJ9fSx7IkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiUGxheWVyIjp7IlMiOiJiaWxsaWUifX0seyJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoibWVsIn19LHsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1445" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "4107173506" ], "X-Amzn-Requestid": [ "PRHNI4R8GEQMKO8KKDTSTVOT6VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0yIjpbeyJUaW1lIjp7IlMiOiIyMDE5LTAzLTIwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTI3NWYzY2QtMmNlMy00YjUzLWEzMDktOTQwNzk3YzBhZWIwIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJmcmFuIn0sIlNjb3JlIjp7Ik4iOiIzMyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijc2ODMyMjBkLTcwNjItNGZhOS05NTQ2LTc4ODI4YjY3NDU5MiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDItMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYW5keSJ9LCJTY29yZSI6eyJOIjoiODEifSwiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3OWIwOWI4ZS0zNGFmLTQzY2ItODE5Ny1iNmJmODJiMDFhMDMifX0seyJUaW1lIjp7IlMiOiIyMDE5LTA0LTAxVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6InBhdCJ9LCJTY29yZSI6eyJOIjoiMTIwIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDZjOTIwMTYtMWMwNy00OGVjLWE5ZWEtOTc4ZTVmMjFlMTFkIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xM1QwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJwYXQifSwiU2NvcmUiOnsiTiI6IjQ5In0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZGU5M2E0ZDQtZWZlMS00NWRmLWE3NjctNWVjMjlmOWY2Mjc3In19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xMFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJiaWxsaWUifSwiU2NvcmUiOnsiTiI6IjExMSJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQxNGMwZTVlLTA4OTctNGUzZi04ZjQwLWEyNTg3ZTNkNTBkNCJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMThUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiIxOTAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJlNWYyZDgyMS0yNzZlLTQxM2UtYWY4Mi1kODY0YmU5MTFjMTIifX0seyJUaW1lIjp7IlMiOiIyMDE5LTA0LTEwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6Im1lbCJ9LCJTY29yZSI6eyJOIjoiNjAifSwiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI4NjQ2MThiZi0xNzE1LTQ5MzItODAxNi05ZDliZDMwZThhMGMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/As/000077500000000000000000000000001367004507500247115ustar00rootroot00000000000000go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/As/verify_As.replay000066400000000000000000000637751367004507500301000ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNjDQdVJP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "c7283dab86d16b12", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1407" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "856804657" ], "X-Amzn-Requestid": [ "FQ078S48RIQETQ5K8CV2J09JP3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6IkdhbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9LHsiQXR0cmlidXRlTmFtZSI6IlBsYXllciIsIkF0dHJpYnV0ZVR5cGUiOiJTIn0seyJBdHRyaWJ1dGVOYW1lIjoiU2NvcmUiLCJBdHRyaWJ1dGVUeXBlIjoiTiJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDc5MTY0NjFFOSwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyI6W3siSW5kZXhBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yL2luZGV4L2dsb2JhbCIsIkluZGV4TmFtZSI6Imdsb2JhbCIsIkluZGV4U2l6ZUJ5dGVzIjoxMDcsIkluZGV4U3RhdHVzIjoiQUNUSVZFIiwiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJQbGF5ZXIiLCJLZXlUeXBlIjoiSEFTSCJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJLZXlUeXBlIjoiUkFOR0UifV0sIlByb2plY3Rpb24iOnsiUHJvamVjdGlvblR5cGUiOiJBTEwifSwiUHJvdmlzaW9uZWRUaHJvdWdocHV0Ijp7Ik51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9fV0sIkl0ZW1Db3VudCI6MSwiS2V5U2NoZW1hIjpbeyJBdHRyaWJ1dGVOYW1lIjoiR2FtZSIsIktleVR5cGUiOiJIQVNIIn0seyJBdHRyaWJ1dGVOYW1lIjoiUGxheWVyIiwiS2V5VHlwZSI6IlJBTkdFIn1dLCJMb2NhbFNlY29uZGFyeUluZGV4ZXMiOlt7IkluZGV4QXJuIjoiYXJuOmF3czpkeW5hbW9kYjp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOnRhYmxlL2RvY3N0b3JlLXRlc3QtMi9pbmRleC9sb2NhbCIsIkluZGV4TmFtZSI6ImxvY2FsIiwiSW5kZXhTaXplQnl0ZXMiOjEwNywiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJHYW1lIiwiS2V5VHlwZSI6IkhBU0gifSx7IkF0dHJpYnV0ZU5hbWUiOiJTY29yZSIsIktleVR5cGUiOiJSQU5HRSJ9XSwiUHJvamVjdGlvbiI6eyJQcm9qZWN0aW9uVHlwZSI6IkFMTCJ9fV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJOdW1iZXJPZkRlY3JlYXNlc1RvZGF5IjowLCJSZWFkQ2FwYWNpdHlVbml0cyI6NSwiV3JpdGVDYXBhY2l0eVVuaXRzIjo1fSwiVGFibGVBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yIiwiVGFibGVJZCI6IjVjNGM2MDE0LTdlNmEtNGRiNy05M2RlLWExNzQ1NTJjZjc4ZCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiIsIlRhYmxlU2l6ZUJ5dGVzIjoxMDcsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "800f88a325fb05a6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "54" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1427" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "616891143" ], "X-Amzn-Requestid": [ "C0N422GPN2M9GDF6U590UFQOKVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAzLTIwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTZmNTgyNTAtOTA0YS00MGZjLTkzMGUtZmFlODk1MWNkMDgwIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjE5MCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ0YWVmZWVlLTM1ZDAtNGY2OC05NTUyLWI5MjMyNWNkZTg1MSJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmYWY1MWQ0MC02ZjAzLTQ3NTItODk5YS0yZWU3ZDE4NDVhZTIifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAyLTAxVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifSwiU2NvcmUiOnsiTiI6IjgxIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJmcmFuIn0sIlNjb3JlIjp7Ik4iOiIzMyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjczNWY2NGE0LTBkOWEtNGRlZi1hOTljLTUwZWMxNTkxZWRiNiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDMtMTNUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9fV0sIlNjYW5uZWRDb3VudCI6OH0=" } }, { "ID": "59944a890c95c2ef", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "252" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYTZmNTgyNTAtOTA0YS00MGZjLTkzMGUtZmFlODk1MWNkMDgwIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QAS59NI6750M7CVCP8JAGL07F7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ff8a266c7ab03fa2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "254" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzYyY2Y1YTYtMjBkYy00MzI0LTkwNTgtMDUzYzk1ZTI0NzdiIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6ImJpbGxpZSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "P1CNFO0HHTV24AIMPSSFSIMEPNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e03aa3ff06c3c4d9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "251" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZmFmNTFkNDAtNmYwMy00NzUyLTg5OWEtMmVlN2QxODQ1YWUyIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6InBhdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "4IESD5FI2V82MJ5FM4VH3B05BBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "acab9944d64ef5dd", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "261" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzM1ZjY0YTQtMGQ5YS00ZGVmLWE5OWMtNTBlYzE1OTFlZGI2In19LCJLZXkiOnsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "7D569J9KI7F1R6SU0A0JRMI3D3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "046dba2faf975420", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "260" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZTQwZTYwMjQtZTY1MC00ZWM5LWJiYjUtNjI1MGUyYzkxNjYyIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6Im1lbCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "665TO0H9903AG1BJQ97J2FKF97VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5541fdf8273898d7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "251" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDRhZWZlZWUtMzVkMC00ZjY4LTk1NTItYjkyMzI1Y2RlODUxIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6Im1lbCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "JJ74AIDP66OBNO8HEASS3IHUPJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "a271c3793cea6ff8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "260" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNDkwZjIxMzgtYTBkYS00ZWExLTk4YzUtMWU5Y2EyOTIyMWU1In19LCJLZXkiOnsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6InBhdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "G49GNQIHDILSJMSJGVIDAUR5ENVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4ba6c646a0c35857", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "261" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In19LCJLZXkiOnsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "UHBDI8AN2KOCRBPMFOLGK0QL53VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "10e728b1fee08a46", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiRGF5cyBHb25lIn19LCJLZXlDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3413411624" ], "X-Amzn-Requestid": [ "MO636LUQS11KV458LNAMV8C0PRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MCwiSXRlbXMiOltdLCJTY2FubmVkQ291bnQiOjB9" } }, { "ID": "c55d981c04f27ef3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "171" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IlNjb3JlIn0sIkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMiOnsiOjAiOnsiTiI6IjUwIn19LCJGaWx0ZXJFeHByZXNzaW9uIjoiIzAgPiA6MCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3413411624" ], "X-Amzn-Requestid": [ "UUHSOTLH45KR05UOIHJU6CQ1A3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MCwiSXRlbXMiOltdLCJTY2FubmVkQ291bnQiOjB9" } }, { "ID": "8c7f05d09a321558", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "298" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkMTE0YmU0NC03MWQzLTQ5YWQtYTM2Ni00YWY0ZGI1MDE3MDUifSwiR2FtZSI6eyJTIjoiRGF5cyBHb25lIn0sIlBsYXllciI6eyJTIjoic3RlcGgifSwiU2NvcmUiOnsiTiI6IjI0In0sIlRpbWUiOnsiUyI6IjIwMTktMDQtMjVUMDA6MDA6MDBaIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "702CAN3QKTJ3BO182OG4U7KREFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "2e2203de49613b4a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "298" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJlMTY3OTM5NS0zZjc1LTQ2MmItODhiNS1kMzhmNmE1NDhmNTkifSwiR2FtZSI6eyJTIjoiRGF5cyBHb25lIn0sIlBsYXllciI6eyJTIjoic3RlcGgifSwiU2NvcmUiOnsiTiI6IjI0In0sIlRpbWUiOnsiUyI6IjIwMTktMDQtMjVUMDA6MDA6MDBaIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "Q422GVBV7OINR9IHTCRUPJQ8NJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/As/verify_As.yaml000066400000000000000000000214711367004507500275310ustar00rootroot00000000000000--- version: 1 interactions: - request: body: '{"TableName":"docstore-test-2"}' form: {} headers: Accept-Encoding: - identity Content-Length: - "31" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125305Z X-Amz-Target: - DynamoDB_20120810.DescribeTable url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{"Table":{"AttributeDefinitions":[{"AttributeName":"Game","AttributeType":"S"},{"AttributeName":"Player","AttributeType":"S"},{"AttributeName":"Score","AttributeType":"N"},{"AttributeName":"Time","AttributeType":"S"}],"CreationDateTime":1.556147916461E9,"GlobalSecondaryIndexes":[{"IndexArn":"arn:aws:dynamodb:us-east-2:462380225722:table/docstore-test-2/index/global","IndexName":"global","IndexSizeBytes":212,"IndexStatus":"ACTIVE","ItemCount":2,"KeySchema":[{"AttributeName":"Player","KeyType":"HASH"},{"AttributeName":"Time","KeyType":"RANGE"}],"Projection":{"ProjectionType":"ALL"},"ProvisionedThroughput":{"NumberOfDecreasesToday":0,"ReadCapacityUnits":5,"WriteCapacityUnits":5}}],"ItemCount":2,"KeySchema":[{"AttributeName":"Game","KeyType":"HASH"},{"AttributeName":"Player","KeyType":"RANGE"}],"LocalSecondaryIndexes":[{"IndexArn":"arn:aws:dynamodb:us-east-2:462380225722:table/docstore-test-2/index/local","IndexName":"local","IndexSizeBytes":212,"ItemCount":2,"KeySchema":[{"AttributeName":"Game","KeyType":"HASH"},{"AttributeName":"Score","KeyType":"RANGE"}],"Projection":{"ProjectionType":"ALL"}}],"ProvisionedThroughput":{"NumberOfDecreasesToday":0,"ReadCapacityUnits":5,"WriteCapacityUnits":5},"TableArn":"arn:aws:dynamodb:us-east-2:462380225722:table/docstore-test-2","TableId":"5c4c6014-7e6a-4db7-93de-a174552cf78d","TableName":"docstore-test-2","TableSizeBytes":266,"TableStatus":"ACTIVE"}}' headers: Connection: - keep-alive Content-Length: - "1407" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:05 GMT Server: - Server X-Amz-Crc32: - "325584166" X-Amzn-Requestid: - GJ97UPS5OS6KIT0DJRNFI0UH73VV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"ClientRequestToken":"7d7ad684-7b3d-461a-b6d5-4be758ee986a","TransactItems":[{"Put":{"Item":{"DocstoreRevision":{"S":"2fd2d1fd-c1ce-46d7-b335-258215f94f2f"},"Game":{"S":"Days Gone"},"Player":{"S":"steph"},"Score":{"N":"24"},"Time":{"S":"2019-04-25T00:00:00Z"}},"TableName":"docstore-test-2"}},{"Put":{"Item":{"DocstoreRevision":{"S":"eb43aab0-5a21-4f65-b604-2ac5e32f3606"},"Game":{"S":"Days Gone"},"Player":{"S":"mia"},"Score":{"N":"99"},"Time":{"S":"2019-04-26T00:00:00Z"}},"TableName":"docstore-test-2"}}]}' form: {} headers: Accept-Encoding: - identity Content-Length: - "509" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125305Z X-Amz-Target: - DynamoDB_20120810.TransactWriteItems url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{}' headers: Connection: - keep-alive Content-Length: - "2" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:05 GMT Server: - Server X-Amz-Crc32: - "2745614147" X-Amzn-Requestid: - K4JNLM37EL1D58TPSLOH7NL99FVV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"ConsistentRead":true,"ExpressionAttributeNames":{"#0":"Game"},"ExpressionAttributeValues":{":0":{"S":"Days Gone"}},"KeyConditionExpression":"#0 = :0","TableName":"docstore-test-2"}' form: {} headers: Accept-Encoding: - identity Content-Length: - "182" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125305Z X-Amz-Target: - DynamoDB_20120810.Query url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{"Count":2,"Items":[{"Time":{"S":"2019-04-26T00:00:00Z"},"Player":{"S":"mia"},"Score":{"N":"99"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"eb43aab0-5a21-4f65-b604-2ac5e32f3606"}},{"Time":{"S":"2019-04-25T00:00:00Z"},"Player":{"S":"steph"},"Score":{"N":"24"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"2fd2d1fd-c1ce-46d7-b335-258215f94f2f"}}],"ScannedCount":2}' headers: Connection: - keep-alive Content-Length: - "374" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:05 GMT Server: - Server X-Amz-Crc32: - "3144266929" X-Amzn-Requestid: - F1EB7Q9TIHJKFD16JBPFL8M5I3VV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"ConsistentRead":true,"ExpressionAttributeNames":{"#0":"Score"},"ExpressionAttributeValues":{":0":{"N":"50"}},"FilterExpression":"#0 > :0","TableName":"docstore-test-2"}' form: {} headers: Accept-Encoding: - identity Content-Length: - "170" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.Scan url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{"Count":1,"Items":[{"Time":{"S":"2019-04-26T00:00:00Z"},"Player":{"S":"mia"},"Score":{"N":"99"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"eb43aab0-5a21-4f65-b604-2ac5e32f3606"}}],"ScannedCount":2}' headers: Connection: - keep-alive Content-Length: - "205" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:05 GMT Server: - Server X-Amz-Crc32: - "2965315507" X-Amzn-Requestid: - U96606SLHKOQ3FCJFN03BI8OGRVV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"TableName":"docstore-test-2"}' form: {} headers: Accept-Encoding: - identity Content-Length: - "31" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.Scan url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{"Count":2,"Items":[{"Time":{"S":"2019-04-26T00:00:00Z"},"Player":{"S":"mia"},"Score":{"N":"99"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"eb43aab0-5a21-4f65-b604-2ac5e32f3606"}},{"Time":{"S":"2019-04-25T00:00:00Z"},"Player":{"S":"steph"},"Score":{"N":"24"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"2fd2d1fd-c1ce-46d7-b335-258215f94f2f"}}],"ScannedCount":2}' headers: Connection: - keep-alive Content-Length: - "374" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:05 GMT Server: - Server X-Amz-Crc32: - "3144266929" X-Amzn-Requestid: - HOOQ68CQH3FTI7RDS77VE03FHFVV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"ClientRequestToken":"b36a96df-94a3-42ae-ad52-e65302cd8847","TransactItems":[{"Delete":{"ConditionExpression":"#0 = :0","ExpressionAttributeNames":{"#0":"DocstoreRevision"},"ExpressionAttributeValues":{":0":{"S":"eb43aab0-5a21-4f65-b604-2ac5e32f3606"}},"Key":{"Game":{"S":"Days Gone"},"Player":{"S":"mia"}},"TableName":"docstore-test-2"}},{"Delete":{"ConditionExpression":"#0 = :0","ExpressionAttributeNames":{"#0":"DocstoreRevision"},"ExpressionAttributeValues":{":0":{"S":"2fd2d1fd-c1ce-46d7-b335-258215f94f2f"}},"Key":{"Game":{"S":"Days Gone"},"Player":{"S":"steph"}},"TableName":"docstore-test-2"}}]}' form: {} headers: Accept-Encoding: - identity Content-Length: - "605" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.TransactWriteItems url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{}' headers: Connection: - keep-alive Content-Length: - "2" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:05 GMT Server: - Server X-Amz-Crc32: - "2745614147" X-Amzn-Requestid: - BBQ9E7M0KLRHJS47UNLLA4FIPNVV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" verify_As_returns_false_when_passed_nil.replay000066400000000000000000000327271367004507500361700ustar00rootroot00000000000000go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/As{ "Initial": "AQAAAA7WcSNkD7k4yv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "ca06a077123f928a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1407" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "856804657" ], "X-Amzn-Requestid": [ "4D9H17FVO1719R053JTBAS2E3VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6IkdhbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9LHsiQXR0cmlidXRlTmFtZSI6IlBsYXllciIsIkF0dHJpYnV0ZVR5cGUiOiJTIn0seyJBdHRyaWJ1dGVOYW1lIjoiU2NvcmUiLCJBdHRyaWJ1dGVUeXBlIjoiTiJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDc5MTY0NjFFOSwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyI6W3siSW5kZXhBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yL2luZGV4L2dsb2JhbCIsIkluZGV4TmFtZSI6Imdsb2JhbCIsIkluZGV4U2l6ZUJ5dGVzIjoxMDcsIkluZGV4U3RhdHVzIjoiQUNUSVZFIiwiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJQbGF5ZXIiLCJLZXlUeXBlIjoiSEFTSCJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJLZXlUeXBlIjoiUkFOR0UifV0sIlByb2plY3Rpb24iOnsiUHJvamVjdGlvblR5cGUiOiJBTEwifSwiUHJvdmlzaW9uZWRUaHJvdWdocHV0Ijp7Ik51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9fV0sIkl0ZW1Db3VudCI6MSwiS2V5U2NoZW1hIjpbeyJBdHRyaWJ1dGVOYW1lIjoiR2FtZSIsIktleVR5cGUiOiJIQVNIIn0seyJBdHRyaWJ1dGVOYW1lIjoiUGxheWVyIiwiS2V5VHlwZSI6IlJBTkdFIn1dLCJMb2NhbFNlY29uZGFyeUluZGV4ZXMiOlt7IkluZGV4QXJuIjoiYXJuOmF3czpkeW5hbW9kYjp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOnRhYmxlL2RvY3N0b3JlLXRlc3QtMi9pbmRleC9sb2NhbCIsIkluZGV4TmFtZSI6ImxvY2FsIiwiSW5kZXhTaXplQnl0ZXMiOjEwNywiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJHYW1lIiwiS2V5VHlwZSI6IkhBU0gifSx7IkF0dHJpYnV0ZU5hbWUiOiJTY29yZSIsIktleVR5cGUiOiJSQU5HRSJ9XSwiUHJvamVjdGlvbiI6eyJQcm9qZWN0aW9uVHlwZSI6IkFMTCJ9fV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJOdW1iZXJPZkRlY3JlYXNlc1RvZGF5IjowLCJSZWFkQ2FwYWNpdHlVbml0cyI6NSwiV3JpdGVDYXBhY2l0eVVuaXRzIjo1fSwiVGFibGVBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yIiwiVGFibGVJZCI6IjVjNGM2MDE0LTdlNmEtNGRiNy05M2RlLWExNzQ1NTJjZjc4ZCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiIsIlRhYmxlU2l6ZUJ5dGVzIjoxMDcsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "64bc1e357b6abedb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "54" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "207" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2786211616" ], "X-Amzn-Requestid": [ "O3GC5ME8O1K103NUSL4BJR1KIFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MSwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMjVUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoic3RlcGgifSwiU2NvcmUiOnsiTiI6IjI0In0sIkdhbWUiOnsiUyI6IkRheXMgR29uZSJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkMTE0YmU0NC03MWQzLTQ5YWQtYTM2Ni00YWY0ZGI1MDE3MDUifX1dLCJTY2FubmVkQ291bnQiOjF9" } }, { "ID": "b3e3c9ecb326fd69", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "252" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDExNGJlNDQtNzFkMy00OWFkLWEzNjYtNGFmNGRiNTAxNzA1In19LCJLZXkiOnsiR2FtZSI6eyJTIjoiRGF5cyBHb25lIn0sIlBsYXllciI6eyJTIjoic3RlcGgifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "JOFIPPS2VA3JC57GT4SA2VGT5BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ef2763e344ba5530", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiRGF5cyBHb25lIn19LCJLZXlDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3413411624" ], "X-Amzn-Requestid": [ "G2L5L6SBSSUFQQE249IC8TM75JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MCwiSXRlbXMiOltdLCJTY2FubmVkQ291bnQiOjB9" } }, { "ID": "efc9aaedc3166b1e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "171" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IlNjb3JlIn0sIkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMiOnsiOjAiOnsiTiI6IjUwIn19LCJGaWx0ZXJFeHByZXNzaW9uIjoiIzAgPiA6MCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3413411624" ], "X-Amzn-Requestid": [ "JCP5C014HU7ITE36EM8AGLVPFVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MCwiSXRlbXMiOltdLCJTY2FubmVkQ291bnQiOjB9" } }, { "ID": "5d510d6f4375b360", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "298" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5NGEyYWExYS04ODFlLTQ5ZWMtYTQ4Yi03ZGQxMjZmZTZiNGEifSwiR2FtZSI6eyJTIjoiRGF5cyBHb25lIn0sIlBsYXllciI6eyJTIjoic3RlcGgifSwiU2NvcmUiOnsiTiI6IjI0In0sIlRpbWUiOnsiUyI6IjIwMTktMDQtMjVUMDA6MDA6MDBaIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "BPBTHBD4V5QIN1HPKMV3EN00B3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3511dd6444871039", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "298" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI1MTkwNGQyMC04N2Y4LTQ1MjQtOThhYi1jOTE2ODVhNWI0MGMifSwiR2FtZSI6eyJTIjoiRGF5cyBHb25lIn0sIlBsYXllciI6eyJTIjoic3RlcGgifSwiU2NvcmUiOnsiTiI6IjI0In0sIlRpbWUiOnsiUyI6IjIwMTktMDQtMjVUMDA6MDA6MDBaIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:56 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "IGA3BI0E75A4R2B9ISCUAA2SCNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } } ] }verify_As_returns_false_when_passed_nil.yaml000066400000000000000000000214151367004507500356260ustar00rootroot00000000000000go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/As--- version: 1 interactions: - request: body: '{"TableName":"docstore-test-2"}' form: {} headers: Accept-Encoding: - identity Content-Length: - "31" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.DescribeTable url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{"Table":{"AttributeDefinitions":[{"AttributeName":"Game","AttributeType":"S"},{"AttributeName":"Player","AttributeType":"S"},{"AttributeName":"Score","AttributeType":"N"},{"AttributeName":"Time","AttributeType":"S"}],"CreationDateTime":1.556147916461E9,"GlobalSecondaryIndexes":[{"IndexArn":"arn:aws:dynamodb:us-east-2:462380225722:table/docstore-test-2/index/global","IndexName":"global","IndexSizeBytes":212,"IndexStatus":"ACTIVE","ItemCount":2,"KeySchema":[{"AttributeName":"Player","KeyType":"HASH"},{"AttributeName":"Time","KeyType":"RANGE"}],"Projection":{"ProjectionType":"ALL"},"ProvisionedThroughput":{"NumberOfDecreasesToday":0,"ReadCapacityUnits":5,"WriteCapacityUnits":5}}],"ItemCount":2,"KeySchema":[{"AttributeName":"Game","KeyType":"HASH"},{"AttributeName":"Player","KeyType":"RANGE"}],"LocalSecondaryIndexes":[{"IndexArn":"arn:aws:dynamodb:us-east-2:462380225722:table/docstore-test-2/index/local","IndexName":"local","IndexSizeBytes":212,"ItemCount":2,"KeySchema":[{"AttributeName":"Game","KeyType":"HASH"},{"AttributeName":"Score","KeyType":"RANGE"}],"Projection":{"ProjectionType":"ALL"}}],"ProvisionedThroughput":{"NumberOfDecreasesToday":0,"ReadCapacityUnits":5,"WriteCapacityUnits":5},"TableArn":"arn:aws:dynamodb:us-east-2:462380225722:table/docstore-test-2","TableId":"5c4c6014-7e6a-4db7-93de-a174552cf78d","TableName":"docstore-test-2","TableSizeBytes":266,"TableStatus":"ACTIVE"}}' headers: Connection: - keep-alive Content-Length: - "1407" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:06 GMT Server: - Server X-Amz-Crc32: - "325584166" X-Amzn-Requestid: - V5J8K6UCUUM9AS846K5M8P5IR7VV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"ClientRequestToken":"961acd1e-44bb-4ace-8e9f-5244d42df229","TransactItems":[{"Put":{"Item":{"DocstoreRevision":{"S":"303beac7-02de-49b9-b82a-fc1b83d532c1"},"Game":{"S":"Days Gone"},"Player":{"S":"steph"},"Score":{"N":"24"},"Time":{"S":"2019-04-25T00:00:00Z"}},"TableName":"docstore-test-2"}},{"Put":{"Item":{"DocstoreRevision":{"S":"762f11fe-9de1-4d3a-a55d-a4adca89663e"},"Game":{"S":"Days Gone"},"Player":{"S":"mia"},"Score":{"N":"99"},"Time":{"S":"2019-04-26T00:00:00Z"}},"TableName":"docstore-test-2"}}]}' form: {} headers: Accept-Encoding: - identity Content-Length: - "509" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.TransactWriteItems url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{}' headers: Connection: - keep-alive Content-Length: - "2" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:06 GMT Server: - Server X-Amz-Crc32: - "2745614147" X-Amzn-Requestid: - 4G02U9ME82551GFGQNK4LU4DFJVV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"ExpressionAttributeNames":{"#0":"Game"},"ExpressionAttributeValues":{":0":{"S":"Days Gone"}},"KeyConditionExpression":"#0 = :0","TableName":"docstore-test-2"}' form: {} headers: Accept-Encoding: - identity Content-Length: - "160" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.Query url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{"Count":2,"Items":[{"Time":{"S":"2019-04-26T00:00:00Z"},"Player":{"S":"mia"},"Score":{"N":"99"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"762f11fe-9de1-4d3a-a55d-a4adca89663e"}},{"Time":{"S":"2019-04-25T00:00:00Z"},"Player":{"S":"steph"},"Score":{"N":"24"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"303beac7-02de-49b9-b82a-fc1b83d532c1"}}],"ScannedCount":2}' headers: Connection: - keep-alive Content-Length: - "374" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:06 GMT Server: - Server X-Amz-Crc32: - "3008081910" X-Amzn-Requestid: - P4K0RDNU12G46IVV0RFCN2AVBVVV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"ExpressionAttributeNames":{"#0":"Score"},"ExpressionAttributeValues":{":0":{"N":"50"}},"FilterExpression":"#0 > :0","TableName":"docstore-test-2"}' form: {} headers: Accept-Encoding: - identity Content-Length: - "148" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.Scan url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{"Count":1,"Items":[{"Time":{"S":"2019-04-26T00:00:00Z"},"Player":{"S":"mia"},"Score":{"N":"99"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"762f11fe-9de1-4d3a-a55d-a4adca89663e"}}],"ScannedCount":2}' headers: Connection: - keep-alive Content-Length: - "205" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:06 GMT Server: - Server X-Amz-Crc32: - "3718331234" X-Amzn-Requestid: - QTC1AIK7LGQOK55V51P8UN8OIJVV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"TableName":"docstore-test-2"}' form: {} headers: Accept-Encoding: - identity Content-Length: - "31" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.Scan url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{"Count":2,"Items":[{"Time":{"S":"2019-04-26T00:00:00Z"},"Player":{"S":"mia"},"Score":{"N":"99"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"762f11fe-9de1-4d3a-a55d-a4adca89663e"}},{"Time":{"S":"2019-04-25T00:00:00Z"},"Player":{"S":"steph"},"Score":{"N":"24"},"Game":{"S":"Days Gone"},"DocstoreRevision":{"S":"303beac7-02de-49b9-b82a-fc1b83d532c1"}}],"ScannedCount":2}' headers: Connection: - keep-alive Content-Length: - "374" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:06 GMT Server: - Server X-Amz-Crc32: - "3008081910" X-Amzn-Requestid: - TU5BNC2AJN3BHBTDJTGML67I07VV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" - request: body: '{"ClientRequestToken":"cc182671-10dd-412a-a86b-42bdaf130679","TransactItems":[{"Delete":{"ConditionExpression":"#0 = :0","ExpressionAttributeNames":{"#0":"DocstoreRevision"},"ExpressionAttributeValues":{":0":{"S":"762f11fe-9de1-4d3a-a55d-a4adca89663e"}},"Key":{"Game":{"S":"Days Gone"},"Player":{"S":"mia"}},"TableName":"docstore-test-2"}},{"Delete":{"ConditionExpression":"#0 = :0","ExpressionAttributeNames":{"#0":"DocstoreRevision"},"ExpressionAttributeValues":{":0":{"S":"303beac7-02de-49b9-b82a-fc1b83d532c1"}},"Key":{"Game":{"S":"Days Gone"},"Player":{"S":"steph"}},"TableName":"docstore-test-2"}}]}' form: {} headers: Accept-Encoding: - identity Content-Length: - "605" Content-Type: - application/x-amz-json-1.0 User-Agent: - aws-sdk-go/1.19.16 (go1.12; linux; amd64) X-Amz-Date: - 20190502T125306Z X-Amz-Target: - DynamoDB_20120810.TransactWriteItems url: https://dynamodb.us-east-2.amazonaws.com/ method: POST response: body: '{}' headers: Connection: - keep-alive Content-Length: - "2" Content-Type: - application/x-amz-json-1.0 Date: - Thu, 02 May 2019 12:53:06 GMT Server: - Server X-Amz-Crc32: - "2745614147" X-Amzn-Requestid: - 0PK493UFTE8VM6QN04JD9JKSRBVV4KQNSO5AEMVJF66Q9ASUAAJG status: 200 OK code: 200 duration: "" go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/BeforeDo.replay000066400000000000000000000313421367004507500272540ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNhNCAzov5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "28343bb0cb4d8b40", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "RDI2FKP7BQF7PP0MPQI4B746PJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "a1c21f89bbddefd2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3413411624" ], "X-Amzn-Requestid": [ "7E8D62SO12DH62O592L5Q6Q6A3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MCwiSXRlbXMiOltdLCJTY2FubmVkQ291bnQiOjB9" } }, { "ID": "55972a22038911b4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "159" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJuYW1lIjp7IlMiOiJ0ZXN0QmVmb3JlRG8ifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OFM82AM8I2DTQF6QMRDMDOKQIBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "53b6d5fe60876b28", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "155" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3RCZWZvcmVEbyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "83T5LFJB60HEL2S79QU40UVTNBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "62bdb97d07e85749", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3RCZWZvcmVEbyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "UMDE94GI6EGAIPUP99E3OOH9EVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1077129888995e51", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "243" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiYSJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7Ik4iOiIxIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEJlZm9yZURvIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiU0VUICMxID0gOjBcbiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "APUMFNOS2L2PALK1P197P26UDBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "31c3fdd037406829", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "99" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0QmVmb3JlRG8ifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "100" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3495001968" ], "X-Amzn-Requestid": [ "DJB11IGO8VPKGCQOAGNPPBFS4VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJhIjp7Ik4iOiIxIn0sIm5hbWUiOnsiUyI6InRlc3RCZWZvcmVEbyJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "1d2c6c93d7504f96", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "67" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEJlZm9yZURvIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MBOUDPI8V678MRRN8QKATL2HKRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/BeforeQuery.replay000066400000000000000000000130421367004507500300140ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNiK9wuzv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "3c5501a7c1dad95e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "RHTJM12DUT9RETGF6MKRLJ33HFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "39ccc927106d9d6c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:54 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3413411624" ], "X-Amzn-Requestid": [ "8DL4SD92J46DHE4A89FB979M3RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MCwiSXRlbXMiOltdLCJTY2FubmVkQ291bnQiOjB9" } }, { "ID": "ed4ab9ba4fe42384", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:55 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3413411624" ], "X-Amzn-Requestid": [ "VJSNBCP196DJHSKMC5PBKN53UNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MCwiSXRlbXMiOltdLCJTY2FubmVkQ291bnQiOjB9" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/Create.replay000066400000000000000000001501001367004507500267640ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSM/C0L8AP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "9f0900bb007b7b08", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "KGUH3NFV649HQ28DDRR3LMN6OJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "e430f4e3635d12a9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3413411624" ], "X-Amzn-Requestid": [ "PP8NU0CF87H9G5D3PDRCKFD977VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MCwiSXRlbXMiOltdLCJTY2FubmVkQ291bnQiOjB9" } }, { "ID": "db0c1e492e7463be", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "242" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5MGQ3Y2RjZi02ZTQxLTRiMDYtOGMzMi0wMWQzOTczNzVjNWQifSwiYiI6eyJCT09MIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdENyZWF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "O240RHL1ARP6U16D670K0TDOMFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "34b24b34703f9a25", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0Q3JlYXRlTWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "169" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "63368147" ], "X-Amzn-Requestid": [ "K9PHNK066DF9LTMRT652AOS09FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0Q3JlYXRlTWFwIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjkwZDdjZGNmLTZlNDEtNGIwNi04YzMyLTAxZDM5NzM3NWM1ZCJ9LCJiIjp7IkJPT0wiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "64ae3ebee271023f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "224" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIwMDU3YzI1Yy1hYjZmLTRjN2YtYmNmNi02Y2NhZWJlNTkzMTcifSwibmFtZSI6eyJTIjoidGVzdENyZWF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "AOP3KC62MCERKOOGPA83I6NDOFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "22fcde0f52d86dbf", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "265" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJlYmU3OGU4Yy03MjBhLTQ3OTItOWExYy1iZTI0YmE1ZTA2ZjMifSwiYiI6eyJCT09MIjp0cnVlfSwibmFtZSI6eyJTIjoiYTZmMGE0ZWItY2EwOC00NTFhLThjNzQtMTNjNDRhY2M2YjA2In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KAJBODNAM9PUJLM16VIF7GFRQ7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9b80f2d91dd1579c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJhNmYwYTRlYi1jYTA4LTQ1MWEtOGM3NC0xM2M0NGFjYzZiMDYifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "192" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "727333840" ], "X-Amzn-Requestid": [ "9ETGEOJ2DQ19647K5CA0HGOTL7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJhNmYwYTRlYi1jYTA4LTQ1MWEtOGM3NC0xM2M0NGFjYzZiMDYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZWJlNzhlOGMtNzIwYS00NzkyLTlhMWMtYmUyNGJhNWUwNmYzIn0sImIiOnsiQk9PTCI6dHJ1ZX19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "8f140ebe50f2436e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "345" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJCIjp7IkJPT0wiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NzAwMjQ0Ny0xMTRkLTQ4ZWEtYWY3Yi1hODI3ZThhNTA4NjcifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RDcmVhdGVTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "GN3G53NOVFKNB55UO30E20OC17VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "63aa5b9a4028fb40", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0Q3JlYXRlU3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "272" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1992092589" ], "X-Amzn-Requestid": [ "9BJ4E3UU24UC1TTMKQKRN7EA8BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdENyZWF0ZVN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NzAwMjQ0Ny0xMTRkLTQ4ZWEtYWY3Yi1hODI3ZThhNTA4NjcifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "c186dd945a58bbb3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "365" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJCIjp7IkJPT0wiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIzOTA2NmRjZC02M2Y3LTRjNmItOWFjYS1lYmNjNGFmNTU3OTgifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6IjRhOWJiZTUwLWNlNDQtNDJlZi04YTNhLTM4NDU1Y2M4MjdhYiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OH16MTDAC5LNKRB7QBJ6NLULIRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1f08c4ab4c94b167", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiI0YTliYmU1MC1jZTQ0LTQyZWYtOGEzYS0zODQ1NWNjODI3YWIifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "292" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2244706888" ], "X-Amzn-Requestid": [ "RTV8BU2R51P7U5OLUH1URT6KSVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoiNGE5YmJlNTAtY2U0NC00MmVmLThhM2EtMzg0NTVjYzgyN2FiIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjM5MDY2ZGNkLTYzZjctNGM2Yi05YWNhLWViY2M0YWY1NTc5OCJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "c98df673a2658e68", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "365" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJCIjp7IkJPT0wiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJhODg5Yjg0Ny02ZDRjLTRhYzAtYjFjNC1kOWZkYzdmOWIwY2UifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6IjgyMjYwNTQzLTA2NzYtNGE2OS05ZmQwLTExNGY4NDQwYzU0ZCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:20 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KJ0RBHNCRG2B1D2PFO0U814M1VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "10c98352a7addea2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiI4MjI2MDU0My0wNjc2LTRhNjktOWZkMC0xMTRmODQ0MGM1NGQifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "292" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1476914394" ], "X-Amzn-Requestid": [ "SF9IU2OCAGNDSKI4J5DTN974NVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoiODIyNjA1NDMtMDY3Ni00YTY5LTlmZDAtMTE0Zjg0NDBjNTRkIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImE4ODliODQ3LTZkNGMtNGFjMC1iMWM0LWQ5ZmRjN2Y5YjBjZSJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "9117b00a3b2c5247", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "6O2R5PB82OTAG65SDLGNVARGVFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "52edbd070e6d5052", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "975" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3458310675" ], "X-Amzn-Requestid": [ "MPFCAG7RBG5342GHK9NQ6KGJVBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NSwiSXRlbXMiOlt7IkIiOnsiQk9PTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJNIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0Q3JlYXRlU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijc3MDAyNDQ3LTExNGQtNDhlYS1hZjdiLWE4MjdlOGE1MDg2NyJ9fSx7Im5hbWUiOnsiUyI6InRlc3RDcmVhdGVNYXAifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiOTBkN2NkY2YtNmU0MS00YjA2LThjMzItMDFkMzk3Mzc1YzVkIn0sImIiOnsiQk9PTCI6dHJ1ZX19LHsiQiI6eyJCT09MIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6IjRhOWJiZTUwLWNlNDQtNDJlZi04YTNhLTM4NDU1Y2M4MjdhYiJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIzOTA2NmRjZC02M2Y3LTRjNmItOWFjYS1lYmNjNGFmNTU3OTgifX0seyJuYW1lIjp7IlMiOiJhNmYwYTRlYi1jYTA4LTQ1MWEtOGM3NC0xM2M0NGFjYzZiMDYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZWJlNzhlOGMtNzIwYS00NzkyLTlhMWMtYmUyNGJhNWUwNmYzIn0sImIiOnsiQk9PTCI6dHJ1ZX19LHsiQiI6eyJCT09MIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6IjgyMjYwNTQzLTA2NzYtNGE2OS05ZmQwLTExNGY4NDQwYzU0ZCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJhODg5Yjg0Ny02ZDRjLTRhYzAtYjFjNC1kOWZkYzdmOWIwY2UifX1dLCJTY2FubmVkQ291bnQiOjV9" } }, { "ID": "22620168c2809b8a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdENyZWF0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "R6UVN0USIKK57DC50KLA335SS3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b483d6c1286ea5f1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdENyZWF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "0BT8O8DPGQKL11IAUA9BOFC82FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "0928676c31e087b9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "91" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiNGE5YmJlNTAtY2U0NC00MmVmLThhM2EtMzg0NTVjYzgyN2FiIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "H5PF56TV3CMRQSV71BM1I46DARVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "0b60c8020035b67c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "91" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiODIyNjA1NDMtMDY3Ni00YTY5LTlmZDAtMTE0Zjg0NDBjNTRkIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "C52QL4619MU8NKG886KI02HJM3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e1d4331a1fec6104", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "91" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiYTZmMGE0ZWItY2EwOC00NTFhLThjNzQtMTNjNDRhY2M2YjA2In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "C5KEGVIN58J7ADLSLFNFASNABBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "69f95b53bfe027cb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "230" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiIwODA0MDE5MC02MjJjLTQzMjgtODI3YS04ODdlZTlkNDg0YjcifSwiYiI6eyJCT09MIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdENyZWF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "I91NFVDRB8JE6NQVU71QK7IP5NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "6d7f4e39120b4e39", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0Q3JlYXRlTWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "157" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1061444714" ], "X-Amzn-Requestid": [ "EJNG9KT4S8TEQ8DGH6PL7E2CNVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiIwODA0MDE5MC02MjJjLTQzMjgtODI3YS04ODdlZTlkNDg0YjcifSwibmFtZSI6eyJTIjoidGVzdENyZWF0ZU1hcCJ9LCJiIjp7IkJPT0wiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "8c271cc0b8d950bb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "212" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiJiN2RiMTgwNS03ZjlmLTQzOTYtYjQ3Ny1lODg0OWE5M2RlNTYifSwibmFtZSI6eyJTIjoidGVzdENyZWF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "TIVAHBVMAKM1M98UTACN7VRHIJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "73dc32fd83f9a170", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiJmNzhmZjdiOS00Njc2LTQwYjEtOGZkMC1lZWM3NGExNGFmYTgifSwiYiI6eyJCT09MIjp0cnVlfSwibmFtZSI6eyJTIjoiN2Y4MjFlNDYtMGFiMi00ZmRlLWEzYWEtMGUyMTE3YTFiYjYwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "G3L9QVTAA8UHVPJQC7BLRJ9FKRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f76d4a859a2a5d8d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiI3ZjgyMWU0Ni0wYWIyLTRmZGUtYTNhYS0wZTIxMTdhMWJiNjAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "180" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:21 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3427249479" ], "X-Amzn-Requestid": [ "1S85JNIE49FKO0OTHMR2IB8H1FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiJmNzhmZjdiOS00Njc2LTQwYjEtOGZkMC1lZWM3NGExNGFmYTgifSwibmFtZSI6eyJTIjoiN2Y4MjFlNDYtMGFiMi00ZmRlLWEzYWEtMGUyMTE3YTFiYjYwIn0sImIiOnsiQk9PTCI6dHJ1ZX19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "cdad9138e17d3cc3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "345" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJCIjp7IkJPT0wiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiI0NTY3NjY3Mi1hYTJiLTRjYWUtYmVlNy1lYzU1NDZlZGI1ZmEifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RDcmVhdGVTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "LR5988I5CC965RM64C429O860FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "0f4a9fefb08156c5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0Q3JlYXRlU3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "272" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3974719914" ], "X-Amzn-Requestid": [ "P1925MSRF1LQAE8M45HMAFCIF7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiNDU2NzY2NzItYWEyYi00Y2FlLWJlZTctZWM1NTQ2ZWRiNWZhIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RDcmVhdGVTdHJ1Y3QifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJOVUxMIjp0cnVlfX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "4a64f02a7e33ec1e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "365" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJCIjp7IkJPT0wiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiIyZjUxODkzMC1lZTUxLTQyMjgtYjhmOS0wNzkzMGRhMTJkOTUifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6IjYyMWI5ZjdiLTlmZWEtNGIwZi1iMzAxLWE0ZDkxMTg1N2E3ZSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "NFL51LEAQTIH9K8R66OEDD9DOBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "59e36f83c61d3867", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiI2MjFiOWY3Yi05ZmVhLTRiMGYtYjMwMS1hNGQ5MTE4NTdhN2UifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "292" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3582696239" ], "X-Amzn-Requestid": [ "5RKGIFRRMSUD77P6JGKPHS83OBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiMmY1MTg5MzAtZWU1MS00MjI4LWI4ZjktMDc5MzBkYTEyZDk1In0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6IjYyMWI5ZjdiLTlmZWEtNGIwZi1iMzAxLWE0ZDkxMTg1N2E3ZSJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "e47169f183f427e2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "365" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJCIjp7IkJPT0wiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiIxMjU5Yzk3YS0zZDBiLTQyNmItYjJjYi00Mjg1Mzk0YTg2NjcifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6ImVhZjIxZjYwLTg1ODUtNGU1NC1hNDdmLTllM2Q0MTI3NGJhYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "HV7842DPFOSJJBMLA7OSGDLVLVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "35205b08a51b56ac", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJlYWYyMWY2MC04NTg1LTRlNTQtYTQ3Zi05ZTNkNDEyNzRiYWMifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "292" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "231650844" ], "X-Amzn-Requestid": [ "6QL7NEF5U3QSDS705AQLUIJ70NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiMTI1OWM5N2EtM2QwYi00MjZiLWIyY2ItNDI4NTM5NGE4NjY3In0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6ImVhZjIxZjYwLTg1ODUtNGU1NC1hNDdmLTllM2Q0MTI3NGJhYyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/Data.replay000066400000000000000000001444731367004507500264520ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNUEUeFkf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "424eecee8d00b119", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "DQTJ6F6N8FMGUCNHQ17QTFQIQ3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "3770a05fc399ffcc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1393" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2101562471" ], "X-Amzn-Requestid": [ "KH8ST3VRHA57VFGA6M2E0BPRFNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoic3RyIn0sIlUiOnsiTiI6IjQifSwiRiI6eyJOIjoiMC41In0sIkV0YWciOnsiUyI6IjU0YzBlNzk2LWQ4MGYtNGEyNS1iM2QwLWI5MTBiYzAyZDEzYSJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0In19LHsiRXRhZyI6eyJTIjoiYjdmMWNlNjAtZDdjNy00ODFjLWJiZTAtODlhODAwNTE3ZjdhIn0sIm5hbWUiOnsiUyI6InRlc3RSZXZpc2lvbk1hcCJ9LCJzIjp7IlMiOiJjIn19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7IlMiOiJzdHIifSwiVSI6eyJOIjoiNCJ9LCJGIjp7Ik4iOiIwIn0sIkV0YWciOnsiUyI6ImYwYjYyM2VkLTQwODktNDZhZS05NzlhLWIzZDdhNWJmMDAyOCJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0V3J0In19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7IlMiOiJzdCJ9LCJVIjp7Ik4iOiI0In0sIkYiOnsiTiI6IjAuNSJ9LCJJIjp7Ik4iOiIxIn0sIkV0YWciOnsiUyI6IjY3ZGMwMjY5LWQ4ODMtNGUwZi05ZjI3LTRjN2VmNWI4ZjJlMSJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0SW5jIn19LHsiYSI6eyJTIjoiQSJ9LCJpIjp7Ik4iOiIzLjUifSwiRXRhZyI6eyJTIjoiYTIyMDMzNjAtNDE5OS00NDIzLWJlM2YtZTkxYjViYjcxOGQ1In0sIm0iOnsiTiI6IjMifSwibiI6eyJOIjoiMi41In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXBJbmMifX0seyJhIjp7IlMiOiJYIn0sIkV0YWciOnsiUyI6IjQ2NGM3NTdjLTEwYmUtNDNkMS04NTI5LTMwNmY4NjI1ODcyMyJ9LCJjIjp7IlMiOiJDIn0sIm0iOnsiTiI6IjMifSwibiI6eyJOIjoiMi41In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXAifX0seyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEifSwicyI6eyJTIjoiYyJ9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7IlMiOiI3Y2Y1MmY5Yy01Zjc5LTQ4NzgtYTNmNC1kNjU0NjdkZTFjYWQifSwiTSI6eyJOVUxMIjp0cnVlfSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LHsiYSI6eyJTIjoiWCJ9LCJFdGFnIjp7IlMiOiJjNGY0Y2Q0OS01N2RiLTRjZDYtODYwOS05MzMxNThkNWQ3NWYifSwibSI6eyJOIjoiMyJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwV3J0In19XSwiU2Nhbm5lZENvdW50Ijo4fQ==" } }, { "ID": "7b0a842e7e9cdc8e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "74" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdFdydCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FJDO1DBQ5IG7BJ7KKK9FBGE5JFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ecffa8a302eb8c0c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcFdydCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "BII7PRGAP1SRTLUI869FBHNRJFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "dac9941cb1cc0819", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "TJLKO2AALFR7LNQ4M49NKR6FRNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1bf0b965899b1e47", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "C3NR6M7M9ON2OSJ60BB9QP741NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d552ef94638597b4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "UVKA4628ONGE2P4J334LTP4V2FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "cdddc3155e7406be", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "74" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdEluYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "R5HVMECLSCUT7OM6U1L2JSBL43VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "8bfad6760dfca143", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcEluYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FNOH6TOSK245KM84KI5Q8QF4OJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e9a9775eafd7228b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PFKCH7N5UOCOKM59RRT1R9Q1V7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d08293049d3f74eb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "81" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiLTEifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "V8Q12OVEUECKDOU7UDN8PC1IT3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "76bbbc3ae293d3b5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "99" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3054047241" ], "X-Amzn-Requestid": [ "SNU5H1PPRNBTR80C73Q36E2A43VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6Ii0xIn19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "8a3f6b27f705ce42", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "81" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiLTgifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QAI9J4FBF2A6UL9HGOPU9BP8QBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9a3556f25336c193", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "99" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3121808892" ], "X-Amzn-Requestid": [ "NP5CAVOGTO6FRJV85HGRQROSDBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6Ii04In19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "41eda8ac9e4a5b89", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "82" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiLTE2In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "9B8BDCHMDK7CG3EKJUPM5BE3ARVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "0803152560e617c6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "100" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2455135972" ], "X-Amzn-Requestid": [ "VC6M47446OVQ4A797ROEA5D6AFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6Ii0xNiJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "92077a75b55a5538", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "82" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiLTMyIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FFOJ5CHGR758IV72AIAEOCLENBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "71f63f53551badc3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "100" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1385046232" ], "X-Amzn-Requestid": [ "N287701E8C7OCI4529Q0F5TGQBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6Ii0zMiJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "4ab171242fa17220", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "82" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiLTY0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "H52CAKBID7SLSOA4H55T1ER8CFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "71046f3442b95542", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "100" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1666946403" ], "X-Amzn-Requestid": [ "OLF4BK1GUI6I9S06GNUM3R60J3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6Ii02NCJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "c93e0f0a4b2c8128", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "80" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiMSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "31HBV4GF1R9LN6B9JRUSODUCJJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f3a7769c20c79823", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "98" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:41 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2670645296" ], "X-Amzn-Requestid": [ "G8SN65B41AA00GERG7FFI0KHPNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6IjEifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "c937048abd8e9e81", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "80" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiOCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "BSBL8TASGULLPI0GKCFBCAMGB7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e3ecc3d7277c93f7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "98" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2469709253" ], "X-Amzn-Requestid": [ "5APHSJ55FT8GF35D7HKHHAN5HJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6IjgifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "9477a040882e299a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "81" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiMTYifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "DIFIM9VGUGCMKBCQ5LUASKBLLNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "cd3959fe90272844", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "99" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3447376172" ], "X-Amzn-Requestid": [ "JALG2IKQRC6J24MNJFTS998CFBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6IjE2In19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "7a4b350a56f76540", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "81" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiMzIifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QU9A14VF05ISV3IONMCQLMNP4RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f742933559387cf5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "99" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "228757264" ], "X-Amzn-Requestid": [ "SVL8V58UJ3F84PUR07SU426HTJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6IjMyIn19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "557454dc770a5fc6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "81" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiNjQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "9NIDSJ4JKKNS5S0S2JLSIBJKKBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3a59e29ca4b203e7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "99" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1014446763" ], "X-Amzn-Requestid": [ "9UUGLSHK8L3DMSKFVD6U9I0TERVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6IjY0In19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "4bfb403bea883420", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "82" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJOIjoiMy41In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "VSV4OI5PVLAVHG7BKE49OQ7T07VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "2a4593b0315c7b6c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "100" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2334279914" ], "X-Amzn-Requestid": [ "TAMT8G4VK0GFHK5QDAHIC0S22FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiTiI6IjMuNSJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "4690d02a1d93f2fa", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "83" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJCIjoiQUFFQyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "CJ6BDPRUHP1SAI2A9LM1T9MSUFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "54abdcabb400b6f6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "95" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "101" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:42 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "129752700" ], "X-Amzn-Requestid": [ "AS1ERE89R5CD5SK9UQSDG8O1L3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGF0YSJ9LCJ2YWwiOnsiQiI6IkFBRUMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/Delete.replay000066400000000000000000001473041367004507500267770ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNMHpMe0P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5cc742194d4a3142", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "22BSLKB8P1F7CGC9OU219CJEQVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "646c2e3ebf80e19a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1139" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "4111714127" ], "X-Amzn-Requestid": [ "2OVST8P3JEDD97EQF8MOEPVB0BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NSwiSXRlbXMiOlt7ImkiOnsiTiI6Ijk1In0sIkV0YWciOnsiUyI6ImUzOWNkMDZlLTQyODgtNDdkMC1iMGE1LThkNGRlMDE4ZmJhYiJ9LCJzIjp7IlMiOiJhIHN0cmluZyJ9LCJtIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIm5hbWUiOnsiUyI6InRlc3RHZXRNYXBGUCJ9LCJmIjp7Ik4iOiIzMi4zIn19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7IlMiOiJhIHN0cmluZyJ9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjMyLjMifSwiSSI6eyJOIjoiOTUifSwiRXRhZyI6eyJTIjoiMjQwY2ZkMTItZDZkYy00YzA5LTljYmUtZWY2OWQ4YWMwMDc5In0sIk0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fSx7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoiYSBzdHJpbmcifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIzMi4zIn0sIkkiOnsiTiI6Ijk1In0sIkV0YWciOnsiUyI6ImQ4YzhjZjM4LTBjMTktNDk1My04YzllLWI2NmU4ZDZjMGFhYyJ9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3RXQyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fSx7ImkiOnsiTiI6Ijk1In0sIkV0YWciOnsiUyI6Ijk0MWY1ZDZlLTgzMDEtNGYzYy1hMGM5LTY1YTlkN2I2YzBiMyJ9LCJzIjp7IlMiOiJhIHN0cmluZyJ9LCJtIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIm5hbWUiOnsiUyI6InRlc3RHZXRNYXAifSwiZiI6eyJOIjoiMzIuMyJ9fSx7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoiYSBzdHJpbmcifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIzMi4zIn0sIkkiOnsiTiI6Ijk1In0sIkV0YWciOnsiUyI6IjZiMWU1ZTRkLWY4M2UtNGIwMC1hMmM4LTk5ZmU3N2FkNzUzNSJ9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3RGUCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fV0sIlNjYW5uZWRDb3VudCI6NX0=" } }, { "ID": "bb78ee9409c4b8a5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdEZQIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "C00QACDFGNAS8AO54S03TDJGHFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "726f15134be7411d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "AQUPQM2B4C5QLUFSTITAA3V1RRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "2cd3c6fd1d4e372a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "65" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldE1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "LAKPBMCBKU62JEJAPF6FLQPNBFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1e9e807d4b8f0d0b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdFdDIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "R6KD0UL0QHEIT4T1PC7U8NRHBRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b278b52d189c6834", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "67" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldE1hcEZQIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "6LJCR4PAD2HN4B4OBOMOF54G7FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "490b5193c2312659", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjI5M2Y1NGM5LTk3MmUtNDY1Ni04MGYyLTU4M2FjNTFkMDM5YSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "6QQ2Q97IUCRCHB2BH7590ITM1VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "869c2b72c4a22cb3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "233" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMjkzZjU0YzktOTcyZS00NjU2LTgwZjItNTgzYWM1MWQwMzlhIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "0RQNC734BFRA184JB2LDM86R47VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4e9a3204ae704ce0", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlTWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "57" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "289144682" ], "X-Amzn-Requestid": [ "2PP822MRH89Q6OHM62809ULFJNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbXX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "571db327f92698a6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "151" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjgyYTk4MDgwLTUwOTQtNGNjMC1hNzc0LWVhMmI5ZmU5MGU4OSJ9LCJiIjp7IkJPT0wiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FF5LNME57G5CKF8FUE0FPKUJ8JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "aa1b585540f87ac1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "233" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMjkzZjU0YzktOTcyZS00NjU2LTgwZjItNTgzYWM1MWQwMzlhIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "C88D4J4HD372QNBTFL7IVTN1KRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "4fb54ee31c96c10a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "255" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3MzAxMmUwNy05MGE3LTRjNTYtYTEwMS0zZTRiNjhlODliNWIifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3REZWxldGVTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "0IF601II37QKV1JH3THHLB2KGFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f5d23af1703e41c6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "236" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzMwMTJlMDctOTBhNy00YzU2LWExMDEtM2U0YjY4ZTg5YjViIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "E4T5FOD0LB12NG9U2L1NEH9VCJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "bc3db97ca448f4a2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlU3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "57" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "289144682" ], "X-Amzn-Requestid": [ "ALUIG2KO4VJS3Q87FH07P70A9VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbXX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "b017aae9ea789201", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "254" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImRjZjk1OWQ1LTFkYmItNDY0Yy04MDA2LTk2NWQxYzYxNzQyZSJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiTSI6eyJOVUxMIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdERlbGV0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "4C627OH4CRV6HU8S7MGGGRUT1JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e2fec6fa53e8d5bb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "236" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzMwMTJlMDctOTBhNy00YzU2LWExMDEtM2U0YjY4ZTg5YjViIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:33 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "GOU5VK6FRB6BTA8QNMO7J6NDIBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "9806a3a9dd58189b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "67" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiZG9lc05vdEV4aXN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FAIKEFVIH5L4NK4UIVTNKBN33JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d5fb9e8d862522f3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "D1L3EJSMAA2SJQ6IS9U7QPQ9T7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "491936c3cfd48dc5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "367" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1975792664" ], "X-Amzn-Requestid": [ "8JALI273SEAGCAKQTG8I83M09JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MiwiSXRlbXMiOlt7Im5hbWUiOnsiUyI6InRlc3REZWxldGVNYXAifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiODJhOTgwODAtNTA5NC00Y2MwLWE3NzQtZWEyYjlmZTkwZTg5In0sImIiOnsiQk9PTCI6dHJ1ZX19LHsiQiI6eyJCT09MIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3REZWxldGVTdHJ1Y3QifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZGNmOTU5ZDUtMWRiYi00NjRjLTgwMDYtOTY1ZDFjNjE3NDJlIn19XSwiU2Nhbm5lZENvdW50IjoyfQ==" } }, { "ID": "f1e0a722b43f46fb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OKTEQ4IKRBLAEGK3DPGL824PJ3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e505dc5c3845cb61", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "GOKVSVGJCNLVLGTGIIML4BAV5JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3e012bd67cab7557", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "121" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjNiMmZjMGJmLTc4YTUtNDkwOC05NzJlLTRkNTljOWRjMDgxZiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "6UT3TS5ND7D48LL5LFEM15G7JRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1310bec222f8a935", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "221" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiM2IyZmMwYmYtNzhhNS00OTA4LTk3MmUtNGQ1OWM5ZGMwODFmIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KO963SPTI9RKOJHTATAFCPQ1ORVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f797ff1578c4de1a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlTWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "57" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "289144682" ], "X-Amzn-Requestid": [ "RN6QRB4QL3FADJ83TL63ERPQ77VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbXX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "f1abe842eb603b98", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "139" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjY4YzllZjEwLWQzZjUtNDBlMS05MDQyLTI5NDE5MTIzZTE3NCJ9LCJiIjp7IkJPT0wiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "11FFHVS27LOCBI5CVSJMH2H74JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5480966e4d269260", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "221" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiM2IyZmMwYmYtNzhhNS00OTA4LTk3MmUtNGQ1OWM5ZGMwODFmIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "N6JU8VFEGTINQ4EK9CA4TJLVMRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "a296bd945a4ac77b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "255" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiI5YWFhMWJmZS0wMDQ3LTRhMzgtYWI3OS02ODI2NGM3YmMxZGQifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3REZWxldGVTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "A7J1U40I9563P2TE7KFIFKSV83VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "8874040d99e4d4c1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "224" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiOWFhYTFiZmUtMDA0Ny00YTM4LWFiNzktNjgyNjRjN2JjMWRkIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "HH7HNP9B39QNU034A9QDUC1SSBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "dec4fef11d232d6e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlU3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "57" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "289144682" ], "X-Amzn-Requestid": [ "RNO5KJU9O1PQPODNQHPI0K91RRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbXX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "ec59e7c502542d28", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "254" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX0sIkV0YWciOnsiUyI6IjQ4NjMwZjlmLTJiY2EtNDUwMi1iMjgyLTdkZjZhODQzZWY1OCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiTSI6eyJOVUxMIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdERlbGV0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "T9QOC4N11MQRKPVLLI7IV7HVQVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "548571417ffa5c29", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "224" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiOWFhYTFiZmUtMDA0Ny00YTM4LWFiNzktNjgyNjRjN2JjMWRkIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:34 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "B1GJFITLPOV13KLD0OOBH7IPBNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "61f2df286225ec93", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "67" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiZG9lc05vdEV4aXN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "RDVK1R4CTITTLVKVM8AQK9BETNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/ExampleInDoc.replay000066400000000000000000000407401367004507500301010ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNgMthFWf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "79f1a6d6ab732d4f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "EFC4BVPC1MNSOP414PUF6K4U4NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "d247d2eeea6d1512", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "130" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2772784065" ], "X-Amzn-Requestid": [ "HQEE84TBUJ2G0LNUOVUFFDD4HVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MiwiSXRlbXMiOlt7IkkiOnsiTiI6IjEifSwibmFtZSI6eyJTIjoicHV0YW5kdXBkYXRlIn19LHsiSSI6eyJOIjoiMCJ9LCJuYW1lIjp7IlMiOiJjcmVhdGVhbmRyZXBsYWNlIn19XSwiU2Nhbm5lZENvdW50IjoyfQ==" } }, { "ID": "604dec6415949977", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "67" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoicHV0YW5kdXBkYXRlIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "S158E883RIDHTSI2321NLQH9CVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "58e4f036bcb03fae", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiY3JlYXRlYW5kcmVwbGFjZSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "1HI9ERT394QO5UR9VJMFHDI6LRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "40b93c62d1c5d82b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "185" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7ImF1dGhvciI6eyJNIjp7IkZpcnN0Ijp7IlMiOiJNaWtoYWlsIn0sIkxhc3QiOnsiUyI6IkJ1bGdha292In19fSwibmFtZSI6eyJTIjoiVGhlIEhlYXJ0IG9mIGEgRG9nIn0sInB1Yl95ZWFycyI6eyJMIjpbeyJOIjoiMTk2OCJ9LHsiTiI6IjE5ODcifV19fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "VHUPDIC2E8DNTGE6OV7CF132M7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "6df8b289b543f9b2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "282" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJhdXRob3IiOnsiTSI6eyJGaXJzdCI6eyJTIjoiTWlraGFpbCJ9LCJMYXN0Ijp7IlMiOiJCdWxnYWtvdiJ9fX0sIm5hbWUiOnsiUyI6IlRoZSBNYXN0ZXIgYW5kIE1hcmdhcml0YSJ9LCJwdWJfeWVhcnMiOnsiTCI6W3siTiI6IjE5NjcifSx7Ik4iOiIxOTczIn1dfX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "4JBMGEV8FF0U4CRUKJV09LQR43VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "974ac8a533838abe", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "147" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJUaGUgTWFzdGVyIGFuZCBNYXJnYXJpdGEifX0seyJuYW1lIjp7IlMiOiJUaGUgSGVhcnQgb2YgYSBEb2cifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "356" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "704779417" ], "X-Amzn-Requestid": [ "563UIC84H9M2C2N6ALLIF7T3H7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJwdWJfeWVhcnMiOnsiTCI6W3siTiI6IjE5NjcifSx7Ik4iOiIxOTczIn1dfSwibmFtZSI6eyJTIjoiVGhlIE1hc3RlciBhbmQgTWFyZ2FyaXRhIn0sImF1dGhvciI6eyJNIjp7Ikxhc3QiOnsiUyI6IkJ1bGdha292In0sIkZpcnN0Ijp7IlMiOiJNaWtoYWlsIn19fX0seyJwdWJfeWVhcnMiOnsiTCI6W3siTiI6IjE5NjgifSx7Ik4iOiIxOTg3In1dfSwibmFtZSI6eyJTIjoiVGhlIEhlYXJ0IG9mIGEgRG9nIn0sImF1dGhvciI6eyJNIjp7Ikxhc3QiOnsiUyI6IkJ1bGdha292In0sIkZpcnN0Ijp7IlMiOiJNaWtoYWlsIn19fX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "12d4c7265ab3a9ca", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "192" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoiYXV0aG9yIiwiIzEiOiJMYXN0In0sIkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMiOnsiOjAiOnsiUyI6IkJ1bGdha292In19LCJGaWx0ZXJFeHByZXNzaW9uIjoiIzAuIzEgPSA6MCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "338" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2286982984" ], "X-Amzn-Requestid": [ "AAHQT6HDJ3VRAMGG5M7K6M1VMRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MiwiSXRlbXMiOlt7InB1Yl95ZWFycyI6eyJMIjpbeyJOIjoiMTk2OCJ9LHsiTiI6IjE5ODcifV19LCJuYW1lIjp7IlMiOiJUaGUgSGVhcnQgb2YgYSBEb2cifSwiYXV0aG9yIjp7Ik0iOnsiTGFzdCI6eyJTIjoiQnVsZ2Frb3YifSwiRmlyc3QiOnsiUyI6Ik1pa2hhaWwifX19fSx7InB1Yl95ZWFycyI6eyJMIjpbeyJOIjoiMTk2NyJ9LHsiTiI6IjE5NzMifV19LCJuYW1lIjp7IlMiOiJUaGUgTWFzdGVyIGFuZCBNYXJnYXJpdGEifSwiYXV0aG9yIjp7Ik0iOnsiTGFzdCI6eyJTIjoiQnVsZ2Frb3YifSwiRmlyc3QiOnsiUyI6Ik1pa2hhaWwifX19fV0sIlNjYW5uZWRDb3VudCI6Mn0=" } }, { "ID": "09c7784e15f4af01", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "79" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiVGhlIE1hc3RlciBhbmQgTWFyZ2FyaXRhIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PU539LE2VF77CLELMSO92IQBTNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "a24f244b66c81996", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiVGhlIEhlYXJ0IG9mIGEgRG9nIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:53 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "GD2APQ8ND6R9MSNKN6BPHOOMSRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/Get.replay000066400000000000000000001626631367004507500263210ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNJJ46IZv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "51efb935db555723", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "EO1P1SNRJBDCSOE1MOQ60O57BNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "191a74018f9cb01e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "664" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3653873385" ], "X-Amzn-Requestid": [ "UH5S62VS84OU2BAIP0K3FOPNGBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NCwiSXRlbXMiOlt7IkV0YWciOnsiUyI6IjIyMzgwMzM2LTIzYjctNGFhNi1hNTc5LWM1Yzg0Y2EzZGNmNSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZU1hcCJ9LCJzIjp7IlMiOiJiIn19LHsiRXRhZyI6eyJTIjoiOTY0ZTA1OWQtYWIyOC00NmY0LTlkNGEtMjg1N2U5N2VmYjM5In0sIm5hbWUiOnsiUyI6InRlc3RSZXZpc2lvbk1hcCJ9LCJzIjp7IlMiOiJhIn19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7IlMiOiJiIn0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiUyI6IjUwNGU1ZTc3LTIzM2UtNDhlMy1hY2MxLTMzZjYzYTNjMDUxZSJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZVN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fSx7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoiYSJ9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7IlMiOiJmNzkwYjg3Zi03YmJkLTQ0NWEtYjgyMS01YmQ1MWU5NjQ5ZGEifSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX19XSwiU2Nhbm5lZENvdW50Ijo0fQ==" } }, { "ID": "64cc3be86ead55fb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "69" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VNYXAifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "3R6DOBUSKVTIUFN2AA36SLOC63VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5608ae928be4321b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "GK1J5ABFC2OCLGN63AKPST5987VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9bcc8f48dd329b8f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "75DGKNV19HNM8O7Q725CK7VV17VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e06809241dede173", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "72" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "0UB97Q5MD6UVC4PVHNT14MHL2JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "7d9ac7d19c589c76", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "227" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjY4NzVhYjk4LTEyMDQtNGZiZi1hYjZiLTk3OTg4ZTIwYWIwMSJ9LCJmIjp7Ik4iOiIzMi4zIn0sImkiOnsiTiI6Ijk1In0sIm0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldE1hcCJ9LCJzIjp7IlMiOiJhIHN0cmluZyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "2MVMN1H84PP813L4DDPU2PIUMFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ed0e483a1a04c90f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "97" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0TWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "245" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1484233521" ], "X-Amzn-Requestid": [ "QK0RDG02GT2FJT6EQKVDH54HS7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJpIjp7Ik4iOiI5NSJ9LCJzIjp7IlMiOiJhIHN0cmluZyJ9LCJtIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIm5hbWUiOnsiUyI6InRlc3RHZXRNYXAifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNjg3NWFiOTgtMTIwNC00ZmJmLWFiNmItOTc5ODhlMjBhYjAxIn0sImYiOnsiTiI6IjMyLjMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "7434358c9bdc5c93", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "285" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NDFmYjYyYS02ODA0LTQ4NjktOTdiOS1hZjM4MWNhZjhmNjEifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMzIuMyJ9LCJJIjp7Ik4iOiI5NSJ9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIlN0Ijp7IlMiOiJhIHN0cmluZyJ9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "8NNBOLI1LGTDQDJ35AVUNGTOKVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "7874c607b4b82f36", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "303" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "942355008" ], "X-Amzn-Requestid": [ "4VH7Q47KP5JLV1OVKBNFLII4FNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEgc3RyaW5nIn0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMzIuMyJ9LCJJIjp7Ik4iOiI5NSJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3QifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNzQxZmI2MmEtNjgwNC00ODY5LTk3YjktYWYzODFjYWY4ZjYxIn19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "c1637b3a2c6a5d43", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "229" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQwNzIwOWEwLWFjZWUtNDQ2My1hNjU1LTY0NmJjY2JlMDRkMSJ9LCJmIjp7Ik4iOiIzMi4zIn0sImkiOnsiTiI6Ijk1In0sIm0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldE1hcEZQIn0sInMiOnsiUyI6ImEgc3RyaW5nIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "1C1HLB4EKSSS0VJ1BFLBMN398VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "02470f329b02ef98", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJFeHByZXNzaW9uQXR0cmlidXRlTmFtZXMiOnsiIzAiOiJmIiwiIzEiOiJtIiwiIzIiOiJiIiwiIzMiOiJEb2NzdG9yZVJldmlzaW9uIiwiIzQiOiJuYW1lIn0sIktleXMiOlt7Im5hbWUiOnsiUyI6InRlc3RHZXRNYXBGUCJ9fV0sIlByb2plY3Rpb25FeHByZXNzaW9uIjoiIzAsICMxLiMyLCAjMywgIzQifX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "195" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "4185948234" ], "X-Amzn-Requestid": [ "LABHPIOGDHTN49AQ5GP9SEHRGFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJtIjp7Ik0iOnsiYiI6eyJTIjoidHdvIn19fSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNDA3MjA5YTAtYWNlZS00NDYzLWE2NTUtNjQ2YmNjYmUwNGQxIn0sImYiOnsiTiI6IjMyLjMifSwibmFtZSI6eyJTIjoidGVzdEdldE1hcEZQIn19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "5c26c27cc9ef19be", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "287" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkOWM2ZTBiYS1iZTBlLTRlZDctODVlMS1kMGJmYjRlNmM0ZTMifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMzIuMyJ9LCJJIjp7Ik4iOiI5NSJ9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIlN0Ijp7IlMiOiJhIHN0cmluZyJ9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3RGUCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "8M3B22E926A0U45K1H08RCRJ0VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f8b04dea156ed7d8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "238" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJFeHByZXNzaW9uQXR0cmlidXRlTmFtZXMiOnsiIzAiOiJTdCIsIiMxIjoiTSIsIiMyIjoiYSIsIiMzIjoiRG9jc3RvcmVSZXZpc2lvbiIsIiM0IjoibmFtZSJ9LCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0RlAifX1dLCJQcm9qZWN0aW9uRXhwcmVzc2lvbiI6IiMwLCAjMS4jMiwgIzMsICM0In19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "203" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1157937225" ], "X-Amzn-Requestid": [ "8S4E47BNKTH18QBHD806P1TG5NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJTdCI6eyJTIjoiYSBzdHJpbmcifSwiTSI6eyJNIjp7ImEiOnsiUyI6Im9uZSJ9fX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ5YzZlMGJhLWJlMGUtNGVkNy04NWUxLWQwYmZiNGU2YzRlMyJ9LCJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0RlAifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "bf8765869f9bb8c7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "287" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkMmI0YzgyNy02Yjc1LTRkNjEtOGQ3MS01ZGU4MjhkMzI1NjQifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMzIuMyJ9LCJJIjp7Ik4iOiI5NSJ9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIlN0Ijp7IlMiOiJhIHN0cmluZyJ9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3RXQyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "887J4O8QIKIIFOSN74F37UL2CBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e1c743006db4b0c9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "210" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJFeHByZXNzaW9uQXR0cmlidXRlTmFtZXMiOnsiIzAiOiJzdCIsIiMxIjoibSIsIiMyIjoiYSIsIiMzIjoibmFtZSJ9LCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0V0MifX1dLCJQcm9qZWN0aW9uRXhwcmVzc2lvbiI6IiMwLCAjMS4jMiwgIzMifX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "89" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:30 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2845408016" ], "X-Amzn-Requestid": [ "NTR0UPSGA7MR7QRHPFGU2GJLPBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0V0MifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "1003c8fbefa37f40", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "99" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJkb2VzTm90RXhpc3QifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "57" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "289144682" ], "X-Amzn-Requestid": [ "966PBP5OADH8BAT5JGPM7DEH0FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbXX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "f13b79809978ed72", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "84QIR6LPHN8NKBDIL2J84IMQ57VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "cc926b7888aca134", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1163" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2414725089" ], "X-Amzn-Requestid": [ "C7KRH42AD7PR1UE00FHD37UJ6FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NSwiSXRlbXMiOlt7ImkiOnsiTiI6Ijk1In0sInMiOnsiUyI6ImEgc3RyaW5nIn0sIm0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldE1hcEZQIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQwNzIwOWEwLWFjZWUtNDQ2My1hNjU1LTY0NmJjY2JlMDRkMSJ9LCJmIjp7Ik4iOiIzMi4zIn19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7IlMiOiJhIHN0cmluZyJ9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjMyLjMifSwiSSI6eyJOIjoiOTUifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJNIjp7ImEiOnsiUyI6Im9uZSJ9LCJiIjp7IlMiOiJ0d28ifX19LCJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijc0MWZiNjJhLTY4MDQtNDg2OS05N2I5LWFmMzgxY2FmOGY2MSJ9fSx7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoiYSBzdHJpbmcifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIzMi4zIn0sIkkiOnsiTiI6Ijk1In0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdFdDIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQyYjRjODI3LTZiNzUtNGQ2MS04ZDcxLTVkZTgyOGQzMjU2NCJ9fSx7ImkiOnsiTiI6Ijk1In0sInMiOnsiUyI6ImEgc3RyaW5nIn0sIm0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldE1hcCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI2ODc1YWI5OC0xMjA0LTRmYmYtYWI2Yi05Nzk4OGUyMGFiMDEifSwiZiI6eyJOIjoiMzIuMyJ9fSx7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoiYSBzdHJpbmcifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIzMi4zIn0sIkkiOnsiTiI6Ijk1In0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdEZQIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ5YzZlMGJhLWJlMGUtNGVkNy04NWUxLWQwYmZiNGU2YzRlMyJ9fV0sIlNjYW5uZWRDb3VudCI6NX0=" } }, { "ID": "daf10822e22ef617", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "67" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldE1hcEZQIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MMCVSKDHKVPSRMT3R58NRPU9ABVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "11de5db126e4db69", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "8DT662AGK0TKIKGFMCK04JMQLRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d3394377827f8b77", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "65" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldE1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "JVLJ7B270ELRGLNP4Q5P0PR65BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4e6014ac883dce73", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdFdDIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "5PPRIQQJVUN1F31RO3N5QMPFTRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3d7e745f1cb8d02d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdEdldFN0cnVjdEZQIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "3ESABB09GQ7K6PT1DMGVAVJ8V7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "aeddb10a661f92da", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6Ijk0MWY1ZDZlLTgzMDEtNGYzYy1hMGM5LTY1YTlkN2I2YzBiMyJ9LCJmIjp7Ik4iOiIzMi4zIn0sImkiOnsiTiI6Ijk1In0sIm0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldE1hcCJ9LCJzIjp7IlMiOiJhIHN0cmluZyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "IMMQE43PF80QJH35CC1K7UROKRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f62e2ad20743ee58", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "97" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0TWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "233" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1333882311" ], "X-Amzn-Requestid": [ "SR6LGM22T2G5HH4BPF3HCIM6HJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJpIjp7Ik4iOiI5NSJ9LCJFdGFnIjp7IlMiOiI5NDFmNWQ2ZS04MzAxLTRmM2MtYTBjOS02NWE5ZDdiNmMwYjMifSwicyI6eyJTIjoiYSBzdHJpbmcifSwibSI6eyJNIjp7ImEiOnsiUyI6Im9uZSJ9LCJiIjp7IlMiOiJ0d28ifX19LCJuYW1lIjp7IlMiOiJ0ZXN0R2V0TWFwIn0sImYiOnsiTiI6IjMyLjMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "cd300d25546e2cff", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "285" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiIyNDBjZmQxMi1kNmRjLTRjMDktOWNiZS1lZjY5ZDhhYzAwNzkifSwiRiI6eyJOIjoiMzIuMyJ9LCJJIjp7Ik4iOiI5NSJ9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIlN0Ijp7IlMiOiJhIHN0cmluZyJ9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MADVV0T85V2CV1JQH9IG1QNRKBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "6554f4dbf61cf542", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "303" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2262544631" ], "X-Amzn-Requestid": [ "F8HH9U53M82V5IMC2NEPMHVISFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEgc3RyaW5nIn0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMzIuMyJ9LCJJIjp7Ik4iOiI5NSJ9LCJFdGFnIjp7IlMiOiIyNDBjZmQxMi1kNmRjLTRjMDktOWNiZS1lZjY5ZDhhYzAwNzkifSwiTSI6eyJNIjp7ImEiOnsiUyI6Im9uZSJ9LCJiIjp7IlMiOiJ0d28ifX19LCJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "11bc88faac7b5513", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "217" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6ImUzOWNkMDZlLTQyODgtNDdkMC1iMGE1LThkNGRlMDE4ZmJhYiJ9LCJmIjp7Ik4iOiIzMi4zIn0sImkiOnsiTiI6Ijk1In0sIm0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifSwiYiI6eyJTIjoidHdvIn19fSwibmFtZSI6eyJTIjoidGVzdEdldE1hcEZQIn0sInMiOnsiUyI6ImEgc3RyaW5nIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KEA39FOJ814OD6LTPVK1CF7BV3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "07b6473c06ae21d4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "222" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJFeHByZXNzaW9uQXR0cmlidXRlTmFtZXMiOnsiIzAiOiJmIiwiIzEiOiJtIiwiIzIiOiJiIiwiIzMiOiJFdGFnIiwiIzQiOiJuYW1lIn0sIktleXMiOlt7Im5hbWUiOnsiUyI6InRlc3RHZXRNYXBGUCJ9fV0sIlByb2plY3Rpb25FeHByZXNzaW9uIjoiIzAsICMxLiMyLCAjMywgIzQifX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "183" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:31 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1458499751" ], "X-Amzn-Requestid": [ "CNVCS9ME363CP8U5CM16N80F8RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiJlMzljZDA2ZS00Mjg4LTQ3ZDAtYjBhNS04ZDRkZTAxOGZiYWIifSwibSI6eyJNIjp7ImIiOnsiUyI6InR3byJ9fX0sImYiOnsiTiI6IjMyLjMifSwibmFtZSI6eyJTIjoidGVzdEdldE1hcEZQIn19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "49b19d8a75df61eb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "287" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiI2YjFlNWU0ZC1mODNlLTRiMDAtYTJjOC05OWZlNzdhZDc1MzUifSwiRiI6eyJOIjoiMzIuMyJ9LCJJIjp7Ik4iOiI5NSJ9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIlN0Ijp7IlMiOiJhIHN0cmluZyJ9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3RGUCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "JDNJFVQLN484VDT2OO0QRQJLIRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5c777f4adebc666b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "226" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJFeHByZXNzaW9uQXR0cmlidXRlTmFtZXMiOnsiIzAiOiJTdCIsIiMxIjoiTSIsIiMyIjoiYSIsIiMzIjoiRXRhZyIsIiM0IjoibmFtZSJ9LCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0RlAifX1dLCJQcm9qZWN0aW9uRXhwcmVzc2lvbiI6IiMwLCAjMS4jMiwgIzMsICM0In19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "191" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3417632980" ], "X-Amzn-Requestid": [ "859GNMQ6A4BMPG3N07NOSRNM3RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiI2YjFlNWU0ZC1mODNlLTRiMDAtYTJjOC05OWZlNzdhZDc1MzUifSwiU3QiOnsiUyI6ImEgc3RyaW5nIn0sIk0iOnsiTSI6eyJhIjp7IlMiOiJvbmUifX19LCJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0RlAifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "215259109e755677", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "287" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiJkOGM4Y2YzOC0wYzE5LTQ5NTMtOGM5ZS1iNjZlOGQ2YzBhYWMifSwiRiI6eyJOIjoiMzIuMyJ9LCJJIjp7Ik4iOiI5NSJ9LCJNIjp7Ik0iOnsiYSI6eyJTIjoib25lIn0sImIiOnsiUyI6InR3byJ9fX0sIlN0Ijp7IlMiOiJhIHN0cmluZyJ9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RHZXRTdHJ1Y3RXQyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "C0MLHQV3GQME93FHR722VPK0V7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4683340ab699a60d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "210" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJFeHByZXNzaW9uQXR0cmlidXRlTmFtZXMiOnsiIzAiOiJzdCIsIiMxIjoibSIsIiMyIjoiYSIsIiMzIjoibmFtZSJ9LCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0V0MifX1dLCJQcm9qZWN0aW9uRXhwcmVzc2lvbiI6IiMwLCAjMS4jMiwgIzMifX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "89" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2845408016" ], "X-Amzn-Requestid": [ "AQ4IJU1PHQG8R392O3PJ9REKE7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0R2V0U3RydWN0V0MifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "4e6aa2ea0c80ea9f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "99" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJkb2VzTm90RXhpc3QifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "57" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:32 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "289144682" ], "X-Amzn-Requestid": [ "4HG51FER3T4UCNNGL8F34957VJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbXX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/GetQuery.replay000066400000000000000000002165041367004507500273410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNeGHF0Pv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "a2637107ab7a37bf", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1407" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "856804657" ], "X-Amzn-Requestid": [ "68O2GC03FHCR842QO9C4M52CMRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6IkdhbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9LHsiQXR0cmlidXRlTmFtZSI6IlBsYXllciIsIkF0dHJpYnV0ZVR5cGUiOiJTIn0seyJBdHRyaWJ1dGVOYW1lIjoiU2NvcmUiLCJBdHRyaWJ1dGVUeXBlIjoiTiJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDc5MTY0NjFFOSwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyI6W3siSW5kZXhBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yL2luZGV4L2dsb2JhbCIsIkluZGV4TmFtZSI6Imdsb2JhbCIsIkluZGV4U2l6ZUJ5dGVzIjoxMDcsIkluZGV4U3RhdHVzIjoiQUNUSVZFIiwiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJQbGF5ZXIiLCJLZXlUeXBlIjoiSEFTSCJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJLZXlUeXBlIjoiUkFOR0UifV0sIlByb2plY3Rpb24iOnsiUHJvamVjdGlvblR5cGUiOiJBTEwifSwiUHJvdmlzaW9uZWRUaHJvdWdocHV0Ijp7Ik51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9fV0sIkl0ZW1Db3VudCI6MSwiS2V5U2NoZW1hIjpbeyJBdHRyaWJ1dGVOYW1lIjoiR2FtZSIsIktleVR5cGUiOiJIQVNIIn0seyJBdHRyaWJ1dGVOYW1lIjoiUGxheWVyIiwiS2V5VHlwZSI6IlJBTkdFIn1dLCJMb2NhbFNlY29uZGFyeUluZGV4ZXMiOlt7IkluZGV4QXJuIjoiYXJuOmF3czpkeW5hbW9kYjp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOnRhYmxlL2RvY3N0b3JlLXRlc3QtMi9pbmRleC9sb2NhbCIsIkluZGV4TmFtZSI6ImxvY2FsIiwiSW5kZXhTaXplQnl0ZXMiOjEwNywiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJHYW1lIiwiS2V5VHlwZSI6IkhBU0gifSx7IkF0dHJpYnV0ZU5hbWUiOiJTY29yZSIsIktleVR5cGUiOiJSQU5HRSJ9XSwiUHJvamVjdGlvbiI6eyJQcm9qZWN0aW9uVHlwZSI6IkFMTCJ9fV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJOdW1iZXJPZkRlY3JlYXNlc1RvZGF5IjowLCJSZWFkQ2FwYWNpdHlVbml0cyI6NSwiV3JpdGVDYXBhY2l0eVVuaXRzIjo1fSwiVGFibGVBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yIiwiVGFibGVJZCI6IjVjNGM2MDE0LTdlNmEtNGRiNy05M2RlLWExNzQ1NTJjZjc4ZCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiIsIlRhYmxlU2l6ZUJ5dGVzIjoxMDcsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "8a9033a84c520ba6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "54" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1427" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2335204793" ], "X-Amzn-Requestid": [ "BGVMMG6LB220HBRBF7QTC5JSFVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkMTRjMGU1ZS0wODk3LTRlM2YtOGY0MC1hMjU4N2UzZDUwZDQifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAzLTIwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTI3NWYzY2QtMmNlMy00YjUzLWEzMDktOTQwNzk3YzBhZWIwIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjE5MCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU1ZjJkODIxLTI3NmUtNDEzZS1hZjgyLWQ4NjRiZTkxMWMxMiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkNmM5MjAxNi0xYzA3LTQ4ZWMtYTllYS05NzhlNWYyMWUxMWQifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAyLTAxVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifSwiU2NvcmUiOnsiTiI6IjgxIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNzliMDliOGUtMzRhZi00M2NiLTgxOTctYjZiZjgyYjAxYTAzIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJmcmFuIn0sIlNjb3JlIjp7Ik4iOiIzMyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijc2ODMyMjBkLTcwNjItNGZhOS05NTQ2LTc4ODI4YjY3NDU5MiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijg2NDYxOGJmLTE3MTUtNDkzMi04MDE2LTlkOWJkMzBlOGEwYyJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDMtMTNUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImRlOTNhNGQ0LWVmZTEtNDVkZi1hNzY3LTVlYzI5ZjlmNjI3NyJ9fV0sIlNjYW5uZWRDb3VudCI6OH0=" } }, { "ID": "8ead5cabb61158e6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "260" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZGU5M2E0ZDQtZWZlMS00NWRmLWE3NjctNWVjMjlmOWY2Mjc3In19LCJLZXkiOnsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6InBhdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MF6Q2U529H23JI4NCITC58HLOFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "35b25895c9bc3875", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "252" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYTI3NWYzY2QtMmNlMy00YjUzLWEzMDktOTQwNzk3YzBhZWIwIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "R9B54AIV54E1N0U78CDJR3G95NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "298e16dadc57ac2e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "261" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzliMDliOGUtMzRhZi00M2NiLTgxOTctYjZiZjgyYjAxYTAzIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "IUQB5T7V8OHOCQ7MIQNB4U74GVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "29f7e3ceec2ec522", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "251" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDZjOTIwMTYtMWMwNy00OGVjLWE5ZWEtOTc4ZTVmMjFlMTFkIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6InBhdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "VRBKQEBPM4TRE59OF9PLNN9O1NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "076405df150862a1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "261" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzY4MzIyMGQtNzA2Mi00ZmE5LTk1NDYtNzg4MjhiNjc0NTkyIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "LM6FQLIKE79NBJAIHRPHOTN8U3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "69aeeb25b24f5808", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "251" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZTVmMmQ4MjEtMjc2ZS00MTNlLWFmODItZDg2NGJlOTExYzEyIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6Im1lbCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "ONTC55629VVRI9HHEVNPTENHI3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d202bb7d11ec9d86", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "260" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiODY0NjE4YmYtMTcxNS00OTMyLTgwMTYtOWQ5YmQzMGU4YTBjIn19LCJLZXkiOnsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJQbGF5ZXIiOnsiUyI6Im1lbCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PS0JTJ1JM5AUH0A14516G1U94JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "8c348148554da084", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "254" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDE0YzBlNWUtMDg5Ny00ZTNmLThmNDAtYTI1ODdlM2Q1MGQ0In19LCJLZXkiOnsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJQbGF5ZXIiOnsiUyI6ImJpbGxpZSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:50 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "GQU582GA7VAD0E61SS2GBD1767VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "06c28aa75a2cdf03", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "216" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQxNjNhMGY4LTAxZGMtNDA2Yy04YzY1LWM4ZmY0NmZlMmQ1NSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoiYW5keSJ9LCJTY29yZSI6eyJOIjoiODEifSwiVGltZSI6eyJTIjoiMjAxOS0wMi0wMVQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "4OOF91CNTPLM8JCQCN778O3G87VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "be1cdf54715da6d7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "207" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImZhZjUxZDQwLTZmMDMtNDc1Mi04OTlhLTJlZTdkMTg0NWFlMiJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiVGltZSI6eyJTIjoiMjAxOS0wNC0wMVQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "LHE1S34TJUN4A7KKO0P13CKBS3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5ec4ff79468287ff", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "207" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImE2ZjU4MjUwLTkwNGEtNDBmYy05MzBlLWZhZTg5NTFjZDA4MCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoiZnJhbiJ9LCJTY29yZSI6eyJOIjoiMzMifSwiVGltZSI6eyJTIjoiMjAxOS0wMy0yMFQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "TTA26L3GDAKI3U9A0LMABMDE73VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b9a6cbf00f7c8cd4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJUaW1lIjp7IlMiOiIyMDE5LTA0LTEwVDAwOjAwOjAwWiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "UIGFFIA2LNS0T6UJKEBMUEN2AJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f3288ce6fd0f0c70", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJUaW1lIjp7IlMiOiIyMDE5LTAzLTEzVDAwOjAwOjAwWiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "J1FFLVA8IHAPPJT1CSMIIN4FHVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "a91f29e31d3a63e2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "207" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ0YWVmZWVlLTM1ZDAtNGY2OC05NTUyLWI5MjMyNWNkZTg1MSJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiIxOTAifSwiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "UKC2L5PKNRUT1P71NBMIRPAKL3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b5989dbcd147d5f5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "216" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjczNWY2NGE0LTBkOWEtNGRlZi1hOTljLTUwZWMxNTkxZWRiNiJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlBsYXllciI6eyJTIjoiZnJhbiJ9LCJTY29yZSI6eyJOIjoiMzMifSwiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "3M3QBU8EJ4TLCHVPKKDTRIA3MVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "608bd6199c9bae49", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "210" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijc2MmNmNWE2LTIwZGMtNDMyNC05MDU4LTA1M2M5NWUyNDc3YiJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiVGltZSI6eyJTIjoiMjAxOS0wNC0xMFQwMDowMDowMFoifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MLR5433Q3NI4N7PD89HBUT6JF3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9936cdf670de8689", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "54" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1427" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "616891143" ], "X-Amzn-Requestid": [ "CK3DR2KU2ODJENOQV274H50SDFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAzLTIwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTZmNTgyNTAtOTA0YS00MGZjLTkzMGUtZmFlODk1MWNkMDgwIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjE5MCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ0YWVmZWVlLTM1ZDAtNGY2OC05NTUyLWI5MjMyNWNkZTg1MSJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmYWY1MWQ0MC02ZjAzLTQ3NTItODk5YS0yZWU3ZDE4NDVhZTIifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAyLTAxVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifSwiU2NvcmUiOnsiTiI6IjgxIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJmcmFuIn0sIlNjb3JlIjp7Ik4iOiIzMyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjczNWY2NGE0LTBkOWEtNGRlZi1hOTljLTUwZWMxNTkxZWRiNiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDMtMTNUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9fV0sIlNjYW5uZWRDb3VudCI6OH0=" } }, { "ID": "408547fd72cf99b1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "184" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiWm9tYmllIERNViJ9fSwiS2V5Q29uZGl0aW9uRXhwcmVzc2lvbiI6IiMwID0gOjAiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "717" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2394800264" ], "X-Amzn-Requestid": [ "79PHB1TS6USFKSPHVE00HBR4S3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAzLTIwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTZmNTgyNTAtOTA0YS00MGZjLTkzMGUtZmFlODk1MWNkMDgwIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjE5MCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ0YWVmZWVlLTM1ZDAtNGY2OC05NTUyLWI5MjMyNWNkZTg1MSJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmYWY1MWQ0MC02ZjAzLTQ3NTItODk5YS0yZWU3ZDE4NDVhZTIifX1dLCJTY2FubmVkQ291bnQiOjR9" } }, { "ID": "5020e13bef4156ae", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "172" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IlNjb3JlIn0sIkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMiOnsiOjAiOnsiTiI6IjEwMCJ9fSwiRmlsdGVyRXhwcmVzc2lvbiI6IiMwID4gOjAiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "4088630506" ], "X-Amzn-Requestid": [ "CEEDVLPGLF83IM6LQMU8CVL9HRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MywiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJUaW1lIjp7IlMiOiIyMDE5LTA0LTE4VDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6Im1lbCJ9LCJTY29yZSI6eyJOIjoiMTkwIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDRhZWZlZWUtMzVkMC00ZjY4LTk1NTItYjkyMzI1Y2RlODUxIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0wMVQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJwYXQifSwiU2NvcmUiOnsiTiI6IjEyMCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImZhZjUxZDQwLTZmMDMtNDc1Mi04OTlhLTJlZTdkMTg0NWFlMiJ9fV0sIlNjYW5uZWRDb3VudCI6OH0=" } }, { "ID": "29aa3c98fdf633d4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "203" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IlBsYXllciJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJiaWxsaWUifX0sIkluZGV4TmFtZSI6Imdsb2JhbCIsIktleUNvbmRpdGlvbkV4cHJlc3Npb24iOiIjMCA9IDowIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "210" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "709394579" ], "X-Amzn-Requestid": [ "HU2I7NJCE407RVHECD9JHQV8OJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MSwiSXRlbXMiOlt7IlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX1dLCJTY2FubmVkQ291bnQiOjF9" } }, { "ID": "3936f420d223db08", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "241" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IlBsYXllciIsIiMxIjoiR2FtZSJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJhbmR5In0sIjoxIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn19LCJLZXlDb25kaXRpb25FeHByZXNzaW9uIjoiKCMwID0gOjApIEFORCAoIzEgPSA6MSkiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "216" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2852895638" ], "X-Amzn-Requestid": [ "10539DT0RR7ED758LV05PIEQ9BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MSwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDItMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYW5keSJ9LCJTY29yZSI6eyJOIjoiODEifSwiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkMTYzYTBmOC0wMWRjLTQwNmMtOGM2NS1jOGZmNDZmZTJkNTUifX1dLCJTY2FubmVkQ291bnQiOjF9" } }, { "ID": "221f7264264ed838", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "259" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IlNjb3JlIiwiIzEiOiJQbGF5ZXIifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJOIjoiMTAwIn0sIjoxIjp7IlMiOiJwYXQifX0sIkZpbHRlckV4cHJlc3Npb24iOiIjMCA8IDowIiwiSW5kZXhOYW1lIjoiZ2xvYmFsIiwiS2V5Q29uZGl0aW9uRXhwcmVzc2lvbiI6IiMxID0gOjEiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "215" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3601370604" ], "X-Amzn-Requestid": [ "1G8M55P58MBCC6GBODPU2PFUB7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MSwiSXRlbXMiOlt7IlBsYXllciI6eyJTIjoicGF0In0sIlRpbWUiOnsiUyI6IjIwMTktMDMtMTNUMDA6MDA6MDBaIn0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9fV0sIlNjYW5uZWRDb3VudCI6Mn0=" } }, { "ID": "d35f1950771e967b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "259" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUiLCIjMSI6IlNjb3JlIn0sIkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMiOnsiOjAiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiOjEiOnsiTiI6IjUwIn19LCJJbmRleE5hbWUiOiJsb2NhbCIsIktleUNvbmRpdGlvbkV4cHJlc3Npb24iOiIoIzAgPSA6MCkgQU5EICgjMSA+PSA6MSkiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "393" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1002412450" ], "X-Amzn-Requestid": [ "2I8ARFP86IO6558VABLJFN2IDFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MiwiSXRlbXMiOlt7IlBsYXllciI6eyJTIjoibWVsIn0sIlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiU2NvcmUiOnsiTiI6IjYwIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlBsYXllciI6eyJTIjoiYW5keSJ9LCJUaW1lIjp7IlMiOiIyMDE5LTAyLTAxVDAwOjAwOjAwWiJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIlNjb3JlIjp7Ik4iOiI4MSJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkMTYzYTBmOC0wMWRjLTQwNmMtOGM2NS1jOGZmNDZmZTJkNTUifX1dLCJTY2FubmVkQ291bnQiOjJ9" } }, { "ID": "b5bc1ba7ae54abd7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "262" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IlBsYXllciIsIiMxIjoiVGltZSJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJtZWwifSwiOjEiOnsiUyI6IjIwMTktMDQtMDFUMDA6MDA6MDBaIn19LCJJbmRleE5hbWUiOiJnbG9iYWwiLCJLZXlDb25kaXRpb25FeHByZXNzaW9uIjoiKCMwID0gOjApIEFORCAoIzEgPiA6MSkiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "384" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:51 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1602743891" ], "X-Amzn-Requestid": [ "NRGKKM4H8IOLR448QBPG1U30HFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MiwiSXRlbXMiOlt7IlBsYXllciI6eyJTIjoibWVsIn0sIlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlBsYXllciI6eyJTIjoibWVsIn0sIlRpbWUiOnsiUyI6IjIwMTktMDQtMThUMDA6MDA6MDBaIn0sIlNjb3JlIjp7Ik4iOiIxOTAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkNGFlZmVlZS0zNWQwLTRmNjgtOTU1Mi1iOTIzMjVjZGU4NTEifX1dLCJTY2FubmVkQ291bnQiOjJ9" } }, { "ID": "d814a883a1ee4e31", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IlNjb3JlIiwiIzEiOiJUaW1lIn0sIkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMiOnsiOjAiOnsiTiI6IjUwIn0sIjoxIjp7IlMiOiIyMDE5LTA0LTAxVDAwOjAwOjAwWiJ9fSwiRmlsdGVyRXhwcmVzc2lvbiI6IigjMCA+PSA6MCkgQU5EICgjMSA+IDoxKSIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "556" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:52 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2714569179" ], "X-Amzn-Requestid": [ "QSDPHGPPD60O0MUOKKGFEGM0P7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MywiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJUaW1lIjp7IlMiOiIyMDE5LTA0LTE4VDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6Im1lbCJ9LCJTY29yZSI6eyJOIjoiMTkwIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDRhZWZlZWUtMzVkMC00ZjY4LTk1NTItYjkyMzI1Y2RlODUxIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xMFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjYwIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZTQwZTYwMjQtZTY1MC00ZWM5LWJiYjUtNjI1MGUyYzkxNjYyIn19XSwiU2Nhbm5lZENvdW50Ijo4fQ==" } }, { "ID": "352efe4d126b0cff", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "54" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1427" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:52 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "616891143" ], "X-Amzn-Requestid": [ "DREDJOUDBHPNS9T05SE7P3AIHBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAzLTIwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTZmNTgyNTAtOTA0YS00MGZjLTkzMGUtZmFlODk1MWNkMDgwIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjE5MCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ0YWVmZWVlLTM1ZDAtNGY2OC05NTUyLWI5MjMyNWNkZTg1MSJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmYWY1MWQ0MC02ZjAzLTQ3NTItODk5YS0yZWU3ZDE4NDVhZTIifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAyLTAxVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifSwiU2NvcmUiOnsiTiI6IjgxIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJmcmFuIn0sIlNjb3JlIjp7Ik4iOiIzMyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjczNWY2NGE0LTBkOWEtNGRlZi1hOTljLTUwZWMxNTkxZWRiNiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDMtMTNUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9fV0sIlNjYW5uZWRDb3VudCI6OH0=" } }, { "ID": "098e623d6aafea3c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "54" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1427" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:52 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "616891143" ], "X-Amzn-Requestid": [ "05AQLN93998DP1O5FEL1ENAKHBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAzLTIwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTZmNTgyNTAtOTA0YS00MGZjLTkzMGUtZmFlODk1MWNkMDgwIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjE5MCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ0YWVmZWVlLTM1ZDAtNGY2OC05NTUyLWI5MjMyNWNkZTg1MSJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmYWY1MWQ0MC02ZjAzLTQ3NTItODk5YS0yZWU3ZDE4NDVhZTIifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAyLTAxVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifSwiU2NvcmUiOnsiTiI6IjgxIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJmcmFuIn0sIlNjb3JlIjp7Ik4iOiIzMyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjczNWY2NGE0LTBkOWEtNGRlZi1hOTljLTUwZWMxNTkxZWRiNiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDMtMTNUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9fV0sIlNjYW5uZWRDb3VudCI6OH0=" } }, { "ID": "7b8678524ccb924d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "238" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUiLCIjMSI6IlBsYXllciJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIjoxIjp7IlMiOiIuIn19LCJLZXlDb25kaXRpb25FeHByZXNzaW9uIjoiKCMwID0gOjApIEFORCAoIzEgPiA6MSkiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "748" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:52 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3837118312" ], "X-Amzn-Requestid": [ "JVU17FH5MAS543N2BT46PJQTSRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDItMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYW5keSJ9LCJTY29yZSI6eyJOIjoiODEifSwiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkMTYzYTBmOC0wMWRjLTQwNmMtOGM2NS1jOGZmNDZmZTJkNTUifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAzLTE5VDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNzM1ZjY0YTQtMGQ5YS00ZGVmLWE5OWMtNTBlYzE1OTFlZGI2In19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xMFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjYwIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZTQwZTYwMjQtZTY1MC00ZWM5LWJiYjUtNjI1MGUyYzkxNjYyIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xM1QwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJwYXQifSwiU2NvcmUiOnsiTiI6IjQ5In0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNDkwZjIxMzgtYTBkYS00ZWExLTk4YzUtMWU5Y2EyOTIyMWU1In19XSwiU2Nhbm5lZENvdW50Ijo0fQ==" } }, { "ID": "a45f85258cbf1258", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "263" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUiLCIjMSI6IlBsYXllciJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIjoxIjp7IlMiOiIuIn19LCJLZXlDb25kaXRpb25FeHByZXNzaW9uIjoiKCMwID0gOjApIEFORCAoIzEgPiA6MSkiLCJTY2FuSW5kZXhGb3J3YXJkIjpmYWxzZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0yIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "748" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:52 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3081645422" ], "X-Amzn-Requestid": [ "ND4JIPFCCOKS9U2O70UF6Q23DRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDMtMTNUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDMtMTlUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiZnJhbiJ9LCJTY29yZSI6eyJOIjoiMzMifSwiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3MzVmNjRhNC0wZDlhLTRkZWYtYTk5Yy01MGVjMTU5MWVkYjYifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAyLTAxVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifSwiU2NvcmUiOnsiTiI6IjgxIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In19XSwiU2Nhbm5lZENvdW50Ijo0fQ==" } }, { "ID": "973181156ed315a5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "169" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUiLCIjMSI6IlBsYXllciIsIiMyIjoiRG9jc3RvcmVSZXZpc2lvbiJ9LCJQcm9qZWN0aW9uRXhwcmVzc2lvbiI6IiMwLCAjMSwgIzIiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "984" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:52 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3740129946" ], "X-Amzn-Requestid": [ "HCQ4EJ086NHFP9M9L8Q5HTMRVRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNzYyY2Y1YTYtMjBkYy00MzI0LTkwNTgtMDUzYzk1ZTI0NzdiIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn19LHsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJhNmY1ODI1MC05MDRhLTQwZmMtOTMwZS1mYWU4OTUxY2QwODAifSwiUGxheWVyIjp7IlMiOiJmcmFuIn19LHsiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkNGFlZmVlZS0zNWQwLTRmNjgtOTU1Mi1iOTIzMjVjZGU4NTEifSwiUGxheWVyIjp7IlMiOiJtZWwifX0seyJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImZhZjUxZDQwLTZmMDMtNDc1Mi04OTlhLTJlZTdkMTg0NWFlMiJ9LCJQbGF5ZXIiOnsiUyI6InBhdCJ9fSx7IkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In0sIlBsYXllciI6eyJTIjoiYW5keSJ9fSx7IkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNzM1ZjY0YTQtMGQ5YS00ZGVmLWE5OWMtNTBlYzE1OTFlZGI2In0sIlBsYXllciI6eyJTIjoiZnJhbiJ9fSx7IkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZTQwZTYwMjQtZTY1MC00ZWM5LWJiYjUtNjI1MGUyYzkxNjYyIn0sIlBsYXllciI6eyJTIjoibWVsIn19LHsiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI0OTBmMjEzOC1hMGRhLTRlYTEtOThjNS0xZTljYTI5MjIxZTUifSwiUGxheWVyIjp7IlMiOiJwYXQifX1dLCJTY2FubmVkQ291bnQiOjh9" } }, { "ID": "60cf41097035a81e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUiLCIjMSI6IlBsYXllciIsIiMyIjoiU2NvcmUiLCIjMyI6IkRvY3N0b3JlUmV2aXNpb24ifSwiUHJvamVjdGlvbkV4cHJlc3Npb24iOiIjMCwgIzEsICMyLCAjMyIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1139" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:52 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3256238784" ], "X-Amzn-Requestid": [ "4SF1DHVFNQOG5VQIQBQQ34TPS3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IlBsYXllciI6eyJTIjoiYmlsbGllIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiU2NvcmUiOnsiTiI6IjExMSJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJTY29yZSI6eyJOIjoiMzMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTZmNTgyNTAtOTA0YS00MGZjLTkzMGUtZmFlODk1MWNkMDgwIn19LHsiUGxheWVyIjp7IlMiOiJtZWwifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJTY29yZSI6eyJOIjoiMTkwIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ0YWVmZWVlLTM1ZDAtNGY2OC05NTUyLWI5MjMyNWNkZTg1MSJ9fSx7IlBsYXllciI6eyJTIjoicGF0In0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiU2NvcmUiOnsiTiI6IjEyMCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmYWY1MWQ0MC02ZjAzLTQ3NTItODk5YS0yZWU3ZDE4NDVhZTIifX0seyJQbGF5ZXIiOnsiUyI6ImFuZHkifSwiR2FtZSI6eyJTIjoiUHJhaXNlIEFsbCBNb25zdGVycyJ9LCJTY29yZSI6eyJOIjoiODEifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In19LHsiUGxheWVyIjp7IlMiOiJmcmFuIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjczNWY2NGE0LTBkOWEtNGRlZi1hOTljLTUwZWMxNTkxZWRiNiJ9fSx7IlBsYXllciI6eyJTIjoibWVsIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiU2NvcmUiOnsiTiI6IjYwIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlBsYXllciI6eyJTIjoicGF0In0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiU2NvcmUiOnsiTiI6IjQ5In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9fV0sIlNjYW5uZWRDb3VudCI6OH0=" } }, { "ID": "df20300dc7e45591", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "54" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1427" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:52 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "616891143" ], "X-Amzn-Requestid": [ "JJE7P2HSPNL2UADVM9OG9U68H7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoiYmlsbGllIn0sIlNjb3JlIjp7Ik4iOiIxMTEifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NjJjZjVhNi0yMGRjLTQzMjQtOTA1OC0wNTNjOTVlMjQ3N2IifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAzLTIwVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImZyYW4ifSwiU2NvcmUiOnsiTiI6IjMzIn0sIkdhbWUiOnsiUyI6IlpvbWJpZSBETVYifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYTZmNTgyNTAtOTA0YS00MGZjLTkzMGUtZmFlODk1MWNkMDgwIn19LHsiVGltZSI6eyJTIjoiMjAxOS0wNC0xOFQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJtZWwifSwiU2NvcmUiOnsiTiI6IjE5MCJ9LCJHYW1lIjp7IlMiOiJab21iaWUgRE1WIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ0YWVmZWVlLTM1ZDAtNGY2OC05NTUyLWI5MjMyNWNkZTg1MSJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMDFUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiIxMjAifSwiR2FtZSI6eyJTIjoiWm9tYmllIERNViJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmYWY1MWQ0MC02ZjAzLTQ3NTItODk5YS0yZWU3ZDE4NDVhZTIifX0seyJUaW1lIjp7IlMiOiIyMDE5LTAyLTAxVDAwOjAwOjAwWiJ9LCJQbGF5ZXIiOnsiUyI6ImFuZHkifSwiU2NvcmUiOnsiTiI6IjgxIn0sIkdhbWUiOnsiUyI6IlByYWlzZSBBbGwgTW9uc3RlcnMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZDE2M2EwZjgtMDFkYy00MDZjLThjNjUtYzhmZjQ2ZmUyZDU1In19LHsiVGltZSI6eyJTIjoiMjAxOS0wMy0xOVQwMDowMDowMFoifSwiUGxheWVyIjp7IlMiOiJmcmFuIn0sIlNjb3JlIjp7Ik4iOiIzMyJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjczNWY2NGE0LTBkOWEtNGRlZi1hOTljLTUwZWMxNTkxZWRiNiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDQtMTBUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoibWVsIn0sIlNjb3JlIjp7Ik4iOiI2MCJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0MGU2MDI0LWU2NTAtNGVjOS1iYmI1LTYyNTBlMmM5MTY2MiJ9fSx7IlRpbWUiOnsiUyI6IjIwMTktMDMtMTNUMDA6MDA6MDBaIn0sIlBsYXllciI6eyJTIjoicGF0In0sIlNjb3JlIjp7Ik4iOiI0OSJ9LCJHYW1lIjp7IlMiOiJQcmFpc2UgQWxsIE1vbnN0ZXJzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5MGYyMTM4LWEwZGEtNGVhMS05OGM1LTFlOWNhMjkyMjFlNSJ9fV0sIlNjYW5uZWRDb3VudCI6OH0=" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/GetQueryKeyField.replay000066400000000000000000001104741367004507500307550ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNaAWC6OP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "ecbe5720d64ea3b2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "11JFIDAMQVSVPOTRRIIFT1IL5VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "795b19c3335c207c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "699" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3668047563" ], "X-Amzn-Requestid": [ "SD6IK65LV3NDE40N920L4L48UNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NiwiSXRlbXMiOlt7IkV0YWciOnsiUyI6IjljZjE5YTFhLWQ4YTAtNDA3OC05M2I4LTE2OGQyZmNlNDMzZiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifSwicyI6eyJTIjoiMyJ9fSx7IkV0YWciOnsiUyI6ImI1MTY2NDdiLWVhMTktNDZkOC1hNmFmLTUyM2E3ZmFiNDAyYiJ9LCJzIjp7IlMiOiI4In0sIm4iOnsiTiI6Ii0xIn0sIm5hbWUiOnsiUyI6InRlc3RVbm9yZGVyZWRBY3Rpb25zOCJ9fSx7IkV0YWciOnsiUyI6IjA4NDVjN2YzLTlmZmUtNDViZS1hMzAzLTc0YWI2ZmZmZDQ4MCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczQifSwicyI6eyJTIjoiNCJ9fSx7IkV0YWciOnsiUyI6IjFjN2NjYTJiLTBmODAtNGYzMy05MzYxLWQ4N2ZlZTIzYzI2NyJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczcifSwicyI6eyJTIjoiNycifX0seyJFdGFnIjp7IlMiOiIyNGJhM2ExNS01OWQ2LTQ1ZGMtOWViMC00Mjg5ZDNiN2QyYjAifSwicyI6eyJTIjoiNicifSwibiI6eyJOIjoiMSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczYifX0seyJFdGFnIjp7IlMiOiI2NjJlNTYxZS0wOWZhLTQ1MWItODQwNy1lNDYzNWY1NDdjN2UifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM1In0sInMiOnsiUyI6IjUifX1dLCJTY2FubmVkQ291bnQiOjZ9" } }, { "ID": "9d018fff9340cbc1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM1In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "T53UBOGKVPO0LSF9KNLJMUN2K3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "df1e998b29205fc6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM3In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "TT5QL8JOQ8L2SFU4515N50V67RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e534e37a1bbb571e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "IVALGU6UGQ4Q0TVTLLGM7EC9GNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "8a7c143310667a44", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM4In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "RJORUV69BPMAJCG9M10ETDF55NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "8f9f46a3966e9091", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM2In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PTV1VHQN6VTR7S2D8JGBLL7TKNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4a928dea3fbc84d2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMzIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "3SCTVHM4UB8K8GIQ7HQPMB3UDFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "710022e4c38500e8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "140" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjBjNTVjMmUxLTgyZjQtNDAyMy04MjMyLWEzY2U4MGYwY2NjZCJ9LCJhIjp7IlMiOiJvbmUifSwibmFtZSI6eyJTIjoicWtmMSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "2CHEBP7M73KQUI6PJMBB297LS7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ad11fcc3dd8a24d7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "140" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjBjMDI0ZDhiLTg3NjUtNDc2MC04ZDY2LTFiOGQ0MjNmZGM5YSJ9LCJhIjp7IlMiOiJ0d28ifSwibmFtZSI6eyJTIjoicWtmMiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "F15KOPFPKTA7EI2HVUR7TVGUM7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "89e88e5a309bdc2d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "142" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjFhMWZmZDFhLTgyNmMtNGQ5MC1iMmRkLTgzZDQ0NDlkZTZlYSJ9LCJhIjp7IlMiOiJ0aHJlZSJ9LCJuYW1lIjp7IlMiOiJxa2YzIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "H6DS8FS082GT9HH141KK4I3KPNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d5639c15c0e9ccce", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "171" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJxa2YzIn19LCJGaWx0ZXJFeHByZXNzaW9uIjoiIzAgPCA6MCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "242" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3357190177" ], "X-Amzn-Requestid": [ "QL8ELM3JTL2JPQGSH8V3ROLF13VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MiwiSXRlbXMiOlt7ImEiOnsiUyI6Im9uZSJ9LCJuYW1lIjp7IlMiOiJxa2YxIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjBjNTVjMmUxLTgyZjQtNDAyMy04MjMyLWEzY2U4MGYwY2NjZCJ9fSx7ImEiOnsiUyI6InR3byJ9LCJuYW1lIjp7IlMiOiJxa2YyIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjBjMDI0ZDhiLTg3NjUtNDc2MC04ZDY2LTFiOGQ0MjNmZGM5YSJ9fV0sIlNjYW5uZWRDb3VudCI6M30=" } }, { "ID": "6106641ccf767fbf", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoiYSIsIiMxIjoiRG9jc3RvcmVSZXZpc2lvbiIsIiMyIjoibmFtZSJ9LCJQcm9qZWN0aW9uRXhwcmVzc2lvbiI6IiMwLCAjMSwgIzIiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "346" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:46 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3779027651" ], "X-Amzn-Requestid": [ "P4KO2F3T7UHI0UUIVOOJSR825FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MywiSXRlbXMiOlt7ImEiOnsiUyI6Im9uZSJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIwYzU1YzJlMS04MmY0LTQwMjMtODIzMi1hM2NlODBmMGNjY2QifSwibmFtZSI6eyJTIjoicWtmMSJ9fSx7ImEiOnsiUyI6InRocmVlIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjFhMWZmZDFhLTgyNmMtNGQ5MC1iMmRkLTgzZDQ0NDlkZTZlYSJ9LCJuYW1lIjp7IlMiOiJxa2YzIn19LHsiYSI6eyJTIjoidHdvIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjBjMDI0ZDhiLTg3NjUtNDc2MC04ZDY2LTFiOGQ0MjNmZGM5YSJ9LCJuYW1lIjp7IlMiOiJxa2YyIn19XSwiU2Nhbm5lZENvdW50IjozfQ==" } }, { "ID": "42ee67c8bd564381", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "FCI8QBQ6RQRN1DAS5U8KTBPCC7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "82f4ff8b3da488db", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "346" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "528657999" ], "X-Amzn-Requestid": [ "FS085925C7L4SE0LEU146SI537VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MywiSXRlbXMiOlt7ImEiOnsiUyI6Im9uZSJ9LCJuYW1lIjp7IlMiOiJxa2YxIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjBjNTVjMmUxLTgyZjQtNDAyMy04MjMyLWEzY2U4MGYwY2NjZCJ9fSx7ImEiOnsiUyI6InRocmVlIn0sIm5hbWUiOnsiUyI6InFrZjMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiMWExZmZkMWEtODI2Yy00ZDkwLWIyZGQtODNkNDQ0OWRlNmVhIn19LHsiYSI6eyJTIjoidHdvIn0sIm5hbWUiOnsiUyI6InFrZjIifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiMGMwMjRkOGItODc2NS00NzYwLThkNjYtMWI4ZDQyM2ZkYzlhIn19XSwiU2Nhbm5lZENvdW50IjozfQ==" } }, { "ID": "187969f9dd505a8c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "59" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoicWtmMyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QS6CESV297GG6JJB71LJN5MF5VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d6467057d5148034", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "59" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoicWtmMSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "CBBKLNUFJJ6M9A1QUQJ0Q4C167VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "02ae84949f5a54bc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "59" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoicWtmMiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PR95FG15EQTAJNC9OPHCGELFDJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1e5fde3b2d6222b2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjE0Yjc4NDRiLTk1MzUtNGFlNi1hODIyLWM0Nzc4ZDc5MDMxMiJ9LCJhIjp7IlMiOiJ0aHJlZSJ9LCJuYW1lIjp7IlMiOiJxa2YzIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "2O401Q41DPJIF1AC4QJ5O11PCVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "406797f175a4f382", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "128" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjhjMjFmZGNiLTQzZjItNDEyNS1iMDY5LTc1MWU4MzZiODk1ZCJ9LCJhIjp7IlMiOiJ0d28ifSwibmFtZSI6eyJTIjoicWtmMiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "AMJDB8T8P05Q6MA3NU6EOQ9SL7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1c731bfe5fed2c04", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "128" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjYzOGRiYWQyLWE0ZjktNDRmOS1iMmQwLTExN2VlZTgwMzI4NCJ9LCJhIjp7IlMiOiJvbmUifSwibmFtZSI6eyJTIjoicWtmMSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "TT6UTRRSDEK93S0KEVN3MMDGC7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "8b4ce5857f2a2e8b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "171" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJxa2YzIn19LCJGaWx0ZXJFeHByZXNzaW9uIjoiIzAgPCA6MCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "218" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1097859608" ], "X-Amzn-Requestid": [ "KUOA9M0FD4JL35NQ9NNK1A2QJRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MiwiSXRlbXMiOlt7ImEiOnsiUyI6Im9uZSJ9LCJFdGFnIjp7IlMiOiI2MzhkYmFkMi1hNGY5LTQ0ZjktYjJkMC0xMTdlZWU4MDMyODQifSwibmFtZSI6eyJTIjoicWtmMSJ9fSx7ImEiOnsiUyI6InR3byJ9LCJFdGFnIjp7IlMiOiI4YzIxZmRjYi00M2YyLTQxMjUtYjA2OS03NTFlODM2Yjg5NWQifSwibmFtZSI6eyJTIjoicWtmMiJ9fV0sIlNjYW5uZWRDb3VudCI6M30=" } }, { "ID": "1ddc873cb36d4e07", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "151" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoiYSIsIiMxIjoiRXRhZyIsIiMyIjoibmFtZSJ9LCJQcm9qZWN0aW9uRXhwcmVzc2lvbiI6IiMwLCAjMSwgIzIiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "310" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2649302779" ], "X-Amzn-Requestid": [ "NEBULOGDF5CUBE8KQRCI1F3DTRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MywiSXRlbXMiOlt7ImEiOnsiUyI6Im9uZSJ9LCJFdGFnIjp7IlMiOiI2MzhkYmFkMi1hNGY5LTQ0ZjktYjJkMC0xMTdlZWU4MDMyODQifSwibmFtZSI6eyJTIjoicWtmMSJ9fSx7ImEiOnsiUyI6InRocmVlIn0sIkV0YWciOnsiUyI6IjE0Yjc4NDRiLTk1MzUtNGFlNi1hODIyLWM0Nzc4ZDc5MDMxMiJ9LCJuYW1lIjp7IlMiOiJxa2YzIn19LHsiYSI6eyJTIjoidHdvIn0sIkV0YWciOnsiUyI6IjhjMjFmZGNiLTQzZjItNDEyNS1iMDY5LTc1MWU4MzZiODk1ZCJ9LCJuYW1lIjp7IlMiOiJxa2YyIn19XSwiU2Nhbm5lZENvdW50IjozfQ==" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/MultipleActions.replay000066400000000000000000003165131367004507500307110ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNWOYfp/v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "6d8ba48e00353cfd", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "SMFFH4K0G64M6TUETQLI0AJFI7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "1ae7eaf251b3881a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "83" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1006067942" ], "X-Amzn-Requestid": [ "SEUK4J37HHJ5KGLICQV7H3ABPJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MSwiSXRlbXMiOlt7Im5hbWUiOnsiUyI6InRlc3REYXRhIn0sInZhbCI6eyJCIjoiQUFFQyJ9fV0sIlNjYW5uZWRDb3VudCI6MX0=" } }, { "ID": "56627079c4b73e98", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "63" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERhdGEifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "H136Q8A3M23FB4CDRDAAETS85JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "8b835caee0d03036", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIxMzBhZDMzMS0yZmVlLTQxZGEtODVlMi1jMzQ0Y2E0ZWU3MzkifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMwIn0sInMiOnsiUyI6IjAifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "8AVBE789MB6MO4JF3NHKCP4DAJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5f7cbca8b3cf2bb6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJjMDUxNTc4Yi1mNzc3LTQ0ODgtOTllOS0zNTQ3NDllOWNkNzkifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMyIn0sInMiOnsiUyI6IjIifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "2L6OSBI0E9OQ43V1TEB3JUN7BVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "23387761718f856b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3NTIyZjRmMi00OGQzLTQ1ZGEtYjJlOC04YTZkMDQ3NmQ1NzMifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMzIn0sInMiOnsiUyI6IjMifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "J20VJ68FVJT5321PTB626LALDFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "63f3d106a0fd5655", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmMmU1ZDg2OS02NTlmLTQ2NGMtYjgyNC01NTVmNDEzODg4NjgifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM1In0sInMiOnsiUyI6IjUifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KRSP3KO60Q9BU2FDSQTM838F47VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9069e0c91d7a61b1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIxYzZmM2M4Yy00OWE5LTQwOTEtYTU1MC0xMDI4ZDdjNzk3OWMifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMxIn0sInMiOnsiUyI6IjEifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "7OACUV2NFSPKNAJNK9V6FFM54NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e9dba435726bb5f6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJkYTFlOTNhZi1hZWI5LTQwMjUtODQ5MS03YzEyNjI3MmNiZWEifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM0In0sInMiOnsiUyI6IjQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "8NCAQNEN1D2RFPSQKJOP6FV9I7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "33b5baa22132993b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "321" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYzA1MTU3OGItZjc3Ny00NDg4LTk5ZTktMzU0NzQ5ZTljZDc5In19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImQ5ZDU3ZDFkLWU4ODMtNDExYi1hY2RiLTEyZWQxY2IxNTgzNiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczIifSwicyI6eyJTIjoiMicifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "VVO90ANQ8HSKTQBJODFEDRD7DVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "bcddd594a1a64645", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "320" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZGExZTkzYWYtYWViOS00MDI1LTg0OTEtN2MxMjYyNzJjYmVhIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjE1NTU1NzY3LTBjOTctNDFjNy05MDFmLWQyNWI1M2UwYjZlZiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczQifSwicyI6eyJTIjoiNCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "JSM2GGIN2G431IN6PO0D3MNA57VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d88ba364d9b7df58", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "321" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMTMwYWQzMzEtMmZlZS00MWRhLTg1ZTItYzM0NGNhNGVlNzM5In19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjM3OWM5ZDMzLWI4NmItNDY2Ny04OTk2LTBlNWE1ZmIxZmFhOSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczAifSwicyI6eyJTIjoiMCcifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "F1IJJSD0L6BJ6CJL17GJBJQ1LBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f62ed648fc4f35e6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "155" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ4YTJkMTg4LTRiNDUtNDc0OC1hM2Y4LTBjODM4YjBjM2JjMCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczYifSwicyI6eyJTIjoiNiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "1SPPCU6SM5JGTTT03H8CNACL97VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3f25b99467ea343b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "321" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMWM2ZjNjOGMtNDlhOS00MDkxLWE1NTAtMTAyOGQ3Yzc5NzljIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjA2ZDlhNWIxLTU1YTItNGMwMS1iYjgwLTgwYTBhZmVjYTBhOCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczEifSwicyI6eyJTIjoiMScifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "NICNTB007THH15E2V9SH8AHJFNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9ee7bbe6b83dc654", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "320" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZjJlNWQ4NjktNjU5Zi00NjRjLWI4MjQtNTU1ZjQxMzg4ODY4In19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjdiMzM5YWEyLWIyODYtNDI5NC04MGUxLTYyZGQ5Y2FmMjljMSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczUifSwicyI6eyJTIjoiNSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "1I5JQA1ACKVG47OR095JTFQMA7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "80f511536eba82ce", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "155" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjA1MzYwZmZkLTBmOWMtNDYzYy1iNGJmLTIxMTU5ZjQwNjU1YSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczcifSwicyI6eyJTIjoiNyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "TKEDJS1HE43HDF3LG0PLEFEKVRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ba91bc048d589860", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "320" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzUyMmY0ZjItNDhkMy00NWRhLWIyZTgtOGE2ZDA0NzZkNTczIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ5YjE4ZDY2LTJkZjAtNGQyYi05MGM5LTI4NGNlNjJiNWY2NSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifSwicyI6eyJTIjoiMyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:43 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "8IST7H0KMV50U79QGGDO68FHMFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "a58696fd99bdacd8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "155" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjBiYjgyYzU0LTkyYjEtNGVhZS05YjRiLTEwMmQyODNjNjE4ZiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczgifSwicyI6eyJTIjoiOCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "6F6VT1UK7B7KT0S8NDK6JMQJA3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9da5094c086c22da", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczQifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczUifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "407" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3896255400" ], "X-Amzn-Requestid": [ "6SQ34PE82L9HV9FEUMI53MAMJNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczQifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiMTU1NTU3NjctMGM5Ny00MWM3LTkwMWYtZDI1YjUzZTBiNmVmIn0sInMiOnsiUyI6IjQifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczUifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiN2IzMzlhYTItYjI4Ni00Mjk0LTgwZTEtNjJkZDljYWYyOWMxIn0sInMiOnsiUyI6IjUifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNDliMThkNjYtMmRmMC00ZDJiLTkwYzktMjg0Y2U2MmI1ZjY1In0sInMiOnsiUyI6IjMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "c919aeb119eafd28", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "241" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDlkNTdkMWQtZTg4My00MTFiLWFjZGItMTJlZDFjYjE1ODM2In19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMyIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OLABHTSD5DN9D5TN3PRC92NAHJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "c0b21181f1a6f20b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "360" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24iLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMDUzNjBmZmQtMGY5Yy00NjNjLWI0YmYtMjExNTlmNDA2NTVhIn0sIjoxIjp7IlMiOiI3JyJ9LCI6MiI6eyJTIjoiNzI1YTVmNTktNjBkMS00OWM5LWE3OTAtYTNkOTNmOTlkNjJlIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM3In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiU0VUICMxID0gOjEsICMwID0gOjJcbiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "711K43874C7DTUCK2AU5BP9N9FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "63509a207dda898c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "241" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMzc5YzlkMzMtYjg2Yi00NjY3LTg5OTYtMGU1YTVmYjFmYWE5In19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "H60ONMDOU6DPM4H2HEOPOK3N0VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "84e88aa3fb7b154a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "241" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMDZkOWE1YjEtNTVhMi00YzAxLWJiODAtODBhMGFmZWNhMGE4In19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMxIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "1D90OI6MJD19SAMS7KPC5KV59VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "c3798dc2c4412911", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "362" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24iLCIjMSI6Im4ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMGJiODJjNTQtOTJiMS00ZWFlLTliNGItMTAyZDI4M2M2MThmIn0sIjoxIjp7Ik4iOiItMSJ9LCI6MiI6eyJTIjoiZjk4ODY1NGYtNWQ5Zi00YjkxLWFlZTMtZjM3ZWEzNDY4NGZiIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM4In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiQUREICMxIDoxXG5TRVQgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PC0NL9EQMNNOOSVTDCSNQAURAJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "89a30c4cabd24389", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "395" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24iLCIjMSI6Im4iLCIjMiI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNDhhMmQxODgtNGI0NS00NzQ4LWEzZjgtMGM4MzhiMGMzYmMwIn0sIjoxIjp7Ik4iOiIxIn0sIjoyIjp7IlMiOiI2JyJ9LCI6MyI6eyJTIjoiZjUxM2NmMDMtOTgxNC00ZTJiLWE3OGYtMTc3M2RhNmEwY2EzIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM2In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiQUREICMxIDoxXG5TRVQgIzIgPSA6MiwgIzAgPSA6M1xuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "CM91ODP3EM5CUJS7775HCOMH27VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5e4c393c3b06802c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "108" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "57" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "289144682" ], "X-Amzn-Requestid": [ "4JOI6722TO9K5H327V3BRQH0VBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbXX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "bf0154940c607d68", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczEifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczIifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "173" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "246700123" ], "X-Amzn-Requestid": [ "I9B7KRC2JABKKIEO11225MUJJVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiNDliMThkNjYtMmRmMC00ZDJiLTkwYzktMjg0Y2U2MmI1ZjY1In0sInMiOnsiUyI6IjMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "c5f141f861c40238", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "2D9PERIJQ5VKONKRC7DR90NA1BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "887b587cfc8c5bdc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "320" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiN2IzMzlhYTItYjI4Ni00Mjk0LTgwZTEtNjJkZDljYWYyOWMxIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijk0NDg1YjVjLWJjMmQtNDFmZC1iM2QxLTgyMmNjODFiNTBiMiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczUifSwicyI6eyJTIjoiNSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "98SLJ50H566LRMK06VSSR3N1O3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "6189178d004df8f1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI1NWMxZDNmZC02ZDdiLTQ2ZTEtYTIyYi03MDgzODNiOTc4MDMifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM0In0sInMiOnsiUyI6IjQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "H622498LQIL1F5370PUQK84A7FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "3dceb21f513c47c8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "MO0JI6IJUCC1GB07IIIRB5J8QNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "09cb98488c6c516e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "771" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2219020666" ], "X-Amzn-Requestid": [ "RC8VC4B0NQBTU51CTDAVJJGAVBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NiwiSXRlbXMiOlt7Im5hbWUiOnsiUyI6InRlc3RVbm9yZGVyZWRBY3Rpb25zMyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI0OWIxOGQ2Ni0yZGYwLTRkMmItOTBjOS0yODRjZTYyYjVmNjUifSwicyI6eyJTIjoiMyJ9fSx7InMiOnsiUyI6IjgifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZjk4ODY1NGYtNWQ5Zi00YjkxLWFlZTMtZjM3ZWEzNDY4NGZiIn0sIm4iOnsiTiI6Ii0xIn0sIm5hbWUiOnsiUyI6InRlc3RVbm9yZGVyZWRBY3Rpb25zOCJ9fSx7Im5hbWUiOnsiUyI6InRlc3RVbm9yZGVyZWRBY3Rpb25zNCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIxNTU1NTc2Ny0wYzk3LTQxYzctOTAxZi1kMjViNTNlMGI2ZWYifSwicyI6eyJTIjoiNCJ9fSx7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjcyNWE1ZjU5LTYwZDEtNDljOS1hNzkwLWEzZDkzZjk5ZDYyZSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczcifSwicyI6eyJTIjoiNycifX0seyJzIjp7IlMiOiI2JyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJmNTEzY2YwMy05ODE0LTRlMmItYTc4Zi0xNzczZGE2YTBjYTMifSwibiI6eyJOIjoiMSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczYifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczUifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiOTQ0ODViNWMtYmMyZC00MWZkLWIzZDEtODIyY2M4MWI1MGIyIn0sInMiOnsiUyI6IjUifX1dLCJTY2FubmVkQ291bnQiOjZ9" } }, { "ID": "2eb8f660d7e42ff4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMzIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "URE1HGUB57EJ52S4AHP02VQVEJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "a2f4e7011ebb8fbc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM4In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QB2PCGBQREF79GTIB4LG7EL8S7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "27ab3526afc7309d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "BA8VCTGC683VEPG83QJHVN9OF7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3c6fe4f79c31122c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM3In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "5F90SGNNV87A5TKEQJC4NHLEV3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "00fa5a06a46f793b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM1In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "M06M62T3ATHFNFPBEVLN7RA4DFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b63b716f2dd9aa72", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM2In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "81VP39PS1V6NOVBGNVEMAPCJ5FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4d9bfc88f7ffec19", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiJiMzBiNjNkNS0yZGZiLTRiYmQtYjQyYS1iNDM0ZjYyODdjNGEifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMxIn0sInMiOnsiUyI6IjEifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "DGH6HKGJ03LRLMHCBSQSEMT4BVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "aa3e446c83f66a8d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiJkOWU5YThkNC1iZjYxLTRlOTctOWY4Ni01NDJmNDg3ZGRkZjcifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMzIn0sInMiOnsiUyI6IjMifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MOS78FD2FJH4BVD97G4GF9NA9JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "68eee8c11a4cab5e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiIxNDFjZWVhYS1lZmM2LTRmN2QtOWM4MS03NTA5MmY0ZGE0ZGUifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMwIn0sInMiOnsiUyI6IjAifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "1CNFOEJPIQMG497669DMK5MKUVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "eaaf06ba36aa3e8e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiIxYjVhNTIxMy1iYjFkLTRjNTAtYjI0NC1lOGUyODNlMTg2Y2UifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM1In0sInMiOnsiUyI6IjUifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:44 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "0VA1LUOCKN46BMKPJ8GU0P3J7RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "825cbc1a14c8f8c6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiI1ODNiZDZkNi02ZTk4LTRlYjctYWZhMy03NTg3MzJiN2FkZjAifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM0In0sInMiOnsiUyI6IjQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OTHL56VDLHE7EIQEJGSLERJT7JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f8bc27e25343aa53", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiIxNWNkMDhhMy0wMzIxLTQyMjYtODYzZS1mM2RiOWIxZTViZTgifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMyIn0sInMiOnsiUyI6IjIifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "49EA2NQ40MGCVKR6H4C5J3O46NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3c0d8b119e2874a0", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "297" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYjMwYjYzZDUtMmRmYi00YmJkLWI0MmEtYjQzNGY2Mjg3YzRhIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6IjcwNDZkMzgxLTU2YzUtNDRlNC1iODM3LWZlODcyYTdmNzM3ZSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczEifSwicyI6eyJTIjoiMScifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "CHOTNO4R50UBE50B7ILMCLIDTNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "913a7745028e851e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "297" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMTQxY2VlYWEtZWZjNi00ZjdkLTljODEtNzUwOTJmNGRhNGRlIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6ImQ0YWUzOWE4LTRmNGUtNDdmMC1iZTQzLWY1NTk3ZGE3YWUxNSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczAifSwicyI6eyJTIjoiMCcifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "A81IDE4CVPTT1UJKDV8HC0ETTNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b3954518155fa413", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "143" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjU3NGM3NzFjLWQ5NzgtNDkwZS1hNmVhLTVjNDA3YTdiYmFjNSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczgifSwicyI6eyJTIjoiOCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KOSDS6T0FGIGM2DJ8TQ703TRBFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e8f880a283f88240", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "296" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNTgzYmQ2ZDYtNmU5OC00ZWI3LWFmYTMtNzU4NzMyYjdhZGYwIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6IjA4NDVjN2YzLTlmZmUtNDViZS1hMzAzLTc0YWI2ZmZmZDQ4MCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczQifSwicyI6eyJTIjoiNCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OAV40OTCHFC58H6JQ5U9OBKGPJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "022d2a89bfc1ecc7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "143" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjI3YzcxMGU3LWIzMjktNDUyNS05OTVhLTY2ZTJlMDI4OTc1YSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczYifSwicyI6eyJTIjoiNiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "1RCP6GGG6L58GETDKFRKDAVH6RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ea333cd12aa3128d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "143" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjZlY2IxNjY0LTQ0ZTgtNGQ2My1iM2QxLWY4NWE5MTJhZTkyMiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczcifSwicyI6eyJTIjoiNyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "C8PHBG9T1CSUVI6VST49VPUPIFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3463a14f53e712f9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "296" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMWI1YTUyMTMtYmIxZC00YzUwLWIyNDQtZThlMjgzZTE4NmNlIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6IjdmMDJlMTViLWEyYzgtNGU3Yy1hY2ZjLWM2NzhjOThmMjY3ZiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczUifSwicyI6eyJTIjoiNSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "HC2OUH544COANQ9FE6GLDR4ELJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "fbabeaf9662b1317", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "297" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMTVjZDA4YTMtMDMyMS00MjI2LTg2M2UtZjNkYjliMWU1YmU4In19LCJJdGVtIjp7IkV0YWciOnsiUyI6ImZjNWQxMjFiLWNmYTctNDI2Yi05Y2JhLTNlM2E5YzQ0YjdmMyJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczIifSwicyI6eyJTIjoiMicifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "5TOG6JK5E0NRMCF1FT14I0DCBNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9105f1ad1873be7b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "296" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDllOWE4ZDQtYmY2MS00ZTk3LTlmODYtNTQyZjQ4N2RkZGY3In19LCJJdGVtIjp7IkV0YWciOnsiUyI6IjljZjE5YTFhLWQ4YTAtNDA3OC05M2I4LTE2OGQyZmNlNDMzZiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifSwicyI6eyJTIjoiMyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "6AV5DUMNLKM2R1J64MA7CUB4FFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "61d536804e6df92b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczQifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczUifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "371" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "586501960" ], "X-Amzn-Requestid": [ "4P9LL2S1EHNL9I0S9DLRH5C4QRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiIwODQ1YzdmMy05ZmZlLTQ1YmUtYTMwMy03NGFiNmZmZmQ0ODAifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM0In0sInMiOnsiUyI6IjQifX0seyJFdGFnIjp7IlMiOiI3ZjAyZTE1Yi1hMmM4LTRlN2MtYWNmYy1jNjc4Yzk4ZjI2N2YifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM1In0sInMiOnsiUyI6IjUifX0seyJFdGFnIjp7IlMiOiI5Y2YxOWExYS1kOGEwLTQwNzgtOTNiOC0xNjhkMmZjZTQzM2YifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMzIn0sInMiOnsiUyI6IjMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "95456b08659c785f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "229" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDRhZTM5YTgtNGY0ZS00N2YwLWJlNDMtZjU1OTdkYTdhZTE1In19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FC9D901JJTFJ8KGF2UT50KIP17VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "67a3e31dbbda9bf3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "229" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZmM1ZDEyMWItY2ZhNy00MjZiLTljYmEtM2UzYTljNDRiN2YzIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMyIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KG7O3L6SEPCR8C7IB2FMKKQ2VFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "66a6340639b70c5d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "229" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzA0NmQzODEtNTZjNS00NGU0LWI4MzctZmU4NzJhN2Y3MzdlIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMxIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MSN7O58UECSNUEOPSJHDLND7OFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "850d3cf58acfb621", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "348" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWciLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNmVjYjE2NjQtNDRlOC00ZDYzLWIzZDEtZjg1YTkxMmFlOTIyIn0sIjoxIjp7IlMiOiI3JyJ9LCI6MiI6eyJTIjoiMWM3Y2NhMmItMGY4MC00ZjMzLTkzNjEtZDg3ZmVlMjNjMjY3In19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM3In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiU0VUICMxID0gOjEsICMwID0gOjJcbiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "3EAUSRIL1TETRML1KTG0I6RFA3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e5f1a314ea6b74ef", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "350" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWciLCIjMSI6Im4ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNTc0Yzc3MWMtZDk3OC00OTBlLWE2ZWEtNWM0MDdhN2JiYWM1In0sIjoxIjp7Ik4iOiItMSJ9LCI6MiI6eyJTIjoiYjUxNjY0N2ItZWExOS00NmQ4LWE2YWYtNTIzYTdmYWI0MDJiIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM4In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiQUREICMxIDoxXG5TRVQgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "B6EKKP5D4LD5J8MGFIUN2TJSPFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "94004694b8109c20", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "383" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWciLCIjMSI6Im4iLCIjMiI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMjdjNzEwZTctYjMyOS00NTI1LTk5NWEtNjZlMmUwMjg5NzVhIn0sIjoxIjp7Ik4iOiIxIn0sIjoyIjp7IlMiOiI2JyJ9LCI6MyI6eyJTIjoiMjRiYTNhMTUtNTlkNi00NWRjLTllYjAtNDI4OWQzYjdkMmIwIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM2In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiQUREICMxIDoxXG5TRVQgIzIgPSA6MiwgIzAgPSA6M1xuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "NKPP8BDLPA42E7DLFV7VR52E1VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "22ca5ac0e1f41b5b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "108" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "57" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "289144682" ], "X-Amzn-Requestid": [ "UDLETL1VSOH70NCGJ3VM7MMG7JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbXX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "084ad88b879e6322", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczEifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczIifX0seyJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczMifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "161" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "912343094" ], "X-Amzn-Requestid": [ "MB8OLOQM1B4E9D9LP2VT1TCB7JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiI5Y2YxOWExYS1kOGEwLTQwNzgtOTNiOC0xNjhkMmZjZTQzM2YifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMzIn0sInMiOnsiUyI6IjMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "819de1f633a5d3a6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnMwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QACMBKNERCBDEGGIDVG5B9FO0BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e6b1ca1ed5885caa", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "296" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiN2YwMmUxNWItYTJjOC00ZTdjLWFjZmMtYzY3OGM5OGYyNjdmIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6IjY2MmU1NjFlLTA5ZmEtNDUxYi04NDA3LWU0NjM1ZjU0N2M3ZSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VW5vcmRlcmVkQWN0aW9uczUifSwicyI6eyJTIjoiNSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "8607EF9P5R415H32M71QED99JNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "2d7eac38b1f752c0", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "234" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJFdGFnIjp7IlMiOiJhNWY1ZjA0YS01NzkyLTQxMjMtYmUwNi1lNGUxNDc3ODc2NzIifSwibmFtZSI6eyJTIjoidGVzdFVub3JkZXJlZEFjdGlvbnM0In0sInMiOnsiUyI6IjQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:45 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "M530EOKTM990M3PG59OJIM2K1NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/Put.replay000066400000000000000000002411661367004507500263460ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNCIFdNY/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "a5be91e95dc4378c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "2FO6RF0E3H729FOTNL5A1E0S47VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "d5fed2d040d1e920", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "951" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2662063370" ], "X-Amzn-Requestid": [ "U2LSLLQ5HFUOLSD5HE0HMUDAJVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NSwiSXRlbXMiOlt7IkIiOnsiQk9PTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7IlMiOiI0NTY3NjY3Mi1hYTJiLTRjYWUtYmVlNy1lYzU1NDZlZGI1ZmEifSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdENyZWF0ZVN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fSx7IkIiOnsiQk9PTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7IlMiOiIxMjU5Yzk3YS0zZDBiLTQyNmItYjJjYi00Mjg1Mzk0YTg2NjcifSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoiZWFmMjFmNjAtODU4NS00ZTU0LWE0N2YtOWUzZDQxMjc0YmFjIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX19LHsiQiI6eyJCT09MIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiUyI6IjJmNTE4OTMwLWVlNTEtNDIyOC1iOGY5LTA3OTMwZGExMmQ5NSJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiI2MjFiOWY3Yi05ZmVhLTRiMGYtYjMwMS1hNGQ5MTE4NTdhN2UifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJOVUxMIjp0cnVlfX0seyJFdGFnIjp7IlMiOiIwODA0MDE5MC02MjJjLTQzMjgtODI3YS04ODdlZTlkNDg0YjcifSwibmFtZSI6eyJTIjoidGVzdENyZWF0ZU1hcCJ9LCJiIjp7IkJPT0wiOnRydWV9fSx7IkV0YWciOnsiUyI6ImY3OGZmN2I5LTQ2NzYtNDBiMS04ZmQwLWVlYzc0YTE0YWZhOCJ9LCJuYW1lIjp7IlMiOiI3ZjgyMWU0Ni0wYWIyLTRmZGUtYTNhYS0wZTIxMTdhMWJiNjAifSwiYiI6eyJCT09MIjp0cnVlfX1dLCJTY2FubmVkQ291bnQiOjV9" } }, { "ID": "ede225e91e768aa9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdENyZWF0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "T4O5J47KRQ2NOBUDGHQGJ5HJDBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "99bbb2f183e73fbc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdENyZWF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:22 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "HS8U1PE073UGLVK5S61H6MC3UFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "6a1ce4e0b4a83bea", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "91" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiZWFmMjFmNjAtODU4NS00ZTU0LWE0N2YtOWUzZDQxMjc0YmFjIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "IHB4U1GCUQVUEMKF5CNTAQTSCFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "69c1b4fa9df8bc1f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "91" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiNjIxYjlmN2ItOWZlYS00YjBmLWIzMDEtYTRkOTExODU3YTdlIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "VVILHTJ7PISHOOOKLA9JL7VJQJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "303e16158b38191c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "91" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoiN2Y4MjFlNDYtMGFiMi00ZmRlLWEzYWEtMGUyMTE3YTFiYjYwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "T0E1ENQU02121G48B1BC2MASK7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e2514e71cf890835", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "148" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0ZDE2Mjg5LTM0NzktNGM1NC1iYmY0LTQwZjY0ZDRjNTFmNyJ9LCJiIjp7IkJPT0wiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MHNR74E4S576EP2CT8GCPD09D3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4b8e6001b8729c8d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "97" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "166" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2259622447" ], "X-Amzn-Requestid": [ "U7HVRGCPRUFBUQF3BHLS5EIDNBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU0ZDE2Mjg5LTM0NzktNGM1NC1iYmY0LTQwZjY0ZDRjNTFmNyJ9LCJiIjp7IkJPT0wiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "58201059cc2a8a1c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "251" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjVmYWY4ZDJhLTM3ZDItNGRjOS1hZjYwLTg5NjhmYmJlZTBkYiJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiTSI6eyJOVUxMIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFB1dFN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KD89BM6SU6T65H0SS22TRCFALFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "c0a7640b2f24d553", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0U3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "269" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3936203664" ], "X-Amzn-Requestid": [ "38047O0CUF9TJ4589IMAI0GH6BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFB1dFN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI1ZmFmOGQyYS0zN2QyLTRkYzktYWY2MC04OTY4ZmJiZWUwZGIifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "e89832d9ccccf7bb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "149" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImIzNWIyOTY5LTI1NzYtNDhhYS1hNWE0LWRjZWMyNGY4NzlkMCJ9LCJiIjp7IkJPT0wiOmZhbHNlfSwibmFtZSI6eyJTIjoidGVzdFB1dE1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "5UL7K1P52FNVDA2RK1T65NPKSBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "94ac581f1e076204", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "97" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "167" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1257900209" ], "X-Amzn-Requestid": [ "8GI2T0RS8G71G70CQLTG3TTPBVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImIzNWIyOTY5LTI1NzYtNDhhYS1hNWE0LWRjZWMyNGY4NzlkMCJ9LCJiIjp7IkJPT0wiOmZhbHNlfX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "fac473270aa71a30", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "252" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIxNmUxNzU0Mi02NWY5LTQ1NWYtOTI3MC04NDE4ZTYwN2Y1ZGUifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RQdXRTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "Q5PGEHFD3E5861REQL52V28IF3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "3854fe9180aa09c2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0U3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "270" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3593738469" ], "X-Amzn-Requestid": [ "DJ9I48AR8US27S9LC2CB9BA317VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RQdXRTdHJ1Y3QifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiMTZlMTc1NDItNjVmOS00NTVmLTkyNzAtODQxOGU2MDdmNWRlIn19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "37c8ed3d886d8db0", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "296" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYjM1YjI5NjktMjU3Ni00OGFhLWE1YTQtZGNlYzI0Zjg3OWQwIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImExZmE1Mjg5LTAwMGUtNGQyMS1iYmZlLWEzZWY2Zjg1ZjczNCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwMiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "D6L69LJ3IKOJ5E0FTEFPHF3S9VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "383c766989749974", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "449" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMTZlMTc1NDItNjVmOS00NTVmLTkyNzAtODQxOGU2MDdmNWRlIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIyMzFiNGU5MC0zZTA0LTQyMzktOGIzMC1mOTdlMGUzZWI5ODkifSwiRXRhZyI6eyJTIjoiMTZlMTc1NDItNjVmOS00NTVmLTkyNzAtODQxOGU2MDdmNWRlIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0U3RydWN0MiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "IA2RKFTADCGPJH37ED9VGQLNL3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "9faee67ebfa821e2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "149" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImJkODFlOGI1LTM3OTItNDk3My1iNTg1LTgzMDM4MGQ2MTliMiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "5TUK778DHQ3NV89F4EN1EVVB9NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "26bb2714722a5df3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "102" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "167" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:23 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1026769494" ], "X-Amzn-Requestid": [ "6U1HCSNTNKRV6JNJ1KFJUL3DTFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYmQ4MWU4YjUtMzc5Mi00OTczLWI1ODUtODMwMzgwZDYxOWIyIn0sInMiOnsiUyI6ImEifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "425ef7997588b04f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "314" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYmQ4MWU4YjUtMzc5Mi00OTczLWI1ODUtODMwMzgwZDYxOWIyIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImUyNzUzZThlLWFiNTktNGI1OC1hMWY0LWY4YjhlOGUxMTk5NyJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "76VVJVLJQPQMOJ1QO1IBIIVDHVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "16fa6fbf27086357", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "314" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYmQ4MWU4YjUtMzc5Mi00OTczLWI1ODUtODMwMzgwZDYxOWIyIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijc1ZTQxZDViLTc4ZTgtNDI1Yi1iZDgzLWU1ZWVmMTE5NTdkYSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "01ARR1AJ0VKF5P4MRNTDBGS3IJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "5752791fc10fb547", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI1ZGY0NTk2Zi02MDA2LTRiYjQtYjQ1My0yYzA1MzMxNTVlYmEifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "CGAMJCKSHER086TN9L790JJ7M3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "444d87da712e5109", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "105" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "271" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1433408543" ], "X-Amzn-Requestid": [ "MCDVBN8LG6R6ISF04562D3KLM3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjVkZjQ1OTZmLTYwMDYtNGJiNC1iNDUzLTJjMDUzMzE1NWViYSJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "d08dea3eb8041ff9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "418" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNWRmNDU5NmYtNjAwNi00YmI0LWI0NTMtMmMwNTMzMTU1ZWJhIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIyOTk0OWM5Zi1hMDZhLTQ0M2EtOWMxYy02M2YxOTgwMjJmYjMifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "01AGLNCF0ERB0A0CT566HBH82BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "873504d315dd4863", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "418" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNWRmNDU5NmYtNjAwNi00YmI0LWI0NTMtMmMwNTMzMTU1ZWJhIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI2NDE4ZjgwOC0wMTIxLTRjN2ItOWY4Ny05MzI4MzRmOGI4NjkifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "MJ11U445KVJRQ0Q16V842TEV5FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "4cb5ec83dd8696df", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "N6CF717R86IA9OJVICLSP188CBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "3a4e1c0fb9ec0d71", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "689" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3393236070" ], "X-Amzn-Requestid": [ "GE73H4VJ07VA40ULF2HM447T8NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NCwiSXRlbXMiOlt7Im5hbWUiOnsiUyI6InRlc3RSZXZpc2lvbk1hcCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJlMjc1M2U4ZS1hYjU5LTRiNTgtYTFmNC1mOGI4ZThlMTE5OTcifSwicyI6eyJTIjoiYSJ9fSx7Im5hbWUiOnsiUyI6InRlc3RQdXRNYXAifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYjM1YjI5NjktMjU3Ni00OGFhLWE1YTQtZGNlYzI0Zjg3OWQwIn0sImIiOnsiQk9PTCI6ZmFsc2V9fSx7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoiYSJ9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJNIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiMjk5NDljOWYtYTA2YS00NDNhLTljMWMtNjNmMTk4MDIyZmIzIn19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJNIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0U3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjE2ZTE3NTQyLTY1ZjktNDU1Zi05MjcwLTg0MThlNjA3ZjVkZSJ9fV0sIlNjYW5uZWRDb3VudCI6NH0=" } }, { "ID": "1482f21c3b0c7d0e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "SI7L2FJAODHHJCCSH1N07CD6R3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "89fa0603d94c44c6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "13BDKTBEFR0PETE2I7PUSPFNAVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "0492fb3c43fdda92", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "65" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFB1dE1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "6D6NROJKLPHN2I0GFRS6LPFOQBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1f9f99252b9dde07", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFB1dFN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OI64CUVTPLTTOVEJ14P3S9F5UFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "fb3ace6495c0f55e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "136" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6ImY3NGJiNTM2LTRlODctNGRmNi04MTBjLTBlNjE3NDVmNDgxMyJ9LCJiIjp7IkJPT0wiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "0H55E96D5TN9F7LJ2AF9N1K75BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "851a927a377c5a63", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "97" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "154" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3680480847" ], "X-Amzn-Requestid": [ "53LNCGL6UDNPPNPMLBBHNMJ6ARVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiJmNzRiYjUzNi00ZTg3LTRkZjYtODEwYy0wZTYxNzQ1ZjQ4MTMifSwibmFtZSI6eyJTIjoidGVzdFB1dE1hcCJ9LCJiIjp7IkJPT0wiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "94f108f7a5e54ae9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "251" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX0sIkV0YWciOnsiUyI6IjE5NmU5OTJlLTEyYmQtNDgyMy1hMDA0LWY1MmVlN2U3YjJmYiJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiTSI6eyJOVUxMIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFB1dFN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:24 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "J12UVK06PN5GDBLHUMN0VQ31EVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "2b8dc6cd7826b669", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0U3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "269" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "4209506888" ], "X-Amzn-Requestid": [ "89KKA6C0UVB8BESL0BPNDOAPL7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiMTk2ZTk5MmUtMTJiZC00ODIzLWEwMDQtZjUyZWU3ZTdiMmZiIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RQdXRTdHJ1Y3QifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJOVUxMIjp0cnVlfX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "37242f813fbf9ab2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "137" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6ImI0YTdkYmRlLWJjYjMtNDYxNy04ZTZjLWU0YjQ1YzhhZDc1YiJ9LCJiIjp7IkJPT0wiOmZhbHNlfSwibmFtZSI6eyJTIjoidGVzdFB1dE1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "RULNI3TMHKE6M6EVF0Q3HV0JB3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f01a376673432107", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "97" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "155" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "634184730" ], "X-Amzn-Requestid": [ "RUL1KBMST205DJMAUUA4SMN58FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiJiNGE3ZGJkZS1iY2IzLTQ2MTctOGU2Yy1lNGI0NWM4YWQ3NWIifSwibmFtZSI6eyJTIjoidGVzdFB1dE1hcCJ9LCJiIjp7IkJPT0wiOmZhbHNlfX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "7d4f9508b2c66bbe", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "252" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiI0NGZjOGVhOC1jNjg4LTQxZjUtOTFlZi0xYTJiZjM4ZmNiOTQifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RQdXRTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MSJFRST7J8DJ5740O32J05D4VBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4f341f11e5f93978", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UHV0U3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "270" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2594978189" ], "X-Amzn-Requestid": [ "OME18MJUJC7RRHQSJTF4KV1D8FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiUyI6IjQ0ZmM4ZWE4LWM2ODgtNDFmNS05MWVmLTFhMmJmMzhmY2I5NCJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0U3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "8e39ad7ac0048f8c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "272" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYjRhN2RiZGUtYmNiMy00NjE3LThlNmMtZTRiNDVjOGFkNzViIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6Ijc5NDQ1NDk1LWY4ZGItNDNkYi05ODUyLTU5ZTg0ZGVkZjUyNSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwMiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "PCK725AOSI22TIIKAR358GOVB7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "321c5c4638e4ce56", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "437" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNDRmYzhlYTgtYzY4OC00MWY1LTkxZWYtMWEyYmYzOGZjYjk0In19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI0NGZjOGVhOC1jNjg4LTQxZjUtOTFlZi0xYTJiZjM4ZmNiOTQifSwiRXRhZyI6eyJTIjoiYTM2ZDY1NzktMDU4ZS00M2JjLWEwMzQtM2M5NDY4NjIwOGY1In0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJTdCI6eyJOVUxMIjp0cnVlfSwiVSI6eyJOIjoiMCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0U3RydWN0MiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "84TT8UR5DRDGN8JOCQA0NQ755RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "e2c86379bd2e383e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "137" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjczYjU2NGVhLWFlYTAtNGI5Ny1hMzRjLTc4MWQzMGNmMDU2MyJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "25EGPCG0OPOVMLSB0L9RKQ3IFNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "92385a1a9251ec91", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "102" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "155" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3609569227" ], "X-Amzn-Requestid": [ "PT4JG262BP5DT4QCH7JU1Q45RFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiI3M2I1NjRlYS1hZWEwLTRiOTctYTM0Yy03ODFkMzBjZjA1NjMifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn0sInMiOnsiUyI6ImEifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "2751ca7e8bb59598", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "290" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzNiNTY0ZWEtYWVhMC00Yjk3LWEzNGMtNzgxZDMwY2YwNTYzIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6IjdiMWYwMGVjLTVmYjMtNDVkOS1hNzhkLThmNDJmNDYwNzkwMCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "00AVCF7JT4F788G89MJOIFGUC7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "f72db312de3d4dd3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "290" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNzNiNTY0ZWEtYWVhMC00Yjk3LWEzNGMtNzgxZDMwY2YwNTYzIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6ImYwMzNhOTlmLTdmNDItNGZhMC04OTJlLTgzNzRkZjQ1MDJkOSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:25 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "A3AKDOHCH6RUGVE7FKGV58HDKJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "b8231d45acaa6b21", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiJkMzQ0MTIyZC0wMmI5LTRjODItYTI3Ny02YjkzZmM3YmNmMmYifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "O188AA9HD8I9DVF49U9SETEDB7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "2c669b270b0cf378", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "105" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "271" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3726127645" ], "X-Amzn-Requestid": [ "NG2AOC9UI355PAFPAOVLPRL10BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiZDM0NDEyMmQtMDJiOS00YzgyLWEyNzctNmI5M2ZjN2JjZjJmIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RSZXZpc2lvblN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "1449c754f7f86315", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "406" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDM0NDEyMmQtMDJiOS00YzgyLWEyNzctNmI5M2ZjN2JjZjJmIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiJhZmQ2MTgyNC03YjAwLTQ3NTMtODljNC1mOGQwODZhYWFiZWQifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PM5L6ISRSG6SNBCCMAKLSH8IDJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ad887312dc2bdd93", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "406" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiZDM0NDEyMmQtMDJiOS00YzgyLWEyNzctNmI5M2ZjN2JjZjJmIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiJhMjkzNTYxZS1lOTlmLTQ3NzktYTlmMS1lNTQ0Mjk0ZTA1YjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "IKHG4B1IM5M2JJ75ISB2K6MVARVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/Replace.replay000066400000000000000000002110041367004507500271350ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNGEmleKf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "061f554ecb2bae74", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "0EG2M83R5VS7P50J9J88PUGBT7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "bf5bb7b02dd22eeb", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "665" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3246371082" ], "X-Amzn-Requestid": [ "PFGPVHDOGPLN11JVDHPQ2NCQFJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NCwiSXRlbXMiOlt7IkV0YWciOnsiUyI6IjdiMWYwMGVjLTVmYjMtNDVkOS1hNzhkLThmNDJmNDYwNzkwMCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSx7IkV0YWciOnsiUyI6ImI0YTdkYmRlLWJjYjMtNDYxNy04ZTZjLWU0YjQ1YzhhZDc1YiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UHV0TWFwIn0sImIiOnsiQk9PTCI6ZmFsc2V9fSx7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoiYSJ9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7IlMiOiJhZmQ2MTgyNC03YjAwLTQ3NTMtODljNC1mOGQwODZhYWFiZWQifSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7Ik5VTEwiOnRydWV9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7IlMiOiI0NGZjOGVhOC1jNjg4LTQxZjUtOTFlZi0xYTJiZjM4ZmNiOTQifSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFB1dFN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fV0sIlNjYW5uZWRDb3VudCI6NH0=" } }, { "ID": "c3fcc758b069797d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "CH373PL241SJHK20V1RFF96AMNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "799d6c125f2e0f63", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "65" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFB1dE1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "UP8R62IN18NAHDUIVOV4NAQVCJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "2c2b44bc53e7e064", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "CE2U5GRMUGHF4OQMV97LK2ERA3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "712aa079def1cf87", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFB1dFN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "4ED5V5S1DU7S0385GBHFOB5DEBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "2e672720bae84a76", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "148" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImU4YjliZDQwLTE2MjctNGM1Yi05YWRkLTI4Mjk4ZWVlODQyYSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZU1hcCJ9LCJzIjp7IlMiOiJhIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:26 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "9VJF4572TT7GH2HR5JQR8IRGNNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "0ab9786db6261df4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "235" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjI1ZTllYzljLTllMTItNDVhNi1hNWNjLTk2YjdmZmFkNGFlZiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZU1hcCJ9LCJzIjp7IlMiOiJiIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QR4OO9ENG7KR7F3D0TK7HBRCTVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b8959442b390834e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "101" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZU1hcCJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "166" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1537858392" ], "X-Amzn-Requestid": [ "RMQ5FBOHTFBFMBMH9QM8SR0K9RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZU1hcCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIyNWU5ZWM5Yy05ZTEyLTQ1YTYtYTVjYy05NmI3ZmZhZDRhZWYifSwicyI6eyJTIjoiYiJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "23619a5e5a50a8ff", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "252" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI0NTkxNDYzMS1jMjA2LTQ3YzAtYTMwYi1jMGUwMzNmOGJhMTIifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "7E1P7HJSO2DT00JH1AORMFQK1BVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d516c4026d0e2afe", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "339" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5YTcyZmM3Mi00NDA2LTQ2ZDctYmI3Mi01MmU4NGJhODBiOWQifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJiIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "0K3FMSRE2P6HP0ENTOM37S53UFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9852a1c4dea5f054", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "104" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZVN0cnVjdCJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "270" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1328288497" ], "X-Amzn-Requestid": [ "OO50LLO9ESM9VKB4P9U0T7HELJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImIifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VTdHJ1Y3QifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiOWE3MmZjNzItNDQwNi00NmQ3LWJiNzItNTJlODRiYTgwYjlkIn19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "18e19786cf357ae1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "155" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJJdGVtIjp7Im5hbWUiOnsiUyI6ImRvZXNOb3RFeGlzdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "12HKCD23IPUUH2N544BB47RIINVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "377b62ec4c645b87", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "149" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjJkMGFmMmViLTU0N2ItNDdiYy05YWU5LTRjZTU5NzkwNjUzMCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "AA92T3BRB2O6GJRHF3KSUCUDNRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5f26530ea62bc4ca", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "102" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "167" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2001019577" ], "X-Amzn-Requestid": [ "00OJLHDB5FNR4A7SAB97U5L5BFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiMmQwYWYyZWItNTQ3Yi00N2JjLTlhZTktNGNlNTk3OTA2NTMwIn0sInMiOnsiUyI6ImEifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "69daa9667cdea76b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "314" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMmQwYWYyZWItNTQ3Yi00N2JjLTlhZTktNGNlNTk3OTA2NTMwIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjNmZWJjYzM3LWE1NDItNGZhYy1iZDc1LTE2ZmJmZGU4MWQ5OCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "4G3A19FIQB2UOR20QQIHMCTFA3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b423d7dbedf9b04e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "314" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMmQwYWYyZWItNTQ3Yi00N2JjLTlhZTktNGNlNTk3OTA2NTMwIn19LCJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImM0ZDRmMGU0LWRmZDUtNDllNi1iNzQzLTU1YzYxYmEwYjczYyJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "Q1DGHOO13K7J5LSQCKP05RP6C7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "52b6fcf658012ce1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI2YzE3YTg1YS1kODMwLTRhNTQtYjNiOS0yOThlNjI1NjE0MGEifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "2CFRTNQ524A3NOMUU8LBC5G4L3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "795ba545e31eca73", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "105" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "271" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1142047233" ], "X-Amzn-Requestid": [ "289G77L8PD949PPB38CERP2L1JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjZjMTdhODVhLWQ4MzAtNGE1NC1iM2I5LTI5OGU2MjU2MTQwYSJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "baaa6724ab183b41", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "418" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNmMxN2E4NWEtZDgzMC00YTU0LWIzYjktMjk4ZTYyNTYxNDBhIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIxODU0MTk5YS0xMzMyLTQyYzYtYTQzNS1hYzAwNjQ4MzAwNDEifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:27 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "36G6M1520A6BCO32IQ2MRPTCHFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "0bc5c19b34cf6df2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "418" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiNmMxN2E4NWEtZDgzMC00YTU0LWIzYjktMjk4ZTYyNTYxNDBhIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5ZTg1MDA0Mi04NzVjLTRhMGEtYWJmNy1hY2U5MGZkMDRiYjMifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "M01J8I6IVQS5KUAE9GVS72DNKBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "9e51cd15e2ae2c85", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "JQ6B13DQSBH91C15DJO0JP8J3FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "caa95a1e0cee124c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "688" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "869840351" ], "X-Amzn-Requestid": [ "RKB7GJ4HDMRMPSIGG2QL3OONMBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6NCwiSXRlbXMiOlt7Im5hbWUiOnsiUyI6InRlc3RSZXBsYWNlTWFwIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjI1ZTllYzljLTllMTItNDVhNi1hNWNjLTk2YjdmZmFkNGFlZiJ9LCJzIjp7IlMiOiJiIn19LHsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjNmZWJjYzM3LWE1NDItNGZhYy1iZDc1LTE2ZmJmZGU4MWQ5OCJ9LCJzIjp7IlMiOiJhIn19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7IlMiOiJiIn0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RSZXBsYWNlU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjlhNzJmYzcyLTQ0MDYtNDZkNy1iYjcyLTUyZTg0YmE4MGI5ZCJ9fSx7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoiYSJ9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJNIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiMTg1NDE5OWEtMTMzMi00MmM2LWE0MzUtYWMwMDY0ODMwMDQxIn19XSwiU2Nhbm5lZENvdW50Ijo0fQ==" } }, { "ID": "e134a8567d76595d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "69" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VNYXAifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FSHJ03VDMK6MISUA43GF5OH0FVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "7e945b6d33716a79", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "LBCGATM9DQFG8NG5AA8619LC2FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4b1c3ec7d226aaf7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "LFKVUH5L92OELPJ622ECT2M1N7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5b79f88a87612f01", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "72" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FCHOMHICQQAHJJU6F849CV2RK7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "cc9ff3e4521a8990", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "136" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6ImEyYjY3ZTYyLTU1MzctNDdlMS05OWU4LTQ1N2RmMDgxMjYwZiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZU1hcCJ9LCJzIjp7IlMiOiJhIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "44VI9L8BE4QUTSCH0I512NMLK7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "6589016f293fe292", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "223" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJJdGVtIjp7IkV0YWciOnsiUyI6IjIyMzgwMzM2LTIzYjctNGFhNi1hNTc5LWM1Yzg0Y2EzZGNmNSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZU1hcCJ9LCJzIjp7IlMiOiJiIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FD7V692KDJ75C39NN990JP0HQ7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9fa4b7a2d0b40b03", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "101" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZU1hcCJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "154" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1577197263" ], "X-Amzn-Requestid": [ "9PJIEIC1BR8VS22TJ55GS2VJ37VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiIyMjM4MDMzNi0yM2I3LTRhYTYtYTU3OS1jNWM4NGNhM2RjZjUifSwibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VNYXAifSwicyI6eyJTIjoiYiJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "192fb4f19a71e2d0", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "252" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiI0YTUzYmIzZi0xMmU5LTQ0OTgtYTE4ZS0wNzhkMTZjODE2YWQifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "JGOQTCBR7LN07DUHRU08DLDVUVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "6184420907e18797", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "339" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiI1MDRlNWU3Ny0yMzNlLTQ4ZTMtYWNjMS0zM2Y2M2EzYzA1MWUifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJiIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJlcGxhY2VTdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "S3RDO6CLBBDJDBTS07NH3HN3OVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "173c8e96e957f7fe", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "104" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmVwbGFjZVN0cnVjdCJ9fV19fX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "270" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2134385131" ], "X-Amzn-Requestid": [ "C2RE37RO99L6058DUK2KQKRD5VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImIifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiNTA0ZTVlNzctMjMzZS00OGUzLWFjYzEtMzNmNjNhM2MwNTFlIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RSZXBsYWNlU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX19XX0sIlVucHJvY2Vzc2VkS2V5cyI6e319" } }, { "ID": "9330136daffe98b2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "155" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSJ9LCJJdGVtIjp7Im5hbWUiOnsiUyI6ImRvZXNOb3RFeGlzdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "I64EE8VQ62O80VI42E8E49V3VFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "fb366a85381fd701", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "137" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6ImFlMGMyOTRhLTMwNmItNDBkMi04MjE0LTc2MTViYjE1NDk3ZSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:28 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "AAV3LO91JRPSOUPMTHHJQ818OVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1b5ef0916277bc7c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "102" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "155" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "190813488" ], "X-Amzn-Requestid": [ "28HCBB3JBGPGKN3AIB38SFJFQFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiJhZTBjMjk0YS0zMDZiLTQwZDItODIxNC03NjE1YmIxNTQ5N2UifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn0sInMiOnsiUyI6ImEifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "6fcc8d9906f4f05e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "290" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYWUwYzI5NGEtMzA2Yi00MGQyLTgyMTQtNzYxNWJiMTU0OTdlIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6Ijk2NGUwNTlkLWFiMjgtNDZmNC05ZDRhLTI4NTdlOTdlZmIzOSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "50RABJECHDSQDG9VMH70QGLU53VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "0e1e5e177afc4d97", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "290" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYWUwYzI5NGEtMzA2Yi00MGQyLTgyMTQtNzYxNWJiMTU0OTdlIn19LCJJdGVtIjp7IkV0YWciOnsiUyI6IjliNjYzZGQ1LWM3NjAtNDJmMS05OWNhLTZhZmU5OTQ2MGE5ZSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "H14S8NEKSAA0S5BIMC9LIN71AVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "78e9a91f24e03acd", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiIyYzY2NmU5Yi1hYTVlLTQ4MGUtOTE0OS1lZjdkN2ZlNTlhOGQifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "TA951VJ7628OLQEVBO6CL3JMGVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "25ab850f6f25251f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "105" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "271" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1497402623" ], "X-Amzn-Requestid": [ "9CKSO91MECSQ29PJIS7KLTF63JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiMmM2NjZlOWItYWE1ZS00ODBlLTkxNDktZWY3ZDdmZTU5YThkIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RSZXZpc2lvblN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "eb205ca2e6a3e1e9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "406" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMmM2NjZlOWItYWE1ZS00ODBlLTkxNDktZWY3ZDdmZTU5YThkIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiJmNzkwYjg3Zi03YmJkLTQ0NWEtYjgyMS01YmQ1MWU5NjQ5ZGEifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QO4OUFVTIJCE8OFGJBHEFSKIUNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e779cc100fe2a76e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "406" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMmM2NjZlOWItYWE1ZS00ODBlLTkxNDktZWY3ZDdmZTU5YThkIn19LCJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiIwYTgwMTc0Zi0xYWMyLTRjNmUtYjJiZC1lNmQ2YzZmYmI2MDEifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:29 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "UFDRC72QNB1MNB5T7RV5I6L0IFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/SerializeRevision.replay000066400000000000000000000240151367004507500312340ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNbK4mMfv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "686671580d44cfff", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "N81C6DA2KKEEO6KT0GRQ4UBS77VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "589eba5b97d6ba43", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "310" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:47 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2649302779" ], "X-Amzn-Requestid": [ "F2FE7RTBNIJ3SQOU19M601H8GNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MywiSXRlbXMiOlt7ImEiOnsiUyI6Im9uZSJ9LCJFdGFnIjp7IlMiOiI2MzhkYmFkMi1hNGY5LTQ0ZjktYjJkMC0xMTdlZWU4MDMyODQifSwibmFtZSI6eyJTIjoicWtmMSJ9fSx7ImEiOnsiUyI6InRocmVlIn0sIkV0YWciOnsiUyI6IjE0Yjc4NDRiLTk1MzUtNGFlNi1hODIyLWM0Nzc4ZDc5MDMxMiJ9LCJuYW1lIjp7IlMiOiJxa2YzIn19LHsiYSI6eyJTIjoidHdvIn0sIkV0YWciOnsiUyI6IjhjMjFmZGNiLTQzZjItNDEyNS1iMDY5LTc1MWU4MzZiODk1ZCJ9LCJuYW1lIjp7IlMiOiJxa2YyIn19XSwiU2Nhbm5lZENvdW50IjozfQ==" } }, { "ID": "5dd320404f46f699", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "59" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoicWtmMSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "NSJ574DVNT6JJ8BKL5AM06N39VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "72bc23599ed5efe9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "59" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoicWtmMiJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "17PPN2K1F80TMRMC461U3IVURVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "03755f447af53a3c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "59" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoicWtmMyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OLCLUT0S7QPRQFS2LF50D5H7D7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d34202f6e1e8ed83", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX25vdF9leGlzdHMgKCMwKSIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6Im5hbWUifSwiSXRlbSI6eyJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5MGU1YzQxNS00ZTQxLTQ3YmMtODE2MC0wOTk4NDQ0Y2I5NmMifSwibmFtZSI6eyJTIjoidGVzdFNlcmlhbGl6ZVJldmlzaW9uIn0sIngiOnsiTiI6IjEifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:48 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "4KQ5CNHO1GA6R6IHH9BKF1VETVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestConformance/Update.replay000066400000000000000000003377751367004507500270340ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNPEGh4f/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "6a83d2a1c4dc5dd0", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "SQIDFC7V1RMDHP5F4AET6M8EM3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "554a3c72da1d50bc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "355" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "677037621" ], "X-Amzn-Requestid": [ "7JCDOKLAM2G87DS3NSTPAVJP4VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6MiwiSXRlbXMiOlt7IkV0YWciOnsiUyI6IjY4YzllZjEwLWQzZjUtNDBlMS05MDQyLTI5NDE5MTIzZTE3NCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlTWFwIn0sImIiOnsiQk9PTCI6dHJ1ZX19LHsiQiI6eyJCT09MIjp0cnVlfSwiU3QiOnsiTlVMTCI6dHJ1ZX0sIlUiOnsiTiI6IjAifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIkV0YWciOnsiUyI6IjQ4NjMwZjlmLTJiY2EtNDUwMi1iMjgyLTdkZjZhODQzZWY1OCJ9LCJNIjp7Ik5VTEwiOnRydWV9LCJuYW1lIjp7IlMiOiJ0ZXN0RGVsZXRlU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX19XSwiU2Nhbm5lZENvdW50IjoyfQ==" } }, { "ID": "21857a10d28f20ac", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "G25H0O0E7LBQNUIFR46FOJAJT7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1bfb48330e47181c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdERlbGV0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "HIE9CRTNOCE65S66AAJRV0DVH3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "7e0e889781d8b40c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "191" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjQ4ZGFiY2Q2LTE1NjktNDYwZC04MzMwLTM3YzA3MTcwZDViNCJ9LCJhIjp7IlMiOiJBIn0sImIiOnsiUyI6IkIifSwiaSI6eyJOIjoiMSJ9LCJuIjp7Ik4iOiIzLjUifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PQPLKVP9RV7U31F9PDLNGPMTFVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9e75dfededc4573b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "462" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoibiIsIiMyIjoiYiIsIiMzIjoiaSIsIiM0IjoiYSIsIiM1IjoiYyIsIiM2IjoibSIsIiM3IjoiRG9jc3RvcmVSZXZpc2lvbiJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7Ik4iOiItMSJ9LCI6MSI6eyJTIjoiWCJ9LCI6MiI6eyJTIjoiQyJ9LCI6MyI6eyJOIjoiMyJ9LCI6NCI6eyJTIjoiOTlhMjUyMmMtN2JkMC00ZjA4LWEzOWQtMmEyZTMyYTg0YjQyIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVXBkYXRlRXhwcmVzc2lvbiI6IkFERCAjMSA6MFxuUkVNT1ZFICMyLCAjM1xuU0VUICM0ID0gOjEsICM1ID0gOjIsICM2ID0gOjMsICM3ID0gOjRcbiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PEECE0359HB2C6BG09QMA74F23VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "aa30ead38c32457d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "209" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2760356310" ], "X-Amzn-Requestid": [ "7HNRUTHJNAPD71GTJMO7MQ9ECRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJhIjp7IlMiOiJYIn0sImMiOnsiUyI6IkMifSwibSI6eyJOIjoiMyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5OWEyNTIyYy03YmQwLTRmMDgtYTM5ZC0yYTJlMzJhODRiNDIifSwibiI6eyJOIjoiMi41In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXAifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "1f1afd54c136a3c8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "150" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6Ijk0MjZjNzA3LTM2ZTAtNGNiNy04OGZmLTYzODlhMDEzYTE4OSJ9LCJhIjp7IlMiOiJBIn0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXBXcnQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:35 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "QTCIP01ALP91TBQM8MMRAUIA2FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5fb785bbecaa206b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "383" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiYiIsIiMyIjoiYSIsIiMzIjoibSIsIiM0IjoiRG9jc3RvcmVSZXZpc2lvbiJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJYIn0sIjoxIjp7Ik4iOiIzIn0sIjoyIjp7IlMiOiJlZjNkOThmMi1mYmQxLTRjNDYtYTg0YS0wZWZmZWMxZjQ4Y2QifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwV3J0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiUkVNT1ZFICMxXG5TRVQgIzIgPSA6MCwgIzMgPSA6MSwgIzQgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "SKNMECHKG1NI821ETV90327NPRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "79b2db1c1b3f1364", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwV3J0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "182" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2425359822" ], "X-Amzn-Requestid": [ "GCU34N4MEAOTGSCJ5NABTADHHVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJhIjp7IlMiOiJYIn0sIm0iOnsiTiI6IjMifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZWYzZDk4ZjItZmJkMS00YzQ2LWE4NGEtMGVmZmVjMWY0OGNkIn0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXBXcnQifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "b5d6722ccc554ab1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImEwNjQ5YTk5LTMyYTktNDViMi1iYWNhLWE3NTQ4NTgwZWYyZCJ9LCJhIjp7IlMiOiJBIn0sImkiOnsiTiI6IjEifSwibiI6eyJOIjoiMy41In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXBJbmMifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "66NOV344OF5UAU15GSG0MHOST3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "a6bf8e0ad85c58cc", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "397" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiaSIsIiMyIjoibSIsIiMzIjoibiIsIiM0IjoiRG9jc3RvcmVSZXZpc2lvbiJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7Ik4iOiIyLjUifSwiOjEiOnsiTiI6IjMifSwiOjIiOnsiTiI6Ii0xIn0sIjozIjp7IlMiOiIxZDJiODk5YS0yYmJlLTQ1ZmEtYWNhNC05MzNkYjRlMjE0MWEifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwSW5jIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiQUREICMxIDowLCAjMiA6MSwgIzMgOjJcblNFVCAjNCA9IDozXG4ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "1V4G1FNCE7GKTE2NHB04QH50A7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "fe41d1e024f12782", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwSW5jIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "214" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3101115142" ], "X-Amzn-Requestid": [ "2BN85OB7HH46EL8R55QF1Q4ISRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJhIjp7IlMiOiJBIn0sImkiOnsiTiI6IjMuNSJ9LCJtIjp7Ik4iOiIzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjFkMmI4OTlhLTJiYmUtNDVmYS1hY2E0LTkzM2RiNGUyMTQxYSJ9LCJuIjp7Ik4iOiIyLjUifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcEluYyJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "0b7ab677ed971ad7", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "254" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJiMjcyMGI2MC00ZTE5LTRhZmUtYjVhNC01YmIxM2JlNTMxNjkifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMy41In0sIkkiOnsiTiI6IjEifSwiTSI6eyJOVUxMIjp0cnVlfSwiU3QiOnsiUyI6InN0In0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "M6J0L0R2SIQ9Q3VSR52UPEMN5JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1abfd97e943fd74f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "422" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiRiIsIiMyIjoiSSIsIiMzIjoiU3QiLCIjNCI6IlUiLCIjNSI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJOIjoiLTMifSwiOjEiOnsiUyI6InN0ciJ9LCI6MiI6eyJOIjoiNCJ9LCI6MyI6eyJTIjoiMzlhMjI1ZjgtYjE5MC00Yjc2LWEyZWItMWUwMTk2MmZkZmY1In19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVXBkYXRlRXhwcmVzc2lvbiI6IkFERCAjMSA6MFxuUkVNT1ZFICMyXG5TRVQgIzMgPSA6MSwgIzQgPSA6MiwgIzUgPSA6M1xuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "VUB48GS66PFOVN0GACNP5P7M2NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "db2f6980660a3819", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "259" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2608935407" ], "X-Amzn-Requestid": [ "EBF013D268VS4B0T1ESI35V7OBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6InN0ciJ9LCJVIjp7Ik4iOiI0In0sIkYiOnsiTiI6IjAuNSJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJNIjp7Ik5VTEwiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIzOWEyMjVmOC1iMTkwLTRiNzYtYTJlYi0xZTAxOTYyZmRmZjUifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdCJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "2db4e9f0fbaa8a00", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "255" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI1NjBkMmM4Ni0xY2NhLTRlMGItODZjZS1iODdmM2FiZmZlMmEifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIxIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJzdCJ9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVTdHJ1Y3RXcnQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "B4969F4GU6SD0QI5LV3RDHVOPFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "78bfa76f0399bab6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "389" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiSSIsIiMyIjoiU3QiLCIjMyI6IlUiLCIjNCI6IkRvY3N0b3JlUmV2aXNpb24ifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoic3RyIn0sIjoxIjp7Ik4iOiI0In0sIjoyIjp7IlMiOiIxM2NmMGI3OS1hZWE4LTQyYmMtYjRiNy0zNjZjZjU1YmFjMzkifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0V3J0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiUkVNT1ZFICMxXG5TRVQgIzIgPSA6MCwgIzMgPSA6MSwgIzQgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "5BA45Q7R103EBV405RN9N9RKURVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "4934567b798c37c9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "106" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0V3J0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "260" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "874980266" ], "X-Amzn-Requestid": [ "GLFPSB9N4SA6U6065SOUFKHVURVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6InN0ciJ9LCJVIjp7Ik4iOiI0In0sIkYiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiMTNjZjBiNzktYWVhOC00MmJjLWI0YjctMzY2Y2Y1NWJhYzM5In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVTdHJ1Y3RXcnQifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "bacad28393d106ec", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "257" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI0NDA4N2YyZi0wYzVjLTQ4NzctOWVlMi0yNTQ5YzJhMzc1NjQifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMy41In0sIkkiOnsiTiI6IjEifSwiTSI6eyJOVUxMIjp0cnVlfSwiU3QiOnsiUyI6InN0In0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdEluYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "JFM9KDKAKUT9V2NRLJH7LK2JEJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "c3fe05dac9f6a560", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "367" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiRiIsIiMyIjoiVSIsIiMzIjoiRG9jc3RvcmVSZXZpc2lvbiJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7Ik4iOiItMyJ9LCI6MSI6eyJOIjoiNCJ9LCI6MiI6eyJTIjoiYmFhOGJiOTQtOWY5NS00N2FmLThmMDktYjNiZmUyNGI0YTY2In19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdEluYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVXBkYXRlRXhwcmVzc2lvbiI6IkFERCAjMSA6MCwgIzIgOjFcblNFVCAjMyA9IDoyXG4ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "KJK14BUC1D4SNGCIMR9IEUC9Q7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "72626972b8efa0ba", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "106" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0SW5jIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "275" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:36 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1175445170" ], "X-Amzn-Requestid": [ "HI9FS61EHIV6FH7K417SJO75BBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6InN0In0sIlUiOnsiTiI6IjQifSwiRiI6eyJOIjoiMC41In0sIkkiOnsiTiI6IjEifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYmFhOGJiOTQtOWY5NS00N2FmLThmMDktYjNiZmUyNGI0YTY2In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVTdHJ1Y3RJbmMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "790019171b72e97f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "243" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoieCJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJ5In19LCJLZXkiOnsibmFtZSI6eyJTIjoiZG9lc05vdEV4aXN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiU0VUICMxID0gOjBcbiJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "QNILQIRPBTD7HSHHK1EJPB9NK7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "32d54ebdaee9232c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "149" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImFhZWM5NTJjLTk0ZTItNDBlYy1hYjBmLTFmYzIxMTg3ZjU0YyJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "MCBPQADK03PVIAAP9EJGGLML0VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "ac9dd93155c2a113", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "102" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "167" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3121012742" ], "X-Amzn-Requestid": [ "HP1JI2GSO767VP4OB77BRKTLGVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiYWFlYzk1MmMtOTRlMi00MGVjLWFiMGYtMWZjMjExODdmNTRjIn0sInMiOnsiUyI6ImEifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "058128ed33f4c291", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "353" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24iLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYWFlYzk1MmMtOTRlMi00MGVjLWFiMGYtMWZjMjExODdmNTRjIn0sIjoxIjp7IlMiOiJjIn0sIjoyIjp7IlMiOiJlMjJlMDYyYy0wZGRjLTRiMzQtYjgxOS1kOTBkOWViMDk2YWMifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSIsIlVwZGF0ZUV4cHJlc3Npb24iOiJTRVQgIzEgPSA6MSwgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "5149PUS9AM670GKUOQM7P8FEP3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "119d99a4e01f7637", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "353" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24iLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiYWFlYzk1MmMtOTRlMi00MGVjLWFiMGYtMWZjMjExODdmNTRjIn0sIjoxIjp7IlMiOiJjIn0sIjoyIjp7IlMiOiI4MTg2MDVjZC0yODU4LTQ1MjktOTE4ZC0zOGNmYmJjNWNjN2UifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSIsIlVwZGF0ZUV4cHJlc3Npb24iOiJTRVQgIzEgPSA6MSwgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "FNENRF9857PSCR19IAJ0RQAUPBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "01c0d23e8a188736", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI3ZThlNTY2ZS0zNTQyLTRiMjQtOWJmZC1jZjA4Mjk0NTkwYmYifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "A3NJ1IPNUA4DEG8NIUVH5HMK33VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1628fa51c6df1f58", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "105" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "271" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1783937915" ], "X-Amzn-Requestid": [ "HCGP2E1RHDTVFP0SPV0TI8K4U7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJOVUxMIjp0cnVlfSwiTSI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjdlOGU1NjZlLTM1NDItNGIyNC05YmZkLWNmMDgyOTQ1OTBiZiJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "0fb76aad70c179b5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "356" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24iLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiN2U4ZTU2NmUtMzU0Mi00YjI0LTliZmQtY2YwODI5NDU5MGJmIn0sIjoxIjp7IlMiOiJjIn0sIjoyIjp7IlMiOiJiNTcxZTU4Yi00NTMzLTQ1ZGItOWQxNy1mYWM1NjAzMDQ0M2MifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSIsIlVwZGF0ZUV4cHJlc3Npb24iOiJTRVQgIzEgPSA6MSwgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "SD9OMS0HM9ICCJAG7UETC2DB3NVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1dc16c4f7fd93baa", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "356" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkRvY3N0b3JlUmV2aXNpb24iLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiN2U4ZTU2NmUtMzU0Mi00YjI0LTliZmQtY2YwODI5NDU5MGJmIn0sIjoxIjp7IlMiOiJjIn0sIjoyIjp7IlMiOiIzYTRhODUwZi0xYTMyLTRjOTMtOGZiMS1jZGIxYzFjMTEyNmEifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSIsIlVwZGF0ZUV4cHJlc3Npb24iOiJTRVQgIzEgPSA6MSwgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "MOTUO66UQP63I96FJGJP256SM3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "fa8e28a3d27596c1", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "561" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1410087039" ], "X-Amzn-Requestid": [ "9TM72L2H8CDS7RHNC7STU742N7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6Im5hbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDcxMjkyMDlFOSwiSXRlbUNvdW50IjowLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJuYW1lIiwiS2V5VHlwZSI6IkhBU0gifV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJMYXN0RGVjcmVhc2VEYXRlVGltZSI6MS41NjM4ODM1NTY3MjJFOSwiTGFzdEluY3JlYXNlRGF0ZVRpbWUiOjEuNTYzODgyNjM2NzYzRTksIk51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9LCJUYWJsZUFybiI6ImFybjphd3M6ZHluYW1vZGI6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjp0YWJsZS9kb2NzdG9yZS10ZXN0LTEiLCJUYWJsZUlkIjoiOTJkZDM1NzEtMzVhOS00Y2YwLTg5NGYtZjFjMTY3MmM0NzcyIiwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVGFibGVTaXplQnl0ZXMiOjAsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "b5d74eab9a4552fa", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Scan" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6dHJ1ZSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1441" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2485057285" ], "X-Amzn-Requestid": [ "LLLG866NR7LGASGHEU3IL2B8UJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJDb3VudCI6OCwiSXRlbXMiOlt7IkIiOnsiQk9PTCI6ZmFsc2V9LCJTdCI6eyJTIjoic3RyIn0sIlUiOnsiTiI6IjQifSwiRiI6eyJOIjoiMC41In0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTlVMTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjM5YTIyNWY4LWIxOTAtNGI3Ni1hMmViLTFlMDE5NjJmZGZmNSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0In19LHsiRG9jc3RvcmVSZXZpc2lvbiI6eyJTIjoiZTIyZTA2MmMtMGRkYy00YjM0LWI4MTktZDkwZDllYjA5NmFjIn0sIm5hbWUiOnsiUyI6InRlc3RSZXZpc2lvbk1hcCJ9LCJzIjp7IlMiOiJjIn19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7IlMiOiJzdHIifSwiVSI6eyJOIjoiNCJ9LCJGIjp7Ik4iOiIwIn0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTlVMTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6IjEzY2YwYjc5LWFlYTgtNDJiYy1iNGI3LTM2NmNmNTViYWMzOSJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0V3J0In19LHsiQiI6eyJCT09MIjpmYWxzZX0sIlN0Ijp7IlMiOiJzdCJ9LCJVIjp7Ik4iOiI0In0sIkYiOnsiTiI6IjAuNSJ9LCJJIjp7Ik4iOiIxIn0sIkV0YWciOnsiTlVMTCI6dHJ1ZX0sIk0iOnsiTlVMTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImJhYThiYjk0LTlmOTUtNDdhZi04ZjA5LWIzYmZlMjRiNGE2NiJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0SW5jIn19LHsiYSI6eyJTIjoiQSJ9LCJpIjp7Ik4iOiIzLjUifSwibSI6eyJOIjoiMyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiIxZDJiODk5YS0yYmJlLTQ1ZmEtYWNhNC05MzNkYjRlMjE0MWEifSwibiI6eyJOIjoiMi41In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXBJbmMifX0seyJhIjp7IlMiOiJYIn0sImMiOnsiUyI6IkMifSwibSI6eyJOIjoiMyJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiI5OWEyNTIyYy03YmQwLTRmMDgtYTM5ZC0yYTJlMzJhODRiNDIifSwibiI6eyJOIjoiMi41In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXAifX0seyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEifSwicyI6eyJTIjoiYyJ9LCJVIjp7Ik4iOiIwIn0sIkYiOnsiTiI6IjAifSwiSSI6eyJOIjoiMCJ9LCJFdGFnIjp7Ik5VTEwiOnRydWV9LCJNIjp7Ik5VTEwiOnRydWV9LCJEb2NzdG9yZVJldmlzaW9uIjp7IlMiOiJiNTcxZTU4Yi00NTMzLTQ1ZGItOWQxNy1mYWM1NjAzMDQ0M2MifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LHsiYSI6eyJTIjoiWCJ9LCJtIjp7Ik4iOiIzIn0sIkRvY3N0b3JlUmV2aXNpb24iOnsiUyI6ImVmM2Q5OGYyLWZiZDEtNGM0Ni1hODRhLTBlZmZlYzFmNDhjZCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwV3J0In19XSwiU2Nhbm5lZENvdW50Ijo4fQ==" } }, { "ID": "2b51593a04da845c", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "GRQ664P87FNVH2HKO662S37LP7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d3ae945695066011", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "2GF7VQV07RR303ET62TCD20TGBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "9908f222c15662b5", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcEluYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "5750LUNKCHTCHQ2MRMQAFPQEFJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1ba6b4048555329f", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:37 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "3TRKA1VC7R3K72UU7TRIFPIATNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "637b2f7e4eeb0931", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "74" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdFdydCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "E36PUD45GO2BO9EJS16KHG60TNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "c28943144aa2d79e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "VQ93616V6TAT9T3JGMQ3BJN3ARVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "1266e11f03e0001e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcFdydCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "K71SAJC3NM86ACGP96IMH25JKBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "bdcaf6836fbeac24", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "74" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DeleteItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdEluYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "NCJ4JFCF7CDPRPN3PP5I6BKVBRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "79d4cd49ea2d3f1b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "179" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6ImM2NjhjOTYzLWVhNTktNDZiZC04N2E2LTdkOWUzYjkwMjgzNyJ9LCJhIjp7IlMiOiJBIn0sImIiOnsiUyI6IkIifSwiaSI6eyJOIjoiMSJ9LCJuIjp7Ik4iOiIzLjUifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FJV5SG8156E3D5S4CTAVO5RIRNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "7dec173540580be0", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "450" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoibiIsIiMyIjoiYiIsIiMzIjoiaSIsIiM0IjoiYSIsIiM1IjoiYyIsIiM2IjoibSIsIiM3IjoiRXRhZyJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7Ik4iOiItMSJ9LCI6MSI6eyJTIjoiWCJ9LCI6MiI6eyJTIjoiQyJ9LCI6MyI6eyJOIjoiMyJ9LCI6NCI6eyJTIjoiNDY0Yzc1N2MtMTBiZS00M2QxLTg1MjktMzA2Zjg2MjU4NzIzIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVXBkYXRlRXhwcmVzc2lvbiI6IkFERCAjMSA6MFxuUkVNT1ZFICMyLCAjM1xuU0VUICM0ID0gOjEsICM1ID0gOjIsICM2ID0gOjMsICM3ID0gOjRcbiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "4I3NL9FMT3COL36JE2LR1PD32FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "8310e712bff781f9", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "100" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "197" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3161914353" ], "X-Amzn-Requestid": [ "LKV5NGA1IQL4O0AFQ4KKVV207JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJhIjp7IlMiOiJYIn0sIkV0YWciOnsiUyI6IjQ2NGM3NTdjLTEwYmUtNDNkMS04NTI5LTMwNmY4NjI1ODcyMyJ9LCJjIjp7IlMiOiJDIn0sIm0iOnsiTiI6IjMifSwibiI6eyJOIjoiMi41In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXAifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "c7dc5b5dbe052a25", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "138" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjkwNDU3N2U5LWVkNzAtNGNjNy05MTQwLTkzMTg4MjM2NzVmYSJ9LCJhIjp7IlMiOiJBIn0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXBXcnQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "O5RPR4BF0TRI8TN47N36OVM5LVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e61306a5fe766cd4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "371" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiYiIsIiMyIjoiYSIsIiMzIjoibSIsIiM0IjoiRXRhZyJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJYIn0sIjoxIjp7Ik4iOiIzIn0sIjoyIjp7IlMiOiJjNGY0Y2Q0OS01N2RiLTRjZDYtODYwOS05MzMxNThkNWQ3NWYifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwV3J0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiUkVNT1ZFICMxXG5TRVQgIzIgPSA6MCwgIzMgPSA6MSwgIzQgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "FLKQDIRD06Q06MDBNG8M4A2KJBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "e9fa5fded2a0921a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwV3J0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "170" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3510340381" ], "X-Amzn-Requestid": [ "90590ISLSK2BBSE9J6JQCU5SH3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJhIjp7IlMiOiJYIn0sIkV0YWciOnsiUyI6ImM0ZjRjZDQ5LTU3ZGItNGNkNi04NjA5LTkzMzE1OGQ1ZDc1ZiJ9LCJtIjp7Ik4iOiIzIn0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXBXcnQifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "14ef4fad81e921a8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "168" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6ImIwMDQ4NmMwLWFkNGItNDVkOC05N2Y5LWI2NzFlNDAwZWE3ZCJ9LCJhIjp7IlMiOiJBIn0sImkiOnsiTiI6IjEifSwibiI6eyJOIjoiMy41In0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVNYXBJbmMifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "IEIM54OSNIEEVCHC193F90EMGFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "efffc3bfcfd443aa", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "385" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiaSIsIiMyIjoibSIsIiMzIjoibiIsIiM0IjoiRXRhZyJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7Ik4iOiIyLjUifSwiOjEiOnsiTiI6IjMifSwiOjIiOnsiTiI6Ii0xIn0sIjozIjp7IlMiOiJhMjIwMzM2MC00MTk5LTQ0MjMtYmUzZi1lOTFiNWJiNzE4ZDUifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwSW5jIn19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiQUREICMxIDowLCAjMiA6MSwgIzMgOjJcblNFVCAjNCA9IDozXG4ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PAMJE5QL4GL2OM10DLHHQUD3DBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "d4f5947493884b78", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlTWFwSW5jIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "202" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3700002677" ], "X-Amzn-Requestid": [ "6A2CIAKOQ7PCI0C3RLEK351B4VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJhIjp7IlMiOiJBIn0sImkiOnsiTiI6IjMuNSJ9LCJFdGFnIjp7IlMiOiJhMjIwMzM2MC00MTk5LTQ0MjMtYmUzZi1lOTFiNWJiNzE4ZDUifSwibSI6eyJOIjoiMyJ9LCJuIjp7Ik4iOiIyLjUifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZU1hcEluYyJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "74584cc33e116406", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "254" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiJjNDM2NzFlMi01YWQ5LTRkZWEtYThmZS1mYzg2OTZhZjM0MDkifSwiRiI6eyJOIjoiMy41In0sIkkiOnsiTiI6IjEifSwiTSI6eyJOVUxMIjp0cnVlfSwiU3QiOnsiUyI6InN0In0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "B5Q1HRFPMG7PFCQP4ORO020EMBVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "bec7638ce53db5da", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "410" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiRiIsIiMyIjoiSSIsIiMzIjoiU3QiLCIjNCI6IlUiLCIjNSI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJOIjoiLTMifSwiOjEiOnsiUyI6InN0ciJ9LCI6MiI6eyJOIjoiNCJ9LCI6MyI6eyJTIjoiNTRjMGU3OTYtZDgwZi00YTI1LWIzZDAtYjkxMGJjMDJkMTNhIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdCJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVXBkYXRlRXhwcmVzc2lvbiI6IkFERCAjMSA6MFxuUkVNT1ZFICMyXG5TRVQgIzMgPSA6MSwgIzQgPSA6MiwgIzUgPSA6M1xuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "PA8HRS0CO9H54A9KR5GEPVHA07VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "7d0b7dc79e8668d8", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "103" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "259" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:38 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2995250121" ], "X-Amzn-Requestid": [ "3VOCGMO9LS4VFTPLOHMJ19VREFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6InN0ciJ9LCJVIjp7Ik4iOiI0In0sIkYiOnsiTiI6IjAuNSJ9LCJFdGFnIjp7IlMiOiI1NGMwZTc5Ni1kODBmLTRhMjUtYjNkMC1iOTEwYmMwMmQxM2EifSwiTSI6eyJOVUxMIjp0cnVlfSwiRG9jc3RvcmVSZXZpc2lvbiI6eyJOVUxMIjp0cnVlfSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdCJ9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "6c5de214fa7dc95a", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "255" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiJhNTZlYzBkOC00Y2U4LTRiNDctOTRlZS0wYTMyYWE3YzI4Y2QifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIxIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJzdCJ9LCJVIjp7Ik4iOiIwIn0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVTdHJ1Y3RXcnQifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "LHPDEFPHPUP0J14EIKND17PTCRVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "5d6d466369bda3d3", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "377" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiSSIsIiMyIjoiU3QiLCIjMyI6IlUiLCIjNCI6IkV0YWcifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoic3RyIn0sIjoxIjp7Ik4iOiI0In0sIjoyIjp7IlMiOiJmMGI2MjNlZC00MDg5LTQ2YWUtOTc5YS1iM2Q3YTViZjAwMjgifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0V3J0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiUkVNT1ZFICMxXG5TRVQgIzIgPSA6MCwgIzMgPSA6MSwgIzQgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "L2Q82A4HUJK1O8GPFJVVQE71KVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "aacaf8d87c4c2271", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "106" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0V3J0In19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "260" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3804941547" ], "X-Amzn-Requestid": [ "342LP2GTOLM7M5RVI8EACSJU6RVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6InN0ciJ9LCJVIjp7Ik4iOiI0In0sIkYiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiZjBiNjIzZWQtNDA4OS00NmFlLTk3OWEtYjNkN2E1YmYwMDI4In0sIk0iOnsiTlVMTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVTdHJ1Y3RXcnQifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "494e092358c82582", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "257" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiI4NzlkZGU4MS0yNTFhLTQ2MzMtYjc2NS03YmMxYjRiMWQ2ZTgifSwiRiI6eyJOIjoiMy41In0sIkkiOnsiTiI6IjEifSwiTSI6eyJOVUxMIjp0cnVlfSwiU3QiOnsiUyI6InN0In0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdEluYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "NR4OC1SQDP3L7GSP0L9UAUFVD3VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "09f0373311c7b381", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "355" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoiRiIsIiMyIjoiVSIsIiMzIjoiRXRhZyJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7Ik4iOiItMyJ9LCI6MSI6eyJOIjoiNCJ9LCI6MiI6eyJTIjoiNjdkYzAyNjktZDg4My00ZTBmLTlmMjctNGM3ZWY1YjhmMmUxIn19LCJLZXkiOnsibmFtZSI6eyJTIjoidGVzdFVwZGF0ZVN0cnVjdEluYyJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIiwiVXBkYXRlRXhwcmVzc2lvbiI6IkFERCAjMSA6MCwgIzIgOjFcblNFVCAjMyA9IDoyXG4ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "OS2DAH3DJ8102KGH3DBU9GCRUNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "26a6ba585e30e480", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "106" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0VXBkYXRlU3RydWN0SW5jIn19XX19fQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "275" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "4279376726" ], "X-Amzn-Requestid": [ "467UH8F915L5RCG0IULLGAE023VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6InN0In0sIlUiOnsiTiI6IjQifSwiRiI6eyJOIjoiMC41In0sIkkiOnsiTiI6IjEifSwiRXRhZyI6eyJTIjoiNjdkYzAyNjktZDg4My00ZTBmLTlmMjctNGM3ZWY1YjhmMmUxIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIkRvY3N0b3JlUmV2aXNpb24iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RVcGRhdGVTdHJ1Y3RJbmMifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "17173b27ce1471e2", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "243" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiYXR0cmlidXRlX2V4aXN0cyAoIzApIiwiRXhwcmVzc2lvbkF0dHJpYnV0ZU5hbWVzIjp7IiMwIjoibmFtZSIsIiMxIjoieCJ9LCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIjp7IjowIjp7IlMiOiJ5In19LCJLZXkiOnsibmFtZSI6eyJTIjoiZG9lc05vdEV4aXN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEiLCJVcGRhdGVFeHByZXNzaW9uIjoiU0VUICMxID0gOjBcbiJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "9EVRITBTD8UV5NSK3VBEI3SHUFVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "cb2c8d10f8148cd4", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "137" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkV0YWciOnsiUyI6IjkzYjVkMzBmLTk5NWYtNDAzNy04MzUwLTc4OTA4OTI4NjA5ZCJ9LCJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifSwicyI6eyJTIjoiYSJ9fSwiVGFibGVOYW1lIjoiZG9jc3RvcmUtdGVzdC0xIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "73JEKUAPH27NHRL20CT50SUF7VVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "b40c15261c497384", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "102" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "155" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3942147394" ], "X-Amzn-Requestid": [ "47A5IKFJU62R4956FL6OM32QBNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJFdGFnIjp7IlMiOiI5M2I1ZDMwZi05OTVmLTQwMzctODM1MC03ODkwODkyODYwOWQifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uTWFwIn0sInMiOnsiUyI6ImEifX1dfSwiVW5wcm9jZXNzZWRLZXlzIjp7fX0=" } }, { "ID": "6e6e080ac6b3d04e", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "341" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWciLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiOTNiNWQzMGYtOTk1Zi00MDM3LTgzNTAtNzg5MDg5Mjg2MDlkIn0sIjoxIjp7IlMiOiJjIn0sIjoyIjp7IlMiOiJiN2YxY2U2MC1kN2M3LTQ4MWMtYmJlMC04OWE4MDA1MTdmN2EifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSIsIlVwZGF0ZUV4cHJlc3Npb24iOiJTRVQgIzEgPSA6MSwgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "ASCL7QUKBUQ8A606C6PFS2DT7JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "a4ee2f6075683ff0", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "341" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWciLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiOTNiNWQzMGYtOTk1Zi00MDM3LTgzNTAtNzg5MDg5Mjg2MDlkIn0sIjoxIjp7IlMiOiJjIn0sIjoyIjp7IlMiOiJkNTNmNGIwOS0zNzU3LTQwOTctYmUyMi1mYWMxMTVjYTMzYzIifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25NYXAifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSIsIlVwZGF0ZUV4cHJlc3Npb24iOiJTRVQgIzEgPSA6MSwgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "4F21PD838SNVT2VDN13DSSFJA7VV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } }, { "ID": "bd9a7eca3bb299da", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.PutItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJJdGVtIjp7IkIiOnsiQk9PTCI6ZmFsc2V9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9LCJFdGFnIjp7IlMiOiIxOTcxNjU4Ny04ZTFjLTRhNzgtYTc4MC02ZmZjY2Y5MDEwMjUifSwiRiI6eyJOIjoiMCJ9LCJJIjp7Ik4iOiIwIn0sIk0iOnsiTlVMTCI6dHJ1ZX0sIlN0Ijp7IlMiOiJhIn0sIlUiOnsiTiI6IjAifSwibmFtZSI6eyJTIjoidGVzdFJldmlzaW9uU3RydWN0In19LCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTEifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:39 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "6P1VTJS08N50UOQ3DSB4T7N73FVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "58b3c91d98256e9b", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "105" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.BatchGetItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJSZXF1ZXN0SXRlbXMiOnsiZG9jc3RvcmUtdGVzdC0xIjp7IkNvbnNpc3RlbnRSZWFkIjp0cnVlLCJLZXlzIjpbeyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX1dfX19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "271" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "3906887901" ], "X-Amzn-Requestid": [ "524V6BETP0M2TA1I5NGKU6I1FVVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJSZXNwb25zZXMiOnsiZG9jc3RvcmUtdGVzdC0xIjpbeyJCIjp7IkJPT0wiOmZhbHNlfSwiU3QiOnsiUyI6ImEifSwiVSI6eyJOIjoiMCJ9LCJGIjp7Ik4iOiIwIn0sIkkiOnsiTiI6IjAifSwiRXRhZyI6eyJTIjoiMTk3MTY1ODctOGUxYy00YTc4LWE3ODAtNmZmY2NmOTAxMDI1In0sIk0iOnsiTlVMTCI6dHJ1ZX0sIm5hbWUiOnsiUyI6InRlc3RSZXZpc2lvblN0cnVjdCJ9LCJEb2NzdG9yZVJldmlzaW9uIjp7Ik5VTEwiOnRydWV9fV19LCJVbnByb2Nlc3NlZEtleXMiOnt9fQ==" } }, { "ID": "652397f12456be53", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "344" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWciLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMTk3MTY1ODctOGUxYy00YTc4LWE3ODAtNmZmY2NmOTAxMDI1In0sIjoxIjp7IlMiOiJjIn0sIjoyIjp7IlMiOiI3Y2Y1MmY5Yy01Zjc5LTQ4NzgtYTNmNC1kNjU0NjdkZTFjYWQifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSIsIlVwZGF0ZUV4cHJlc3Npb24iOiJTRVQgIzEgPSA6MSwgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "2745614147" ], "X-Amzn-Requestid": [ "11JKHDHO8EQB61EAQ12FNM7MSNVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "e30=" } }, { "ID": "07c39ccfed10b166", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "344" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.UpdateItem" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25kaXRpb25FeHByZXNzaW9uIjoiIzAgPSA6MCIsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkV0YWciLCIjMSI6InMifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJTIjoiMTk3MTY1ODctOGUxYy00YTc4LWE3ODAtNmZmY2NmOTAxMDI1In0sIjoxIjp7IlMiOiJjIn0sIjoyIjp7IlMiOiI4ZTU2ZTI0YS1hNjNlLTRjNjAtYjQyMC03YWEwZjExNWM4YTEifX0sIktleSI6eyJuYW1lIjp7IlMiOiJ0ZXN0UmV2aXNpb25TdHJ1Y3QifX0sIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMSIsIlVwZGF0ZUV4cHJlc3Npb24iOiJTRVQgIzEgPSA6MSwgIzAgPSA6MlxuIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "120" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:40 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "396270901" ], "X-Amzn-Requestid": [ "TCE5AMMD7PE28KC5CD11QLSJDJVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uYXdzLmR5bmFtb2RiLnYyMDEyMDgxMCNDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uIiwibWVzc2FnZSI6IlRoZSBjb25kaXRpb25hbCByZXF1ZXN0IGZhaWxlZCJ9" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/testdata/TestQueryErrors.replay000066400000000000000000000131751367004507500256430ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSNkO1ZcCP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "89b07828ed18862d", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.DescribeTable" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1407" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:57 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "856804657" ], "X-Amzn-Requestid": [ "P2SL79977AB1QL7G1HLNFLH88JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJUYWJsZSI6eyJBdHRyaWJ1dGVEZWZpbml0aW9ucyI6W3siQXR0cmlidXRlTmFtZSI6IkdhbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9LHsiQXR0cmlidXRlTmFtZSI6IlBsYXllciIsIkF0dHJpYnV0ZVR5cGUiOiJTIn0seyJBdHRyaWJ1dGVOYW1lIjoiU2NvcmUiLCJBdHRyaWJ1dGVUeXBlIjoiTiJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJBdHRyaWJ1dGVUeXBlIjoiUyJ9XSwiQ3JlYXRpb25EYXRlVGltZSI6MS41NTYxNDc5MTY0NjFFOSwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyI6W3siSW5kZXhBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yL2luZGV4L2dsb2JhbCIsIkluZGV4TmFtZSI6Imdsb2JhbCIsIkluZGV4U2l6ZUJ5dGVzIjoxMDcsIkluZGV4U3RhdHVzIjoiQUNUSVZFIiwiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJQbGF5ZXIiLCJLZXlUeXBlIjoiSEFTSCJ9LHsiQXR0cmlidXRlTmFtZSI6IlRpbWUiLCJLZXlUeXBlIjoiUkFOR0UifV0sIlByb2plY3Rpb24iOnsiUHJvamVjdGlvblR5cGUiOiJBTEwifSwiUHJvdmlzaW9uZWRUaHJvdWdocHV0Ijp7Ik51bWJlck9mRGVjcmVhc2VzVG9kYXkiOjAsIlJlYWRDYXBhY2l0eVVuaXRzIjo1LCJXcml0ZUNhcGFjaXR5VW5pdHMiOjV9fV0sIkl0ZW1Db3VudCI6MSwiS2V5U2NoZW1hIjpbeyJBdHRyaWJ1dGVOYW1lIjoiR2FtZSIsIktleVR5cGUiOiJIQVNIIn0seyJBdHRyaWJ1dGVOYW1lIjoiUGxheWVyIiwiS2V5VHlwZSI6IlJBTkdFIn1dLCJMb2NhbFNlY29uZGFyeUluZGV4ZXMiOlt7IkluZGV4QXJuIjoiYXJuOmF3czpkeW5hbW9kYjp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOnRhYmxlL2RvY3N0b3JlLXRlc3QtMi9pbmRleC9sb2NhbCIsIkluZGV4TmFtZSI6ImxvY2FsIiwiSW5kZXhTaXplQnl0ZXMiOjEwNywiSXRlbUNvdW50IjoxLCJLZXlTY2hlbWEiOlt7IkF0dHJpYnV0ZU5hbWUiOiJHYW1lIiwiS2V5VHlwZSI6IkhBU0gifSx7IkF0dHJpYnV0ZU5hbWUiOiJTY29yZSIsIktleVR5cGUiOiJSQU5HRSJ9XSwiUHJvamVjdGlvbiI6eyJQcm9qZWN0aW9uVHlwZSI6IkFMTCJ9fV0sIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCI6eyJOdW1iZXJPZkRlY3JlYXNlc1RvZGF5IjowLCJSZWFkQ2FwYWNpdHlVbml0cyI6NSwiV3JpdGVDYXBhY2l0eVVuaXRzIjo1fSwiVGFibGVBcm4iOiJhcm46YXdzOmR5bmFtb2RiOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6dGFibGUvZG9jc3RvcmUtdGVzdC0yIiwiVGFibGVJZCI6IjVjNGM2MDE0LTdlNmEtNGRiNy05M2RlLWExNzQ1NTJjZjc4ZCIsIlRhYmxlTmFtZSI6ImRvY3N0b3JlLXRlc3QtMiIsIlRhYmxlU2l6ZUJ5dGVzIjoxMDcsIlRhYmxlU3RhdHVzIjoiQUNUSVZFIn19" } }, { "ID": "295af28fa3ee6aa6", "Request": { "Method": "POST", "URL": "https://dynamodb.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "identity" ], "Content-Length": [ "175" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "DynamoDB_20120810.Query" ] }, "MediaType": "application/x-amz-json-1.0", "BodyParts": [ "eyJDb25zaXN0ZW50UmVhZCI6ZmFsc2UsIkV4cHJlc3Npb25BdHRyaWJ1dGVOYW1lcyI6eyIjMCI6IkdhbWUifSwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyI6eyI6MCI6eyJOIjoiMSJ9fSwiS2V5Q29uZGl0aW9uRXhwcmVzc2lvbiI6IiMwID0gOjAiLCJUYWJsZU5hbWUiOiJkb2NzdG9yZS10ZXN0LTIifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "165" ], "Content-Type": [ "application/x-amz-json-1.0" ], "Date": [ "Tue, 09 Jun 2020 06:29:57 GMT" ], "Server": [ "Server" ], "X-Amz-Crc32": [ "1880536678" ], "X-Amzn-Requestid": [ "4R3VS8DIK1L5FMDGPSMHRFA64JVV4KQNSO5AEMVJF66Q9ASUAAJG" ] }, "Body": "eyJfX3R5cGUiOiJjb20uYW1hem9uLmNvcmFsLnZhbGlkYXRlI1ZhbGlkYXRpb25FeGNlcHRpb24iLCJtZXNzYWdlIjoiT25lIG9yIG1vcmUgcGFyYW1ldGVyIHZhbHVlcyB3ZXJlIGludmFsaWQ6IENvbmRpdGlvbiBwYXJhbWV0ZXIgdHlwZSBkb2VzIG5vdCBtYXRjaCBzY2hlbWEgdHlwZSJ9" } } ] }go-cloud-0.20.0/docstore/awsdynamodb/urls.go000066400000000000000000000103001367004507500207510ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb import ( "context" "errors" "fmt" "net/url" "sync" "github.com/aws/aws-sdk-go/aws/client" dyn "github.com/aws/aws-sdk-go/service/dynamodb" gcaws "gocloud.dev/aws" "gocloud.dev/docstore" ) func init() { docstore.DefaultURLMux().RegisterCollection(Scheme, new(lazySessionOpener)) } type lazySessionOpener struct { init sync.Once opener *URLOpener err error } func (o *lazySessionOpener) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error) { o.init.Do(func() { sess, err := gcaws.NewDefaultSession() if err != nil { o.err = err return } o.opener = &URLOpener{ ConfigProvider: sess, } }) if o.err != nil { return nil, fmt.Errorf("open collection %s: %v", u, o.err) } return o.opener.OpenCollectionURL(ctx, u) } // Scheme is the URL scheme dynamodb registers its URLOpener under on // docstore.DefaultMux. const Scheme = "dynamodb" // URLOpener opens dynamodb URLs like // "dynamodb://mytable?partition_key=partkey&sort_key=sortkey". // // The URL Host is used as the table name. See // https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html // for more details. // // The following query parameters are supported: // // - partition_key (required): the path to the partition key of a table or an index. // - sort_key: the path to the sort key of a table or an index. // - allow_scans: if "true", allow table scans to be used for queries // // See https://godoc.org/gocloud.dev/aws#ConfigFromURLParams for supported query // parameters for overriding the aws.Session from the URL. type URLOpener struct { // ConfigProvider must be set to a non-nil value. ConfigProvider client.ConfigProvider } // OpenCollectionURL opens the collection at the URL's path. See the package doc for more details. func (o *URLOpener) OpenCollectionURL(_ context.Context, u *url.URL) (*docstore.Collection, error) { db, tableName, partitionKey, sortKey, opts, err := o.processURL(u) if err != nil { return nil, err } return OpenCollection(db, tableName, partitionKey, sortKey, opts) } func (o *URLOpener) processURL(u *url.URL) (db *dyn.DynamoDB, tableName, partitionKey, sortKey string, opts *Options, err error) { q := u.Query() partitionKey = q.Get("partition_key") if partitionKey == "" { return nil, "", "", "", nil, fmt.Errorf("open collection %s: partition_key is required to open a table", u) } q.Del("partition_key") sortKey = q.Get("sort_key") q.Del("sort_key") opts = &Options{ AllowScans: q.Get("allow_scans") == "true", RevisionField: q.Get("revision_field"), } q.Del("allow_scans") q.Del("revision_field") tableName = u.Host if tableName == "" { return nil, "", "", "", nil, fmt.Errorf("open collection %s: URL's host cannot be empty (the table name)", u) } if u.Path != "" { return nil, "", "", "", nil, fmt.Errorf("open collection %s: URL path must be empty, only the host is needed", u) } configProvider := &gcaws.ConfigOverrider{ Base: o.ConfigProvider, } overrideCfg, err := gcaws.ConfigFromURLParams(q) if err != nil { return nil, "", "", "", nil, fmt.Errorf("open collection %s: %v", u, err) } configProvider.Configs = append(configProvider.Configs, overrideCfg) db, err = Dial(configProvider) if err != nil { return nil, "", "", "", nil, fmt.Errorf("open collection %s: %v", u, err) } return db, tableName, partitionKey, sortKey, opts, nil } // Dial gets an AWS DynamoDB service client. func Dial(p client.ConfigProvider) (*dyn.DynamoDB, error) { if p == nil { return nil, errors.New("getting Dynamo service: no AWS session provided") } return dyn.New(p), nil } go-cloud-0.20.0/docstore/awsdynamodb/urls_test.go000066400000000000000000000035411367004507500220210ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsdynamodb import ( "net/url" "testing" gcaws "gocloud.dev/aws" ) func TestProcessURL(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"dynamodb://docstore-test?partition_key=_kind", false}, // OK. {"dynamodb://docstore-test?partition_key=_kind&sort_key=_id", false}, // OK, overriding region. {"dynamodb://docstore-test?partition_key=_kind®ion=" + region, false}, // OK, allow_scans. {"dynamodb://docstore-test?partition_key=_kind&allow_scans=true" + region, false}, // Passing revision field. {"dynamodb://docstore-test?partition_key=_kind&revision_field=123", false}, // Unknown parameter. {"dynamodb://docstore-test?partition_key=_kind¶m=value", true}, // With path. {"dynamodb://docstore-test/subcoll?partition_key=_kind", true}, // Missing partition_key. {"dynamodb://docstore-test?sort_key=_id", true}, } sess, err := gcaws.NewDefaultSession() if err != nil { t.Fatal(err) } o := &URLOpener{ConfigProvider: sess} for _, test := range tests { u, err := url.Parse(test.URL) if err != nil { t.Fatal(err) } _, _, _, _, _, err = o.processURL(u) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } } } go-cloud-0.20.0/docstore/doc.go000066400000000000000000000275221367004507500162370ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package docstore provides a portable way of interacting with a document store. // Subpackages contain driver implementations of docstore for supported // services. // // See https://gocloud.dev/howto/docstore/ for a detailed how-to guide. // // // Collections // // In docstore, documents are grouped into collections, and each document has a key // that is unique in its collection. You can add, retrieve, modify and delete // documents by key, and you can query a collection to retrieve documents that match // certain criteria. // // // Representing Documents // // A document is a set of named fields, each with a value. A field's value can be a scalar, // a list, or a nested document. // // Docstore allows you to represent documents as either map[string]interface{} or // struct pointers. When you represent a document as a map, the fields are map keys // and the values are map values. Lists are represented with slices. For example, // here is a document about a book described as a map: // // doc := map[string]interface{}{ // "Title": "The Master and Margarita", // "Author": map[string]interface{}{ // "First": "Mikhail", // "Last": "Bulgakov", // }, // "PublicationYears": []int{1967, 1973}, // } // // Note that the value of "PublicationYears" is a list, and the value of "Author" is // itself a document. // // Here is the same document represented with structs: // // type Book struct { // Title string // Author Name // PublicationYears []int // } // // type Name struct { // First, Last string // } // // doc := &Book{ // Title: "The Master and Margarita", // Author: Name{ // First: "Mikhail", // Last: "Bulgakov", // }, // PublicationYears: []int{1967, 1973}, // } // // You must use a pointer to a struct to represent a document, although structs // nested inside a document, like the Name struct above, need not be pointers. // // Maps are best for applications where you don't know the structure of the // documents. Using structs is preferred because it enforces some structure on your // data. // // By default, Docstore treats a struct's exported fields as the fields of the // document. You can alter this default mapping by using a struct tag beginning // with "docstore:". Docstore struct tags support renaming, omitting fields // unconditionally, or omitting them only when they are empty, exactly like // encoding/json. For example, this is the Book struct with different field // names: // // type Book struct { // Title string `docstore:"title"` // Author Name `docstore:"author"` // PublicationYears []int `docstore:"pub_years,omitempty"` // NumPublications int `docstore:"-"` // } // // This struct describes a document with field names "title", "author" and // "pub_years". The pub_years field is omitted from the stored document if it has // length zero. The NumPublications field is never stored because it can easily be // computed from the PublicationYears field. // // Given a document field "Foo" and a struct type document, Docstore's decoder // will look through the destination struct's field to find (in order of // preference): // - An exported field with a tag of "Foo"; // - An exported field named "Foo". // // Note that unlike encoding/json, Docstore does case-sensitive matching during // decoding to match the behavior of decoders in most docstore services. // // // Representing Data // // Values stored in document fields can be any of a wide range of types. All // primitive types except for complex numbers are supported, as well as slices and // maps (the map key type must be a string, an integer, or a type that implements // encoding.TextMarshaler). In addition, any type that implements // encoding.BinaryMarshaler or encoding.TextMarshaler is permitted. This set of types // closely matches the encoding/json package (see https://golang.org/pkg/encoding/json). // // Times deserve special mention. Docstore can store and retrieve values of type // time.Time, with two caveats. First, the timezone will not be preserved. Second, // Docstore guarantees only that time.Time values are represented to millisecond // precision. Many services will do better, but if you need to be sure that times // are stored with nanosecond precision, convert the time.Time to another type before // storing and re-create when you retrieve it. For instance, if you store Unix // time in nanoseconds using time's UnixNano method, you can get the original // time back (in the local timezone) with the time.Unix function. // // // Representing Keys // // The key of a docstore document is its unique identifier, usually a field. // Keys never appear alone in the docstore API, only as part of a document. For // instance, to retrieve a document by key, you pass the Collection.Get method // a document as a struct pointer or map with the key field populated, and docstore // populates the rest of that argument with the stored contents. Docstore // doesn't take zero-value key. // // When you open a collection using an OpenCollection method of the // service-specific driver or a URL, you specify how to extract the key from a // document. // Usually, you provide the name of the key field, as in the example below: // // coll, err := memdocstore.OpenCollection("SSN", nil) // // Here, the "SSN" field of the document is used as the key. Some drivers let you // supply a function to extract the key from the document, which can be useful if the // key is composed of more than one field. // // // Actions // // Docstore supports six actions on documents as methods on the Collection type: // - Get retrieves a document. // - Create creates a new document. // - Replace replaces an existing document. // - Put puts a document into a collection, replacing it if it is already present. // - Update applies a set of modifications to a document. // - Delete deletes a document. // // Each action acts atomically on a single document. You can execute actions // individually or you can group them into an action list, like so: // // err := coll.Actions().Put(doc1).Replace(doc2).Get(doc3).Do(ctx) // // When you use an action list, docstore will try to optimize the execution of the // actions. For example, multiple Get actions may be combined into a single "batch // get" RPC. For the most part, actions in a list execute in an undefined order // (perhaps concurrently) and independently, but read and write operations on the same // document are executed in the user-specified order. See the documentation of // ActionList for details. // // // Revisions // // Docstore supports document revisions to distinguish different versions of a // document and enable optimistic locking. By default, Docstore stores the // revision in the field named "DocstoreRevision" (stored in the constant // DefaultRevisionField). Providers give you the option of changing that field // name. // // When you pass a document with a revision field to a write action, Docstore // will give it a revision at creation time or update the revision value when // modifying the document. If you don't want Docstore to handle any revision // logic, simply do not have the revision field in your document. // // When you pass a document with a non-nil revision to Put, Replace, Update or // Delete, Docstore will also compare the revision of the stored document to // that of the given document before making the change. It returns an error with // code FailedPrecondition on mismatch. (See https://gocloud.dev/gcerrors for // information about error codes.) If modification methods are called on a // document struct or map a nil revision field, then no revision checks are // performed, and changes are forced blindly, but a new revision will still be // given for the document. For example, if you call Get to retrieve a document // with a revision, then later perform a write action with that same document, // it will fail if the document was changed since the Get. // // Since different services use different types for revisions, revision fields // of unspecified type must be handled. When defining a document struct, // define the field to be of type interface{}. For example, // // type User { // Name string // DocstoreRevision interface{} // } // // // Queries // // Docstore supports querying within a collection. Call the Query method on // Collection to obtain a Query value, then build your query by calling Query methods // like Where, Limit and so on. Finally, call the Get method on the query to execute it. // The result is an iterator, whose use is described below. // // iter := coll.Query().Where("size", ">", 10).Limit(5).Get(ctx) // // The Where method defines a filter condition, much like a WHERE clause in SQL. // Conditions are of the form "field op value", where field is any document field // path (including dot-separated paths), op is one of "=", ">", "<", ">=" or "<=", // and value can be any value. // // iter := coll.Query().Where("Author.Last", "=", "Bulgakov").Limit(3).Get(ctx) // // You can make multiple Where calls. In some cases, parts of a Where clause may be // processed in the driver rather than natively by the backing service, which may have // performance implications for large result sets. See the driver package // documentation for details. // // Use the DocumentIterator returned from Query.Get by repeatedly calling its Next // method until it returns io.EOF. Always call Stop when you are finished with an // iterator. It is wise to use a defer statement for this. // // iter := coll.Query().Where("size", ">", 10).Limit(5).Get(ctx) // defer iter.Stop() // for { // m := map[string]interface{}{} // err := iter.Next(ctx, m) // if err == io.EOF { // break // } // if err != nil { // return err // } // fmt.Println(m) // } // // // Errors // // The errors returned from this package can be inspected in several ways: // // The Code function from https://gocloud.dev/gcerrors will return an error code, also // defined in that package, when invoked on an error. // // The Collection.ErrorAs method can retrieve the underlying driver error from // the returned error. See the specific driver's package doc for the supported // types. // // // OpenCensus Integration // // OpenCensus supports tracing and metric collection for multiple languages and // backend providers. See https://opencensus.io. // // This API collects OpenCensus traces and metrics for the following methods: // - ActionList.Do // - Query.Get (for the first query only; drivers may make additional calls while iterating over results) // All trace and metric names begin with the package import path. // The traces add the method name. // For example, "gocloud.dev/docstore/ActionList.Do". // The metrics are "completed_calls", a count of completed method calls by driver, // method and status (error code); and "latency", a distribution of method latency // by driver and method. // For example, "gocloud.dev/docstore/latency". // // To enable trace collection in your application, see "Configure Exporter" at // https://opencensus.io/quickstart/go/tracing. // To enable metric collection in your application, see "Exporting stats" at // https://opencensus.io/quickstart/go/metrics. package docstore // import "gocloud.dev/docstore" go-cloud-0.20.0/docstore/docstore.go000066400000000000000000000551341367004507500173140ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package docstore import ( "context" "encoding/base64" "fmt" "log" "reflect" "runtime" "sort" "strings" "sync" "unicode/utf8" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/oc" ) // A Document is a set of field-value pairs. One or more fields, called the key // fields, must uniquely identify the document in the collection. You specify the key // fields when you open a collection. // A field name must be a valid UTF-8 string that does not contain a '.'. // // A Document can be represented as a map[string]int or a pointer to a struct. For // structs, the exported fields are the document fields. type Document = interface{} // A Collection represents a set of documents. It provides an easy and portable // way to interact with document stores. // To create a Collection, use constructors found in driver subpackages. type Collection struct { driver driver.Collection tracer *oc.Tracer mu sync.Mutex closed bool } const pkgName = "gocloud.dev/docstore" var ( latencyMeasure = oc.LatencyMeasure(pkgName) // OpenCensusViews are predefined views for OpenCensus metrics. // The views include counts and latency distributions for API method calls. // See the example at https://godoc.org/go.opencensus.io/stats/view for usage. OpenCensusViews = oc.Views(pkgName, latencyMeasure) ) // NewCollection is intended for use by drivers only. Do not use in application code. var NewCollection = newCollection // newCollection makes a Collection. func newCollection(d driver.Collection) *Collection { c := &Collection{ driver: d, tracer: &oc.Tracer{ Package: pkgName, Provider: oc.ProviderName(d), LatencyMeasure: latencyMeasure, }, } _, file, lineno, ok := runtime.Caller(1) runtime.SetFinalizer(c, func(c *Collection) { c.mu.Lock() closed := c.closed c.mu.Unlock() if !closed { var caller string if ok { caller = fmt.Sprintf(" (%s:%d)", file, lineno) } log.Printf("A docstore.Collection was never closed%s", caller) } }) return c } // DefaultRevisionField is the default name of the document field used for document revision // information, to implement optimistic locking. // See the Revisions section of the package documentation. const DefaultRevisionField = "DocstoreRevision" func (c *Collection) revisionField() string { if r := c.driver.RevisionField(); r != "" { return r } return DefaultRevisionField } // A FieldPath is a dot-separated sequence of UTF-8 field names. Examples: // room // room.size // room.size.width // // A FieldPath can be used select top-level fields or elements of sub-documents. // There is no way to select a single list element. type FieldPath string // Actions returns an ActionList that can be used to perform // actions on the collection's documents. func (c *Collection) Actions() *ActionList { return &ActionList{coll: c} } // An ActionList is a group of actions that affect a single collection. // // The writes in an action list (Put, Create, Replace, Update and Delete actions) // must refer to distinct documents and are unordered with respect to each other. // Each write happens independently of the others: all actions will be executed, even // if some fail. // // The Gets in an action list must also refer to distinct documents and are unordered // and independent of each other. // // A Get and a write may refer to the same document. Each write may be paired with // only one Get in this way. The Get and write will be executed in the order // specified in the list: a Get before a write will see the old value of the // document; a Get after the write will see the new value if the service is strongly // consistent, but may see the old value if the service is eventually consistent. type ActionList struct { coll *Collection actions []*Action beforeDo func(asFunc func(interface{}) bool) error } // An Action is a read or write on a single document. // Use the methods of ActionList to create and execute Actions. type Action struct { kind driver.ActionKind doc Document fieldpaths []FieldPath // paths to retrieve, for Get mods Mods // modifications to make, for Update } func (l *ActionList) add(a *Action) *ActionList { l.actions = append(l.actions, a) return l } // Create adds an action that creates a new document to the given ActionList, and // returns the ActionList. The document must not already exist; an error with code // AlreadyExists is returned if it does. (See gocloud.dev/gcerrors for more on error // codes.) // // If the document doesn't have key fields, or the key fields are empty, meaning // 0, a nil interface value, or any empty array or string, key fields with // unique values will be created and doc will be populated with them if there is // a way to assign those keys, see each driver for details on the requirement of // generating keys. // // The revision field of the document must be absent or nil. // // Except for setting the revision field and possibly setting the key fields, the doc // argument is not modified. func (l *ActionList) Create(doc Document) *ActionList { return l.add(&Action{kind: driver.Create, doc: doc}) } // Replace adds an action that replaces a document to the given ActionList, and // returns the ActionList. The key fields of the doc argument must be set. The // document must already exist; an error with code NotFound is returned if it does // not (or possibly FailedPrecondition, if the doc argument has a non-nil revision). // (See gocloud.dev/gcerrors for more on error codes.) // // See the Revisions section of the package documentation for how revisions are // handled. func (l *ActionList) Replace(doc Document) *ActionList { return l.add(&Action{kind: driver.Replace, doc: doc}) } // Put adds an action that adds or replaces a document to the given ActionList, and returns the ActionList. // The key fields must be set. // // If the revision field is non-nil, then Put behaves exactly like Replace, returning // an error if the document does not exist. Otherwise, Put will create the document // if it does not exist. // // See the Revisions section of the package documentation for how revisions are // handled. func (l *ActionList) Put(doc Document) *ActionList { return l.add(&Action{kind: driver.Put, doc: doc}) } // Delete adds an action that deletes a document to the given ActionList, and returns // the ActionList. Only the key and revision fields of doc are used. // See the Revisions section of the package documentation for how revisions are // handled. // If doc has no revision and the document doesn't exist, nothing happens and no // error is returned. func (l *ActionList) Delete(doc Document) *ActionList { // Rationale for not returning an error if the document does not exist: // Returning an error might be informative and could be ignored, but if the // semantics of an action list are to stop at first error, then we might abort a // list of Deletes just because one of the docs was not present, and that seems // wrong, or at least something you'd want to turn off. return l.add(&Action{kind: driver.Delete, doc: doc}) } // Get adds an action that retrieves a document to the given ActionList, and // returns the ActionList. // Only the key fields of doc are used. // If fps is omitted, doc will contain all the fields of the retrieved document. // If fps is present, only the given field paths are retrieved. It is undefined // whether other fields of doc at the time of the call are removed, unchanged, // or zeroed, so for portable behavior doc should contain only the key fields. // If you plan to write the document back and let Docstore to perform optimistic // locking, include the revision field in fps. See more about revision at // https://godoc.org/gocloud.dev/docstore#hdr-Revisions. func (l *ActionList) Get(doc Document, fps ...FieldPath) *ActionList { return l.add(&Action{ kind: driver.Get, doc: doc, fieldpaths: fps, }) } // Update atomically applies Mods to doc, which must exist. // Only the key and revision fields of doc are used. // It is an error to pass an empty Mods to Update. // // A modification will create a field if it doesn't exist. // // No field path in mods can be a prefix of another. (It makes no sense // to, say, set foo but increment foo.bar.) // // See the Revisions section of the package documentation for how revisions are // handled. // // It is undefined whether updating a sub-field of a non-map field will succeed. // For instance, if the current document is {a: 1} and Update is called with the // mod "a.b": 2, then either Update will fail, or it will succeed with the result // {a: {b: 2}}. // // Update does not modify its doc argument, except to set the new revision. To obtain // the updated document, call Get after calling Update. func (l *ActionList) Update(doc Document, mods Mods) *ActionList { return l.add(&Action{ kind: driver.Update, doc: doc, mods: mods, }) } // Mods is a map from field paths to modifications. // At present, a modification is one of: // - nil, to delete the field // - an Increment value, to add a number to the field // - any other value, to set the field to that value // See ActionList.Update. type Mods map[FieldPath]interface{} // Increment returns a modification that results in a field being incremented. It // should only be used as a value in a Mods map, like so: // // docstore.Mods{"count": docstore.Increment(1)} // // The amount must be an integer or floating-point value. func Increment(amount interface{}) interface{} { return driver.IncOp{amount} } // An ActionListError is returned by ActionList.Do. It contains all the errors // encountered while executing the ActionList, and the positions of the corresponding // actions. type ActionListError []struct { Index int Err error } // TODO(jba): use xerrors formatting. func (e ActionListError) Error() string { var s []string for _, x := range e { s = append(s, fmt.Sprintf("at %d: %v", x.Index, x.Err)) } return strings.Join(s, "; ") } // Unwrap returns the error in e, if there is exactly one. If there is more than one // error, Unwrap returns nil, since there is no way to determine which should be // returned. func (e ActionListError) Unwrap() error { if len(e) == 1 { return e[0].Err } // Return nil when e is nil, or has more than one error. // When there are multiple errors, it doesn't make sense to return any of them. return nil } // BeforeDo takes a callback function that will be called before the ActionList is // executed by the underlying service. It may be invoked multiple times for a single // call to ActionList.Do, because the driver may split the action list into several // service calls. If any callback invocation returns an error, ActionList.Do returns // an error. // // The callback takes a parameter, asFunc, that converts its argument to // driver-specific types. See https://gocloud.dev/concepts/as for background // information. func (l *ActionList) BeforeDo(f func(asFunc func(interface{}) bool) error) *ActionList { l.beforeDo = f return l } // Do executes the action list. // // If Do returns a non-nil error, it will be of type ActionListError. If any action // fails, the returned error will contain the position in the ActionList of each // failed action. // // All the actions will be executed. Docstore tries to execute the actions as // efficiently as possible. Sometimes this makes it impossible to attribute failures // to specific actions; in such cases, the returned ActionListError will have entries // whose Index field is negative. func (l *ActionList) Do(ctx context.Context) error { return l.do(ctx, true) } // do implements Do with optional OpenCensus tracing, so it can be used internally. func (l *ActionList) do(ctx context.Context, oc bool) (err error) { if err := l.coll.checkClosed(); err != nil { return ActionListError{{-1, errClosed}} } if oc { ctx = l.coll.tracer.Start(ctx, "ActionList.Do") defer func() { l.coll.tracer.End(ctx, err) }() } das, err := l.toDriverActions() if err != nil { return err } dopts := &driver.RunActionsOptions{BeforeDo: l.beforeDo} alerr := ActionListError(l.coll.driver.RunActions(ctx, das, dopts)) if len(alerr) == 0 { return nil // Explicitly return nil, because alerr is not of type error. } for i := range alerr { alerr[i].Err = wrapError(l.coll.driver, alerr[i].Err) } return alerr } func (l *ActionList) toDriverActions() ([]*driver.Action, error) { var das []*driver.Action var alerr ActionListError // Create a set of (document key, is Get action) pairs for detecting duplicates: // an action list can have at most one get and at most one write for each key. type keyAndKind struct { key interface{} isGet bool } seen := map[keyAndKind]bool{} for i, a := range l.actions { d, err := l.coll.toDriverAction(a) // Check for duplicate key. if err == nil && d.Key != nil { kk := keyAndKind{d.Key, d.Kind == driver.Get} if seen[kk] { err = gcerr.Newf(gcerr.InvalidArgument, nil, "duplicate key in action list: %v", d.Key) } else { seen[kk] = true } } if err != nil { alerr = append(alerr, struct { Index int Err error }{i, wrapError(l.coll.driver, err)}) } else { d.Index = i das = append(das, d) } } if len(alerr) > 0 { return nil, alerr } return das, nil } func (c *Collection) toDriverAction(a *Action) (*driver.Action, error) { ddoc, err := driver.NewDocument(a.doc) if err != nil { return nil, err } key, err := c.driver.Key(ddoc) if err != nil { if gcerrors.Code(err) != gcerr.InvalidArgument { err = gcerr.Newf(gcerr.InvalidArgument, err, "bad document key") } return nil, err } if key == nil || driver.IsEmptyValue(reflect.ValueOf(key)) { if a.kind != driver.Create { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "missing document key") } // set the key to nil so that the following code does not need to check for // empty. key = nil } if reflect.ValueOf(key).Kind() == reflect.Ptr { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "keys cannot be pointers") } rev, _ := ddoc.GetField(c.revisionField()) if a.kind == driver.Create && rev != nil { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "cannot create a document with a revision field") } kind := a.kind if kind == driver.Put && rev != nil { // A Put with a revision field is equivalent to a Replace. kind = driver.Replace } d := &driver.Action{Kind: kind, Doc: ddoc, Key: key} if a.fieldpaths != nil { d.FieldPaths, err = parseFieldPaths(a.fieldpaths) if err != nil { return nil, err } } if a.kind == driver.Update { d.Mods, err = toDriverMods(a.mods) if err != nil { return nil, err } } return d, nil } func parseFieldPaths(fps []FieldPath) ([][]string, error) { res := make([][]string, len(fps)) for i, s := range fps { fp, err := parseFieldPath(s) if err != nil { return nil, err } res[i] = fp } return res, nil } func toDriverMods(mods Mods) ([]driver.Mod, error) { // Convert mods from a map to a slice of (fieldPath, value) pairs. // The map is easier for users to write, but the slice is easier // to process. if len(mods) == 0 { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "no mods passed to Update") } // Sort keys so tests are deterministic. // After sorting, a key might not immediately follow its prefix. Consider the // sorted list of keys "a", "a+b", "a.b". "a" is prefix of "a.b", but since '+' // sorts before '.', it is not adjacent to it. All we can assume is that the // prefix is before the key. var keys []string for k := range mods { keys = append(keys, string(k)) } sort.Strings(keys) var dmods []driver.Mod for _, k := range keys { k := FieldPath(k) v := mods[k] fp, err := parseFieldPath(k) if err != nil { return nil, err } for _, d := range dmods { if fpHasPrefix(fp, d.FieldPath) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "field path %q is a prefix of %q", strings.Join(d.FieldPath, "."), k) } } if inc, ok := v.(driver.IncOp); ok && !isIncNumber(inc.Amount) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "Increment amount %v of type %[1]T must be an integer or floating-point number", inc.Amount) } dmods = append(dmods, driver.Mod{FieldPath: fp, Value: v}) } return dmods, nil } // fpHasPrefix reports whether the field path fp begins with prefix. func fpHasPrefix(fp, prefix []string) bool { if len(fp) < len(prefix) { return false } for i, p := range prefix { if fp[i] != p { return false } } return true } func isIncNumber(x interface{}) bool { switch reflect.TypeOf(x).Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return true case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: return true case reflect.Float32, reflect.Float64: return true default: return false } } func (l *ActionList) String() string { var as []string for _, a := range l.actions { as = append(as, a.String()) } return "[" + strings.Join(as, ", ") + "]" } func (a *Action) String() string { buf := &strings.Builder{} fmt.Fprintf(buf, "%s(%v", a.kind, a.doc) for _, fp := range a.fieldpaths { fmt.Fprintf(buf, ", %s", fp) } for _, m := range a.mods { fmt.Fprintf(buf, ", %v", m) } fmt.Fprint(buf, ")") return buf.String() } // Create is a convenience for building and running a single-element action list. // See ActionList.Create. func (c *Collection) Create(ctx context.Context, doc Document) error { if err := c.Actions().Create(doc).Do(ctx); err != nil { return err.(ActionListError).Unwrap() } return nil } // Replace is a convenience for building and running a single-element action list. // See ActionList.Replace. func (c *Collection) Replace(ctx context.Context, doc Document) error { if err := c.Actions().Replace(doc).Do(ctx); err != nil { return err.(ActionListError).Unwrap() } return nil } // Put is a convenience for building and running a single-element action list. // See ActionList.Put. func (c *Collection) Put(ctx context.Context, doc Document) error { if err := c.Actions().Put(doc).Do(ctx); err != nil { return err.(ActionListError).Unwrap() } return nil } // Delete is a convenience for building and running a single-element action list. // See ActionList.Delete. func (c *Collection) Delete(ctx context.Context, doc Document) error { if err := c.Actions().Delete(doc).Do(ctx); err != nil { return err.(ActionListError).Unwrap() } return nil } // Get is a convenience for building and running a single-element action list. // See ActionList.Get. func (c *Collection) Get(ctx context.Context, doc Document, fps ...FieldPath) error { if err := c.Actions().Get(doc, fps...).Do(ctx); err != nil { return err.(ActionListError).Unwrap() } return nil } // Update is a convenience for building and running a single-element action list. // See ActionList.Update. func (c *Collection) Update(ctx context.Context, doc Document, mods Mods) error { if err := c.Actions().Update(doc, mods).Do(ctx); err != nil { return err.(ActionListError).Unwrap() } return nil } func parseFieldPath(fp FieldPath) ([]string, error) { if len(fp) == 0 { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "empty field path") } if !utf8.ValidString(string(fp)) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "invalid UTF-8 field path %q", fp) } parts := strings.Split(string(fp), ".") for _, p := range parts { if p == "" { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "empty component in field path %q", fp) } } return parts, nil } // RevisionToString converts a document revision to a string. The returned // string should be treated as opaque; its only use is to provide a serialized // form that can be passed around (e.g., as a hidden field on a web form) // and then turned back into a revision using StringToRevision. The string is safe // for use in URLs and HTTP forms. func (c *Collection) RevisionToString(rev interface{}) (string, error) { if rev == nil { return "", gcerr.Newf(gcerr.InvalidArgument, nil, "RevisionToString: nil revision") } bytes, err := c.driver.RevisionToBytes(rev) if err != nil { return "", wrapError(c.driver, err) } return base64.RawURLEncoding.EncodeToString(bytes), nil } // StringToRevision converts a string obtained with RevisionToString // to a revision. func (c *Collection) StringToRevision(s string) (interface{}, error) { if s == "" { return "", gcerr.Newf(gcerr.InvalidArgument, nil, "StringToRevision: empty string") } bytes, err := base64.RawURLEncoding.DecodeString(s) if err != nil { return nil, err } rev, err := c.driver.BytesToRevision(bytes) if err != nil { return "", wrapError(c.driver, err) } return rev, nil } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (c *Collection) As(i interface{}) bool { if i == nil { return false } return c.driver.As(i) } var errClosed = gcerr.Newf(gcerr.FailedPrecondition, nil, "docstore: Collection has been closed") // Close releases any resources used for the collection. func (c *Collection) Close() error { c.mu.Lock() prev := c.closed c.closed = true c.mu.Unlock() if prev { return errClosed } return wrapError(c.driver, c.driver.Close()) } func (c *Collection) checkClosed() error { c.mu.Lock() defer c.mu.Unlock() if c.closed { return errClosed } return nil } func wrapError(c driver.Collection, err error) error { if err == nil { return nil } if gcerr.DoNotWrap(err) { return err } if _, ok := err.(*gcerr.Error); ok { return err } return gcerr.New(c.ErrorCode(err), err, 2, "docstore") } // ErrorAs converts i to driver-specific types. See // https://gocloud.dev/concepts/as/ for background information and the // driver package documentation for the specific types supported for // that driver. // // When the error is an ActionListError, ErrorAs works on individual errors in // the slice, not the slice itself. // // ErrorAs panics if i is nil or not a pointer. // ErrorAs returns false if err == nil. func (c *Collection) ErrorAs(err error, i interface{}) bool { return gcerr.ErrorAs(err, i, c.driver.ErrorAs) } go-cloud-0.20.0/docstore/docstore_test.go000066400000000000000000000145001367004507500203430ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package docstore import ( "context" "reflect" "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" ) type Book struct { Title string `docstore:"key"` Author Name `docstore:"author"` PublicationYears []int `docstore:"pub_years,omitempty"` NumPublications int `docstore:"-"` } type Name struct { First, Last string } func TestIsIncNumber(t *testing.T) { for _, x := range []interface{}{int(1), 'x', uint(1), byte(1), float32(1), float64(1), time.Duration(1)} { if !isIncNumber(x) { t.Errorf("%v: got false, want true", x) } } for _, x := range []interface{}{1 + 1i, "3", time.Time{}} { if isIncNumber(x) { t.Errorf("%v: got true, want false", x) } } } func TestActionsDo(t *testing.T) { c := newCollection(fakeDriverCollection{}) defer c.Close() dn := map[string]interface{}{"key": nil} d1 := map[string]interface{}{"key": 1} d2 := map[string]interface{}{"key": 2} dsn := &Book{} ds1 := &Book{Title: "The Master and Margarita"} ds2 := &Book{Title: "The Martian"} for _, test := range []struct { alist *ActionList want []int // error indexes; nil if no error }{ {c.Actions().Get(d1).Get(d2).Get(ds1).Get(ds2), nil}, {c.Actions().Get(d1).Put(d1).Put(ds1).Get(ds1), nil}, {c.Actions().Get(d2).Replace(d1).Put(d2).Get(d1), nil}, {c.Actions().Get(ds2).Replace(ds1).Put(ds2).Get(ds1), nil}, // Missing keys. {c.Actions().Put(dn).Put(dsn), []int{0, 1}}, {c.Actions().Get(dn).Replace(dn).Create(dn).Update(dn, Mods{"a": 1}), []int{0, 1, 3}}, {c.Actions().Get(dsn).Replace(dsn).Create(dsn).Update(dsn, Mods{"a": 1}), []int{0, 1, 3}}, // Duplicate documents. {c.Actions().Create(dn).Create(dn).Create(dsn).Create(dsn), nil}, // each Create without a key is a separate document {c.Actions().Create(d2).Create(ds2).Get(d2).Get(ds2).Create(d2).Put(ds2), []int{4, 5}}, {c.Actions().Get(d1).Get(ds1).Get(d1).Get(ds1), []int{2, 3}}, {c.Actions().Put(d1).Put(ds1).Get(d1).Get(ds1).Get(d1).Get(ds1), []int{4, 5}}, {c.Actions().Get(d1).Get(ds1).Put(d1).Put(d2).Put(ds1).Put(ds2).Put(d1).Replace(ds1), []int{6, 7}}, {c.Actions().Create(dn).Create(d1).Create(dsn).Create(ds1).Get(d1).Get(ds1), nil}, // Get with field paths. {c.Actions().Get(d1, "a.b", "c"), nil}, {c.Actions().Get(ds1, "name.Last", "pub_years"), nil}, {c.Actions().Get(d1, ".c").Get(ds1, "").Get(ds2, "\xa0\xa1"), []int{0, 1, 2}}, // bad field path // Mods. {c.Actions().Update(d1, nil).Update(ds1, nil), []int{0, 1}}, // empty mod {c.Actions().Update(d1, Mods{"a.b.c": 1, "a.b": 2, "a.b+c": 3}), []int{0}}, // a.b is a prefix of a.b.c {c.Actions().Update(d1, Mods{"": 1}).Update(ds1, Mods{".f": 2}), []int{0, 1}}, // invalid field path {c.Actions().Update(d1, Mods{"a": Increment(true)}).Update(ds1, Mods{"name": Increment("b")}), []int{0, 1}}, // invalid incOp } { err := test.alist.Do(context.Background()) if err == nil { if len(test.want) > 0 { t.Errorf("%s: got nil, want error", test.alist) } continue } var got []int for _, e := range err.(ActionListError) { if gcerrors.Code(e.Err) != gcerrors.InvalidArgument { t.Errorf("%s: got %v, want InvalidArgument", test.alist, e.Err) } got = append(got, e.Index) } if !cmp.Equal(got, test.want) { t.Errorf("%s: got %v, want %v", test.alist, got, test.want) } } } func TestClosedErrors(t *testing.T) { // Check that all collection methods return errClosed if the collection is closed. ctx := context.Background() c := NewCollection(fakeDriverCollection{}) if err := c.Close(); err != nil { t.Fatalf("got %v, want nil", err) } check := func(err error) { t.Helper() if alerr, ok := err.(ActionListError); ok { err = alerr.Unwrap() } if err != errClosed { t.Errorf("got %v, want errClosed", err) } } doc := map[string]interface{}{"key": "k"} check(c.Close()) check(c.Actions().Create(doc).Do(ctx)) check(c.Create(ctx, doc)) check(c.Replace(ctx, doc)) check(c.Put(ctx, doc)) check(c.Get(ctx, doc)) check(c.Delete(ctx, doc)) check(c.Update(ctx, doc, Mods{"a": 1})) iter := c.Query().Get(ctx) check(iter.Next(ctx, doc)) // Check that DocumentIterator.Next returns errClosed if Close is called // in the middle of the iteration. c = NewCollection(fakeDriverCollection{}) iter = c.Query().Get(ctx) c.Close() check(iter.Next(ctx, doc)) } func TestSerializeRevisionErrors(t *testing.T) { c := NewCollection(fakeDriverCollection{}) _, err := c.RevisionToString(nil) if got := gcerrors.Code(err); got != gcerrors.InvalidArgument { t.Errorf("got %v, want InvalidArgument", got) } _, err = c.StringToRevision("") if got := gcerrors.Code(err); got != gcerrors.InvalidArgument { t.Errorf("got %v, want InvalidArgument", got) } } type fakeDriverCollection struct { driver.Collection } func (fakeDriverCollection) Key(doc driver.Document) (interface{}, error) { key, err := doc.GetField("key") // TODO(#2589): remove this check once we check for empty key. if err != nil || driver.IsEmptyValue(reflect.ValueOf(key)) { return nil, err } return key, nil } func (fakeDriverCollection) RevisionField() string { return DefaultRevisionField } func (fakeDriverCollection) Close() error { return nil } func (fakeDriverCollection) RunActions(ctx context.Context, actions []*driver.Action, opts *driver.RunActionsOptions) driver.ActionListError { return nil } func (fakeDriverCollection) RunGetQuery(context.Context, *driver.Query) (driver.DocumentIterator, error) { return fakeDriverDocumentIterator{}, nil } type fakeDriverDocumentIterator struct { driver.DocumentIterator } func (fakeDriverDocumentIterator) Next(context.Context, driver.Document) error { return nil } go-cloud-0.20.0/docstore/driver/000077500000000000000000000000001367004507500164265ustar00rootroot00000000000000go-cloud-0.20.0/docstore/driver/actionkind_string.go000066400000000000000000000013341367004507500224670ustar00rootroot00000000000000// Code generated by "stringer -type=ActionKind"; DO NOT EDIT. package driver import "strconv" func _() { // An "invalid array index" compiler error signifies that the constant values have changed. // Re-run the stringer command to generate them again. var x [1]struct{} _ = x[Create-0] _ = x[Replace-1] _ = x[Put-2] _ = x[Get-3] _ = x[Delete-4] _ = x[Update-5] } const _ActionKind_name = "CreateReplacePutGetDeleteUpdate" var _ActionKind_index = [...]uint8{0, 6, 13, 16, 19, 25, 31} func (i ActionKind) String() string { if i < 0 || i >= ActionKind(len(_ActionKind_index)-1) { return "ActionKind(" + strconv.FormatInt(int64(i), 10) + ")" } return _ActionKind_name[_ActionKind_index[i]:_ActionKind_index[i+1]] } go-cloud-0.20.0/docstore/driver/codec.go000066400000000000000000000563011367004507500200370ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // TODO(jba): support struct tags. // TODO(jba): for efficiency, enable encoding of only a subset of field paths. package driver import ( "encoding" "fmt" "reflect" "strconv" "github.com/golang/protobuf/proto" "gocloud.dev/docstore/internal/fields" "gocloud.dev/internal/gcerr" ) var ( binaryMarshalerType = reflect.TypeOf((*encoding.BinaryMarshaler)(nil)).Elem() binaryUnmarshalerType = reflect.TypeOf((*encoding.BinaryUnmarshaler)(nil)).Elem() textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem() textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem() protoMessageType = reflect.TypeOf((*proto.Message)(nil)).Elem() ) // An Encoder encodes Go values in some other form (e.g. JSON, protocol buffers). // The encoding protocol is designed to avoid losing type information by passing // values using interface{}. An Encoder is responsible for storing the value // it is encoding. // // Because all drivers must support the same set of values, the encoding methods // (with the exception of EncodeStruct) do not return errors. EncodeStruct is special // because it is an escape hatch for arbitrary structs, not all of which may be // encodable. type Encoder interface { // These methods all encode and store a single Go value. EncodeNil() EncodeBool(bool) EncodeString(string) EncodeInt(int64) EncodeUint(uint64) EncodeFloat(float64) EncodeBytes([]byte) // EncodeList is called when a slice or array is encountered (except for a // []byte, which is handled by EncodeBytes). Its argument is the length of the // slice or array. The encoding algorithm will call the returned Encoder that // many times to encode the successive values of the list. After each such call, // ListIndex will be called with the index of the element just encoded. // // For example, []string{"a", "b"} will result in these calls: // enc2 := enc.EncodeList(2) // enc2.EncodeString("a") // enc2.ListIndex(0) // enc2.EncodeString("b") // enc2.ListIndex(1) EncodeList(n int) Encoder ListIndex(i int) // EncodeMap is called when a map is encountered. Its argument is the number of // fields in the map. The encoding algorithm will call the returned Encoder that // many times to encode the successive values of the map. After each such call, // MapKey will be called with the key of the element just encoded. // // For example, map[string}int{"A": 1, "B": 2} will result in these calls: // enc2 := enc.EncodeMap(2) // enc2.EncodeInt(1) // enc2.MapKey("A") // enc2.EncodeInt(2) // enc2.MapKey("B") // // EncodeMap is also called for structs. The map then consists of the exported // fields of the struct. For struct{A, B int}{1, 2}, if EncodeStruct returns // false, the same sequence of calls as above will occur. EncodeMap(n int) Encoder MapKey(string) // If the encoder wants to encode a value in a special way it should do so here // and return true along with any error from the encoding. Otherwise, it should // return false. EncodeSpecial(v reflect.Value) (bool, error) } // Encode encodes the value using the given Encoder. It traverses the value, // iterating over arrays, slices, maps and the exported fields of structs. If it // encounters a non-nil pointer, it encodes the value that it points to. // Encode treats a few interfaces specially: // // If the value implements encoding.BinaryMarshaler, Encode invokes MarshalBinary // on it and encodes the resulting byte slice. // // If the value implements encoding.TextMarshaler, Encode invokes MarshalText on it // and encodes the resulting string. // // If the value implements proto.Message, Encode invokes proto.Marshal on it and encodes // the resulting byte slice. Here proto is the package "github.com/golang/protobuf/proto". // // Not every map key type can be encoded. Only strings, integers (signed or // unsigned), and types that implement encoding.TextMarshaler are permitted as map // keys. These restrictions match exactly those of the encoding/json package. func Encode(v reflect.Value, e Encoder) error { return wrap(encode(v, e), gcerr.InvalidArgument) } func encode(v reflect.Value, enc Encoder) error { if !v.IsValid() { enc.EncodeNil() return nil } done, err := enc.EncodeSpecial(v) if done { return err } if v.Type().Implements(binaryMarshalerType) { bytes, err := v.Interface().(encoding.BinaryMarshaler).MarshalBinary() if err != nil { return err } enc.EncodeBytes(bytes) return nil } if v.Type().Implements(protoMessageType) { if v.IsNil() { enc.EncodeNil() } else { bytes, err := proto.Marshal(v.Interface().(proto.Message)) if err != nil { return err } enc.EncodeBytes(bytes) } return nil } if v.Type().Implements(textMarshalerType) { bytes, err := v.Interface().(encoding.TextMarshaler).MarshalText() if err != nil { return err } enc.EncodeString(string(bytes)) return nil } switch v.Kind() { case reflect.Bool: enc.EncodeBool(v.Bool()) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: enc.EncodeInt(v.Int()) case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: enc.EncodeUint(v.Uint()) case reflect.Float32, reflect.Float64: enc.EncodeFloat(v.Float()) case reflect.String: enc.EncodeString(v.String()) case reflect.Slice: if v.IsNil() { enc.EncodeNil() return nil } fallthrough case reflect.Array: return encodeList(v, enc) case reflect.Map: return encodeMap(v, enc) case reflect.Ptr: if v.IsNil() { enc.EncodeNil() return nil } return encode(v.Elem(), enc) case reflect.Interface: if v.IsNil() { enc.EncodeNil() return nil } return encode(v.Elem(), enc) case reflect.Struct: fields, err := fieldCache.Fields(v.Type()) if err != nil { return err } return encodeStructWithFields(v, fields, enc) default: return gcerr.Newf(gcerr.InvalidArgument, nil, "cannot encode type %s", v.Type()) } return nil } // Encode an array or non-nil slice. func encodeList(v reflect.Value, enc Encoder) error { // Byte slices encode specially. if v.Type().Kind() == reflect.Slice && v.Type().Elem().Kind() == reflect.Uint8 { enc.EncodeBytes(v.Bytes()) return nil } n := v.Len() enc2 := enc.EncodeList(n) for i := 0; i < n; i++ { if err := encode(v.Index(i), enc2); err != nil { return err } enc2.ListIndex(i) } return nil } // Encode a map. func encodeMap(v reflect.Value, enc Encoder) error { if v.IsNil() { enc.EncodeNil() return nil } keys := v.MapKeys() enc2 := enc.EncodeMap(len(keys)) for _, k := range keys { sk, err := stringifyMapKey(k) if err != nil { return err } if err := encode(v.MapIndex(k), enc2); err != nil { return err } enc2.MapKey(sk) } return nil } // k is the key of a map. Encode it as a string. // Only strings, integers (signed or unsigned), and types that implement // encoding.TextMarshaler are supported. func stringifyMapKey(k reflect.Value) (string, error) { // This is basically reflectWithString.resolve, from encoding/json/encode.go. if k.Kind() == reflect.String { return k.String(), nil } if tm, ok := k.Interface().(encoding.TextMarshaler); ok { b, err := tm.MarshalText() if err != nil { return "", err } return string(b), nil } switch k.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return strconv.FormatInt(k.Int(), 10), nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: return strconv.FormatUint(k.Uint(), 10), nil default: return "", gcerr.Newf(gcerr.InvalidArgument, nil, "cannot encode key %v of type %s", k, k.Type()) } } func encodeStructWithFields(v reflect.Value, fields fields.List, e Encoder) error { e2 := e.EncodeMap(len(fields)) for _, f := range fields { fv, ok := fieldByIndex(v, f.Index) if !ok { // if !ok, then f is a field in an embedded pointer to struct, and that embedded pointer // is nil in v. In other words, the field exists in the struct type, but not this particular // struct value. So we just ignore it. continue } if f.ParsedTag.(tagOptions).omitEmpty && IsEmptyValue(fv) { continue } if err := encode(fv, e2); err != nil { return err } e2.MapKey(f.Name) } return nil } // fieldByIndex retrieves the field of v at the given index if present. // v must be a struct. index must refer to a valid field of v's type. // The second return value is false if there is a nil embedded pointer // along the path denoted by index. // // From encoding/json/encode.go. func fieldByIndex(v reflect.Value, index []int) (reflect.Value, bool) { for _, i := range index { if v.Kind() == reflect.Ptr { if v.IsNil() { return reflect.Value{}, false } v = v.Elem() } v = v.Field(i) } return v, true } //////////////////////////////////////////////////////////////// // TODO(jba): consider a fast path: if we are decoding into a struct, assume the same struct // was used to encode. Then we can build a map from field names to functions, where each // function avoids all the tests of Decode and contains just the code for setting the field. // TODO(jba): provide a way to override the check on missing fields. // A Decoder decodes data that was produced by Encode back into Go values. // Each Decoder instance is responsible for decoding one value. type Decoder interface { // The AsXXX methods each report whether the value being decoded can be represented as // a particular Go type. If so, the method should return the value as that type, and true; // otherwise it should return the zero value and false. AsString() (string, bool) AsInt() (int64, bool) AsUint() (uint64, bool) AsFloat() (float64, bool) AsBytes() ([]byte, bool) AsBool() (bool, bool) AsNull() bool // ListLen should return the length of the value being decoded and true, if the // value can be decoded into a slice or array. Otherwise, ListLen should return // (0, false). ListLen() (int, bool) // If ListLen returned true, then DecodeList will be called. It should iterate // over the value being decoded in sequence from index 0, invoking the callback // for each element with the element's index and a Decoder for the element. // If the callback returns false, DecodeList should return immediately. DecodeList(func(int, Decoder) bool) // MapLen should return the number of fields of the value being decoded and true, // if the value can be decoded into a map or struct. Otherwise, it should return // (0, false). MapLen() (int, bool) // DecodeMap iterates over the fields of the value being decoded, invoke the // callback on each with field name, a Decoder for the field value, and a bool // to indicate whether or not to use exact match for the field names. It will // be called when MapLen returns true or decoding a struct. If the callback // returns false, DecodeMap should return immediately. DecodeMap(func(string, Decoder, bool) bool) // AsInterface should decode the value into the Go value that best represents it. AsInterface() (interface{}, error) // If the decoder wants to decode a value in a special way it should do so here // and return true, the decoded value, and any error from the decoding. // Otherwise, it should return false. AsSpecial(reflect.Value) (bool, interface{}, error) // String should return a human-readable representation of the Decoder, for error messages. String() string } // Decode decodes the value held in the Decoder d into v. // Decode creates slices, maps and pointer elements as needed. // It treats values that implement encoding.BinaryUnmarshaler, // encoding.TextUnmarshaler and proto.Message specially; see Encode. func Decode(v reflect.Value, d Decoder) error { return wrap(decode(v, d), gcerr.InvalidArgument) } func decode(v reflect.Value, d Decoder) error { if !v.CanSet() { return fmt.Errorf("while decoding: cannot set %+v", v) } // A Null value sets anything nullable to nil. // If the value isn't nullable, we keep going. // TODO(jba): should we treat decoding a null into a non-nullable as an error, or // ignore it like encoding/json does? if d.AsNull() { switch v.Kind() { case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: v.Set(reflect.Zero(v.Type())) return nil } } if done, val, err := d.AsSpecial(v); done { if err != nil { return err } v.Set(reflect.ValueOf(val)) return nil } // Handle implemented interfaces first. if reflect.PtrTo(v.Type()).Implements(binaryUnmarshalerType) { if b, ok := d.AsBytes(); ok { return v.Addr().Interface().(encoding.BinaryUnmarshaler).UnmarshalBinary(b) } return decodingError(v, d) } if reflect.PtrTo(v.Type()).Implements(protoMessageType) { if b, ok := d.AsBytes(); ok { return proto.Unmarshal(b, v.Addr().Interface().(proto.Message)) } return decodingError(v, d) } if reflect.PtrTo(v.Type()).Implements(textUnmarshalerType) { if s, ok := d.AsString(); ok { return v.Addr().Interface().(encoding.TextUnmarshaler).UnmarshalText([]byte(s)) } return decodingError(v, d) } switch v.Kind() { case reflect.Bool: if b, ok := d.AsBool(); ok { v.SetBool(b) return nil } case reflect.String: if s, ok := d.AsString(); ok { v.SetString(s) return nil } case reflect.Float32, reflect.Float64: if f, ok := d.AsFloat(); ok { v.SetFloat(f) return nil } case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: i, ok := d.AsInt() if !ok { // Accept a floating-point number with integral value. f, ok := d.AsFloat() if !ok { return decodingError(v, d) } i = int64(f) if float64(i) != f { return gcerr.Newf(gcerr.InvalidArgument, nil, "float %f does not fit into %s", f, v.Type()) } } if v.OverflowInt(i) { return overflowError(i, v.Type()) } v.SetInt(i) return nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: u, ok := d.AsUint() if !ok { // Accept a floating-point number with integral value. f, ok := d.AsFloat() if !ok { return decodingError(v, d) } u = uint64(f) if float64(u) != f { return gcerr.Newf(gcerr.InvalidArgument, nil, "float %f does not fit into %s", f, v.Type()) } } if v.OverflowUint(u) { return overflowError(u, v.Type()) } v.SetUint(u) return nil case reflect.Slice, reflect.Array: return decodeList(v, d) case reflect.Map: return decodeMap(v, d) case reflect.Ptr: // If the pointer is nil, set it to a zero value. if v.IsNil() { v.Set(reflect.New(v.Type().Elem())) } return decode(v.Elem(), d) case reflect.Struct: return decodeStruct(v, d) case reflect.Interface: if v.NumMethod() == 0 { // empty interface // If v holds a pointer, set the pointer. if !v.IsNil() && v.Elem().Kind() == reflect.Ptr { return decode(v.Elem(), d) } // Otherwise, create a fresh value. x, err := d.AsInterface() if err != nil { return err } v.Set(reflect.ValueOf(x)) return nil } // Any other kind of interface is an error??? } return decodingError(v, d) } func decodeList(v reflect.Value, d Decoder) error { // If we're decoding into a byte slice or array, and the decoded value // supports that, then do the decoding. if v.Type().Elem().Kind() == reflect.Uint8 { if b, ok := d.AsBytes(); ok { v.SetBytes(b) return nil } // Fall through to decode the []byte as an ordinary slice. } dlen, ok := d.ListLen() if !ok { return decodingError(v, d) } err := prepareLength(v, dlen) if err != nil { return err } d.DecodeList(func(i int, vd Decoder) bool { if err != nil || i >= dlen { return false } err = decode(v.Index(i), vd) return err == nil }) return err } // v must be a slice or array. We want it to be of length wantLen. Prepare it as // necessary (details described in the code below), and return its resulting length. // If an array is too short, return an error. This behavior differs from // encoding/json, which just populates a short array with whatever it can and drops // the rest. That can lose data. func prepareLength(v reflect.Value, wantLen int) error { vLen := v.Len() if v.Kind() == reflect.Slice { // Construct a slice of the right size, avoiding allocation if possible. switch { case vLen < wantLen: // v too short if v.Cap() >= wantLen { // extend its length if there's room v.SetLen(wantLen) } else { // else make a new one v.Set(reflect.MakeSlice(v.Type(), wantLen, wantLen)) } case vLen > wantLen: // v too long; truncate it v.SetLen(wantLen) } } else { // array switch { case vLen < wantLen: // v too short return gcerr.Newf(gcerr.InvalidArgument, nil, "array length %d is too short for incoming list of length %d", vLen, wantLen) case vLen > wantLen: // v too long; set extra elements to zero z := reflect.Zero(v.Type().Elem()) for i := wantLen; i < vLen; i++ { v.Index(i).Set(z) } } } return nil } // Since a map value is not settable via reflection, this function always creates a // new element for each corresponding map key. Existing values of v are overwritten. // This happens even if the map value is something like a pointer to a struct, where // we could in theory populate the existing struct value instead of discarding it. // This behavior matches encoding/json. func decodeMap(v reflect.Value, d Decoder) error { mapLen, ok := d.MapLen() if !ok { return decodingError(v, d) } t := v.Type() if v.IsNil() { v.Set(reflect.MakeMapWithSize(t, mapLen)) } et := t.Elem() var err error kt := v.Type().Key() d.DecodeMap(func(key string, vd Decoder, _ bool) bool { if err != nil { return false } el := reflect.New(et).Elem() err = decode(el, vd) if err != nil { return false } vk, e := unstringifyMapKey(key, kt) if e != nil { err = e return false } v.SetMapIndex(vk, el) return err == nil }) return err } // Given a map key encoded as a string, and the type of the map key, convert the key // into the type. // For example, if we are decoding the key "3" for a map[int]interface{}, then key is "3" // and keyType is reflect.Int. func unstringifyMapKey(key string, keyType reflect.Type) (reflect.Value, error) { // This code is mostly from the middle of decodeState.object in encoding/json/decode.go. // Except for literalStore, which I don't understand. // TODO(jba): understand literalStore. switch { case keyType.Kind() == reflect.String: return reflect.ValueOf(key).Convert(keyType), nil case reflect.PtrTo(keyType).Implements(textUnmarshalerType): tu := reflect.New(keyType) if err := tu.Interface().(encoding.TextUnmarshaler).UnmarshalText([]byte(key)); err != nil { return reflect.Value{}, err } return tu.Elem(), nil case keyType.Kind() == reflect.Interface && keyType.NumMethod() == 0: // TODO: remove this case? encoding/json doesn't support it. return reflect.ValueOf(key), nil default: switch keyType.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: n, err := strconv.ParseInt(key, 10, 64) if err != nil { return reflect.Value{}, err } if reflect.Zero(keyType).OverflowInt(n) { return reflect.Value{}, overflowError(n, keyType) } return reflect.ValueOf(n).Convert(keyType), nil case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: n, err := strconv.ParseUint(key, 10, 64) if err != nil { return reflect.Value{}, err } if reflect.Zero(keyType).OverflowUint(n) { return reflect.Value{}, overflowError(n, keyType) } return reflect.ValueOf(n).Convert(keyType), nil default: return reflect.Value{}, gcerr.Newf(gcerr.InvalidArgument, nil, "invalid key type %s", keyType) } } } func decodeStruct(v reflect.Value, d Decoder) error { fs, err := fieldCache.Fields(v.Type()) if err != nil { return err } d.DecodeMap(func(key string, d2 Decoder, exactMatch bool) bool { if err != nil { return false } var f *fields.Field if exactMatch { f = fs.MatchExact(key) } else { f = fs.MatchFold(key) } if f == nil { err = gcerr.Newf(gcerr.InvalidArgument, nil, "no field matching %q in %s", key, v.Type()) return false } fv, ok := fieldByIndexCreate(v, f.Index) if !ok { err = gcerr.Newf(gcerr.InvalidArgument, nil, "setting field %q in %s: cannot create embedded pointer field of unexported type", key, v.Type()) return false } err = decode(fv, d2) return err == nil }) return err } // fieldByIndexCreate retrieves the the field of v at the given index if present, // creating embedded struct pointers where necessary. // v must be a struct. index must refer to a valid field of v's type. // The second return value is false If there is a nil embedded pointer of unexported // type along the path denoted by index. (We cannot create such pointers.) func fieldByIndexCreate(v reflect.Value, index []int) (reflect.Value, bool) { for _, i := range index { if v.Kind() == reflect.Ptr { if v.IsNil() { if !v.CanSet() { return reflect.Value{}, false } v.Set(reflect.New(v.Type().Elem())) } v = v.Elem() } v = v.Field(i) } return v, true } func decodingError(v reflect.Value, d Decoder) error { return gcerr.Newf(gcerr.InvalidArgument, nil, "cannot set type %s to %v", v.Type(), d) } func overflowError(x interface{}, t reflect.Type) error { return gcerr.Newf(gcerr.InvalidArgument, nil, "value %v overflows type %s", x, t) } func wrap(err error, code gcerr.ErrorCode) error { if _, ok := err.(*gcerr.Error); !ok && err != nil { err = gcerr.New(code, err, 2, err.Error()) } return err } var fieldCache = fields.NewCache(parseTag, nil, nil) // IsEmptyValue returns whether or not v is a zero value of its type. // Copied from encoding/json, go 1.12. func IsEmptyValue(v reflect.Value) bool { switch k := v.Kind(); k { case reflect.Array, reflect.Map, reflect.Slice, reflect.String: return v.Len() == 0 case reflect.Bool: return !v.Bool() case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return v.Int() == 0 case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: return v.Uint() == 0 case reflect.Float32, reflect.Float64: return v.Float() == 0 case reflect.Interface, reflect.Ptr: return v.IsNil() } return false } // Options for struct tags. type tagOptions struct { omitEmpty bool // do not encode value if empty } // parseTag interprets docstore struct field tags. func parseTag(t reflect.StructTag) (name string, keep bool, other interface{}, err error) { var opts []string name, keep, opts = fields.ParseStandardTag("docstore", t) tagOpts := tagOptions{} for _, opt := range opts { switch opt { case "omitempty": tagOpts.omitEmpty = true default: return "", false, nil, gcerr.Newf(gcerr.InvalidArgument, nil, "unknown tag option: %q", opt) } } return name, keep, tagOpts, nil } go-cloud-0.20.0/docstore/driver/codec_test.go000066400000000000000000000417231367004507500211000ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package driver import ( "errors" "fmt" "reflect" "testing" "time" "github.com/golang/protobuf/proto" tspb "github.com/golang/protobuf/ptypes/timestamp" "github.com/google/go-cmp/cmp" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" ) type myString string type te struct{ X byte } func (e te) MarshalText() ([]byte, error) { return []byte{e.X}, nil } func (e *te) UnmarshalText(b []byte) error { if len(b) != 1 { return errors.New("te.UnmarshalText: need exactly 1 byte") } e.X = b[0] return nil } type special int func (special) MarshalBinary() ([]byte, error) { panic("should never be called") } func (*special) UnmarshalBinary([]byte) error { panic("should never be called") } type badSpecial int type Embed1 struct { E1 string } type Embed2 struct { E2 string } type embed3 struct { E3 string } type embed4 struct { E4 string } type MyStruct struct { A int B *bool C []*te D []time.Time T *tspb.Timestamp Embed1 *Embed2 embed3 *embed4 Omit int `docstore:"-"` OmitEmpty int `docstore:",omitempty"` Rename int `docstore:"rename"` } func TestEncode(t *testing.T) { var seven int32 = 7 var nullptr *int tm := time.Now() tmb, err := tm.MarshalBinary() if err != nil { t.Fatal(err) } tru := true ts := &tspb.Timestamp{Seconds: 25, Nanos: 300} tsb, err := proto.Marshal(ts) if err != nil { t.Fatal(err) } for _, test := range []struct { in, want interface{} }{ {nil, nil}, {0, int64(0)}, {uint64(999), uint64(999)}, {float32(3.5), float64(3.5)}, {"", ""}, {"x", "x"}, {true, true}, {nullptr, nil}, {seven, int64(seven)}, {&seven, int64(seven)}, {[]byte{1, 2}, []byte{1, 2}}, {[2]byte{3, 4}, []interface{}{uint64(3), uint64(4)}}, {[]int(nil), nil}, {[]int{}, []interface{}{}}, {[]int{1, 2}, []interface{}{int64(1), int64(2)}}, { [][]string{{"a", "b"}, {"c", "d"}}, []interface{}{ []interface{}{"a", "b"}, []interface{}{"c", "d"}, }, }, {[...]int{1, 2}, []interface{}{int64(1), int64(2)}}, {[]interface{}{nil, false}, []interface{}{nil, false}}, {map[string]int(nil), nil}, {map[string]int{}, map[string]interface{}{}}, { map[string]int{"a": 1, "b": 2}, map[string]interface{}{"a": int64(1), "b": int64(2)}, }, {tm, tmb}, {ts, tsb}, {te{'A'}, "A"}, {special(17), 17}, {myString("x"), "x"}, {[]myString{"x"}, []interface{}{"x"}}, {map[myString]myString{"a": "x"}, map[string]interface{}{"a": "x"}}, { map[int]bool{17: true}, map[string]interface{}{"17": true}, }, { map[uint]bool{18: true}, map[string]interface{}{"18": true}, }, { map[te]bool{{'B'}: true}, map[string]interface{}{"B": true}, }, { MyStruct{ A: 1, B: &tru, C: []*te{{'T'}}, D: []time.Time{tm}, T: ts, Embed1: Embed1{E1: "E1"}, Embed2: &Embed2{E2: "E2"}, embed3: embed3{E3: "E3"}, embed4: &embed4{E4: "E4"}, Omit: 3, OmitEmpty: 4, Rename: 5, }, map[string]interface{}{ "A": int64(1), "B": true, "C": []interface{}{"T"}, "D": []interface{}{tmb}, "T": tsb, "E1": "E1", "E2": "E2", "E3": "E3", "E4": "E4", "OmitEmpty": int64(4), "rename": int64(5), }, }, { MyStruct{}, map[string]interface{}{ "A": int64(0), "B": nil, "C": nil, "D": nil, "T": nil, "E1": "", "E3": "", "rename": int64(0), }, }, } { enc := &testEncoder{} if err := Encode(reflect.ValueOf(test.in), enc); err != nil { t.Fatal(err) } got := enc.val if diff := cmp.Diff(got, test.want); diff != "" { t.Errorf("%#v (got=-, want=+):\n%s", test.in, diff) } } } type badBinaryMarshaler struct{} func (badBinaryMarshaler) MarshalBinary() ([]byte, error) { return nil, errors.New("bad") } func (*badBinaryMarshaler) UnmarshalBinary([]byte) error { return errors.New("bad") } type badTextMarshaler struct{} func (badTextMarshaler) MarshalText() ([]byte, error) { return nil, errors.New("bad") } func (*badTextMarshaler) UnmarshalText([]byte) error { return errors.New("bad") } func TestEncodeErrors(t *testing.T) { for _, test := range []struct { desc string val interface{} }{ {"MarshalBinary fails", badBinaryMarshaler{}}, {"MarshalText fails", badTextMarshaler{}}, {"bad type", make(chan int)}, {"bad type in list", []interface{}{func() {}}}, {"bad type in map", map[string]interface{}{"a": func() {}}}, {"bad type in struct", &struct{ C chan int }{}}, {"bad map key type", map[float32]int{1: 1}}, {"MarshalText for map key fails", map[badTextMarshaler]int{{}: 1}}, } { enc := &testEncoder{} if err := Encode(reflect.ValueOf(test.val), enc); err == nil { t.Errorf("%s: got nil, want error", test.desc) } else if c := gcerrors.Code(err); c != gcerrors.InvalidArgument { t.Errorf("%s: got code %s, want InvalidArgument", test.desc, c) } } } type testEncoder struct { val interface{} } func (e *testEncoder) EncodeNil() { e.val = nil } func (e *testEncoder) EncodeBool(x bool) { e.val = x } func (e *testEncoder) EncodeString(x string) { e.val = x } func (e *testEncoder) EncodeInt(x int64) { e.val = x } func (e *testEncoder) EncodeUint(x uint64) { e.val = x } func (e *testEncoder) EncodeFloat(x float64) { e.val = x } func (e *testEncoder) EncodeBytes(x []byte) { e.val = x } var ( typeOfSpecial = reflect.TypeOf(special(0)) typeOfBadSpecial = reflect.TypeOf(badSpecial(0)) ) func (e *testEncoder) EncodeSpecial(v reflect.Value) (bool, error) { // special would normally encode as a []byte, because it implements BinaryMarshaler. // Encode it as an int instead. if v.Type() == typeOfSpecial { e.val = int(v.Interface().(special)) return true, nil } return false, nil } func (e *testEncoder) ListIndex(int) { panic("impossible") } func (e *testEncoder) MapKey(string) { panic("impossible") } func (e *testEncoder) EncodeList(n int) Encoder { s := make([]interface{}, n) e.val = s return &listEncoder{s: s} } func (e *testEncoder) EncodeMap(n int) Encoder { m := make(map[string]interface{}, n) e.val = m return &mapEncoder{m: m} } type listEncoder struct { s []interface{} testEncoder } func (e *listEncoder) ListIndex(i int) { e.s[i] = e.val } type mapEncoder struct { m map[string]interface{} testEncoder } func (e *mapEncoder) MapKey(k string) { e.m[k] = e.val } func TestDecode(t *testing.T) { two := 2 tru := true fa := false ptru := &tru pfa := &fa tm := time.Now() tmb, err := tm.MarshalBinary() if err != nil { t.Fatal(err) } ts := &tspb.Timestamp{Seconds: 25, Nanos: 300} tsb, err := proto.Marshal(ts) if err != nil { t.Fatal(err) } for _, test := range []struct { in interface{} // pointer that will be set val interface{} // value to set it to want interface{} exactMatch bool }{ {new(interface{}), nil, nil, true}, {new(int), int64(7), int(7), true}, {new(uint8), uint64(250), uint8(250), true}, {new(bool), true, true, true}, {new(string), "x", "x", true}, {new(float32), 4.25, float32(4.25), true}, {new(*int), int64(2), &two, true}, {new(*int), nil, (*int)(nil), true}, {new([]byte), []byte("foo"), []byte("foo"), true}, {new([]string), []interface{}{"a", "b"}, []string{"a", "b"}, true}, {new([]**bool), []interface{}{true, false}, []**bool{&ptru, &pfa}, true}, {&[1]int{1}, []interface{}{2}, [1]int{2}, true}, {&[2]int{1, 2}, []interface{}{3}, [2]int{3, 0}, true}, // zero extra elements {&[]int{1, 2}, []interface{}{3}, []int{3}, true}, // truncate slice { // extend slice func() *[]int { s := make([]int, 1, 2); return &s }(), []interface{}{5, 6}, []int{5, 6}, true, }, { new(map[string]string), map[string]interface{}{"a": "b"}, map[string]string{"a": "b"}, true, }, { new(map[int]bool), map[string]interface{}{"17": true}, map[int]bool{17: true}, true, }, { new(map[te]bool), map[string]interface{}{"B": true}, map[te]bool{{'B'}: true}, true, }, { new(map[interface{}]bool), map[string]interface{}{"B": true}, map[interface{}]bool{"B": true}, true, }, { new(map[string][]bool), map[string]interface{}{ "a": []interface{}{true, false}, "b": []interface{}{false, true}, }, map[string][]bool{ "a": {true, false}, "b": {false, true}, }, true, }, {new(special), 17, special(17), true}, {new(myString), "x", myString("x"), true}, {new([]myString), []interface{}{"x"}, []myString{"x"}, true}, {new(time.Time), tmb, tm, true}, {new(*time.Time), tmb, &tm, true}, {new(*tspb.Timestamp), tsb, ts, true}, {new([]time.Time), []interface{}{tmb}, []time.Time{tm}, true}, {new([]*time.Time), []interface{}{tmb}, []*time.Time{&tm}, true}, { new(map[myString]myString), map[string]interface{}{"a": "x"}, map[myString]myString{"a": "x"}, true, }, { new(map[string]time.Time), map[string]interface{}{"t": tmb}, map[string]time.Time{"t": tm}, true, }, { new(map[string]*time.Time), map[string]interface{}{"t": tmb}, map[string]*time.Time{"t": &tm}, true, }, {new(te), "A", te{'A'}, true}, {new(**te), "B", func() **te { x := &te{'B'}; return &x }(), true}, { &MyStruct{embed4: &embed4{}}, map[string]interface{}{ "A": int64(1), "B": true, "C": []interface{}{"T"}, "D": []interface{}{tmb}, "T": tsb, "E1": "E1", "E2": "E2", "E3": "E3", "E4": "E4", }, MyStruct{A: 1, B: &tru, C: []*te{{'T'}}, D: []time.Time{tm}, T: ts, Embed1: Embed1{E1: "E1"}, Embed2: &Embed2{E2: "E2"}, embed3: embed3{E3: "E3"}, embed4: &embed4{E4: "E4"}, }, true, }, { &MyStruct{embed4: &embed4{}}, map[string]interface{}{ "a": int64(1), "b": true, "c": []interface{}{"T"}, "d": []interface{}{tmb}, "t": tsb, "e1": "E1", "e2": "E2", "e3": "E3", "e4": "E4", }, MyStruct{A: 1, B: &tru, C: []*te{{'T'}}, D: []time.Time{tm}, T: ts, Embed1: Embed1{E1: "E1"}, Embed2: &Embed2{E2: "E2"}, embed3: embed3{E3: "E3"}, embed4: &embed4{E4: "E4"}, }, false, }, } { dec := &testDecoder{test.val, test.exactMatch} if err := Decode(reflect.ValueOf(test.in).Elem(), dec); err != nil { t.Fatalf("%T: %v", test.in, err) } got := reflect.ValueOf(test.in).Elem().Interface() diff := cmp.Diff(got, test.want, cmp.Comparer(proto.Equal), cmp.AllowUnexported(MyStruct{})) if diff != "" { t.Errorf("%T (got=-, want=+): %s", test.in, diff) } } } func TestDecodeErrors(t *testing.T) { for _, test := range []struct { desc string in, val interface{} }{ { "bad type", new(int), "foo", }, { "bad type in list", new([]int), []interface{}{1, "foo"}, }, { "array too short", new([1]bool), []interface{}{true, false}, }, { "bad map key type", new(map[float64]interface{}), map[string]interface{}{"a": 1}, }, { "unknown struct field", new(MyStruct), map[string]interface{}{"bad": 1}, }, { "nil embedded, unexported pointer to struct", new(MyStruct), map[string]interface{}{"E4": "E4"}, }, { "int overflow", new(int8), 257, }, { "uint overflow", new(uint8), uint(257), }, { "non-integral float (int)", new(int), 1.5, }, { "non-integral float (uint)", new(uint), 1.5, }, { "bad special", new(badSpecial), badSpecial(0), }, { "bad binary unmarshal", new(badBinaryMarshaler), []byte{1}, }, { "binary unmarshal with non-byte slice", new(time.Time), 1, }, { "bad text unmarshal", new(badTextMarshaler), "foo", }, { "text unmarshal with non-string", new(badTextMarshaler), 1, }, { "bad text unmarshal in map key", new(map[badTextMarshaler]int), map[string]interface{}{"a": 1}, }, { "bad int map key", new(map[int]int), map[string]interface{}{"a": 1}, }, { "overflow in int map key", new(map[int8]int), map[string]interface{}{"256": 1}, }, { "bad uint map key", new(map[uint]int), map[string]interface{}{"a": 1}, }, { "overflow in uint map key", new(map[uint8]int), map[string]interface{}{"256": 1}, }, { "case mismatch when decoding with exact match", &MyStruct{embed4: &embed4{}}, map[string]interface{}{ "a": int64(1), "b": true, "e1": "E1", "e2": "E2", }, }, } { dec := &testDecoder{test.val, true} err := Decode(reflect.ValueOf(test.in).Elem(), dec) if e, ok := err.(*gcerr.Error); !ok || err == nil || e.Code != gcerr.InvalidArgument { t.Errorf("%s: got %v, want InvalidArgument Error", test.desc, err) } } } func TestDecodeFail(t *testing.T) { // Verify that failure to decode a value results in an error. for _, in := range []interface{}{ new(interface{}), new(bool), new(string), new(int), new(uint), new(float32), new([]byte), new([]int), new(map[string]interface{}), } { dec := &failDecoder{} err := Decode(reflect.ValueOf(in).Elem(), dec) if e, ok := err.(*gcerr.Error); !ok || err == nil || e.Code != gcerr.InvalidArgument { t.Errorf("%T: got %v, want InvalidArgument Error", in, err) } } } type testDecoder struct { val interface{} // assume encoded by testEncoder. exactMatch bool } func (d testDecoder) String() string { return fmt.Sprintf("%+v of type %T", d.val, d.val) } func (d testDecoder) AsNull() bool { return d.val == nil } func (d testDecoder) AsBool() (bool, bool) { x, ok := d.val.(bool); return x, ok } func (d testDecoder) AsString() (string, bool) { x, ok := d.val.(string); return x, ok } func (d testDecoder) AsInt() (int64, bool) { switch v := d.val.(type) { case int64: return v, true case int: return int64(v), true default: return 0, false } } func (d testDecoder) AsUint() (uint64, bool) { switch v := d.val.(type) { case uint64: return v, true case uint: return uint64(v), true default: return 0, false } } func (d testDecoder) AsFloat() (float64, bool) { x, ok := d.val.(float64); return x, ok } func (d testDecoder) AsBytes() ([]byte, bool) { x, ok := d.val.([]byte); return x, ok } func (d testDecoder) ListLen() (int, bool) { l, ok := d.val.([]interface{}) if !ok { return 0, false } return len(l), true } func (d testDecoder) DecodeList(f func(i int, vd Decoder) bool) { for i, v := range d.val.([]interface{}) { if !f(i, testDecoder{v, d.exactMatch}) { break } } } func (d testDecoder) MapLen() (int, bool) { if m, ok := d.val.(map[string]interface{}); ok { return len(m), true } return 0, false } func (d testDecoder) DecodeMap(f func(key string, vd Decoder, exactMatch bool) bool) { for k, v := range d.val.(map[string]interface{}) { if !f(k, testDecoder{v, d.exactMatch}, d.exactMatch) { break } } } func (d testDecoder) AsInterface() (interface{}, error) { return d.val, nil } func (d testDecoder) AsSpecial(v reflect.Value) (bool, interface{}, error) { switch v.Type() { case typeOfSpecial: return true, special(d.val.(int)), nil case typeOfBadSpecial: return true, nil, errors.New("bad special") default: return false, nil, nil } } // All of failDecoder's methods return failure. type failDecoder struct{} func (failDecoder) String() string { return "failDecoder" } func (failDecoder) AsNull() bool { return false } func (failDecoder) AsBool() (bool, bool) { return false, false } func (failDecoder) AsString() (string, bool) { return "", false } func (failDecoder) AsInt() (int64, bool) { return 0, false } func (failDecoder) AsUint() (uint64, bool) { return 0, false } func (failDecoder) AsFloat() (float64, bool) { return 0, false } func (failDecoder) AsBytes() ([]byte, bool) { return nil, false } func (failDecoder) ListLen() (int, bool) { return 0, false } func (failDecoder) DecodeList(func(i int, vd Decoder) bool) { panic("impossible") } func (failDecoder) MapLen() (int, bool) { return 0, false } func (failDecoder) DecodeMap(func(string, Decoder, bool) bool) { panic("impossible") } func (failDecoder) AsSpecial(v reflect.Value) (bool, interface{}, error) { return false, nil, nil } func (failDecoder) AsInterface() (interface{}, error) { return nil, errors.New("fail") } go-cloud-0.20.0/docstore/driver/compare.go000066400000000000000000000044631367004507500204120ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Useful comparison functions. package driver import ( "fmt" "math/big" "reflect" "time" ) // CompareTimes returns -1, 1 or 0 depending on whether t1 is before, after or // equal to t2. func CompareTimes(t1, t2 time.Time) int { switch { case t1.Before(t2): return -1 case t1.After(t2): return 1 default: return 0 } } // CompareNumbers returns -1, 1 or 0 depending on whether n1 is less than, // greater than or equal to n2. n1 and n2 must be signed integer, unsigned // integer, or floating-point values, but they need not be the same type. // // If both types are integers or both floating-point, CompareNumbers behaves // like Go comparisons on those types. If one operand is integer and the other // is floating-point, CompareNumbers correctly compares the mathematical values // of the numbers, without loss of precision. func CompareNumbers(n1, n2 interface{}) (int, error) { v1, ok := n1.(reflect.Value) if !ok { v1 = reflect.ValueOf(n1) } v2, ok := n2.(reflect.Value) if !ok { v2 = reflect.ValueOf(n2) } f1, err := toBigFloat(v1) if err != nil { return 0, err } f2, err := toBigFloat(v2) if err != nil { return 0, err } return f1.Cmp(f2), nil } func toBigFloat(x reflect.Value) (*big.Float, error) { var f big.Float switch x.Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: f.SetInt64(x.Int()) case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: f.SetUint64(x.Uint()) case reflect.Float32, reflect.Float64: f.SetFloat64(x.Float()) default: typ := "nil" if x.IsValid() { typ = fmt.Sprint(x.Type()) } return nil, fmt.Errorf("%v of type %s is not a number", x, typ) } return &f, nil } go-cloud-0.20.0/docstore/driver/compare_test.go000066400000000000000000000045051367004507500214460ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package driver import ( "math" "testing" "time" ) func TestCompareTimes(t *testing.T) { t1 := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) t2 := t1.Add(1) for _, test := range []struct { in1, in2 time.Time want int }{ {t1, t2, -1}, {t2, t1, 1}, {t1, t1, 0}, } { got := CompareTimes(test.in1, test.in2) if got != test.want { t.Errorf("CompareTimes(%v, %v) == %d, want %d", test.in1, test.in2, got, test.want) } } } func TestCompareNumbers(t *testing.T) { check := func(n1, n2 interface{}, want int) { t.Helper() got, err := CompareNumbers(n1, n2) if err != nil { t.Fatalf("CompareNumbers(%T(%[1]v), %T(%[2]v)): %v", n1, n2, err) } if got != want { t.Errorf("CompareNumbers(%T(%[1]v), %T(%[2]v)) = %d, want %d", n1, n2, got, want) } } for _, test := range []struct { in1, in2 interface{} want int }{ // simple cases {1, 1, 0}, {1, 2, -1}, {1.0, 1.0, 0}, {1.0, 2.0, -1}, // mixed int types {int8(1), int64(1), 0}, {int8(2), int64(1), 1}, {uint(1), int(1), 0}, {uint(2), int(1), 1}, // mixed int and float {1, 1.0, 0}, {1, 1.1, -1}, {2, 1.1, 1}, // large numbers {int64(math.MaxInt64), int64(math.MaxInt64), 0}, {uint64(math.MaxUint64), uint64(math.MaxUint64), 0}, {float64(math.MaxFloat64), float64(math.MaxFloat64), 0}, {int64(math.MaxInt64), int64(math.MaxInt64 - 1), 1}, {int64(math.MaxInt64), float64(math.MaxInt64 - 1), -1}, // float is bigger because it gets rounded up {int64(math.MaxInt64), uint64(math.MaxUint64), -1}, // special floats {int64(math.MaxInt64), math.Inf(1), -1}, {int64(math.MinInt64), math.Inf(-1), 1}, } { check(test.in1, test.in2, test.want) if test.want != 0 { check(test.in2, test.in1, -test.want) } } } go-cloud-0.20.0/docstore/driver/document.go000066400000000000000000000135601367004507500206000ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package driver import ( "reflect" "gocloud.dev/docstore/internal/fields" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" ) // A Document is a lightweight wrapper around either a map[string]interface{} or a // struct pointer. It provides operations to get and set fields and field paths. type Document struct { Origin interface{} // the argument to NewDocument m map[string]interface{} // nil if it's a *struct s reflect.Value // the struct reflected fields fields.List // for structs } // NewDocument creates a new document from doc, which must be a non-nil // map[string]interface{} or struct pointer. func NewDocument(doc interface{}) (Document, error) { if doc == nil { return Document{}, gcerr.Newf(gcerr.InvalidArgument, nil, "document cannot be nil") } if m, ok := doc.(map[string]interface{}); ok { if m == nil { return Document{}, gcerr.Newf(gcerr.InvalidArgument, nil, "document map cannot be nil") } return Document{Origin: doc, m: m}, nil } v := reflect.ValueOf(doc) t := v.Type() if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct { return Document{}, gcerr.Newf(gcerr.InvalidArgument, nil, "expecting *struct or map[string]interface{}, got %s", t) } t = t.Elem() if v.IsNil() { return Document{}, gcerr.Newf(gcerr.InvalidArgument, nil, "document struct pointer cannot be nil") } fields, err := fieldCache.Fields(t) if err != nil { return Document{}, err } return Document{Origin: doc, s: v.Elem(), fields: fields}, nil } // GetField returns the value of the named document field. func (d Document) GetField(field string) (interface{}, error) { if d.m != nil { x, ok := d.m[field] if !ok { return nil, gcerr.Newf(gcerr.NotFound, nil, "field %q not found in map", field) } return x, nil } else { v, err := d.structField(field) if err != nil { return nil, err } return v.Interface(), nil } } // getDocument gets the value of the given field path, which must be a document. // If create is true, it creates intermediate documents as needed. func (d Document) getDocument(fp []string, create bool) (Document, error) { if len(fp) == 0 { return d, nil } x, err := d.GetField(fp[0]) if err != nil { if create && gcerrors.Code(err) == gcerrors.NotFound { // TODO(jba): create the right type for the struct field. x = map[string]interface{}{} if err := d.SetField(fp[0], x); err != nil { return Document{}, err } } else { return Document{}, err } } d2, err := NewDocument(x) if err != nil { return Document{}, err } return d2.getDocument(fp[1:], create) } // Get returns the value of the given field path in the document. func (d Document) Get(fp []string) (interface{}, error) { d2, err := d.getDocument(fp[:len(fp)-1], false) if err != nil { return nil, err } return d2.GetField(fp[len(fp)-1]) } func (d Document) structField(name string) (reflect.Value, error) { // We do case-insensitive match here to cover the MongoDB's lowercaseFields // option. f := d.fields.MatchFold(name) if f == nil { return reflect.Value{}, gcerr.Newf(gcerr.NotFound, nil, "field %q not found in struct type %s", name, d.s.Type()) } fv, ok := fieldByIndex(d.s, f.Index) if !ok { return reflect.Value{}, gcerr.Newf(gcerr.InvalidArgument, nil, "nil embedded pointer; cannot get field %q from %s", name, d.s.Type()) } return fv, nil } // Set sets the value of the field path in the document. // This creates sub-maps as necessary, if possible. func (d Document) Set(fp []string, val interface{}) error { d2, err := d.getDocument(fp[:len(fp)-1], true) if err != nil { return err } return d2.SetField(fp[len(fp)-1], val) } // SetField sets the field to value in the document. func (d Document) SetField(field string, value interface{}) error { if d.m != nil { d.m[field] = value return nil } v, err := d.structField(field) if err != nil { return err } if !v.CanSet() { return gcerr.Newf(gcerr.InvalidArgument, nil, "cannot set field %s in struct of type %s: not addressable", field, d.s.Type()) } v.Set(reflect.ValueOf(value)) return nil } // FieldNames returns names of the top-level fields of d. func (d Document) FieldNames() []string { var names []string if d.m != nil { for k := range d.m { names = append(names, k) } } else { for _, f := range d.fields { names = append(names, f.Name) } } return names } // Encode encodes the document using the given Encoder. func (d Document) Encode(e Encoder) error { if d.m != nil { return encodeMap(reflect.ValueOf(d.m), e) } return encodeStructWithFields(d.s, d.fields, e) } // Decode decodes the document using the given Decoder. func (d Document) Decode(dec Decoder) error { if d.m != nil { return decodeMap(reflect.ValueOf(d.m), dec) } return decodeStruct(d.s, dec) } // HasField returns whether or not d has a certain field. func (d Document) HasField(field string) bool { return d.hasField(field, true) } // HasFieldFold is like HasField but matches case-insensitively for struct // field. func (d Document) HasFieldFold(field string) bool { return d.hasField(field, false) } func (d Document) hasField(field string, exactMatch bool) bool { if d.m != nil { _, ok := d.m[field] return ok } if exactMatch { return d.fields.MatchExact(field) != nil } return d.fields.MatchFold(field) != nil } go-cloud-0.20.0/docstore/driver/document_test.go000066400000000000000000000125411367004507500216350ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package driver import ( "fmt" "sort" "strings" "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/gcerrors" ) type S struct { I int M map[string]interface{} } func TestNewDocument(t *testing.T) { for _, test := range []struct { in interface{} wantErr bool wantMap bool }{ {in: nil, wantErr: true}, {in: map[string]interface{}{}, wantMap: true}, {in: map[string]interface{}(nil), wantErr: true}, {in: S{}, wantErr: true}, {in: &S{}, wantMap: false}, {in: (*S)(nil), wantErr: true}, {in: map[string]bool{}, wantErr: true}, } { got, err := NewDocument(test.in) if err != nil { if !test.wantErr { t.Errorf("%#v: got %v, did not want error", test.in, err) } if c := gcerrors.Code(err); c != gcerrors.InvalidArgument { t.Errorf("%#v: got error code %s, want InvalidArgument", test.in, c) } continue } if test.wantErr { t.Errorf("%#v: got nil, want error", test.in) continue } if g := (got.m != nil); g != test.wantMap { t.Errorf("%#v: got map: %t, want map: %t", test.in, g, test.wantMap) } } } func TestGet(t *testing.T) { in := map[string]interface{}{ "S": &S{ I: 2, M: map[string]interface{}{ "J": 3, "T": &S{I: 4}, }, }, } doc, err := NewDocument(in) if err != nil { t.Fatal(err) } for _, test := range []struct { fp string want interface{} }{ {"S.I", 2}, {"S.i", 2}, {"S.M.J", 3}, {"S.m.J", 3}, {"S.M.T.I", 4}, {"S.m.T.i", 4}, } { fp := strings.Split(test.fp, ".") got, err := doc.Get(fp) if err != nil { t.Fatal(err) } if !cmp.Equal(got, test.want) { t.Errorf("%s: got %v, want %v", got, test.fp, test.want) } } } func TestSet(t *testing.T) { in := map[string]interface{}{ "S": &S{ I: 2, M: map[string]interface{}{ "J": 3, "T": &S{I: 4}, }, }, } doc, err := NewDocument(in) if err != nil { t.Fatal(err) } for _, test := range []struct { fp string val interface{} }{ {"S.I", -1}, {"S.i", -2}, {"S.M.J", -3}, {"S.m.J", -4}, {"S.M.T.I", -5}, {"S.m.T.i", -6}, {"new.field", -7}, } { fp := strings.Split(test.fp, ".") if err := doc.Set(fp, test.val); err != nil { t.Fatalf("%q: %v", test.fp, err) } got, err := doc.Get(fp) if err != nil { t.Fatalf("%s: %v", test.fp, err) } if !cmp.Equal(got, test.val) { t.Errorf("got %v, want %v", got, test.val) } } } func TestGetField(t *testing.T) { type S struct { A int `docstore:"a"` B interface{} `docstore:"b"` } want := 1 for _, in := range []interface{}{ map[string]interface{}{"a": want, "b": nil}, &S{A: want, B: nil}, } { t.Run(fmt.Sprint(in), func(t *testing.T) { doc, err := NewDocument(in) if err != nil { t.Fatal(err) } got, err := doc.GetField("a") if err != nil { t.Fatal(err) } if got != want { t.Errorf("got %v, want %v", got, want) } got, err = doc.GetField("b") if err != nil { t.Fatal(err) } if got != nil { t.Errorf("got %v, want nil", got) } _, err = doc.GetField("c") if gcerrors.Code(err) != gcerrors.NotFound { t.Fatalf("got %v, want NotFound", err) } }) } } func TestFieldNames(t *testing.T) { type E struct { C int } type S struct { A int `docstore:"a"` B int E } for _, test := range []struct { in interface{} want []string }{ { map[string]interface{}{"a": 1, "b": map[string]interface{}{"c": 2}}, []string{"a", "b"}, }, { &S{}, []string{"B", "C", "a"}, }, } { doc, err := NewDocument(test.in) if err != nil { t.Fatal(err) } got := doc.FieldNames() sort.Strings(got) if !cmp.Equal(got, test.want) { t.Errorf("%v: got %v, want %v", test.in, got, test.want) } } } func TestHasField(t *testing.T) { type withRev struct { Rev interface{} } type withoutRev struct { W withRev } for _, tc := range []struct { in interface{} want bool }{ { in: &withRev{}, want: true, }, { in: &withoutRev{}, want: false, }, { in: map[string]interface{}{"Rev": nil}, want: true, }, { in: map[string]interface{}{}, want: false, }, } { doc, err := NewDocument(tc.in) if err != nil { t.Fatal(err) } on := doc.HasField("Rev") if on != tc.want { t.Errorf("%v: got %v want %v", tc.in, on, tc.want) } } } func TestHasFieldFold(t *testing.T) { type withRev struct { Rev interface{} } type withoutRev struct { W withRev } for _, tc := range []struct { in interface{} want bool }{ { in: &withRev{}, want: true, }, { in: &withoutRev{}, want: false, }, } { doc, err := NewDocument(tc.in) if err != nil { t.Fatal(err) } for _, f := range []string{"Rev", "rev", "REV"} { on := doc.HasFieldFold(f) if on != tc.want { t.Errorf("%v: got %v want %v", tc.in, on, tc.want) } } } } go-cloud-0.20.0/docstore/driver/driver.go000066400000000000000000000216541367004507500202600ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package driver defines interfaces to be implemented by docstore drivers, which // will be used by the docstore package to interact with the underlying services. // Application code should use package docstore. package driver // import "gocloud.dev/docstore/driver" import ( "context" "gocloud.dev/gcerrors" ) // A Collection is a set of documents. type Collection interface { // Key returns the document key, or nil if the document doesn't have one, which // means it is absent or zero value, such as 0, a nil interface value, and any // empty array or string. // // If the collection is able to generate a key for a Create action, then // it should not return an error if the key is missing. If the collection // can't generate a missing key, it should return an error. // // The returned key must be comparable. // // The returned key should not be encoded with the driver's codec; it should // be the user-supplied Go value. Key(Document) (interface{}, error) // RevisionField returns the name of the field used to hold revisions. // If the empty string is returned, docstore.DefaultRevisionField will be used. RevisionField() string // RunActions executes a slice of actions. // // If unordered is false, it must appear as if the actions were executed in the // order they appear in the slice, from the client's point of view. The actions // need not happen atomically, nor does eventual consistency in the service // need to be taken into account. For example, after a write returns // successfully, the driver can immediately perform a read on the same document, // even though the service's semantics does not guarantee that the read will see // the write. RunActions should return immediately after the first action that fails. // The returned slice should have a single element. // // opts controls the behavior of RunActions and is guaranteed to be non-nil. RunActions(ctx context.Context, actions []*Action, opts *RunActionsOptions) ActionListError // RunGetQuery executes a Query. // // Implementations can choose to execute the Query as one single request or // multiple ones, depending on their service offerings. The portable type // exposes OpenCensus metrics for the call to RunGetQuery (but not for // subsequent calls to DocumentIterator.Next), so drivers should prefer to // make at least one RPC during RunGetQuery itself instead of lazily waiting // for the first call to Next. RunGetQuery(context.Context, *Query) (DocumentIterator, error) // QueryPlan returns the plan for the query. QueryPlan(*Query) (string, error) // RevisionToBytes converts a revision to a byte slice. RevisionToBytes(interface{}) ([]byte, error) // BytesToRevision converts a []byte to a revision. BytesToRevision([]byte) (interface{}, error) // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. As(i interface{}) bool // ErrorAs allows drivers to expose driver-specific types for returned // errors. // // See https://gocloud.dev/concepts/as/ for background information. ErrorAs(err error, i interface{}) bool // ErrorCode should return a code that describes the error, which was returned by // one of the other methods in this interface. ErrorCode(error) gcerrors.ErrorCode // Close cleans up any resources used by the Collection. Once Close is called, // there will be no method calls to the Collection other than As, ErrorAs, and // ErrorCode. Close() error } // DeleteQueryer should be implemented by Collections that can handle Query.Delete // efficiently. If a Collection does not implement this interface, then Query.Delete // will be implemented by calling RunGetQuery and deleting the returned documents. type DeleteQueryer interface { RunDeleteQuery(context.Context, *Query) error } // UpdateQueryer should be implemented by Collections that can handle Query.Update // efficiently. If a Collection does not implement this interface, then Query.Update // will be implemented by calling RunGetQuery and updating the returned documents. type UpdateQueryer interface { RunUpdateQuery(context.Context, *Query, []Mod) error } // ActionKind describes the type of an action. type ActionKind int // Values for ActionKind. const ( Create ActionKind = iota Replace Put Get Delete Update ) //go:generate stringer -type=ActionKind // An Action describes a single operation on a single document. type Action struct { Kind ActionKind // the kind of action Doc Document // the document on which to perform the action Key interface{} // the document key returned by Collection.Key, to avoid recomputing it FieldPaths [][]string // field paths to retrieve, for Get only Mods []Mod // modifications to make, for Update only Index int // the index of the action in the original action list } // A Mod is a modification to a field path in a document. // At present, the only modifications supported are: // - set the value at the field path, or create the field path if it doesn't exist // - delete the field path (when Value is nil) type Mod struct { FieldPath []string Value interface{} } // IncOp is a value representing an increment modification. type IncOp struct { Amount interface{} } // An ActionListError contains all the errors encountered from a call to RunActions, // and the positions of the corresponding actions. type ActionListError []struct { Index int Err error } // NewActionListError creates an ActionListError from a slice of errors. // If the ith element err of the slice is non-nil, the resulting ActionListError // will have an item {i, err}. func NewActionListError(errs []error) ActionListError { var alerr ActionListError for i, err := range errs { if err != nil { alerr = append(alerr, struct { Index int Err error }{i, err}) } } return alerr } // RunActionsOptions controls the behavior of RunActions. type RunActionsOptions struct { // BeforeDo is a callback that must be called once, sequentially, before each one // or group of the underlying service's actions is executed. asFunc allows // drivers to expose driver-specific types. BeforeDo func(asFunc func(interface{}) bool) error } // A Query defines a query operation to find documents within a collection based // on a set of requirements. type Query struct { // FieldPaths contain a list of field paths the user selects to return in the // query results. The returned documents should only have these fields // populated. FieldPaths [][]string // Filters contain a list of filters for the query. If there are more than one // filter, they should be combined with AND. Filters []Filter // Limit sets the maximum number of results returned by running the query. When // Limit <= 0, the driver implementation should return all possible results. Limit int // OrderByField is the field to use for sorting the results. OrderByField string // OrderAscending specifies the sort direction. OrderAscending bool // BeforeQuery is a callback that must be called exactly once before the // underlying service's query is executed. asFunc allows drivers to expose // driver-specific types. BeforeQuery func(asFunc func(interface{}) bool) error } // A Filter defines a filter expression used to filter the query result. // If the value is a number type, the filter uses numeric comparison. // If the value is a string type, the filter uses UTF-8 string comparison. // TODO(#1762): support comparison of other types. type Filter struct { FieldPath []string // the field path to filter Op string // the operation, supports =, >, >=, <, <= Value interface{} // the value to compare using the operation } // A DocumentIterator iterates through the results (for Get action). type DocumentIterator interface { // Next tries to get the next item in the query result and decodes into Document // with the driver's codec. // When there are no more results, it should return io.EOF. // Once Next returns a non-nil error, it will never be called again. Next(context.Context, Document) error // Stop terminates the iterator before Next return io.EOF, allowing any cleanup // needed. Stop() // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. As(i interface{}) bool } // EqualOp is the name of the equality operator. // It is defined here to avoid confusion between "=" and "==". const EqualOp = "=" go-cloud-0.20.0/docstore/driver/util.go000066400000000000000000000144161367004507500177400ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package driver import ( "reflect" "sort" "sync" "github.com/google/uuid" ) // UniqueString generates a string that is unique with high probability. // Driver implementations can use it to generate keys for Create actions. func UniqueString() string { return uuid.New().String() } // SplitActions divides the actions slice into sub-slices much like strings.Split. // The split function should report whether two consecutive actions should be split, // that is, should be in different sub-slices. The first argument to split is the // last action of the sub-slice currently under construction; the second argument is // the action being considered for addition to that sub-slice. // SplitActions doesn't change the order of the input slice. func SplitActions(actions []*Action, split func(a, b *Action) bool) [][]*Action { var ( groups [][]*Action // the actions, split; the return value cur []*Action // the group currently being constructed ) collect := func() { // called when the current group is known to be finished if len(cur) > 0 { groups = append(groups, cur) cur = nil } } for _, a := range actions { if len(cur) > 0 && split(cur[len(cur)-1], a) { collect() } cur = append(cur, a) } collect() return groups } // GroupActions separates actions into four sets: writes, gets that must happen before the writes, // gets that must happen after the writes, and gets that can happen concurrently with the writes. func GroupActions(actions []*Action) (beforeGets, getList, writeList, afterGets []*Action) { // maps from key to action bgets := map[interface{}]*Action{} agets := map[interface{}]*Action{} cgets := map[interface{}]*Action{} writes := map[interface{}]*Action{} var nilkeys []*Action for _, a := range actions { if a.Key == nil { // Probably a Create. nilkeys = append(nilkeys, a) } else if a.Kind == Get { // If there was a prior write with this key, make sure this get // happens after the writes. if _, ok := writes[a.Key]; ok { agets[a.Key] = a } else { cgets[a.Key] = a } } else { // This is a write. A prior get on the same key was put into cgets; move // it to bgets because it has to happen before writes. if g, ok := cgets[a.Key]; ok { delete(cgets, a.Key) bgets[a.Key] = g } writes[a.Key] = a } } vals := func(m map[interface{}]*Action) []*Action { var as []*Action for _, v := range m { as = append(as, v) } // Sort so the order is always the same for replay. sort.Slice(as, func(i, j int) bool { return as[i].Index < as[j].Index }) return as } return vals(bgets), vals(cgets), append(vals(writes), nilkeys...), vals(agets) } // AsFunc creates and returns an "as function" that behaves as follows: // If its argument is a pointer to the same type as val, the argument is set to val // and the function returns true. Otherwise, the function returns false. func AsFunc(val interface{}) func(interface{}) bool { rval := reflect.ValueOf(val) wantType := reflect.PtrTo(rval.Type()) return func(i interface{}) bool { if i == nil { return false } ri := reflect.ValueOf(i) if ri.Type() != wantType { return false } ri.Elem().Set(rval) return true } } // GroupByFieldPath collect the Get actions into groups with the same set of // field paths. func GroupByFieldPath(gets []*Action) [][]*Action { // This is quadratic in the worst case, but it's unlikely that there would be // many Gets with different field paths. var groups [][]*Action seen := map[*Action]bool{} for len(seen) < len(gets) { var g []*Action for _, a := range gets { if !seen[a] { if len(g) == 0 || fpsEqual(g[0].FieldPaths, a.FieldPaths) { g = append(g, a) seen[a] = true } } } groups = append(groups, g) } return groups } // Report whether two lists of field paths are equal. func fpsEqual(fps1, fps2 [][]string) bool { // TODO?: We really care about sets of field paths, but that's too tedious to determine. if len(fps1) != len(fps2) { return false } for i, fp1 := range fps1 { if !FieldPathsEqual(fp1, fps2[i]) { return false } } return true } // FieldPathsEqual reports whether two field paths are equal. func FieldPathsEqual(fp1, fp2 []string) bool { if len(fp1) != len(fp2) { return false } for i, s1 := range fp1 { if s1 != fp2[i] { return false } } return true } // FieldPathEqualsField reports whether a field path equals a field. // This is a convenience for FieldPathsEqual(fp, []string{s}). func FieldPathEqualsField(fp []string, s string) bool { return len(fp) == 1 && fp[0] == s } // Throttle is used to limit the number of outstanding activities, like RPCs. // It acts like a combination of a semaphore and a WaitGroup. type Throttle struct { c chan struct{} // token semaphore wg sync.WaitGroup } // NewThrottle returns a Throttle that will allow max calls to Acquire that // are not matched with Release calls before blocking. // If max is <= 0, there is no throttling: Acquire always returns immediately. func NewThrottle(max int) *Throttle { t := &Throttle{} if max > 0 { t.c = make(chan struct{}, max) } return t } // Acquire blocks until a token is available, then acquires it and returns. // Acquire is deliberately not sensitive to context.Context, because it assumes // that whatever acquires a token will be context-sensitive, and thus will release // the token when the context is done. func (t *Throttle) Acquire() { t.wg.Add(1) if t.c != nil { t.c <- struct{}{} } } // Release releases a token obtained by Acquire. func (t *Throttle) Release() { if t.c != nil { <-t.c } t.wg.Done() } // Wait blocks goroutine until the number of calls to Release matches the number of // calls to Acquire. func (t *Throttle) Wait() { t.wg.Wait() } go-cloud-0.20.0/docstore/driver/util_test.go000066400000000000000000000101131367004507500207650ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package driver import ( "fmt" "testing" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" ) func TestSplitActions(t *testing.T) { in := []*Action{ {Kind: Get}, {Kind: Get}, {Kind: Put}, {Kind: Update}, {Kind: Get}, {Kind: Create}, } for _, test := range []struct { desc string split func(a, b *Action) bool want [][]*Action }{ { "always false", func(a, b *Action) bool { return false }, [][]*Action{in}, }, { "always true", func(a, b *Action) bool { return true }, [][]*Action{ {{Kind: Get}}, {{Kind: Get}}, {{Kind: Put}}, {{Kind: Update}}, {{Kind: Get}}, {{Kind: Create}}, }, }, { "Get vs. other", func(a, b *Action) bool { return (a.Kind == Get) != (b.Kind == Get) }, [][]*Action{ {{Kind: Get}, {Kind: Get}}, {{Kind: Put}, {Kind: Update}}, {{Kind: Get}}, {{Kind: Create}}, }, }, } { got := SplitActions(in, test.split) if diff := cmp.Diff(got, test.want, cmpopts.IgnoreFields(Action{}, "Doc")); diff != "" { t.Errorf("%s: %s", test.desc, diff) } } } func TestGroupActions(t *testing.T) { for _, test := range []struct { in []*Action want [][]int // in the same order as the return args }{ { in: []*Action{{Kind: Get, Key: 1}}, want: [][]int{nil, {0}, nil, nil}, }, { in: []*Action{ {Kind: Get, Key: 1}, {Kind: Get, Key: 3}, {Kind: Put, Key: 1}, {Kind: Replace, Key: 2}, {Kind: Get, Key: 2}, }, want: [][]int{{0}, {1}, {2, 3}, {4}}, }, { in: []*Action{{Kind: Create}, {Kind: Create}, {Kind: Create}}, want: [][]int{nil, nil, {0, 1, 2}, nil}, }, } { got := make([][]*Action, 4) got[0], got[1], got[2], got[3] = GroupActions(test.in) want := make([][]*Action, 4) for i, s := range test.want { for _, x := range s { want[i] = append(want[i], test.in[x]) } } diff := cmp.Diff(got, want, cmpopts.IgnoreUnexported(Document{}), cmpopts.SortSlices(func(a1, a2 *Action) bool { if a1.Kind != a2.Kind { return a1.Kind < a2.Kind } a1k, _ := a1.Key.(int) a2k, _ := a2.Key.(int) return a1k < a2k })) if diff != "" { t.Errorf("%v: %s", test.in, diff) } } } func (a *Action) String() string { // for TestGroupActions return fmt.Sprintf("<%s %v>", a.Kind, a.Key) } func TestAsFunc(t *testing.T) { x := 1 as := AsFunc(x) var y int if !as(&y) || y != 1 { t.Errorf("*int: returned false or wrong value %d", y) } var z float64 for _, arg := range []interface{}{nil, y, &z} { if as(arg) { t.Errorf("%#v: got true, want false", arg) } } } func TestGroupByFieldPath(t *testing.T) { for i, test := range []struct { in []*Action want [][]int // indexes into test.in }{ { in: []*Action{{Index: 0}, {Index: 1}, {Index: 2}}, want: [][]int{{0, 1, 2}}, }, { in: []*Action{{Index: 0}, {Index: 1, FieldPaths: [][]string{{"a"}}}, {Index: 2}}, want: [][]int{{0, 2}, {1}}, }, { in: []*Action{ {Index: 0, FieldPaths: [][]string{{"a", "b"}}}, {Index: 1, FieldPaths: [][]string{{"a"}}}, {Index: 2}, {Index: 3, FieldPaths: [][]string{{"a"}, {"b"}}}, }, want: [][]int{{0}, {1}, {2}, {3}}, }, } { got := GroupByFieldPath(test.in) want := make([][]*Action, len(test.want)) for i, s := range test.want { want[i] = make([]*Action, len(s)) for j, x := range s { want[i][j] = test.in[x] } } if diff := cmp.Diff(got, want, cmpopts.IgnoreUnexported(Document{})); diff != "" { t.Errorf("#%d: %s", i, diff) } } } go-cloud-0.20.0/docstore/drivertest/000077500000000000000000000000001367004507500173265ustar00rootroot00000000000000go-cloud-0.20.0/docstore/drivertest/driverbenchmark.go000066400000000000000000000067341367004507500230350ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package drivertest import ( "context" "fmt" "strconv" "sync/atomic" "testing" "gocloud.dev/docstore" ) // RunBenchmarks runs benchmarks for docstore drivers. func RunBenchmarks(b *testing.B, coll *docstore.Collection) { defer coll.Close() clearCollection(b, coll) b.Run("BenchmarkSingleActionPut", func(b *testing.B) { benchmarkSingleActionPut(10, b, coll) }) b.Run("BenchmarkSingleActionGet", func(b *testing.B) { benchmarkSingleActionGet(10, b, coll) }) b.Run("BenchmarkActionListPut", func(b *testing.B) { benchmarkActionListPut(50, b, coll) }) b.Run("BenchmarkActionListGet", func(b *testing.B) { benchmarkActionListGet(100, b, coll) }) clearCollection(b, coll) } func benchmarkSingleActionPut(n int, b *testing.B, coll *docstore.Collection) { ctx := context.Background() const baseKey = "benchmarksingleaction-put-" var nextID uint32 b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { for i := 0; i < n; i++ { key := fmt.Sprintf("%s%d", baseKey, atomic.AddUint32(&nextID, 1)) doc := docmap{KeyField: key, "S": key} if err := coll.Put(ctx, doc); err != nil { b.Error(err) } } } }) } func benchmarkSingleActionGet(n int, b *testing.B, coll *docstore.Collection) { ctx := context.Background() const baseKey = "benchmarksingleaction-get-" docs := make([]docmap, n) puts := coll.Actions() for i := 0; i < n; i++ { docs[i] = docmap{KeyField: baseKey + strconv.Itoa(i), "n": i} puts.Put(docs[i]) } if err := puts.Do(ctx); err != nil { b.Fatal(err) } b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { for _, doc := range docs { got := docmap{KeyField: doc[KeyField]} if err := coll.Get(ctx, got); err != nil { b.Fatal(err) } } } }) } func benchmarkActionListPut(n int, b *testing.B, coll *docstore.Collection) { ctx := context.Background() const baseKey = "benchmarkactionlist-put-" var nextID uint32 b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { actions := coll.Actions() for i := 0; i < n; i++ { key := fmt.Sprintf("%s%d", baseKey, atomic.AddUint32(&nextID, 1)) doc := docmap{KeyField: key, "S": key} actions.Put(doc) } if err := actions.Do(ctx); err != nil { b.Error(err) } } }) } func benchmarkActionListGet(n int, b *testing.B, coll *docstore.Collection) { ctx := context.Background() const baseKey = "benchmarkactionlist-get-" docs := make([]docmap, n) puts := coll.Actions() for i := 0; i < n; i++ { docs[i] = docmap{KeyField: baseKey + strconv.Itoa(i), "n": i} puts.Put(docs[i]) } if err := puts.Do(ctx); err != nil { b.Fatal(err) } b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { gets := coll.Actions() for _, doc := range docs { got := docmap{KeyField: doc[KeyField]} gets.Get(got) } if err := gets.Do(ctx); err != nil { b.Fatal(err) } } }) } go-cloud-0.20.0/docstore/drivertest/drivertest.go000066400000000000000000001537401367004507500220620ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package drivertest provides a conformance test for implementations of // driver. package drivertest // import "gocloud.dev/docstore/drivertest" import ( "context" "errors" "fmt" "io" "math" "reflect" "testing" "time" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/timestamp" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "gocloud.dev/docstore" ds "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" ) // CollectionKind describes the kind of testing collection to create. type CollectionKind int const ( // A collection with a single primary key field of type string named // drivertest.KeyField. SingleKey CollectionKind = iota // A collection that will consist entirely of HighScore structs (see below), // whose two primary key fields are "Game" and "Player", both strings. Use // drivertest.HighScoreKey as the key function. TwoKey // The collection should behave like a SingleKey collection, except // that the revision field should be drivertest.AlternateRevisionField. AltRev // The collection's documents will not have a revision field. NoRev ) // Harness descibes the functionality test harnesses must provide to run // conformance tests. type Harness interface { // MakeCollection makes a driver.Collection for testing. MakeCollection(context.Context, CollectionKind) (driver.Collection, error) // BeforeDoTypes should return a list of values whose types are valid for the as // function given to BeforeDo. For example, if the driver converts Get actions // to *GetRequests and write actions to *WriteRequests, then BeforeDoTypes should // return []interface{}{&GetRequest{}, &WriteRequest{}}. // TODO(jba): consider splitting these by action kind. BeforeDoTypes() []interface{} // BeforeQueryTypes should return a list of values whose types are valid for the as // function given to BeforeQuery. BeforeQueryTypes() []interface{} // RevisionsEqual reports whether two revisions are equal. RevisionsEqual(rev1, rev2 interface{}) bool // Close closes resources used by the harness. Close() } // HarnessMaker describes functions that construct a harness for running tests. // It is called exactly once per test; Harness.Close() will be called when the test is complete. type HarnessMaker func(ctx context.Context, t *testing.T) (Harness, error) // UnsupportedType is an enum for types not supported by native codecs. We chose // to describe this negatively (types that aren't supported rather than types // that are) to make the more inclusive cases easier to write. A driver can // return nil for CodecTester.UnsupportedTypes, then add values from this enum // one by one until all tests pass. type UnsupportedType int // These are known unsupported types by one or more driver. Each of them // corresponses to an unsupported type specific test which if the driver // actually supports. const ( // Native codec doesn't support any unsigned integer type Uint UnsupportedType = iota // Native codec doesn't support arrays Arrays // Native codec doesn't support full time precision NanosecondTimes // Native codec doesn't support [][]byte BinarySet ) // CodecTester describes functions that encode and decode values using both the // docstore codec for a driver, and that driver's own "native" codec. type CodecTester interface { UnsupportedTypes() []UnsupportedType NativeEncode(interface{}) (interface{}, error) NativeDecode(value, dest interface{}) error DocstoreEncode(interface{}) (interface{}, error) DocstoreDecode(value, dest interface{}) error } // AsTest represents a test of As functionality. type AsTest interface { // Name should return a descriptive name for the test. Name() string // CollectionCheck will be called to allow verification of Collection.As. CollectionCheck(coll *docstore.Collection) error // QueryCheck will be called after calling Query. It should call it.As and // verify the results. QueryCheck(it *docstore.DocumentIterator) error // ErrorCheck is called to allow verification of Collection.ErrorAs. ErrorCheck(c *docstore.Collection, err error) error } type verifyAsFailsOnNil struct{} func (verifyAsFailsOnNil) Name() string { return "verify As returns false when passed nil" } func (verifyAsFailsOnNil) CollectionCheck(coll *docstore.Collection) error { if coll.As(nil) { return errors.New("want Collection.As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) QueryCheck(it *docstore.DocumentIterator) error { if it.As(nil) { return errors.New("want DocumentIterator.As to return false when passed nil") } return nil } func (v verifyAsFailsOnNil) ErrorCheck(c *docstore.Collection, err error) (ret error) { defer func() { if recover() == nil { ret = errors.New("want ErrorAs to panic when passed nil") } }() c.ErrorAs(err, nil) return nil } // RunConformanceTests runs conformance tests for driver implementations of docstore. func RunConformanceTests(t *testing.T, newHarness HarnessMaker, ct CodecTester, asTests []AsTest) { t.Run("TypeDrivenCodec", func(t *testing.T) { testTypeDrivenDecode(t, ct) }) t.Run("BlindCodec", func(t *testing.T) { testBlindDecode(t, ct) }) t.Run("Create", func(t *testing.T) { withRevCollections(t, newHarness, testCreate) }) t.Run("Put", func(t *testing.T) { withRevCollections(t, newHarness, testPut) }) t.Run("Replace", func(t *testing.T) { withRevCollections(t, newHarness, testReplace) }) t.Run("Get", func(t *testing.T) { withRevCollections(t, newHarness, testGet) }) t.Run("Delete", func(t *testing.T) { withRevCollections(t, newHarness, testDelete) }) t.Run("Update", func(t *testing.T) { withRevCollections(t, newHarness, testUpdate) }) t.Run("Data", func(t *testing.T) { withCollection(t, newHarness, SingleKey, testData) }) t.Run("MultipleActions", func(t *testing.T) { withRevCollections(t, newHarness, testMultipleActions) }) t.Run("GetQueryKeyField", func(t *testing.T) { withRevCollections(t, newHarness, testGetQueryKeyField) }) t.Run("SerializeRevision", func(t *testing.T) { withCollection(t, newHarness, SingleKey, testSerializeRevision) }) t.Run("ActionsOnStructNoRev", func(t *testing.T) { withCollection(t, newHarness, NoRev, testActionsOnStructNoRev) }) t.Run("ActionsWithCompositeID", func(t *testing.T) { withCollection(t, newHarness, TwoKey, testActionsWithCompositeID) }) t.Run("GetQuery", func(t *testing.T) { withCollection(t, newHarness, TwoKey, testGetQuery) }) t.Run("ExampleInDoc", func(t *testing.T) { withCollection(t, newHarness, NoRev, testExampleInDoc) }) t.Run("BeforeDo", func(t *testing.T) { testBeforeDo(t, newHarness) }) t.Run("BeforeQuery", func(t *testing.T) { testBeforeQuery(t, newHarness) }) asTests = append(asTests, verifyAsFailsOnNil{}) t.Run("As", func(t *testing.T) { for _, st := range asTests { if st.Name() == "" { t.Fatalf("AsTest.Name is required") } t.Run(st.Name(), func(t *testing.T) { withCollection(t, newHarness, TwoKey, func(t *testing.T, _ Harness, coll *docstore.Collection) { testAs(t, coll, st) }) }) } }) } // withCollection calls f with a fresh harness and an empty collection of the given kind. func withCollection(t *testing.T, newHarness HarnessMaker, kind CollectionKind, f func(*testing.T, Harness, *ds.Collection)) { ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() withColl(t, h, kind, f) } // withRevCollections calls f twice: once with the SingleKey collection, using documents and code that expect // the standard revision field; and once with the AltRev collection, that uses an alternative revisionf field // name. func withRevCollections(t *testing.T, newHarness HarnessMaker, f func(*testing.T, *ds.Collection, string)) { ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() t.Run("StdRev", func(t *testing.T) { withColl(t, h, SingleKey, func(t *testing.T, _ Harness, coll *ds.Collection) { f(t, coll, ds.DefaultRevisionField) }) }) t.Run("AltRev", func(t *testing.T) { withColl(t, h, AltRev, func(t *testing.T, _ Harness, coll *ds.Collection) { f(t, coll, AlternateRevisionField) }) }) } // withColl calls f with h and an empty collection of the given kind. It takes care of closing // the collection after f returns. func withColl(t *testing.T, h Harness, kind CollectionKind, f func(*testing.T, Harness, *ds.Collection)) { ctx := context.Background() dc, err := h.MakeCollection(ctx, kind) if err != nil { t.Fatal(err) } coll := ds.NewCollection(dc) defer coll.Close() clearCollection(t, coll) f(t, h, coll) } // KeyField is the primary key field for the main test collection. const KeyField = "name" // AlternateRevisionField is used for testing the option to provide a different // name for the revision field. const AlternateRevisionField = "Etag" type docmap = map[string]interface{} func newDoc(doc interface{}) interface{} { switch v := doc.(type) { case docmap: return docmap{KeyField: v[KeyField]} case *docstruct: return &docstruct{Name: v.Name} } return nil } func key(doc interface{}) interface{} { switch d := doc.(type) { case docmap: return d[KeyField] case *docstruct: return d.Name } return nil } func setKey(doc, key interface{}) { switch d := doc.(type) { case docmap: d[KeyField] = key case *docstruct: d.Name = key } } func revision(doc interface{}, revField string) interface{} { switch d := doc.(type) { case docmap: return d[revField] case *docstruct: if revField == docstore.DefaultRevisionField { return d.DocstoreRevision } return d.Etag } return nil } func setRevision(doc, rev interface{}, revField string) { switch d := doc.(type) { case docmap: d[revField] = rev case *docstruct: if revField == docstore.DefaultRevisionField { d.DocstoreRevision = rev } else { d.Etag = rev } } } type docstruct struct { Name interface{} `docstore:"name"` DocstoreRevision interface{} Etag interface{} I int U uint F float64 St string B bool M map[string]interface{} } func nonexistentDoc() docmap { return docmap{KeyField: "doesNotExist"} } func testCreate(t *testing.T, coll *ds.Collection, revField string) { ctx := context.Background() for _, tc := range []struct { name string doc interface{} wantErr gcerrors.ErrorCode }{ { name: "named map", doc: docmap{KeyField: "testCreateMap", "b": true, revField: nil}, }, { name: "existing", doc: docmap{KeyField: "testCreateMap", revField: nil}, wantErr: gcerrors.AlreadyExists, }, { name: "unnamed map", doc: docmap{"b": true, revField: nil}, }, { name: "named struct", doc: &docstruct{Name: "testCreateStruct", B: true}, }, { name: "unnamed struct", doc: &docstruct{B: true}, }, { name: "empty named struct", doc: &docstruct{Name: "", B: true}, }, { name: "with non-nil revision", doc: docmap{KeyField: "testCreate2", revField: 0}, wantErr: gcerrors.InvalidArgument, }, } { t.Run(tc.name, func(t *testing.T) { if tc.wantErr == gcerrors.OK { checkNoRevisionField(t, tc.doc, revField) if err := coll.Create(ctx, tc.doc); err != nil { t.Fatalf("Create: %v", err) } checkHasRevisionField(t, tc.doc, revField) got := newDoc(tc.doc) if err := coll.Get(ctx, got); err != nil { t.Fatalf("Get: %v", err) } if diff := cmpDiff(got, tc.doc); diff != "" { t.Fatal(diff) } } else { err := coll.Create(ctx, tc.doc) checkCode(t, err, tc.wantErr) } }) } } func testPut(t *testing.T, coll *ds.Collection, revField string) { ctx := context.Background() must := func(err error) { t.Helper() if err != nil { t.Fatal(err) } } var maprev, strmap interface{} for _, tc := range []struct { name string doc interface{} rev bool }{ { name: "create map", doc: docmap{KeyField: "testPutMap", "b": true, revField: nil}, }, { name: "create struct", doc: &docstruct{Name: "testPutStruct", B: true}, }, { name: "replace map", doc: docmap{KeyField: "testPutMap", "b": false, revField: nil}, rev: true, }, { name: "replace struct", doc: &docstruct{Name: "testPutStruct", B: false}, rev: true, }, } { t.Run(tc.name, func(t *testing.T) { checkNoRevisionField(t, tc.doc, revField) must(coll.Put(ctx, tc.doc)) checkHasRevisionField(t, tc.doc, revField) got := newDoc(tc.doc) must(coll.Get(ctx, got)) if diff := cmpDiff(got, tc.doc); diff != "" { t.Fatalf(diff) } if tc.rev { switch v := tc.doc.(type) { case docmap: maprev = v[revField] case *docstruct: if revField == docstore.DefaultRevisionField { strmap = v.DocstoreRevision } else { strmap = v.Etag } } } }) } // Putting a doc with a revision field is the same as replace, meaning // it will fail if the document doesn't exist. for _, tc := range []struct { name string doc interface{} }{ { name: "replace map wrong key", doc: docmap{KeyField: "testPutMap2", revField: maprev}, }, { name: "replace struct wrong key", doc: &docstruct{Name: "testPutStruct2", DocstoreRevision: strmap, Etag: strmap}, }, } { t.Run(tc.name, func(t *testing.T) { err := coll.Put(ctx, tc.doc) if c := gcerrors.Code(err); c != gcerrors.NotFound && c != gcerrors.FailedPrecondition { t.Errorf("got %v, want NotFound or FailedPrecondition", err) } }) } t.Run("revision", func(t *testing.T) { testRevisionField(t, coll, revField, func(doc interface{}) error { return coll.Put(ctx, doc) }) }) err := coll.Put(ctx, &docstruct{Name: ""}) checkCode(t, err, gcerrors.InvalidArgument) } func testReplace(t *testing.T, coll *ds.Collection, revField string) { ctx := context.Background() must := func(err error) { t.Helper() if err != nil { t.Fatal(err) } } for _, tc := range []struct { name string doc1, doc2 interface{} }{ { name: "replace map", doc1: docmap{KeyField: "testReplaceMap", "s": "a", revField: nil}, doc2: docmap{KeyField: "testReplaceMap", "s": "b", revField: nil}, }, { name: "replace struct", doc1: &docstruct{Name: "testReplaceStruct", St: "a"}, doc2: &docstruct{Name: "testReplaceStruct", St: "b"}, }, } { t.Run(tc.name, func(t *testing.T) { must(coll.Put(ctx, tc.doc1)) checkNoRevisionField(t, tc.doc2, revField) must(coll.Replace(ctx, tc.doc2)) checkHasRevisionField(t, tc.doc2, revField) got := newDoc(tc.doc2) must(coll.Get(ctx, got)) if diff := cmpDiff(got, tc.doc2); diff != "" { t.Fatalf(diff) } }) } // Can't replace a nonexistent doc. checkCode(t, coll.Replace(ctx, nonexistentDoc()), gcerrors.NotFound) t.Run("revision", func(t *testing.T) { testRevisionField(t, coll, revField, func(doc interface{}) error { return coll.Replace(ctx, doc) }) }) } // Check that doc does not have a revision field (or has a nil one). func checkNoRevisionField(t *testing.T, doc interface{}, revField string) { t.Helper() ddoc, err := driver.NewDocument(doc) if err != nil { t.Fatal(err) } if rev, _ := ddoc.GetField(revField); rev != nil { t.Fatal("doc has revision field") } } // Check that doc has a non-nil revision field. func checkHasRevisionField(t *testing.T, doc interface{}, revField string) { t.Helper() ddoc, err := driver.NewDocument(doc) if err != nil { t.Fatal(err) } if rev, err := ddoc.GetField(revField); err != nil || rev == nil { t.Fatalf("doc missing revision field (error = %v)", err) } } func testGet(t *testing.T, coll *ds.Collection, revField string) { ctx := context.Background() must := func(err error) { t.Helper() if err != nil { t.Fatal(err) } } for _, tc := range []struct { name string doc interface{} fps []docstore.FieldPath want interface{} }{ // If Get is called with no field paths, the full document is populated. { name: "get map", doc: docmap{ KeyField: "testGetMap", "s": "a string", "i": int64(95), "f": 32.3, "m": map[string]interface{}{"a": "one", "b": "two"}, revField: nil, }, }, { name: "get struct", doc: &docstruct{ Name: "testGetStruct", St: "a string", I: 95, F: 32.3, M: map[string]interface{}{"a": "one", "b": "two"}, }, }, // If Get is called with field paths, the resulting document has only those fields. { name: "get map with field path", doc: docmap{ KeyField: "testGetMapFP", "s": "a string", "i": int64(95), "f": 32.3, "m": map[string]interface{}{"a": "one", "b": "two"}, revField: nil, }, fps: []docstore.FieldPath{"f", "m.b", ds.FieldPath(revField)}, want: docmap{ KeyField: "testGetMapFP", "f": 32.3, "m": map[string]interface{}{"b": "two"}, }, }, { name: "get struct with field path", doc: &docstruct{ Name: "testGetStructFP", St: "a string", I: 95, F: 32.3, M: map[string]interface{}{"a": "one", "b": "two"}, }, fps: []docstore.FieldPath{"St", "M.a", ds.FieldPath(revField)}, want: &docstruct{ Name: "testGetStructFP", St: "a string", M: map[string]interface{}{"a": "one"}, }, }, { name: "get struct wrong case", doc: &docstruct{ Name: "testGetStructWC", St: "a string", I: 95, F: 32.3, M: map[string]interface{}{"a": "one", "b": "two"}, }, fps: []docstore.FieldPath{"st", "m.a"}, want: &docstruct{ Name: "testGetStructWC", }, }, } { t.Run(tc.name, func(t *testing.T) { must(coll.Put(ctx, tc.doc)) got := newDoc(tc.doc) must(coll.Get(ctx, got, tc.fps...)) if tc.want == nil { tc.want = tc.doc } setRevision(tc.want, revision(got, revField), revField) if diff := cmpDiff(got, tc.want); diff != "" { t.Error("Get with field paths:\n", diff) } }) } err := coll.Get(ctx, nonexistentDoc()) checkCode(t, err, gcerrors.NotFound) err = coll.Get(ctx, &docstruct{Name: ""}) checkCode(t, err, gcerrors.InvalidArgument) } func testDelete(t *testing.T, coll *ds.Collection, revField string) { ctx := context.Background() var rev interface{} for _, tc := range []struct { name string doc interface{} wantErr gcerrors.ErrorCode }{ { name: "delete map", doc: docmap{KeyField: "testDeleteMap", revField: nil}, }, { name: "delete map wrong rev", doc: docmap{KeyField: "testDeleteMap", "b": true, revField: nil}, wantErr: gcerrors.FailedPrecondition, }, { name: "delete struct", doc: &docstruct{Name: "testDeleteStruct"}, }, { name: "delete struct wrong rev", doc: &docstruct{Name: "testDeleteStruct", B: true}, wantErr: gcerrors.FailedPrecondition, }, } { t.Run(tc.name, func(t *testing.T) { if err := coll.Put(ctx, tc.doc); err != nil { t.Fatal(err) } if tc.wantErr == gcerrors.OK { rev = revision(tc.doc, revField) if err := coll.Delete(ctx, tc.doc); err != nil { t.Fatal(err) } // The document should no longer exist. if err := coll.Get(ctx, tc.doc); err == nil { t.Error("want error, got nil") } } else { setRevision(tc.doc, rev, revField) checkCode(t, coll.Delete(ctx, tc.doc), gcerrors.FailedPrecondition) } }) } // Delete doesn't fail if the doc doesn't exist. if err := coll.Delete(ctx, nonexistentDoc()); err != nil { t.Errorf("delete nonexistent doc: want nil, got %v", err) } err := coll.Delete(ctx, &docstruct{Name: ""}) checkCode(t, err, gcerrors.InvalidArgument) } func testUpdate(t *testing.T, coll *ds.Collection, revField string) { ctx := context.Background() for _, tc := range []struct { name string doc interface{} mods ds.Mods want interface{} }{ { name: "update map", doc: docmap{KeyField: "testUpdateMap", "a": "A", "b": "B", "n": 3.5, "i": 1, revField: nil}, mods: ds.Mods{ "a": "X", "b": nil, "c": "C", "n": docstore.Increment(-1), "i": nil, "m": 3, }, want: docmap{KeyField: "testUpdateMap", "a": "X", "c": "C", "n": 2.5, "m": int64(3)}, }, { name: "update map overwrite only", doc: docmap{KeyField: "testUpdateMapWrt", "a": "A", revField: nil}, mods: ds.Mods{ "a": "X", "b": nil, "m": 3, }, want: docmap{KeyField: "testUpdateMapWrt", "a": "X", "m": int64(3)}, }, { name: "update map increment only", doc: docmap{KeyField: "testUpdateMapInc", "a": "A", "n": 3.5, "i": 1, revField: nil}, mods: ds.Mods{ "n": docstore.Increment(-1), "i": docstore.Increment(2.5), "m": docstore.Increment(3), }, want: docmap{KeyField: "testUpdateMapInc", "a": "A", "n": 2.5, "i": 3.5, "m": int64(3)}, }, { name: "update struct", doc: &docstruct{Name: "testUpdateStruct", St: "st", I: 1, F: 3.5}, mods: ds.Mods{ "St": "str", "I": nil, "U": 4, "F": docstore.Increment(-3), }, want: &docstruct{Name: "testUpdateStruct", St: "str", U: 4, F: 0.5}, }, { name: "update struct overwrite only", doc: &docstruct{Name: "testUpdateStructWrt", St: "st", I: 1}, mods: ds.Mods{ "St": "str", "I": nil, "U": 4, }, want: &docstruct{Name: "testUpdateStructWrt", St: "str", U: 4}, }, { name: "update struct increment only", doc: &docstruct{Name: "testUpdateStructInc", St: "st", I: 1, F: 3.5}, mods: ds.Mods{ "U": docstore.Increment(4), "F": docstore.Increment(-3), }, want: &docstruct{Name: "testUpdateStructInc", St: "st", U: 4, I: 1, F: 0.5}, }, } { t.Run(tc.name, func(t *testing.T) { if err := coll.Put(ctx, tc.doc); err != nil { t.Fatal(err) } setRevision(tc.doc, nil, revField) got := newDoc(tc.doc) checkNoRevisionField(t, tc.doc, revField) errs := coll.Actions().Update(tc.doc, tc.mods).Get(got).Do(ctx) if errs != nil { t.Fatal(errs) } checkHasRevisionField(t, tc.doc, revField) setRevision(tc.want, revision(got, revField), revField) if diff := cmp.Diff(got, tc.want, cmpopts.IgnoreUnexported(timestamp.Timestamp{})); diff != "" { t.Error(diff) } }) } // Can't update a nonexistent doc. if err := coll.Update(ctx, nonexistentDoc(), ds.Mods{"x": "y"}); err == nil { t.Error("nonexistent document: got nil, want error") } // Bad increment value. err := coll.Update(ctx, docmap{KeyField: "update invalid"}, ds.Mods{"x": ds.Increment("3")}) checkCode(t, err, gcerrors.InvalidArgument) t.Run("revision", func(t *testing.T) { testRevisionField(t, coll, revField, func(doc interface{}) error { return coll.Update(ctx, doc, ds.Mods{"s": "c"}) }) }) } // Test that: // - Writing a document with a revision field succeeds if the document hasn't changed. // - Writing a document with a revision field fails if the document has changed. func testRevisionField(t *testing.T, coll *ds.Collection, revField string, write func(interface{}) error) { ctx := context.Background() must := func(err error) { t.Helper() if err != nil { t.Fatal(err) } } for _, tc := range []struct { name string doc interface{} }{ { name: "map revision", doc: docmap{KeyField: "testRevisionMap", "s": "a", revField: nil}, }, { name: "struct revision", doc: &docstruct{Name: "testRevisionStruct", St: "a"}, }, } { t.Run(tc.name, func(t *testing.T) { must(coll.Put(ctx, tc.doc)) got := newDoc(tc.doc) must(coll.Get(ctx, got)) rev := revision(got, revField) if rev == nil { t.Fatal("missing revision field") } // A write should succeed, because the document hasn't changed since it was gotten. if err := write(tc.doc); err != nil { t.Fatalf("write with revision field got %v, want nil", err) } // This write should fail: got's revision field hasn't changed, but the stored document has. err := write(got) if c := gcerrors.Code(err); c != gcerrors.FailedPrecondition && c != gcerrors.NotFound { t.Errorf("write with old revision field: got %v, wanted FailedPrecondition or NotFound", err) } }) } } // Verify that the driver can serialize and deserialize revisions. func testSerializeRevision(t *testing.T, h Harness, coll *ds.Collection) { ctx := context.Background() doc := docmap{KeyField: "testSerializeRevision", "x": 1, docstore.DefaultRevisionField: nil} if err := coll.Create(ctx, doc); err != nil { t.Fatal(err) } want := doc[docstore.DefaultRevisionField] if want == nil { t.Fatal("nil revision") } s, err := coll.RevisionToString(want) if err != nil { t.Fatal(err) } got, err := coll.StringToRevision(s) if err != nil { t.Fatal(err) } if !h.RevisionsEqual(got, want) { t.Fatalf("got %v, want %v", got, want) } } // Test all Go integer types are supported, and they all come back as int64. func testData(t *testing.T, _ Harness, coll *ds.Collection) { ctx := context.Background() for _, test := range []struct { in, want interface{} }{ {int(-1), int64(-1)}, {int8(-8), int64(-8)}, {int16(-16), int64(-16)}, {int32(-32), int64(-32)}, {int64(-64), int64(-64)}, {uint(1), int64(1)}, {uint8(8), int64(8)}, {uint16(16), int64(16)}, {uint32(32), int64(32)}, {uint64(64), int64(64)}, {float32(3.5), float64(3.5)}, {[]byte{0, 1, 2}, []byte{0, 1, 2}}, } { doc := docmap{KeyField: "testData", "val": test.in} got := docmap{KeyField: doc[KeyField]} if errs := coll.Actions().Put(doc).Get(got).Do(ctx); errs != nil { t.Fatal(errs) } want := docmap{ "val": test.want, KeyField: doc[KeyField], } if len(got) != len(want) { t.Errorf("%v: got %v, want %v", test.in, got, want) } else if g := got["val"]; !cmp.Equal(g, test.want) { t.Errorf("%v: got %v (%T), want %v (%T)", test.in, g, g, test.want, test.want) } } // TODO: strings: valid vs. invalid unicode } var ( // A time with non-zero milliseconds, but zero nanoseconds. milliTime = time.Date(2019, time.March, 27, 0, 0, 0, 5*1e6, time.UTC) // A time with non-zero nanoseconds. nanoTime = time.Date(2019, time.March, 27, 0, 0, 0, 5*1e6+7, time.UTC) ) // Test that encoding from a struct and then decoding into the same struct works properly. // The decoding is "type-driven" because the decoder knows the expected type of the value // it is decoding--it is the type of a struct field. func testTypeDrivenDecode(t *testing.T, ct CodecTester) { if ct == nil { t.Skip("no CodecTester") } check := func(in, dec interface{}, encode func(interface{}) (interface{}, error), decode func(interface{}, interface{}) error) { t.Helper() enc, err := encode(in) if err != nil { t.Fatalf("%+v", err) } if err := decode(enc, dec); err != nil { t.Fatalf("%+v", err) } if diff := cmp.Diff(in, dec); diff != "" { t.Error(diff) } } s := "bar" dsrt := &docstoreRoundTrip{ N: nil, I: 1, U: 2, F: 2.5, St: "foo", B: true, L: []int{3, 4, 5}, A: [2]int{6, 7}, M: map[string]bool{"a": true, "b": false}, By: []byte{6, 7, 8}, P: &s, T: milliTime, } check(dsrt, &docstoreRoundTrip{}, ct.DocstoreEncode, ct.DocstoreDecode) // Test native-to-docstore and docstore-to-native round trips with a smaller set // of types. nm := &nativeMinimal{ N: nil, I: 1, F: 2.5, St: "foo", B: true, L: []int{3, 4, 5}, M: map[string]bool{"a": true, "b": false}, By: []byte{6, 7, 8}, P: &s, T: milliTime, LF: []float64{18.8, -19.9, 20}, LS: []string{"foo", "bar"}, } check(nm, &nativeMinimal{}, ct.DocstoreEncode, ct.NativeDecode) check(nm, &nativeMinimal{}, ct.NativeEncode, ct.DocstoreDecode) // Test various other types, unless they are unsupported. unsupported := map[UnsupportedType]bool{} for _, u := range ct.UnsupportedTypes() { unsupported[u] = true } // Unsigned integers. if !unsupported[Uint] { type Uint struct { U uint } u := &Uint{10} check(u, &Uint{}, ct.DocstoreEncode, ct.NativeDecode) check(u, &Uint{}, ct.NativeEncode, ct.DocstoreDecode) } // Arrays. if !unsupported[Arrays] { type Arrays struct { A [2]int } a := &Arrays{[2]int{13, 14}} check(a, &Arrays{}, ct.DocstoreEncode, ct.NativeDecode) check(a, &Arrays{}, ct.NativeEncode, ct.DocstoreDecode) } // Nanosecond-precision time. type NT struct { T time.Time } nt := &NT{nanoTime} if unsupported[NanosecondTimes] { // Expect rounding to the nearest millisecond. check := func(encode func(interface{}) (interface{}, error), decode func(interface{}, interface{}) error) { enc, err := encode(nt) if err != nil { t.Fatalf("%+v", err) } var got NT if err := decode(enc, &got); err != nil { t.Fatalf("%+v", err) } want := nt.T.Round(time.Millisecond) if !got.T.Equal(want) { t.Errorf("got %v, want %v", got.T, want) } } check(ct.DocstoreEncode, ct.NativeDecode) check(ct.NativeEncode, ct.DocstoreDecode) } else { // Expect perfect round-tripping of nanosecond times. check(nt, &NT{}, ct.DocstoreEncode, ct.NativeDecode) check(nt, &NT{}, ct.NativeEncode, ct.DocstoreDecode) } // Binary sets. if !unsupported[BinarySet] { type BinarySet struct { B [][]byte } b := &BinarySet{[][]byte{{15}, {16}, {17}}} check(b, &BinarySet{}, ct.DocstoreEncode, ct.NativeDecode) check(b, &BinarySet{}, ct.NativeEncode, ct.DocstoreDecode) } } // Test decoding into an interface{}, where the decoder doesn't know the type of the // result and must return some Go type that accurately represents the value. // This is implemented by the AsInterface method of driver.Decoder. // Since it's fine for different drivers to return different types in this case, // each test case compares against a list of possible values. func testBlindDecode(t *testing.T, ct CodecTester) { if ct == nil { t.Skip("no CodecTester") } t.Run("DocstoreEncode", func(t *testing.T) { testBlindDecode1(t, ct.DocstoreEncode, ct.DocstoreDecode) }) t.Run("NativeEncode", func(t *testing.T) { testBlindDecode1(t, ct.NativeEncode, ct.DocstoreDecode) }) } func testBlindDecode1(t *testing.T, encode func(interface{}) (interface{}, error), decode func(_, _ interface{}) error) { // Encode and decode expect a document, so use this struct to hold the values. type S struct{ X interface{} } for _, test := range []struct { in interface{} // the value to be encoded want interface{} // one possibility want2 interface{} // a second possibility }{ {in: nil, want: nil}, {in: true, want: true}, {in: "foo", want: "foo"}, {in: 'c', want: 'c', want2: int64('c')}, {in: int(3), want: int32(3), want2: int64(3)}, {in: int8(3), want: int32(3), want2: int64(3)}, {in: int(-3), want: int32(-3), want2: int64(-3)}, {in: int64(math.MaxInt32 + 1), want: int64(math.MaxInt32 + 1)}, {in: float32(1.5), want: float64(1.5)}, {in: float64(1.5), want: float64(1.5)}, {in: []byte{1, 2}, want: []byte{1, 2}}, {in: []int{1, 2}, want: []interface{}{int32(1), int32(2)}, want2: []interface{}{int64(1), int64(2)}}, {in: []float32{1.5, 2.5}, want: []interface{}{float64(1.5), float64(2.5)}}, {in: []float64{1.5, 2.5}, want: []interface{}{float64(1.5), float64(2.5)}}, {in: milliTime, want: milliTime, want2: "2019-03-27T00:00:00.005Z"}, {in: []time.Time{milliTime}, want: []interface{}{milliTime}, want2: []interface{}{"2019-03-27T00:00:00.005Z"}, }, {in: map[string]int{"a": 1}, want: map[string]interface{}{"a": int64(1)}, want2: map[string]interface{}{"a": int32(1)}, }, {in: map[string][]byte{"a": {1, 2}}, want: map[string]interface{}{"a": []byte{1, 2}}}, } { enc, err := encode(&S{test.in}) if err != nil { t.Fatalf("encoding %T: %v", test.in, err) } var got S if err := decode(enc, &got); err != nil { t.Fatalf("decoding %T: %v", test.in, err) } matched := false wants := []interface{}{test.want} if test.want2 != nil { wants = append(wants, test.want2) } for _, w := range wants { if cmp.Equal(got.X, w) { matched = true break } } if !matched { t.Errorf("%T: got %#v (%T), not equal to %#v or %#v", test.in, got.X, got.X, test.want, test.want2) } } } // A round trip with the docstore codec should work for all docstore-supported types, // regardless of native driver support. type docstoreRoundTrip struct { N *int I int U uint F float64 St string B bool By []byte L []int A [2]int M map[string]bool P *string T time.Time } // TODO(jba): add more fields: structs; embedding. // All native codecs should support these types. If one doesn't, remove it from this // struct and make a new single-field struct for it. type nativeMinimal struct { N *int I int F float64 St string B bool By []byte L []int M map[string]bool P *string T time.Time LF []float64 LS []string } // The following is the schema for the collection where the ID is composed from // multiple fields instead of one. It can be used for query testing. // It is loosely borrowed from the DynamoDB documentation. // It is rich enough to require indexes for some drivers. // A HighScore records one user's high score in a particular game. // The primary key fields are Game and Player. type HighScore struct { Game string Player string Score int Time time.Time DocstoreRevision interface{} } func newHighScore() interface{} { return &HighScore{} } // HighScoreKey constructs a single primary key from a HighScore struct or a map // with the same fields by concatenating the Game and Player fields. func HighScoreKey(doc docstore.Document) interface{} { switch d := doc.(type) { case *HighScore: return d.key() case map[string]interface{}: return barConcat(d["Game"], d["Player"]) default: panic("bad arg") } } func (h *HighScore) key() string { if h.Game == "" || h.Player == "" { return "" } return barConcat(h.Game, h.Player) } func barConcat(a, b interface{}) string { return fmt.Sprintf("%v|%v", a, b) } func highScoreLess(h1, h2 *HighScore) bool { return h1.key() < h2.key() } func (h *HighScore) String() string { return fmt.Sprintf("%s=%d@%s", h.key(), h.Score, h.Time.Format("01/02")) } func date(month, day int) time.Time { return time.Date(2019, time.Month(month), day, 0, 0, 0, 0, time.UTC) } const ( game1 = "Praise All Monsters" game2 = "Zombie DMV" game3 = "Days Gone" ) var highScores = []*HighScore{ {game1, "pat", 49, date(3, 13), nil}, {game1, "mel", 60, date(4, 10), nil}, {game1, "andy", 81, date(2, 1), nil}, {game1, "fran", 33, date(3, 19), nil}, {game2, "pat", 120, date(4, 1), nil}, {game2, "billie", 111, date(4, 10), nil}, {game2, "mel", 190, date(4, 18), nil}, {game2, "fran", 33, date(3, 20), nil}, } func addHighScores(t *testing.T, coll *ds.Collection) { alist := coll.Actions() for _, doc := range highScores { d := *doc alist.Put(&d) } if err := alist.Do(context.Background()); err != nil { t.Fatalf("%+v", err) } } func testGetQueryKeyField(t *testing.T, coll *ds.Collection, revField string) { // Query the key field of a collection that has one. // (The collection used for testGetQuery uses a key function rather than a key field.) ctx := context.Background() docs := []docmap{ {KeyField: "qkf1", "a": "one", revField: nil}, {KeyField: "qkf2", "a": "two", revField: nil}, {KeyField: "qkf3", "a": "three", revField: nil}, } al := coll.Actions() for _, d := range docs { al.Put(d) } if err := al.Do(ctx); err != nil { t.Fatal(err) } iter := coll.Query().Where(KeyField, "<", "qkf3").Get(ctx) defer iter.Stop() got := mustCollect(ctx, t, iter) want := docs[:2] diff := cmpDiff(got, want, cmpopts.SortSlices(sortByKeyField)) if diff != "" { t.Error(diff) } // Test that queries with selected fields always return the key. iter = coll.Query().Get(ctx, "a", ds.FieldPath(revField)) defer iter.Stop() got = mustCollect(ctx, t, iter) for _, d := range docs { checkHasRevisionField(t, d, revField) } diff = cmpDiff(got, docs, cmpopts.SortSlices(sortByKeyField)) if diff != "" { t.Error(diff) } } func sortByKeyField(d1, d2 docmap) bool { return d1[KeyField].(string) < d2[KeyField].(string) } // TODO(shantuo): consider add this test to all action tests, like the AltRev // ones. func testActionsWithCompositeID(t *testing.T, _ Harness, coll *ds.Collection) { ctx := context.Background() // Create cannot generate an ID for the document when using IDFunc. checkCode(t, coll.Create(ctx, &HighScore{}), gcerrors.InvalidArgument) checkCode(t, coll.Get(ctx, &HighScore{}), gcerrors.InvalidArgument) // Put addHighScores(t, coll) // Get gots := make([]*HighScore, len(highScores)) actions := coll.Actions() for i, doc := range highScores { gots[i] = &HighScore{Game: doc.Game, Player: doc.Player} actions.Get(gots[i]) } if err := actions.Do(ctx); err != nil { t.Fatal(err) } for i, got := range gots { if got.DocstoreRevision == nil { t.Errorf("%v missing DocstoreRevision", got) } else { got.DocstoreRevision = nil } if diff := cmp.Diff(got, highScores[i]); diff != "" { t.Error(diff) } } } func testGetQuery(t *testing.T, _ Harness, coll *ds.Collection) { ctx := context.Background() addHighScores(t, coll) // Query filters should have the same behavior when doing string and number // comparison. tests := []struct { name string q *ds.Query fields []docstore.FieldPath // fields to get want func(*HighScore) bool // filters highScores before func(x, y *HighScore) bool // if present, checks result order }{ { name: "All", q: coll.Query(), want: func(*HighScore) bool { return true }, }, { name: "Game", q: coll.Query().Where("Game", "=", game2), want: func(h *HighScore) bool { return h.Game == game2 }, }, { name: "Score", q: coll.Query().Where("Score", ">", 100), want: func(h *HighScore) bool { return h.Score > 100 }, }, { name: "Player", q: coll.Query().Where("Player", "=", "billie"), want: func(h *HighScore) bool { return h.Player == "billie" }, }, { name: "GamePlayer", q: coll.Query().Where("Player", "=", "andy").Where("Game", "=", game1), want: func(h *HighScore) bool { return h.Player == "andy" && h.Game == game1 }, }, { name: "PlayerScore", q: coll.Query().Where("Player", "=", "pat").Where("Score", "<", 100), want: func(h *HighScore) bool { return h.Player == "pat" && h.Score < 100 }, }, { name: "GameScore", q: coll.Query().Where("Game", "=", game1).Where("Score", ">=", 50), want: func(h *HighScore) bool { return h.Game == game1 && h.Score >= 50 }, }, { name: "PlayerTime", q: coll.Query().Where("Player", "=", "mel").Where("Time", ">", date(4, 1)), want: func(h *HighScore) bool { return h.Player == "mel" && h.Time.After(date(4, 1)) }, }, { name: "ScoreTime", q: coll.Query().Where("Score", ">=", 50).Where("Time", ">", date(4, 1)), want: func(h *HighScore) bool { return h.Score >= 50 && h.Time.After(date(4, 1)) }, }, { name: "AllByPlayerAsc", q: coll.Query().OrderBy("Player", docstore.Ascending), want: func(h *HighScore) bool { return true }, before: func(h1, h2 *HighScore) bool { return h1.Player < h2.Player }, }, { name: "AllByPlayerDesc", q: coll.Query().OrderBy("Player", docstore.Descending), want: func(h *HighScore) bool { return true }, before: func(h1, h2 *HighScore) bool { return h1.Player > h2.Player }, }, { name: "GameByPlayerAsc", // We need a filter on Player, and it can't be the empty string (DynamoDB limitation). // So pick any string that sorts less than all valid player names. q: coll.Query().Where("Game", "=", game1).Where("Player", ">", "."). OrderBy("Player", docstore.Ascending), want: func(h *HighScore) bool { return h.Game == game1 }, before: func(h1, h2 *HighScore) bool { return h1.Player < h2.Player }, }, { // Same as above, but descending. name: "GameByPlayerDesc", q: coll.Query().Where("Game", "=", game1).Where("Player", ">", "."). OrderBy("Player", docstore.Descending), want: func(h *HighScore) bool { return h.Game == game1 }, before: func(h1, h2 *HighScore) bool { return h1.Player > h2.Player }, }, // TODO(jba): add more OrderBy tests. { name: "AllWithKeyFields", q: coll.Query(), fields: []docstore.FieldPath{"Game", "Player", ds.FieldPath(ds.DefaultRevisionField)}, want: func(h *HighScore) bool { h.Score = 0 h.Time = time.Time{} return true }, }, { name: "AllWithScore", q: coll.Query(), fields: []docstore.FieldPath{"Game", "Player", "Score", ds.FieldPath(ds.DefaultRevisionField)}, want: func(h *HighScore) bool { h.Time = time.Time{} return true }, }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { got, err := collectHighScores(ctx, tc.q.Get(ctx, tc.fields...)) if err != nil { t.Fatal(err) } for _, g := range got { if g.DocstoreRevision == nil { t.Errorf("%v missing DocstoreRevision", g) } else { g.DocstoreRevision = nil } } want := filterHighScores(highScores, tc.want) _, err = tc.q.Plan() if err != nil { t.Fatal(err) } diff := cmp.Diff(got, want, cmpopts.SortSlices(highScoreLess)) if diff != "" { t.Fatal(diff) } if tc.before != nil { // Verify that the results are sorted according to tc.less. for i := 1; i < len(got); i++ { if tc.before(got[i], got[i-1]) { t.Errorf("%s at %d sorts before previous %s", got[i], i, got[i-1]) } } } // We can't assume anything about the query plan. Just verify that Plan returns // successfully. if _, err := tc.q.Plan(KeyField); err != nil { t.Fatal(err) } }) } t.Run("Limit", func(t *testing.T) { // For limit, we can't be sure which documents will be returned, only their count. limitQ := coll.Query().Limit(2) got := mustCollectHighScores(ctx, t, limitQ.Get(ctx)) if len(got) != 2 { t.Errorf("got %v, wanted two documents", got) } }) } func filterHighScores(hs []*HighScore, f func(*HighScore) bool) []*HighScore { var res []*HighScore for _, h := range hs { c := *h // Copy in case f modifies its argument. if f(&c) { res = append(res, &c) } } return res } // clearCollection delete all documents from this collection after test. func clearCollection(fataler interface{ Fatalf(string, ...interface{}) }, coll *docstore.Collection) { ctx := context.Background() iter := coll.Query().Get(ctx) dels := coll.Actions() for { doc := map[string]interface{}{} err := iter.Next(ctx, doc) if err == io.EOF { break } if err != nil { fataler.Fatalf("%+v", err) } dels.Delete(doc) } if err := dels.Do(ctx); err != nil { fataler.Fatalf("%+v", err) } } func forEach(ctx context.Context, iter *ds.DocumentIterator, create func() interface{}, handle func(interface{}) error) error { for { doc := create() err := iter.Next(ctx, doc) if err == io.EOF { break } if err != nil { return err } if err := handle(doc); err != nil { return err } } return nil } func mustCollect(ctx context.Context, t *testing.T, iter *ds.DocumentIterator) []docmap { var ms []docmap newDocmap := func() interface{} { return docmap{} } collect := func(m interface{}) error { ms = append(ms, m.(docmap)); return nil } if err := forEach(ctx, iter, newDocmap, collect); err != nil { t.Fatal(err) } return ms } func mustCollectHighScores(ctx context.Context, t *testing.T, iter *ds.DocumentIterator) []*HighScore { hs, err := collectHighScores(ctx, iter) if err != nil { t.Fatal(err) } return hs } func collectHighScores(ctx context.Context, iter *ds.DocumentIterator) ([]*HighScore, error) { var hs []*HighScore collect := func(h interface{}) error { hs = append(hs, h.(*HighScore)); return nil } if err := forEach(ctx, iter, newHighScore, collect); err != nil { return nil, err } return hs, nil } func testMultipleActions(t *testing.T, coll *ds.Collection, revField string) { ctx := context.Background() must := func(err error) { t.Helper() if err != nil { t.Fatal(err) } } var docs []docmap for i := 0; i < 9; i++ { docs = append(docs, docmap{ KeyField: fmt.Sprintf("testUnorderedActions%d", i), "s": fmt.Sprint(i), revField: nil, }) } compare := func(gots, wants []docmap) { t.Helper() for i := 0; i < len(gots); i++ { got := gots[i] want := clone(wants[i]) want[revField] = got[revField] if !cmp.Equal(got, want, cmpopts.IgnoreUnexported(timestamp.Timestamp{})) { t.Errorf("index #%d:\ngot %v\nwant %v", i, got, want) } } } // Put the first three docs. actions := coll.Actions() for i := 0; i < 6; i++ { actions.Create(docs[i]) } must(actions.Do(ctx)) // Replace the first three and put six more. actions = coll.Actions() for i := 0; i < 3; i++ { docs[i]["s"] = fmt.Sprintf("%d'", i) actions.Replace(docs[i]) } for i := 3; i < 9; i++ { actions.Put(docs[i]) } must(actions.Do(ctx)) // Delete the first three, get the second three, and put three more. gdocs := []docmap{ {KeyField: docs[3][KeyField]}, {KeyField: docs[4][KeyField]}, {KeyField: docs[5][KeyField]}, } actions = coll.Actions() actions.Update(docs[6], ds.Mods{"s": "6'", "n": ds.Increment(1)}) actions.Get(gdocs[0]) actions.Delete(docs[0]) actions.Delete(docs[1]) actions.Update(docs[7], ds.Mods{"s": "7'"}) actions.Get(gdocs[1]) actions.Delete(docs[2]) actions.Get(gdocs[2]) actions.Update(docs[8], ds.Mods{"n": ds.Increment(-1)}) must(actions.Do(ctx)) compare(gdocs, docs[3:6]) // At this point, the existing documents are 3 - 9. // Get the first four, try to create one that already exists, delete a // nonexistent doc, and put one. Only the Get of #3, the Delete and the Put // should succeed. actions = coll.Actions() for _, doc := range []docmap{ {KeyField: docs[0][KeyField]}, {KeyField: docs[1][KeyField]}, {KeyField: docs[2][KeyField]}, {KeyField: docs[3][KeyField]}, } { actions.Get(doc) } docs[4][revField] = nil actions.Create(docs[4]) // create existing doc actions.Put(docs[5]) // TODO(jba): Understand why the following line is necessary for dynamo but not the others. docs[0][revField] = nil actions.Delete(docs[0]) // delete nonexistent doc err := actions.Do(ctx) if err == nil { t.Fatal("want error, got nil") } alerr, ok := err.(docstore.ActionListError) if !ok { t.Fatalf("got %v (%T), want ActionListError", alerr, alerr) } for _, e := range alerr { switch i := e.Index; i { case 3, 5, 6: t.Errorf("index %d: got %v, want nil", i, e.Err) case 4, -1: // -1 for mongodb issue, see https://jira.mongodb.org/browse/GODRIVER-1028 if ec := gcerrors.Code(e.Err); ec != gcerrors.AlreadyExists && ec != gcerrors.FailedPrecondition { // TODO(shantuo): distinguish this case for dyanmo t.Errorf("index 4: create an existing document: got %v, want error", e.Err) } default: if gcerrors.Code(e.Err) != gcerrors.NotFound { t.Errorf("index %d: got %v, want NotFound", i, e.Err) } } } } func testActionsOnStructNoRev(t *testing.T, _ Harness, coll *ds.Collection) { type item struct { Name string `docstore:"name"` I int } doc1 := item{Name: "createandreplace"} doc2 := item{Name: "putandupdate"} ctx := context.Background() got1 := item{Name: doc1.Name} got2 := map[string]interface{}{"name": doc2.Name} if err := coll.Actions(). Create(&doc1).Put(&doc2). Get(&got1).Get(got2). Do(ctx); err != nil { t.Fatal(err) } checkNoRevisionField(t, got2, ds.DefaultRevisionField) got3 := map[string]interface{}{"name": doc1.Name} got4 := item{Name: doc2.Name} if err := coll.Actions(). Replace(&doc1).Update(&item{Name: doc2.Name}, ds.Mods{"I": 1}). Get(got3, "I").Get(&got4, "I"). Do(ctx); err != nil { t.Fatal(err) } checkNoRevisionField(t, got3, ds.DefaultRevisionField) } func testExampleInDoc(t *testing.T, _ Harness, coll *ds.Collection) { type Name struct { First, Last string } type Book struct { Title string `docstore:"name"` Author Name `docstore:"author"` PublicationYears []int `docstore:"pub_years,omitempty"` NumPublications int `docstore:"-"` } must := func(err error) { t.Helper() if err != nil { t.Fatal(err) } } checkFieldEqual := func(got, want interface{}, field string) { t.Helper() fvg, err := MustDocument(got).GetField(field) must(err) fvw, err := MustDocument(want).GetField(field) must(err) if !cmp.Equal(fvg, fvw) { t.Errorf("%s: got %v want %v", field, fvg, fvw) } } doc1 := &Book{ Title: "The Master and Margarita", Author: Name{ First: "Mikhail", Last: "Bulgakov", }, PublicationYears: []int{1967, 1973}, NumPublications: 2, } doc2 := map[string]interface{}{ KeyField: "The Heart of a Dog", "author": map[string]interface{}{ "First": "Mikhail", "Last": "Bulgakov", }, "pub_years": []int{1968, 1987}, } ctx := context.Background() must(coll.Actions().Create(doc1).Put(doc2).Do(ctx)) got1 := &Book{Title: doc1.Title} got2 := &Book{Title: doc2[KeyField].(string)} must(coll.Actions().Get(got1).Get(got2).Do(ctx)) if got1.NumPublications != 0 { t.Errorf("docstore:\"-\" tagged field isn't ignored") } checkFieldEqual(got1, doc1, "author") checkFieldEqual(got2, doc2, "pub_years") gots := mustCollect(ctx, t, coll.Query().Where("author.Last", "=", "Bulgakov").Get(ctx)) if len(gots) != 2 { t.Errorf("got %v want all two results", gots) } must(coll.Actions().Delete(doc1).Delete(doc2).Do(ctx)) } // Verify that BeforeDo is invoked, and its as function behaves as expected. func testBeforeDo(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() withCollection(t, newHarness, SingleKey, func(t *testing.T, h Harness, coll *ds.Collection) { var called bool beforeDo := func(asFunc func(interface{}) bool) error { called = true if asFunc(nil) { return errors.New("asFunc returned true when called with nil, want false") } // At least one of the expected types must return true. Special case: if // there are no types, then the as function never returns true, so skip the // check. if len(h.BeforeDoTypes()) > 0 { found := false for _, b := range h.BeforeDoTypes() { v := reflect.New(reflect.TypeOf(b)).Interface() if asFunc(v) { found = true break } } if !found { return errors.New("none of the BeforeDoTypes works with the as function") } } return nil } check := func(f func(*ds.ActionList)) { t.Helper() // First, verify that if a BeforeDo function returns an error, so does ActionList.Do. // We depend on that for the rest of the test. al := coll.Actions().BeforeDo(func(func(interface{}) bool) error { return errors.New("") }) f(al) if err := al.Do(ctx); err == nil { t.Error("beforeDo returning error: got nil from Do, want error") return } called = false al = coll.Actions().BeforeDo(beforeDo) f(al) if err := al.Do(ctx); err != nil { t.Error(err) return } if !called { t.Error("BeforeDo function never called") } } doc := docmap{KeyField: "testBeforeDo"} check(func(l *docstore.ActionList) { l.Create(doc) }) check(func(l *docstore.ActionList) { l.Replace(doc) }) check(func(l *docstore.ActionList) { l.Put(doc) }) check(func(l *docstore.ActionList) { l.Update(doc, docstore.Mods{"a": 1}) }) check(func(l *docstore.ActionList) { l.Get(doc) }) check(func(l *docstore.ActionList) { l.Delete(doc) }) }) } // Verify that BeforeQuery is invoked, and its as function behaves as expected. func testBeforeQuery(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() withCollection(t, newHarness, SingleKey, func(t *testing.T, h Harness, coll *ds.Collection) { var called bool beforeQuery := func(asFunc func(interface{}) bool) error { called = true if asFunc(nil) { return errors.New("asFunc returned true when called with nil, want false") } // At least one of the expected types must return true. Special case: if // there are no types, then the as function never returns true, so skip the // check. if len(h.BeforeQueryTypes()) > 0 { found := false for _, b := range h.BeforeQueryTypes() { v := reflect.New(reflect.TypeOf(b)).Interface() if asFunc(v) { found = true break } } if !found { return errors.New("none of the BeforeQueryTypes works with the as function") } } return nil } iter := coll.Query().BeforeQuery(beforeQuery).Get(ctx) if err := iter.Next(ctx, docmap{}); err != io.EOF { t.Fatalf("got %v, wanted io.EOF", err) } if !called { t.Error("BeforeQuery function never called for Get") } }) } func testAs(t *testing.T, coll *ds.Collection, st AsTest) { // Verify Collection.As if err := st.CollectionCheck(coll); err != nil { t.Error(err) } ctx := context.Background() // Query qs := []*docstore.Query{ coll.Query().Where("Game", "=", game3), // Note: don't use filter on Player, the test table has Player as the // partition key of a Global Secondary Index, which doesn't support // ConsistentRead mode, which is what the As test does in its BeforeQuery // function. coll.Query().Where("Score", ">", 50), } for _, q := range qs { iter := q.Get(ctx) if err := st.QueryCheck(iter); err != nil { t.Error(err) } } // ErrorCheck doc := &HighScore{game3, "steph", 24, date(4, 25), nil} if err := coll.Create(ctx, doc); err != nil { t.Fatal(err) } doc.DocstoreRevision = nil if err := coll.Create(ctx, doc); err == nil { t.Fatal("got nil error from creating an existing item, want an error") } else { if alerr, ok := err.(docstore.ActionListError); ok { for _, aerr := range alerr { if checkerr := st.ErrorCheck(coll, aerr.Err); checkerr != nil { t.Error(checkerr) } } } else if checkerr := st.ErrorCheck(coll, err); checkerr != nil { t.Error(checkerr) } } } func clone(m docmap) docmap { r := docmap{} for k, v := range m { r[k] = v } return r } func cmpDiff(a, b interface{}, opts ...cmp.Option) string { // Firestore revisions can be protos. return cmp.Diff(a, b, append([]cmp.Option{cmp.Comparer(proto.Equal)}, opts...)...) } func checkCode(t *testing.T, err error, code gcerrors.ErrorCode) { t.Helper() if gcerrors.Code(err) != code { t.Errorf("got %v, want %s", err, code) } } go-cloud-0.20.0/docstore/drivertest/util.go000066400000000000000000000026261367004507500206400ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package drivertest import ( "math/rand" "sync" "github.com/google/uuid" "gocloud.dev/docstore/driver" ) // MakeUniqueStringDeterministicForTesting uses a specified seed value to // produce the same sequence of values in driver.UniqueString for testing. // // Call when running tests that will be replayed. func MakeUniqueStringDeterministicForTesting(seed int64) { r := &randReader{r: rand.New(rand.NewSource(seed))} uuid.SetRand(r) } type randReader struct { mu sync.Mutex r *rand.Rand } func (r *randReader) Read(buf []byte) (int, error) { r.mu.Lock() defer r.mu.Unlock() return r.r.Read(buf) } // MustDocument is like driver.NewDocument, but panics on error. func MustDocument(doc interface{}) driver.Document { dd, err := driver.NewDocument(doc) if err != nil { panic(err) } return dd } go-cloud-0.20.0/docstore/example_test.go000066400000000000000000000200501367004507500201510ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package docstore_test import ( "context" "fmt" "io" "log" "time" firestore "cloud.google.com/go/firestore/apiv1" "github.com/aws/aws-sdk-go/aws/awserr" "gocloud.dev/docstore" _ "gocloud.dev/docstore/awsdynamodb" _ "gocloud.dev/docstore/gcpfirestore" "gocloud.dev/docstore/memdocstore" "gocloud.dev/gcerrors" ) type Player struct { Name string Score int DocstoreRevision interface{} } func ExampleCollection_Actions_bulkWrite() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var coll *docstore.Collection // Build an ActionList to create several new players, then execute it. // The actions may happen in any order. newPlayers := []string{"Pat", "Mel", "Fran"} actionList := coll.Actions() for _, p := range newPlayers { actionList.Create(&Player{Name: p, Score: 0}) } if err := actionList.Do(ctx); err != nil { log.Fatal(err) } } func ExampleCollection_Actions_getAfterWrite() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var coll *docstore.Collection // Add a document to the collection, then retrieve it. // Because both the Put and the Get refer to the same document, // they happen in order. got := Player{Name: "Pat"} err := coll.Actions().Put(&Player{Name: "Pat", Score: 88}).Get(&got).Do(ctx) if err != nil { log.Fatal(err) } fmt.Println(got.Name, got.Score) } func ExampleCollection_Update() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var coll *docstore.Collection // Create a player. pat := &Player{Name: "Pat", Score: 0} if err := coll.Create(ctx, pat); err != nil { log.Fatal(err) } // Set the score to a new value. pat2 := &Player{Name: "Pat"} err := coll.Actions().Update(pat, docstore.Mods{"Score": 15}).Get(pat2).Do(ctx) if err != nil { log.Fatal(err) } // Increment the score. err = coll.Actions().Update(pat, docstore.Mods{"Score": docstore.Increment(5)}).Get(pat2).Do(ctx) if err != nil { log.Fatal(err) } } func ExampleOpenCollection() { ctx := context.Background() // Open a collection using the gcpfirestore package. // You will need to blank-import the package for this to work: // import _ "gocloud.dev/docstore/gcpfirestore" coll, err := docstore.OpenCollection(ctx, "firestore://my-collection") if err != nil { log.Fatal(err) } defer coll.Close() _ = coll // Use the collection. } func ExampleCollection_As() { // This example is specific to the gcpfirestore implementation; it demonstrates // access to the underlying *cloud.google.com/go/firestore/apiv1.Client. // You will need to blank-import the package for this to work: // import _ "gocloud.dev/docstore/gcpfirestore" // The types exposed for As by gcpfirestore are documented in // https://godoc.org/gocloud.dev/docstore/gcpfirestore#hdr-As // This URL will open the collection using default credentials. ctx := context.Background() coll, err := docstore.OpenCollection(ctx, "firestore://projects/myproject/databases/(default)/documents/mycollection?name_field=myID") if err != nil { log.Fatal(err) } defer coll.Close() // Try to access and use the underlying mongo.Collection. var fsClient *firestore.Client if coll.As(&fsClient) { _ = fsClient // TODO: Use the client. } else { log.Println("Unable to access firestore.Client through Collection.As") } } func ExampleCollection_ErrorAs() { // This example is specific to the awsdynamodb implementation. // You will need to blank-import the package for this to work: // import _ "gocloud.dev/docstore/awsdynamodb" // The types exposed for As by mongodocstore are documented in // https://godoc.org/gocloud.dev/docstore/mongodocstore#hdr-As // This URL will open the collection using default credentials. ctx := context.Background() coll, err := docstore.OpenCollection(ctx, "dynamodb://mytable?partition_key=partkey") if err != nil { log.Fatal(err) } defer coll.Close() doc := map[string]interface{}{"_id": "a"} if err := coll.Create(ctx, doc); err != nil { var aerr awserr.Error if coll.ErrorAs(err, &aerr) { fmt.Println("got", aerr) } else { fmt.Println("could not convert error") } } } func ExampleQuery_Get() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var coll *docstore.Collection // Ask for all players with scores at least 20. iter := coll.Query().Where("Score", ">=", 20).OrderBy("Score", docstore.Descending).Get(ctx) defer iter.Stop() // Query.Get returns an iterator. Call Next on it until io.EOF. for { var p Player err := iter.Next(ctx, &p) if err == io.EOF { break } else if err != nil { log.Fatal(err) } else { fmt.Printf("%s: %d\n", p.Name, p.Score) } } } func ExampleQuery_Get_full() { ctx := context.Background() coll, err := memdocstore.OpenCollection("Name", nil) if err != nil { log.Fatal(err) } defer coll.Close() // Add some documents to the collection. err = coll.Actions(). Put(&Player{Name: "Pat", Score: 10}). Put(&Player{Name: "Mel", Score: 20}). Put(&Player{Name: "Fran", Score: 30}). Do(ctx) if err != nil { log.Fatal(err) } // Ask for all players with scores at least 20. iter := coll.Query().Where("Score", ">=", 20).OrderBy("Score", docstore.Descending).Get(ctx) defer iter.Stop() // Query.Get returns an iterator. Call Next on it until io.EOF. for { var p Player err := iter.Next(ctx, &p) if err == io.EOF { break } else if err != nil { log.Fatal(err) } else { fmt.Printf("%s: %d\n", p.Name, p.Score) } } // Output: // Fran: 30 // Mel: 20 } func Example_optimisticLocking() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() coll, err := memdocstore.OpenCollection("Name", nil) if err != nil { log.Fatal(err) } defer coll.Close() // Create a player. pat := &Player{Name: "Pat", Score: 7} if err := coll.Create(ctx, pat); err != nil { log.Fatal(err) } fmt.Println(pat) // memdocstore revisions are deterministic, so we can check the output. // Double a player's score. We cannot use Update to multiply, so we use optimistic // locking instead. // We may have to retry a few times; put a time limit on that. ctx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() for { // Get the document. player := &Player{Name: "Pat"} if err := coll.Get(ctx, player); err != nil { log.Fatal(err) } // player.DocstoreRevision is set to the document's revision. // Modify the document locally. player.Score *= 2 // Replace the document. player.DocstoreRevision will be checked against // the stored document's revision. err := coll.Replace(ctx, player) if err != nil { code := gcerrors.Code(err) // On FailedPrecondition or NotFound, try again. if code == gcerrors.FailedPrecondition || code == gcerrors.NotFound { continue } log.Fatal(err) } fmt.Println(player) break } // Output: // &{Pat 7 1} // &{Pat 14 2} } go-cloud-0.20.0/docstore/gcpfirestore/000077500000000000000000000000001367004507500176275ustar00rootroot00000000000000go-cloud-0.20.0/docstore/gcpfirestore/codec.go000066400000000000000000000223421367004507500212360ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpfirestore // Encoding and decoding between supported docstore types and Firestore protos. import ( "errors" "fmt" "path" "reflect" "time" "github.com/golang/protobuf/ptypes" ts "github.com/golang/protobuf/ptypes/timestamp" "gocloud.dev/docstore/driver" pb "google.golang.org/genproto/googleapis/firestore/v1" "google.golang.org/genproto/googleapis/type/latlng" ) // encodeDoc encodes a driver.Document into Firestore's representation. // A Firestore document (*pb.Document) is just a Go map from strings to *pb.Values. func encodeDoc(doc driver.Document, nameField string) (*pb.Document, error) { var e encoder if err := doc.Encode(&e); err != nil { return nil, err } fields := e.pv.GetMapValue().Fields // Do not put the name field in the document itself. if nameField != "" { delete(fields, nameField) } return &pb.Document{Fields: fields}, nil } // encodeValue encodes a Go value as a Firestore Value. // The Firestore proto definition for Value is a oneof of various types, // including basic types like string as well as lists and maps. func encodeValue(x interface{}) (*pb.Value, error) { var e encoder if err := driver.Encode(reflect.ValueOf(x), &e); err != nil { return nil, err } return e.pv, nil } // encoder implements driver.Encoder. Its job is to encode a single Firestore value. type encoder struct { pv *pb.Value } var nullValue = &pb.Value{ValueType: &pb.Value_NullValue{}} func (e *encoder) EncodeNil() { e.pv = nullValue } func (e *encoder) EncodeBool(x bool) { e.pv = &pb.Value{ValueType: &pb.Value_BooleanValue{x}} } func (e *encoder) EncodeInt(x int64) { e.pv = &pb.Value{ValueType: &pb.Value_IntegerValue{x}} } func (e *encoder) EncodeUint(x uint64) { e.pv = &pb.Value{ValueType: &pb.Value_IntegerValue{int64(x)}} } func (e *encoder) EncodeBytes(x []byte) { e.pv = &pb.Value{ValueType: &pb.Value_BytesValue{x}} } func (e *encoder) EncodeFloat(x float64) { e.pv = floatval(x) } func (e *encoder) EncodeString(x string) { e.pv = &pb.Value{ValueType: &pb.Value_StringValue{x}} } func (e *encoder) ListIndex(int) { panic("impossible") } func (e *encoder) MapKey(string) { panic("impossible") } func (e *encoder) EncodeList(n int) driver.Encoder { s := make([]*pb.Value, n) e.pv = &pb.Value{ValueType: &pb.Value_ArrayValue{&pb.ArrayValue{Values: s}}} return &listEncoder{s: s} } func (e *encoder) EncodeMap(n int) driver.Encoder { m := make(map[string]*pb.Value, n) e.pv = &pb.Value{ValueType: &pb.Value_MapValue{&pb.MapValue{Fields: m}}} return &mapEncoder{m: m} } var ( typeOfGoTime = reflect.TypeOf(time.Time{}) typeOfProtoTimestamp = reflect.TypeOf((*ts.Timestamp)(nil)) typeOfLatLng = reflect.TypeOf((*latlng.LatLng)(nil)) ) // Encode time.Time, latlng.LatLng, and ts.Timestamp specially, because the Go Firestore // client does. func (e *encoder) EncodeSpecial(v reflect.Value) (bool, error) { switch v.Type() { case typeOfGoTime: ts, err := ptypes.TimestampProto(v.Interface().(time.Time)) if err != nil { return false, err } e.pv = &pb.Value{ValueType: &pb.Value_TimestampValue{ts}} return true, nil case typeOfProtoTimestamp: if v.IsNil() { e.pv = nullValue } else { e.pv = &pb.Value{ValueType: &pb.Value_TimestampValue{v.Interface().(*ts.Timestamp)}} } return true, nil case typeOfLatLng: if v.IsNil() { e.pv = nullValue } else { e.pv = &pb.Value{ValueType: &pb.Value_GeoPointValue{v.Interface().(*latlng.LatLng)}} } return true, nil default: return false, nil } } type listEncoder struct { s []*pb.Value encoder } func (e *listEncoder) ListIndex(i int) { e.s[i] = e.pv } type mapEncoder struct { m map[string]*pb.Value encoder } func (e *mapEncoder) MapKey(k string) { e.m[k] = e.pv } func floatval(x float64) *pb.Value { return &pb.Value{ValueType: &pb.Value_DoubleValue{x}} } //////////////////////////////////////////////////////////////// // decodeDoc decodes a Firestore document into a driver.Document. func decodeDoc(pdoc *pb.Document, ddoc driver.Document, nameField, revField string) error { if pdoc.Fields == nil { pdoc.Fields = map[string]*pb.Value{} } if nameField != "" { pdoc.Fields[nameField] = &pb.Value{ValueType: &pb.Value_StringValue{StringValue: path.Base(pdoc.Name)}} } mv := &pb.Value{ValueType: &pb.Value_MapValue{&pb.MapValue{Fields: pdoc.Fields}}} if err := ddoc.Decode(decoder{mv}); err != nil { return err } // Set the revision field in the document, if it exists, to the update time. if ddoc.HasField(revField) && pdoc.UpdateTime != nil { return ddoc.SetField(revField, pdoc.UpdateTime) } return nil } type decoder struct { pv *pb.Value } func (d decoder) String() string { // for debugging return fmt.Sprint(d.pv) } func (d decoder) AsNull() bool { _, ok := d.pv.ValueType.(*pb.Value_NullValue) return ok } func (d decoder) AsBool() (bool, bool) { if b, ok := d.pv.ValueType.(*pb.Value_BooleanValue); ok { return b.BooleanValue, true } return false, false } func (d decoder) AsString() (string, bool) { if s, ok := d.pv.ValueType.(*pb.Value_StringValue); ok { return s.StringValue, true } return "", false } func (d decoder) AsInt() (int64, bool) { if i, ok := d.pv.ValueType.(*pb.Value_IntegerValue); ok { return i.IntegerValue, true } return 0, false } func (d decoder) AsUint() (uint64, bool) { if i, ok := d.pv.ValueType.(*pb.Value_IntegerValue); ok { return uint64(i.IntegerValue), true } return 0, false } func (d decoder) AsFloat() (float64, bool) { if f, ok := d.pv.ValueType.(*pb.Value_DoubleValue); ok { return f.DoubleValue, true } return 0, false } func (d decoder) AsBytes() ([]byte, bool) { if bs, ok := d.pv.ValueType.(*pb.Value_BytesValue); ok { return bs.BytesValue, true } return nil, false } // AsInterface decodes the value in d into the most appropriate Go type. func (d decoder) AsInterface() (interface{}, error) { return decodeValue(d.pv) } func decodeValue(v *pb.Value) (interface{}, error) { switch v := v.ValueType.(type) { case *pb.Value_NullValue: return nil, nil case *pb.Value_BooleanValue: return v.BooleanValue, nil case *pb.Value_IntegerValue: return v.IntegerValue, nil case *pb.Value_DoubleValue: return v.DoubleValue, nil case *pb.Value_StringValue: return v.StringValue, nil case *pb.Value_BytesValue: return v.BytesValue, nil case *pb.Value_TimestampValue: // Return TimestampValue as time.Time. t, err := ptypes.Timestamp(v.TimestampValue) if err != nil { return nil, err } return t, nil case *pb.Value_ReferenceValue: // TODO(jba): support references return nil, errors.New("references are not currently supported") case *pb.Value_GeoPointValue: // Return GeoPointValue as *latlng.LatLng. return v.GeoPointValue, nil case *pb.Value_ArrayValue: s := make([]interface{}, len(v.ArrayValue.Values)) for i, pv := range v.ArrayValue.Values { e, err := decodeValue(pv) if err != nil { return nil, err } s[i] = e } return s, nil case *pb.Value_MapValue: m := make(map[string]interface{}, len(v.MapValue.Fields)) for k, pv := range v.MapValue.Fields { e, err := decodeValue(pv) if err != nil { return nil, err } m[k] = e } return m, nil } return nil, fmt.Errorf("unknown firestore value type %T", v) } func (d decoder) ListLen() (int, bool) { a := d.pv.GetArrayValue() if a == nil { return 0, false } return len(a.Values), true } func (d decoder) DecodeList(f func(int, driver.Decoder) bool) { for i, e := range d.pv.GetArrayValue().Values { if !f(i, decoder{e}) { return } } } func (d decoder) MapLen() (int, bool) { m := d.pv.GetMapValue() if m == nil { return 0, false } return len(m.Fields), true } func (d decoder) DecodeMap(f func(string, driver.Decoder, bool) bool) { for k, v := range d.pv.GetMapValue().Fields { if !f(k, decoder{v}, true) { return } } } func (d decoder) AsSpecial(v reflect.Value) (bool, interface{}, error) { switch v.Type() { case typeOfGoTime: if ts, ok := d.pv.ValueType.(*pb.Value_TimestampValue); ok { if ts.TimestampValue == nil { return true, time.Time{}, nil } t, err := ptypes.Timestamp(ts.TimestampValue) return true, t, err } return true, nil, fmt.Errorf("expected TimestampValue for time.Time, got %+v", d.pv.ValueType) case typeOfProtoTimestamp: if ts, ok := d.pv.ValueType.(*pb.Value_TimestampValue); ok { return true, ts.TimestampValue, nil } return true, nil, fmt.Errorf("expected TimestampValue for *ts.Timestamp, got %+v", d.pv.ValueType) case typeOfLatLng: if ll, ok := d.pv.ValueType.(*pb.Value_GeoPointValue); ok { return true, ll.GeoPointValue, nil } return true, nil, fmt.Errorf("expected GeoPointValue for *latlng.LatLng, got %+v", d.pv.ValueType) default: return false, nil, nil } } go-cloud-0.20.0/docstore/gcpfirestore/codec_test.go000066400000000000000000000047011367004507500222740ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpfirestore import ( "testing" "time" "github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes/timestamp" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "gocloud.dev/docstore" "gocloud.dev/docstore/drivertest" "google.golang.org/genproto/googleapis/type/latlng" ) // Test that special types round-trip. // These aren't tested in the docstore-wide conformance tests. func TestCodecSpecial(t *testing.T) { const nameField = "Name" type S struct { Name string T time.Time TS, TSn *timestamp.Timestamp LL, LLn *latlng.LatLng } tm := time.Date(2019, 3, 14, 0, 0, 0, 0, time.UTC) ts, err := ptypes.TimestampProto(tm) if err != nil { t.Fatal(err) } in := &S{ Name: "name", T: tm, TS: ts, TSn: nil, LL: &latlng.LatLng{Latitude: 3, Longitude: 4}, LLn: nil, } var got S enc, err := encodeDoc(drivertest.MustDocument(in), nameField) if err != nil { t.Fatal(err) } enc.Name = "collPath/" + in.Name gotdoc := drivertest.MustDocument(&got) // Test type-driven decoding (where the types of the struct fields are available). if err := decodeDoc(enc, gotdoc, nameField, docstore.DefaultRevisionField); err != nil { t.Fatal(err) } if diff := cmp.Diff(&got, in, cmpopts.IgnoreUnexported(timestamp.Timestamp{}, latlng.LatLng{})); diff != "" { t.Error(diff) } // Test type-blind decoding. gotmap := map[string]interface{}{} gotmapdoc := drivertest.MustDocument(gotmap) if err := decodeDoc(enc, gotmapdoc, nameField, docstore.DefaultRevisionField); err != nil { t.Fatal(err) } wantmap := map[string]interface{}{ "Name": "name", "T": in.T, "TS": in.T, // timestamps always decode as time.Time "TSn": nil, "LL": in.LL, "LLn": nil, } if diff := cmp.Diff(gotmap, wantmap, cmpopts.IgnoreUnexported(latlng.LatLng{})); diff != "" { t.Error(diff) } } go-cloud-0.20.0/docstore/gcpfirestore/create_indexes.sh000077500000000000000000000034151367004507500231530ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Creates the Firestore indexes needed for tests. # Takes one argument: the GCP project ID. # # If an index already exists, this script will fail. To re-create the index, delete # it from the UI at https://firebase.corp.google.com/project/$project_id/database/firestore/indexes. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail # Except we want to keep going if there is a failure, and x is too verbose. set -uo pipefail project_id="${1:-}" if [[ -z "$project_id" ]]; then echo "usage: create_indexes.sh PROJECT" 1>&2 exit 64 fi echo "Creating indexes for $project_id" echo "UI at https://firebase.corp.google.com/project/$project_id/database/firestore/indexes" collection=docstore-test-2 function create_index() { gcloud --project "$project_id" beta firestore indexes composite create --collection-group "$collection" \ --field-config field-path=$1,order=$2 --field-config field-path=$3,order=$4 } set -x create_index Player ascending Score ascending create_index Game ascending Score ascending create_index Player ascending Time ascending create_index Game ascending Player ascending create_index Game ascending Player descending go-cloud-0.20.0/docstore/gcpfirestore/example_test.go000066400000000000000000000055471367004507500226630ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpfirestore_test import ( "context" "log" "gocloud.dev/docstore" "gocloud.dev/docstore/gcpfirestore" "gocloud.dev/gcp" ) func ExampleOpenCollection() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() creds, err := gcp.DefaultCredentials(ctx) if err != nil { log.Fatal(err) } client, _, err := gcpfirestore.Dial(ctx, creds.TokenSource) if err != nil { log.Fatal(err) } resourceID := gcpfirestore.CollectionResourceID("my-project", "my-collection") coll, err := gcpfirestore.OpenCollection(client, resourceID, "userID", nil) if err != nil { log.Fatal(err) } defer coll.Close() } func ExampleOpenCollectionWithNameFunc() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() type HighScore struct { Game string Player string } creds, err := gcp.DefaultCredentials(ctx) if err != nil { log.Fatal(err) } client, _, err := gcpfirestore.Dial(ctx, creds.TokenSource) if err != nil { log.Fatal(err) } // The name of a document is constructed from the Game and Player fields. nameFromDocument := func(doc docstore.Document) string { hs := doc.(*HighScore) return hs.Game + "|" + hs.Player } resourceID := gcpfirestore.CollectionResourceID("my-project", "my-collection") coll, err := gcpfirestore.OpenCollectionWithNameFunc(client, resourceID, nameFromDocument, nil) if err != nil { log.Fatal(err) } defer coll.Close() } func Example_openCollectionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/docstore/gcpfirestore" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // docstore.OpenCollection creates a *docstore.Collection from a URL. const url = "firestore://projects/my-project/databases/(default)/documents/my-collection?name_field=userID" coll, err := docstore.OpenCollection(ctx, url) if err != nil { log.Fatal(err) } defer coll.Close() } go-cloud-0.20.0/docstore/gcpfirestore/fs.go000066400000000000000000000636531367004507500206030ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcpfirestore provides a docstore implementation backed by Google Cloud // Firestore. // Use OpenCollection to construct a *docstore.Collection. // // Docstore types not supported by the Go firestore client, cloud.google.com/go/firestore: // - unsigned integers: encoded is int64s // - arrays: encoded as Firestore array values // // Firestore types not supported by Docstore: // - Document reference (a pointer to another Firestore document) // // // URLs // // For docstore.OpenCollection, gcpfirestore registers for the scheme // "firestore". // The default URL opener will create a connection using default credentials // from the environment, as described in // https://cloud.google.com/docs/authentication/production. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // // As // // gcpfirestore exposes the following types for as functions. // The pb package is google.golang.org/genproto/googleapis/firestore/v1. // The firestore package is cloud.google.com/go/firestore/apiv1. // - Collection.As: *firestore.Client // - ActionList.BeforeDo: *pb.BatchGetDocumentsRequest or *pb.CommitRequest. // - Query.BeforeQuery: *pb.RunQueryRequest // - DocumentIterator: firestore.Firestore_RunQueryClient // - Error: *google.golang.org/grpc/status.Status // // // Queries // // Firestore allows only one field in a query to be compared with an inequality // operator (one other than "="). This driver selects the first field in a Where // clause with an inequality to pass to Firestore and handles the rest locally. For // example, if the query specifies the three clauses A > 1, B > 2 and A < 3, then // A > 1 and A < 3 will be sent to Firestore, and the results will be filtered by // B > 2 in this driver. // // Firestore requires a composite index if a query contains both an equality and an // inequality comparison. This driver returns an error if the necessary index does // not exist. You must create the index manually. See // https://cloud.google.com/firestore/docs/query-data/indexing for details. // // See https://cloud.google.com/firestore/docs/query-data/queries for more information on Firestore queries. package gcpfirestore // import "gocloud.dev/docstore/gcpfirestore" import ( "bytes" "context" "fmt" "io" "reflect" "regexp" "strings" vkit "cloud.google.com/go/firestore/apiv1" "github.com/golang/protobuf/proto" tspb "github.com/golang/protobuf/ptypes/timestamp" "github.com/google/wire" "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" "gocloud.dev/gcp" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/useragent" "google.golang.org/api/option" pb "google.golang.org/genproto/googleapis/firestore/v1" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) // Dial returns a client to use with Firestore and a clean-up function to close // the client after used. func Dial(ctx context.Context, ts gcp.TokenSource) (*vkit.Client, func(), error) { c, err := vkit.NewClient(ctx, option.WithTokenSource(ts), useragent.ClientOption("docstore")) return c, func() { c.Close() }, err } // Set holds Wire providers for this package. var Set = wire.NewSet( Dial, wire.Struct(new(URLOpener), "Client"), ) type collection struct { nameField string nameFunc func(docstore.Document) string client *vkit.Client dbPath string // e.g. "projects/P/databases/(default)" collPath string // e.g. "projects/P/databases/(default)/documents/States/Wisconsin/cities" opts *Options } // Options contains optional arguments to the OpenCollection functions. type Options struct { // If true, allow queries that require client-side evaluation of filters (Where clauses) // to run. AllowLocalFilters bool // The name of the field holding the document revision. // Defaults to docstore.DefaultRevisionField. RevisionField string // The maximum number of RPCs that can be in progress for a single call to // ActionList.Do. // If less than 1, there is no limit. MaxOutstandingActionRPCs int } // CollectionResourceID constructs a resource ID for a collection from the project ID and the collection path. // See the OpenCollection example for use. func CollectionResourceID(projectID, collPath string) string { return fmt.Sprintf("projects/%s/databases/(default)/documents/%s", projectID, collPath) } // OpenCollection creates a *docstore.Collection representing a Firestore collection. // // collResourceID must be of the form "project//databases/(default)/documents/". // may be a top-level collection, like "States", or it may be a path to a nested // collection, like "States/Wisconsin/Cities". // See https://cloud.google.com/firestore/docs/reference/rest/ for more detail. // // gcpfirestore requires that a single field, nameField, be designated the primary // key. Its values must be strings, and must be unique over all documents in the // collection. The primary key must be provided to retrieve a document. func OpenCollection(client *vkit.Client, collResourceID, nameField string, opts *Options) (*docstore.Collection, error) { c, err := newCollection(client, collResourceID, nameField, nil, opts) if err != nil { return nil, err } return docstore.NewCollection(c), nil } // OpenCollectionWithNameFunc creates a *docstore.Collection representing a Firestore collection. // // collResourceID must be of the form "project//databases/(default)/documents/". // may be a top-level collection, like "States", or it may be a path to a nested // collection, like "States/Wisconsin/Cities". // // The nameFunc argument is function that accepts a document and returns the value to // be used for the document's primary key. It should return the empty string if the // document is missing the information to construct a name. This will cause all // actions, even Create, to fail. // // Providing a function to construct the primary key is useful in two situations: if // your desired primary key field is not a string, or if there is more than one field // you want to use as a primary key. // // For the collection to be usable with Query.Delete and Query.Update, nameFunc // must work with both map and struct types representing the same underlying // data structure. See gocloud.dev/docstore/drivertest.HighScoreKey for an example. func OpenCollectionWithNameFunc(client *vkit.Client, collResourceID string, nameFunc func(docstore.Document) string, opts *Options) (*docstore.Collection, error) { c, err := newCollection(client, collResourceID, "", nameFunc, opts) if err != nil { return nil, err } return docstore.NewCollection(c), nil } var resourceIDRE = regexp.MustCompile(`^(projects/[^/]+/databases/\(default\))/documents/.+`) func newCollection(client *vkit.Client, collResourceID, nameField string, nameFunc func(docstore.Document) string, opts *Options) (*collection, error) { if nameField == "" && nameFunc == nil { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "one of nameField or nameFunc must be provided") } matches := resourceIDRE.FindStringSubmatch(collResourceID) if matches == nil { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "bad collection resource ID %q; must match %v", collResourceID, resourceIDRE) } dbPath := matches[1] if opts == nil { opts = &Options{} } if opts.RevisionField == "" { opts.RevisionField = docstore.DefaultRevisionField } return &collection{ client: client, nameField: nameField, nameFunc: nameFunc, dbPath: dbPath, collPath: collResourceID, opts: opts, }, nil } // Key returns the document key, if present. This is either the value of the field // called c.nameField, or the result of calling c.nameFunc. func (c *collection) Key(doc driver.Document) (interface{}, error) { if c.nameField != "" { name, err := doc.GetField(c.nameField) vn := reflect.ValueOf(name) if err != nil || name == nil || driver.IsEmptyValue(vn) { // missing field is not an error return nil, nil } // Check that the reflect kind is String so we can support any type whose underlying type // is string. E.g. "type DocName string". if vn.Kind() != reflect.String { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "key field %q with value %v is not a string", c.nameField, name) } sname := vn.String() if sname == "" { // empty string is the same as missing return nil, nil } return sname, nil } sname := c.nameFunc(doc.Origin) if sname == "" { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "missing document key") } return sname, nil } func (c *collection) RevisionField() string { return c.opts.RevisionField } // RunActions implements driver.RunActions. func (c *collection) RunActions(ctx context.Context, actions []*driver.Action, opts *driver.RunActionsOptions) driver.ActionListError { errs := make([]error, len(actions)) beforeGets, gets, writes, afterGets := driver.GroupActions(actions) calls := c.buildCommitCalls(writes, errs) // runGets does not issue concurrent RPCs, so it doesn't need a throttle. c.runGets(ctx, beforeGets, errs, opts) t := driver.NewThrottle(c.opts.MaxOutstandingActionRPCs) for _, call := range calls { call := call t.Acquire() go func() { defer t.Release() c.doCommitCall(ctx, call, errs, opts) }() } t.Acquire() c.runGets(ctx, gets, errs, opts) t.Release() t.Wait() c.runGets(ctx, afterGets, errs, opts) return driver.NewActionListError(errs) } // runGets executes a group of Get actions by calling the BatchGetDocuments RPC. // It may make several calls, because all gets in a single RPC must have the same set of field paths. func (c *collection) runGets(ctx context.Context, actions []*driver.Action, errs []error, opts *driver.RunActionsOptions) { for _, group := range driver.GroupByFieldPath(actions) { c.batchGet(ctx, group, errs, opts) } } // Run a single BatchGet RPC with the given Get actions, all of which have the same set of field paths. // Populate errs, a slice of per-action errors indexed by the original action list position. func (c *collection) batchGet(ctx context.Context, gets []*driver.Action, errs []error, opts *driver.RunActionsOptions) { setErr := func(err error) { for _, g := range gets { errs[g.Index] = err } } req, err := c.newGetRequest(gets) if err != nil { setErr(err) return } indexByPath := map[string]int{} // from document path to index in gets for i, path := range req.Documents { indexByPath[path] = i } if opts.BeforeDo != nil { if err := opts.BeforeDo(driver.AsFunc(req)); err != nil { setErr(err) return } } streamClient, err := c.client.BatchGetDocuments(withResourceHeader(ctx, req.Database), req) if err != nil { setErr(err) return } for { resp, err := streamClient.Recv() if err == io.EOF { break } if err != nil { setErr(err) return } switch r := resp.Result.(type) { case *pb.BatchGetDocumentsResponse_Found: pdoc := r.Found i, ok := indexByPath[pdoc.Name] if !ok { setErr(gcerr.Newf(gcerr.Internal, nil, "no index for path %s", pdoc.Name)) } else { errs[gets[i].Index] = decodeDoc(pdoc, gets[i].Doc, c.nameField, c.opts.RevisionField) } case *pb.BatchGetDocumentsResponse_Missing: i := indexByPath[r.Missing] errs[gets[i].Index] = gcerr.Newf(gcerr.NotFound, nil, "document at path %q is missing", r.Missing) default: setErr(gcerr.Newf(gcerr.Internal, nil, "unknown BatchGetDocumentsResponse result type")) return } } } func (c *collection) newGetRequest(gets []*driver.Action) (*pb.BatchGetDocumentsRequest, error) { req := &pb.BatchGetDocumentsRequest{Database: c.dbPath} for _, a := range gets { req.Documents = append(req.Documents, c.collPath+"/"+a.Key.(string)) } // groupActions has already made sure that all the actions have the same field paths, // so just use the first one. var fps []string // field paths that will go in the mask for _, fp := range gets[0].FieldPaths { fps = append(fps, toServiceFieldPath(fp)) } if fps != nil { req.Mask = &pb.DocumentMask{FieldPaths: fps} } return req, nil } // commitCall holds information needed to make a Commit RPC and to follow up after it is done. type commitCall struct { writes []*pb.Write // writes to commit actions []*driver.Action // actions corresponding to those writes newNames []string // new names for Create; parallel to actions } // Construct a set of concurrently runnable calls to Commit. func (c *collection) buildCommitCalls(actions []*driver.Action, errs []error) []*commitCall { // Convert each action to one or more writes, collecting names for newly created // documents along the way. Divide writes into those with preconditions and those without. // Writes without preconditions can't fail, so we can execute them all in one Commit RPC. // All other writes must be run as separate Commits. var ( nCall = &commitCall{} // for writes without preconditions pCalls []*commitCall // for writes with preconditions ) for _, a := range actions { ws, nn, err := c.actionToWrites(a) if err != nil { errs[a.Index] = err } else if ws[0].CurrentDocument == nil { // no precondition nCall.writes = append(nCall.writes, ws...) nCall.actions = append(nCall.actions, a) nCall.newNames = append(nCall.newNames, nn) } else { // writes have a precondition pCalls = append(pCalls, &commitCall{ writes: ws, actions: []*driver.Action{a}, newNames: []string{nn}, }) } } if len(nCall.writes) == 0 { return pCalls } return append(pCalls, nCall) } // Convert an action to one or more Firestore Write protos. func (c *collection) actionToWrites(a *driver.Action) ([]*pb.Write, string, error) { var ( w *pb.Write ws []*pb.Write err error docName string newName string // for Create with no name ) if a.Key != nil { docName = a.Key.(string) } switch a.Kind { case driver.Create: // Make a name for this document if it doesn't have one. if a.Key == nil { docName = driver.UniqueString() newName = docName } w, err = c.putWrite(a.Doc, docName, &pb.Precondition{ConditionType: &pb.Precondition_Exists{Exists: false}}) case driver.Replace: // If the given document has a revision, use it as the precondition (it implies existence). pc, perr := c.revisionPrecondition(a.Doc) if perr != nil { return nil, "", perr } // Otherwise, just require that the document exists. if pc == nil { pc = &pb.Precondition{ConditionType: &pb.Precondition_Exists{Exists: true}} } w, err = c.putWrite(a.Doc, docName, pc) case driver.Put: pc, perr := c.revisionPrecondition(a.Doc) if perr != nil { return nil, "", perr } w, err = c.putWrite(a.Doc, docName, pc) case driver.Update: ws, err = c.updateWrites(a.Doc, docName, a.Mods) case driver.Delete: w, err = c.deleteWrite(a.Doc, docName) default: err = gcerr.Newf(gcerr.Internal, nil, "bad action %+v", a) } if err != nil { return nil, "", err } if ws == nil { ws = []*pb.Write{w} } return ws, newName, nil } func (c *collection) putWrite(doc driver.Document, docName string, pc *pb.Precondition) (*pb.Write, error) { pdoc, err := encodeDoc(doc, c.nameField) if err != nil { return nil, err } pdoc.Name = c.collPath + "/" + docName return &pb.Write{ Operation: &pb.Write_Update{Update: pdoc}, CurrentDocument: pc, }, nil } func (c *collection) deleteWrite(doc driver.Document, docName string) (*pb.Write, error) { pc, err := c.revisionPrecondition(doc) if err != nil { return nil, err } return &pb.Write{ Operation: &pb.Write_Delete{Delete: c.collPath + "/" + docName}, CurrentDocument: pc, }, nil } // updateWrites returns a slice of writes because we may need two: one for setting // and deleting values, the other for transforms. func (c *collection) updateWrites(doc driver.Document, docName string, mods []driver.Mod) ([]*pb.Write, error) { ts, err := c.revisionTimestamp(doc) if err != nil { return nil, err } fields, paths, transforms, err := processMods(mods) if err != nil { return nil, err } return newUpdateWrites(c.collPath+"/"+docName, ts, fields, paths, transforms) } func newUpdateWrites(docPath string, ts *tspb.Timestamp, fields map[string]*pb.Value, paths []string, transforms []*pb.DocumentTransform_FieldTransform) ([]*pb.Write, error) { pc := preconditionFromTimestamp(ts) // If there is no revision in the document, add a precondition that the document exists. if pc == nil { pc = &pb.Precondition{ConditionType: &pb.Precondition_Exists{Exists: true}} } var ws []*pb.Write if len(fields) > 0 || len(paths) > 0 { ws = []*pb.Write{{ Operation: &pb.Write_Update{Update: &pb.Document{ Name: docPath, Fields: fields, }}, UpdateMask: &pb.DocumentMask{FieldPaths: paths}, CurrentDocument: pc, }} pc = nil // If the precondition is in the write, we don't need it in the transform. } if len(transforms) > 0 { ws = append(ws, &pb.Write{ Operation: &pb.Write_Transform{ Transform: &pb.DocumentTransform{ Document: docPath, FieldTransforms: transforms, }, }, CurrentDocument: pc, }) } return ws, nil } // To update a document, we need to send: // - A document with all the fields we want to add or change. // - A mask with the field paths of all the fields we want to add, change or delete. // processMods converts the mods into the fields for the document, and a list of // valid Firestore field paths for the mask. func processMods(mods []driver.Mod) (fields map[string]*pb.Value, maskPaths []string, transforms []*pb.DocumentTransform_FieldTransform, err error) { fields = map[string]*pb.Value{} for _, m := range mods { sfp := toServiceFieldPath(m.FieldPath) // If m.Value is nil, we want to delete it. In that case, we put the field in // the mask but not in the doc. if inc, ok := m.Value.(driver.IncOp); ok { pv, err := encodeValue(inc.Amount) if err != nil { return nil, nil, nil, err } transforms = append(transforms, &pb.DocumentTransform_FieldTransform{ FieldPath: sfp, TransformType: &pb.DocumentTransform_FieldTransform_Increment{ Increment: pv, }, }) } else { // The field path of every other mod belongs in the mask. maskPaths = append(maskPaths, sfp) if m.Value != nil { pv, err := encodeValue(m.Value) if err != nil { return nil, nil, nil, err } if err := setAtFieldPath(fields, m.FieldPath, pv); err != nil { return nil, nil, nil, err } } } } return fields, maskPaths, transforms, nil } // doCommitCall Calls the Commit RPC with a list of writes, and handles the results. func (c *collection) doCommitCall(ctx context.Context, call *commitCall, errs []error, opts *driver.RunActionsOptions) { wrs, err := c.commit(ctx, call.writes, opts) if err != nil { for _, a := range call.actions { errs[a.Index] = err } return } // Set the revision fields of the documents. // The actions and writes may not correspond, because Update actions may require // two writes. We can tell which writes correspond to actions by the type of write. j := 0 for i, a := range call.actions { wr := wrs[j] if a.Doc.HasField(c.opts.RevisionField) { if err := a.Doc.SetField(c.opts.RevisionField, wr.UpdateTime); err != nil { errs[a.Index] = err } } if call.newNames[i] != "" { // c.nameField should not be empty since we only create new names when there // is a nameField. _ = a.Doc.SetField(c.nameField, call.newNames[i]) } if hasFollowingTransform(call.writes, j) { j = j + 2 } else { j++ } } return } func hasFollowingTransform(writes []*pb.Write, i int) bool { if i >= len(writes)-1 { return false } curr, ok := writes[i].Operation.(*pb.Write_Update) if !ok { return false } next, ok := writes[i+1].Operation.(*pb.Write_Transform) if !ok { return false } return curr.Update.Name == next.Transform.Document } func (c *collection) commit(ctx context.Context, ws []*pb.Write, opts *driver.RunActionsOptions) ([]*pb.WriteResult, error) { req := &pb.CommitRequest{ Database: c.dbPath, Writes: ws, } if opts.BeforeDo != nil { if err := opts.BeforeDo(driver.AsFunc(req)); err != nil { return nil, err } } res, err := c.client.Commit(withResourceHeader(ctx, req.Database), req) if err != nil { return nil, err } if len(res.WriteResults) != len(ws) { return nil, gcerr.Newf(gcerr.Internal, nil, "wrong number of WriteResults from firestore commit") } return res.WriteResults, nil } /////////////// // From memdocstore/mem.go. // setAtFieldPath sets m's value at fp to val. It creates intermediate maps as // needed. It returns an error if a non-final component of fp does not denote a map. func setAtFieldPath(m map[string]*pb.Value, fp []string, val *pb.Value) error { m2, err := getParentMap(m, fp, true) if err != nil { return err } m2[fp[len(fp)-1]] = val return nil } // getParentMap returns the map that directly contains the given field path; // that is, the value of m at the field path that excludes the last component // of fp. If a non-map is encountered along the way, an InvalidArgument error is // returned. If nil is encountered, nil is returned unless create is true, in // which case a map is added at that point. func getParentMap(m map[string]*pb.Value, fp []string, create bool) (map[string]*pb.Value, error) { for _, k := range fp[:len(fp)-1] { if m[k] == nil { if !create { return nil, nil } m[k] = &pb.Value{ValueType: &pb.Value_MapValue{&pb.MapValue{Fields: map[string]*pb.Value{}}}} } mv := m[k].GetMapValue() if mv == nil { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "invalid field path %q at %q", strings.Join(fp, "."), k) } m = mv.Fields } return m, nil } //////////////// // From fieldpath.go in cloud.google.com/go/firestore. // Convert a docstore field path, which is a []string, into the kind of field path // that the Firestore service expects: a string of dot-separated components, some of // which may be quoted. func toServiceFieldPath(fp []string) string { cs := make([]string, len(fp)) for i, c := range fp { cs[i] = toServiceFieldPathComponent(c) } return strings.Join(cs, ".") } // Google SQL syntax for an unquoted field. var unquotedFieldRE = regexp.MustCompile("^[A-Za-z_][A-Za-z_0-9]*$") // toServiceFieldPathComponent returns a string that represents key and is a valid // Firestore field path component. Components must be quoted with backticks if // they don't match the above regexp. func toServiceFieldPathComponent(key string) string { if unquotedFieldRE.MatchString(key) { return key } var buf bytes.Buffer buf.WriteRune('`') for _, r := range key { if r == '`' || r == '\\' { buf.WriteRune('\\') } buf.WriteRune(r) } buf.WriteRune('`') return buf.String() } // revisionPrecondition returns a Firestore precondition that asserts that the stored document's // revision matches the revision of doc. func (c *collection) revisionPrecondition(doc driver.Document) (*pb.Precondition, error) { rev, err := c.revisionTimestamp(doc) if err != nil { return nil, err } return preconditionFromTimestamp(rev), nil } // revisionTimestamp extracts the timestamp from the revision field of doc, if there is one. // It only returns an error if the revision field is present and does not contain the right type. func (c *collection) revisionTimestamp(doc driver.Document) (*tspb.Timestamp, error) { v, err := doc.GetField(c.opts.RevisionField) if err != nil { // revision field not present return nil, nil } if v == nil { // revision field is present, but nil return nil, nil } rev, ok := v.(*tspb.Timestamp) if !ok { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "%s field contains wrong type: got %T, want proto Timestamp", c.opts.RevisionField, v) } return rev, nil } func preconditionFromTimestamp(ts *tspb.Timestamp) *pb.Precondition { if ts == nil || (ts.Seconds == 0 && ts.Nanos == 0) { // ignore a missing or zero revision return nil } return &pb.Precondition{ConditionType: &pb.Precondition_UpdateTime{ts}} } func (c *collection) ErrorCode(err error) gcerrors.ErrorCode { return gcerr.GRPCCode(err) } // resourcePrefixHeader is the name of the metadata header used to indicate // the resource being operated on. const resourcePrefixHeader = "google-cloud-resource-prefix" // withResourceHeader returns a new context that includes resource in a special header. // Firestore uses the resource header for routing. func withResourceHeader(ctx context.Context, resource string) context.Context { md, _ := metadata.FromOutgoingContext(ctx) md = md.Copy() md[resourcePrefixHeader] = []string{resource} return metadata.NewOutgoingContext(ctx, md) } // RevisionToBytes implements driver.RevisionToBytes. func (c *collection) RevisionToBytes(rev interface{}) ([]byte, error) { r, ok := rev.(*tspb.Timestamp) if !ok { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "revision %v of type %[1]T is not a proto Timestamp", rev) } return proto.Marshal(r) } // BytesToRevision implements driver.BytesToRevision. func (c *collection) BytesToRevision(b []byte) (interface{}, error) { var ts tspb.Timestamp if err := proto.Unmarshal(b, &ts); err != nil { return nil, err } return &ts, nil } func (c *collection) As(i interface{}) bool { p, ok := i.(**vkit.Client) if !ok { return false } *p = c.client return true } // ErrorAs implements driver.Collection.ErrorAs. func (c *collection) ErrorAs(err error, i interface{}) bool { s, ok := status.FromError(err) if !ok { return false } p, ok := i.(**status.Status) if !ok { return false } *p = s return true } // Close implements driver.Collection.Close. func (c *collection) Close() error { return nil } go-cloud-0.20.0/docstore/gcpfirestore/fs_test.go000066400000000000000000000134541367004507500216340ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpfirestore import ( "context" "errors" "testing" vkit "cloud.google.com/go/firestore/apiv1" "github.com/golang/protobuf/proto" tspb "github.com/golang/protobuf/ptypes/timestamp" "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/docstore/drivertest" "gocloud.dev/internal/testing/setup" "google.golang.org/api/option" pb "google.golang.org/genproto/googleapis/firestore/v1" "google.golang.org/grpc/status" ) const ( // projectID is the project ID that was used during the last test run using --record. projectID = "go-cloud-test-216917" collectionName1 = "docstore-test-1" collectionName2 = "docstore-test-2" collectionName3 = "docstore-test-3" endPoint = "firestore.googleapis.com:443" ) type harness struct { client *vkit.Client done func() } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { conn, done := setup.NewGCPgRPCConn(ctx, t, endPoint, "docstore") client, err := vkit.NewClient(ctx, option.WithGRPCConn(conn)) if err != nil { done() return nil, err } return &harness{client, done}, nil } func (h *harness) MakeCollection(_ context.Context, kind drivertest.CollectionKind) (driver.Collection, error) { switch kind { case drivertest.SingleKey, drivertest.NoRev: return newCollection(h.client, CollectionResourceID(projectID, collectionName1), drivertest.KeyField, nil, nil) case drivertest.TwoKey: return newCollection(h.client, CollectionResourceID(projectID, collectionName2), "", func(doc docstore.Document) string { return drivertest.HighScoreKey(doc).(string) }, &Options{AllowLocalFilters: true}) case drivertest.AltRev: return newCollection(h.client, CollectionResourceID(projectID, collectionName1), drivertest.KeyField, nil, &Options{RevisionField: drivertest.AlternateRevisionField}) default: panic("bad kind") } } func (*harness) BeforeDoTypes() []interface{} { return []interface{}{&pb.BatchGetDocumentsRequest{}, &pb.CommitRequest{}} } func (*harness) BeforeQueryTypes() []interface{} { return []interface{}{&pb.RunQueryRequest{}} } func (*harness) RevisionsEqual(rev1, rev2 interface{}) bool { return proto.Equal(rev1.(*tspb.Timestamp), rev2.(*tspb.Timestamp)) } func (h *harness) Close() { _ = h.client.Close() h.done() } // codecTester implements drivertest.CodecTester. type codecTester struct { nc *nativeCodec } func (*codecTester) UnsupportedTypes() []drivertest.UnsupportedType { return []drivertest.UnsupportedType{drivertest.Uint, drivertest.Arrays} } func (c *codecTester) NativeEncode(x interface{}) (interface{}, error) { return c.nc.Encode(x) } func (c *codecTester) NativeDecode(value, dest interface{}) error { return c.nc.Decode(value.(*pb.Document), dest) } func (c *codecTester) DocstoreEncode(x interface{}) (interface{}, error) { var e encoder if err := drivertest.MustDocument(x).Encode(&e); err != nil { return nil, err } return &pb.Document{ Name: "projects/P/databases/(default)/documents/C/D", Fields: e.pv.GetMapValue().Fields, }, nil } func (c *codecTester) DocstoreDecode(value, dest interface{}) error { mv := &pb.Value{ValueType: &pb.Value_MapValue{MapValue: &pb.MapValue{ Fields: value.(*pb.Document).Fields, }}} return drivertest.MustDocument(dest).Decode(decoder{mv}) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) CollectionCheck(coll *docstore.Collection) error { var fc *vkit.Client if !coll.As(&fc) { return errors.New("Collection.As failed") } return nil } func (verifyAs) QueryCheck(it *docstore.DocumentIterator) error { var c pb.Firestore_RunQueryClient if !it.As(&c) { return errors.New("DocumentIterator.As failed") } _, err := c.Header() return err } func (v verifyAs) ErrorCheck(c *docstore.Collection, err error) error { var s *status.Status if !c.ErrorAs(err, &s) { return errors.New("Collection.ErrorAs failed") } return nil } func TestConformance(t *testing.T) { drivertest.MakeUniqueStringDeterministicForTesting(1) nc, err := newNativeCodec() if err != nil { t.Fatal(err) } drivertest.RunConformanceTests(t, newHarness, &codecTester{nc}, []drivertest.AsTest{verifyAs{}}) } func BenchmarkConformance(b *testing.B) { ctx := context.Background() client, err := vkit.NewClient(ctx) if err != nil { b.Fatal(err) } coll, err := newCollection(client, CollectionResourceID(projectID, collectionName3), drivertest.KeyField, nil, nil) if err != nil { b.Fatal(err) } drivertest.RunBenchmarks(b, docstore.NewCollection(coll)) } // gcpfirestore-specific tests. func TestResourceIDRegexp(t *testing.T) { for _, good := range []string{ "projects/abc-_.309/databases/(default)/documents/C", "projects/P/databases/(default)/documents/C/D/E", } { if !resourceIDRE.MatchString(good) { t.Errorf("%q did not match but should have", good) } } for _, bad := range []string{ "", "Projects/P/databases/(default)/documents/C", "P/databases/(default)/documents/C", "projects/P/Q/databases/(default)/documents/C", "projects/P/databases/mydb/documents/C", "projects/P/databases/(default)/C", "projects/P/databases/(default)/documents/", "projects/P/databases/(default)", } { if resourceIDRE.MatchString(bad) { t.Errorf("%q matched but should not have", bad) } } } go-cloud-0.20.0/docstore/gcpfirestore/native_codec_test.go000066400000000000000000000112661367004507500236460ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpfirestore import ( "context" "io" "net" "testing" "cloud.google.com/go/firestore" ts "github.com/golang/protobuf/ptypes/timestamp" "github.com/google/go-cmp/cmp" "google.golang.org/api/option" pb "google.golang.org/genproto/googleapis/firestore/v1" "google.golang.org/grpc" "google.golang.org/grpc/metadata" ) // A nativeCodec encodes and decodes structs using the cloud.google.com/go/firestore // client. Since that package doesn't export its codec, we have to go behind the // scenes and intercept traffic at the gRPC level. We use interceptors to do that. (A // mock server would have worked too.) type nativeCodec struct { client *firestore.Client doc *pb.Document } func newNativeCodec() (*nativeCodec, error) { // Establish a gRPC server, just so we have a connection to hang the interceptors on. srv := grpc.NewServer() l, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { return nil, err } go func() { if err := srv.Serve(l); err != nil { panic(err) // we should never get an error because we just connect and stop } }() nc := &nativeCodec{} conn, err := grpc.Dial(l.Addr().String(), grpc.WithInsecure(), grpc.WithBlock(), grpc.WithUnaryInterceptor(nc.interceptUnary), grpc.WithStreamInterceptor(nc.interceptStream)) if err != nil { return nil, err } conn.Close() srv.Stop() nc.client, err = firestore.NewClient(context.Background(), "P", option.WithGRPCConn(conn)) if err != nil { return nil, err } return nc, nil } // Intercept all unary (non-streaming) RPCs. The only one we should ever get is a Commit, for // the Create call in Encode. // If this completes successfully, the encoded *pb.Document will be in c.doc. func (c *nativeCodec) interceptUnary(_ context.Context, method string, req, res interface{}, _ *grpc.ClientConn, _ grpc.UnaryInvoker, _ ...grpc.CallOption) error { c.doc = req.(*pb.CommitRequest).Writes[0].GetUpdate() res.(*pb.CommitResponse).WriteResults = []*pb.WriteResult{{}} return nil } // Intercept all streaming RPCs. The only one we should ever get is a BatchGet, for the Get // call in Decode. // Before this is called, c.doc must be set to the *pb.Document to be returned from the call. func (c *nativeCodec) interceptStream(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { return &clientStream{ctx: ctx, doc: c.doc}, nil } // clientStream is a fake client stream. It returns a single document, then terminates. type clientStream struct { ctx context.Context doc *pb.Document } func (cs *clientStream) RecvMsg(m interface{}) error { if cs.doc != nil { cs.doc.CreateTime = &ts.Timestamp{} cs.doc.UpdateTime = &ts.Timestamp{} m.(*pb.BatchGetDocumentsResponse).Result = &pb.BatchGetDocumentsResponse_Found{Found: cs.doc} cs.doc = nil return nil } return io.EOF } func (cs *clientStream) Context() context.Context { return cs.ctx } func (cs *clientStream) SendMsg(m interface{}) error { return nil } func (cs *clientStream) Header() (metadata.MD, error) { return nil, nil } func (cs *clientStream) Trailer() metadata.MD { return nil } func (cs *clientStream) CloseSend() error { return nil } // Encode a Go value into a Firestore proto document. func (c *nativeCodec) Encode(x interface{}) (*pb.Document, error) { _, err := c.client.Collection("C").Doc("D").Create(context.Background(), x) if err != nil { return nil, err } return c.doc, nil } // Decode value, which must be a *pb.Document, into dest. func (c *nativeCodec) Decode(value *pb.Document, dest interface{}) error { c.doc = value docsnap, err := c.client.Collection("C").Doc("D").Get(context.Background()) if err != nil { return err } return docsnap.DataTo(dest) } func TestNativeCodec(t *testing.T) { nc, err := newNativeCodec() if err != nil { t.Fatal(err) } type S struct { A int } want := S{3} fields, err := nc.Encode(&want) if err != nil { t.Fatal(err) } var got S if err := nc.Decode(fields, &got); err != nil { t.Fatal(err) } if !cmp.Equal(got, want) { t.Errorf("got %+v, want %+v", got, want) } } go-cloud-0.20.0/docstore/gcpfirestore/query.go000066400000000000000000000245601367004507500213320ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // TODO(jba): figure out how to get filters with uints to work: since they are represented as // int64s, the sign is wrong. package gcpfirestore import ( "context" "fmt" "math" "path" "reflect" "strings" "time" "github.com/golang/protobuf/ptypes/wrappers" "gocloud.dev/docstore/driver" "gocloud.dev/internal/gcerr" pb "google.golang.org/genproto/googleapis/firestore/v1" ) func (c *collection) RunGetQuery(ctx context.Context, q *driver.Query) (driver.DocumentIterator, error) { return c.newDocIterator(ctx, q) } func (c *collection) newDocIterator(ctx context.Context, q *driver.Query) (*docIterator, error) { sq, localFilters, err := c.queryToProto(q) if err != nil { return nil, err } req := &pb.RunQueryRequest{ Parent: path.Dir(c.collPath), QueryType: &pb.RunQueryRequest_StructuredQuery{sq}, } if q.BeforeQuery != nil { if err := q.BeforeQuery(driver.AsFunc(req)); err != nil { return nil, err } } ctx, cancel := context.WithCancel(ctx) sc, err := c.client.RunQuery(ctx, req) if err != nil { cancel() return nil, err } return &docIterator{ streamClient: sc, nameField: c.nameField, revField: c.opts.RevisionField, localFilters: localFilters, cancel: cancel, }, nil } //////////////////////////////////////////////////////////////// // The code below is adapted from cloud.google.com/go/firestore. type docIterator struct { streamClient pb.Firestore_RunQueryClient nameField, revField string localFilters []driver.Filter // We call cancel to make sure the stream client doesn't leak resources. // We don't need to call it if Recv() returns a non-nil error. // See https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. cancel func() } func (it *docIterator) Next(ctx context.Context, doc driver.Document) error { res, err := it.nextResponse(ctx) if err != nil { return err } return decodeDoc(res.Document, doc, it.nameField, it.revField) } func (it *docIterator) nextResponse(ctx context.Context) (*pb.RunQueryResponse, error) { for { res, err := it.streamClient.Recv() if err != nil { return nil, err } // No document => partial progress; keep receiving. if res.Document == nil { continue } match, err := it.evaluateLocalFilters(res.Document) if err != nil { return nil, err } if match { return res, nil } } } // Report whether the filters are true of the document. func (it *docIterator) evaluateLocalFilters(pdoc *pb.Document) (bool, error) { if len(it.localFilters) == 0 { return true, nil } // TODO(jba): optimization: evaluate the filter directly on the proto document, without decoding. m := map[string]interface{}{} doc, err := driver.NewDocument(m) if err != nil { return false, err } if err := decodeDoc(pdoc, doc, it.nameField, it.revField); err != nil { return false, err } for _, f := range it.localFilters { if !evaluateFilter(f, doc) { return false, nil } } return true, nil } func evaluateFilter(f driver.Filter, doc driver.Document) bool { val, err := doc.Get(f.FieldPath) if err != nil { // Treat a missing field as false. return false } // Compare times. if t1, ok := val.(time.Time); ok { if t2, ok := f.Value.(time.Time); ok { return applyComparison(f.Op, driver.CompareTimes(t1, t2)) } else { return false } } lhs := reflect.ValueOf(val) rhs := reflect.ValueOf(f.Value) if lhs.Kind() == reflect.String { if rhs.Kind() != reflect.String { return false } return applyComparison(f.Op, strings.Compare(lhs.String(), rhs.String())) } cmp, err := driver.CompareNumbers(lhs, rhs) if err != nil { return false } return applyComparison(f.Op, cmp) } // op is one of the five permitted docstore operators ("=", "<", etc.) // c is the result of strings.Compare or the like. func applyComparison(op string, c int) bool { switch op { case driver.EqualOp: return c == 0 case ">": return c > 0 case "<": return c < 0 case ">=": return c >= 0 case "<=": return c <= 0 default: panic("bad op") } } func (it *docIterator) Stop() { it.cancel() } func (it *docIterator) As(i interface{}) bool { p, ok := i.(*pb.Firestore_RunQueryClient) if !ok { return false } *p = it.streamClient return true } // Converts the query to a Firestore proto. Also returns filters that need to be // evaluated on the client. func (c *collection) queryToProto(q *driver.Query) (*pb.StructuredQuery, []driver.Filter, error) { // The collection ID is the last component of the collection path. collID := path.Base(c.collPath) p := &pb.StructuredQuery{ From: []*pb.StructuredQuery_CollectionSelector{{CollectionId: collID}}, } if len(q.FieldPaths) > 0 { p.Select = &pb.StructuredQuery_Projection{} for _, fp := range q.FieldPaths { p.Select.Fields = append(p.Select.Fields, fieldRef(fp)) } } if q.Limit > 0 { p.Limit = &wrappers.Int32Value{Value: int32(q.Limit)} } // TODO(jba): make sure we retrieve the fields needed for local filters. sendFilters, localFilters := splitFilters(q.Filters) if len(localFilters) > 0 && !c.opts.AllowLocalFilters { return nil, nil, gcerr.Newf(gcerr.InvalidArgument, nil, "query requires local filters; set Options.AllowLocalFilters to true to enable") } // If there is only one filter, use it directly. Otherwise, construct // a CompositeFilter. var pfs []*pb.StructuredQuery_Filter for _, f := range sendFilters { pf, err := c.filterToProto(f) if err != nil { return nil, nil, err } pfs = append(pfs, pf) } if len(pfs) == 1 { p.Where = pfs[0] } else if len(pfs) > 1 { p.Where = &pb.StructuredQuery_Filter{ FilterType: &pb.StructuredQuery_Filter_CompositeFilter{&pb.StructuredQuery_CompositeFilter{ Op: pb.StructuredQuery_CompositeFilter_AND, Filters: pfs, }}, } } if q.OrderByField != "" { // TODO(jba): reorder filters so order-by one is first of inequalities? // TODO(jba): see if it's OK if filter inequality direction differs from sort direction. fref := []string{q.OrderByField} if q.OrderByField == c.nameField { fref[0] = "__name__" } var dir pb.StructuredQuery_Direction if q.OrderAscending { dir = pb.StructuredQuery_ASCENDING } else { dir = pb.StructuredQuery_DESCENDING } p.OrderBy = []*pb.StructuredQuery_Order{{Field: fieldRef(fref), Direction: dir}} } // TODO(jba): cursors (start/end) return p, localFilters, nil } // splitFilters separates the list of query filters into those we can send to the Firestore service, // and those we must evaluate here on the client. func splitFilters(fs []driver.Filter) (sendToFirestore, evaluateLocally []driver.Filter) { // Enforce that only one field can have an inequality. var rangeFP []string for _, f := range fs { if f.Op == driver.EqualOp { sendToFirestore = append(sendToFirestore, f) } else { if rangeFP == nil || driver.FieldPathsEqual(rangeFP, f.FieldPath) { // Multiple inequality filters on the same field are OK. rangeFP = f.FieldPath sendToFirestore = append(sendToFirestore, f) } else { evaluateLocally = append(evaluateLocally, f) } } } return sendToFirestore, evaluateLocally } func (c *collection) filterToProto(f driver.Filter) (*pb.StructuredQuery_Filter, error) { // Treat filters on the name field specially. if c.nameField != "" && driver.FieldPathEqualsField(f.FieldPath, c.nameField) { v := reflect.ValueOf(f.Value) if v.Kind() != reflect.String { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "name field filter value %v of type %[1]T is not a string", f.Value) } return newFieldFilter([]string{"__name__"}, f.Op, &pb.Value{ValueType: &pb.Value_ReferenceValue{c.collPath + "/" + v.String()}}) } // "= nil" and "= NaN" are handled specially. if uop, ok := unaryOpFor(f.Value); ok { if f.Op != driver.EqualOp { return nil, fmt.Errorf("firestore: must use '=' when comparing %v", f.Value) } return &pb.StructuredQuery_Filter{ FilterType: &pb.StructuredQuery_Filter_UnaryFilter{ UnaryFilter: &pb.StructuredQuery_UnaryFilter{ OperandType: &pb.StructuredQuery_UnaryFilter_Field{ Field: fieldRef(f.FieldPath), }, Op: uop, }, }, }, nil } pv, err := encodeValue(f.Value) if err != nil { return nil, err } return newFieldFilter(f.FieldPath, f.Op, pv) } func unaryOpFor(value interface{}) (pb.StructuredQuery_UnaryFilter_Operator, bool) { switch { case value == nil: return pb.StructuredQuery_UnaryFilter_IS_NULL, true case isNaN(value): return pb.StructuredQuery_UnaryFilter_IS_NAN, true default: return pb.StructuredQuery_UnaryFilter_OPERATOR_UNSPECIFIED, false } } func isNaN(x interface{}) bool { switch x := x.(type) { case float32: return math.IsNaN(float64(x)) case float64: return math.IsNaN(x) default: return false } } func fieldRef(fp []string) *pb.StructuredQuery_FieldReference { return &pb.StructuredQuery_FieldReference{FieldPath: toServiceFieldPath(fp)} } func newFieldFilter(fp []string, op string, val *pb.Value) (*pb.StructuredQuery_Filter, error) { var fop pb.StructuredQuery_FieldFilter_Operator switch op { case "<": fop = pb.StructuredQuery_FieldFilter_LESS_THAN case "<=": fop = pb.StructuredQuery_FieldFilter_LESS_THAN_OR_EQUAL case ">": fop = pb.StructuredQuery_FieldFilter_GREATER_THAN case ">=": fop = pb.StructuredQuery_FieldFilter_GREATER_THAN_OR_EQUAL case driver.EqualOp: fop = pb.StructuredQuery_FieldFilter_EQUAL // TODO(jba): can we support array-contains portably? // case "array-contains": // fop = pb.StructuredQuery_FieldFilter_ARRAY_CONTAINS default: return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "invalid operator: %q", op) } return &pb.StructuredQuery_Filter{ FilterType: &pb.StructuredQuery_Filter_FieldFilter{ FieldFilter: &pb.StructuredQuery_FieldFilter{ Field: fieldRef(fp), Op: fop, Value: val, }, }, }, nil } func (c *collection) QueryPlan(q *driver.Query) (string, error) { return "unknown", nil } go-cloud-0.20.0/docstore/gcpfirestore/query_test.go000066400000000000000000000136061367004507500223700ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpfirestore import ( "math" "testing" "time" "github.com/golang/protobuf/proto" "github.com/google/go-cmp/cmp" "gocloud.dev/docstore/driver" "gocloud.dev/docstore/drivertest" pb "google.golang.org/genproto/googleapis/firestore/v1" ) func TestFilterToProto(t *testing.T) { c := &collection{nameField: "name", collPath: "collPath"} for _, test := range []struct { in driver.Filter want *pb.StructuredQuery_Filter }{ { driver.Filter{[]string{"a"}, ">", 1}, &pb.StructuredQuery_Filter{FilterType: &pb.StructuredQuery_Filter_FieldFilter{ FieldFilter: &pb.StructuredQuery_FieldFilter{ Field: &pb.StructuredQuery_FieldReference{FieldPath: "a"}, Op: pb.StructuredQuery_FieldFilter_GREATER_THAN, Value: &pb.Value{ValueType: &pb.Value_IntegerValue{1}}, }, }}, }, { driver.Filter{[]string{"a"}, driver.EqualOp, nil}, &pb.StructuredQuery_Filter{FilterType: &pb.StructuredQuery_Filter_UnaryFilter{ UnaryFilter: &pb.StructuredQuery_UnaryFilter{ OperandType: &pb.StructuredQuery_UnaryFilter_Field{ Field: &pb.StructuredQuery_FieldReference{FieldPath: "a"}, }, Op: pb.StructuredQuery_UnaryFilter_IS_NULL, }, }}, }, { driver.Filter{[]string{"a"}, driver.EqualOp, math.NaN()}, &pb.StructuredQuery_Filter{FilterType: &pb.StructuredQuery_Filter_UnaryFilter{ UnaryFilter: &pb.StructuredQuery_UnaryFilter{ OperandType: &pb.StructuredQuery_UnaryFilter_Field{ Field: &pb.StructuredQuery_FieldReference{FieldPath: "a"}, }, Op: pb.StructuredQuery_UnaryFilter_IS_NAN, }, }}, }, { driver.Filter{[]string{"name"}, "<", "foo"}, &pb.StructuredQuery_Filter{FilterType: &pb.StructuredQuery_Filter_FieldFilter{ FieldFilter: &pb.StructuredQuery_FieldFilter{ Field: &pb.StructuredQuery_FieldReference{FieldPath: "__name__"}, Op: pb.StructuredQuery_FieldFilter_LESS_THAN, Value: &pb.Value{ValueType: &pb.Value_ReferenceValue{"collPath/foo"}}, }, }}, }, } { got, err := c.filterToProto(test.in) if err != nil { t.Fatal(err) } if diff := cmp.Diff(got, test.want, cmp.Comparer(proto.Equal)); diff != "" { t.Errorf("%+v: %s", test.in, diff) } } } func TestSplitFilters(t *testing.T) { aEqual := driver.Filter{[]string{"a"}, "=", 1} aLess := driver.Filter{[]string{"a"}, "<", 1} aGreater := driver.Filter{[]string{"a"}, ">", 1} bEqual := driver.Filter{[]string{"b"}, "=", 1} bLess := driver.Filter{[]string{"b"}, "<", 1} for _, test := range []struct { in []driver.Filter wantSend, wantLocal []driver.Filter }{ { in: nil, wantSend: nil, wantLocal: nil, }, { in: []driver.Filter{aEqual}, wantSend: []driver.Filter{aEqual}, wantLocal: nil, }, { in: []driver.Filter{aLess}, wantSend: []driver.Filter{aLess}, wantLocal: nil, }, { in: []driver.Filter{aLess, aGreater}, wantSend: []driver.Filter{aLess, aGreater}, wantLocal: nil, }, { in: []driver.Filter{aLess, bEqual, aGreater}, wantSend: []driver.Filter{aLess, bEqual, aGreater}, wantLocal: nil, }, { in: []driver.Filter{aLess, bLess, aGreater}, wantSend: []driver.Filter{aLess, aGreater}, wantLocal: []driver.Filter{bLess}, }, { in: []driver.Filter{aEqual, aLess, bLess, aGreater, bEqual}, wantSend: []driver.Filter{aEqual, aLess, aGreater, bEqual}, wantLocal: []driver.Filter{bLess}, }, } { gotSend, gotLocal := splitFilters(test.in) if diff := cmp.Diff(gotSend, test.wantSend); diff != "" { t.Errorf("%v, send:\n%s", test.in, diff) } if diff := cmp.Diff(gotLocal, test.wantLocal); diff != "" { t.Errorf("%v, local:\n%s", test.in, diff) } } } func TestEvaluateFilter(t *testing.T) { m := map[string]interface{}{ "i": 32, "f": 5.5, "f2": 5.0, "s": "32", "t": time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC), "b": true, "mi": int64(math.MaxInt64), } doc := drivertest.MustDocument(m) for _, test := range []struct { field, op string value interface{} want bool }{ // Firestore compares numbers to each other ignoring type (int vs. float). // Just a few simple tests here; see driver.TestCompareNumbers for more. {"i", "=", 32, true}, {"i", ">", 32, false}, {"i", "<", 32, false}, {"i", "=", 32.0, true}, {"i", ">", 32.0, false}, {"i", "<", 32.0, false}, {"f", "=", 5.5, true}, {"f", "<", 5.5, false}, {"f2", "=", 5, true}, {"f2", ">", 5, false}, // Firestore compares strings to each other, but not to numbers. {"s", "=", "32", true}, {"s", ">", "32", false}, {"s", "<", "32", false}, {"s", ">", "3", true}, {"i", "=", "32", false}, {"i", ">", "32", false}, {"i", "<", "32", false}, {"f", "=", "5.5", false}, {"f", ">", "5.5", false}, {"f", "<", "5.5", false}, // Firestore compares times to each other. {"t", "<", time.Date(2014, 1, 1, 0, 0, 0, 0, time.UTC), true}, // Comparisons with other types fail. {"b", "=", "true", false}, {"b", ">", "true", false}, {"b", "<", "true", false}, {"t", "=", 0, false}, {"t", ">", 0, false}, {"t", "<", 0, false}, } { f := driver.Filter{FieldPath: []string{test.field}, Op: test.op, Value: test.value} got := evaluateFilter(f, doc) if got != test.want { t.Errorf("%s %s %v: got %t, want %t", test.field, test.op, test.value, got, test.want) } } } go-cloud-0.20.0/docstore/gcpfirestore/testdata/000077500000000000000000000000001367004507500214405ustar00rootroot00000000000000go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/000077500000000000000000000000001367004507500245325ustar00rootroot00000000000000go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/ActionsOnStructNoRev.replay000066400000000000000000000075511367004507500320340ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testSerializeRevision DocstoreRevisionX x "  ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)s" aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testSerializeRevisionOI 6type.googleapis.com/google.firestore.v1.CommitResponse  ((%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)e c Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/putandupdate I%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" g \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/createandreplace I\V 6type.googleapis.com/google.firestore.v1.CommitResponse M M(\V 6type.googleapis.com/google.firestore.v1.CommitResponse p p(40/google.firestore.v1.Firestore/BatchGetDocuments7 @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/createandreplaceXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/putandupdate(  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Ƚ  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/createandreplace I p" p(  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Ƚ } Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/putandupdate I M" M(  ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n I" c Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/putandupdate I%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" g \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/createandreplace I^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (]W 6type.googleapis.com/google.firestore.v1.CommitResponse p (40/google.firestore.v1.Firestore/BatchGetDocuments< @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/createandreplaceXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/putandupdate I( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/createandreplace I p" p( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"  ~ Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/putandupdate I M" ( (go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/ActionsWithCompositeID.replay000066400000000000000000000144631367004507500323140ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2(/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph Playersteph DocstoreRevisionX Game  Days Gone TimeR Score "  ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|stephPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat TimeR DocstoreRevisionX GamePraise All Monsters Playerpat Score1  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel Playermel Score< TimeR DocstoreRevisionX GamePraise All Monsters  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy ScoreQ TimeR DocstoreRevisionX GamePraise All Monsters Playerandy  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran GamePraise All Monsters Playerfran Score! TimeR DocstoreRevisionX  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat TimeR DocstoreRevisionX Game  Zombie DMV Playerpat Scorex  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Game  Zombie DMV Player billie Scoreo TimeR DocstoreRevisionX  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel Score TimeR DocstoreRevisionX Game  Zombie DMV Playermel  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran Playerfran Score! TimeR DocstoreRevisionX Game  Zombie DMV 6type.googleapis.com/google.firestore.v1.CommitResponse                 (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|patcprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|meldprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andydprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|franZprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billieZprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran( I Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy GamePraise All Monsters TimeR ScoreQ Playerandy DocstoreRevisionX " ( I Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran GamePraise All Monsters TimeR Score! Playerfran DocstoreRevisionX " ( G Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel DocstoreRevisionX GamePraise All Monsters TimeR Score< Playermel " ( G Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat DocstoreRevisionX GamePraise All Monsters TimeR Score1 Playerpat " ( ; Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Game  Zombie DMV TimeR Scoreo Player billie DocstoreRevisionX " ( 7 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran TimeR Score! Playerfran DocstoreRevisionX Game  Zombie DMV " ( 6 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel DocstoreRevisionX Game  Zombie DMV TimeR Score Playermel " ( 5 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat Playerpat DocstoreRevisionX Game  Zombie DMV TimeR Scorex " (  ( go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/As/000077500000000000000000000000001367004507500250755ustar00rootroot00000000000000go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/As/verify_As.replay000066400000000000000000000161261367004507500302500ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2(A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy Playerandy DocstoreRevisionX GamePraise All Monsters TimeR ScoreQ "  (A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran DocstoreRevisionX GamePraise All Monsters TimeR Score! Playerfran "  (? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel TimeR Score< Playermel DocstoreRevisionX GamePraise All Monsters "  (? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat DocstoreRevisionX GamePraise All Monsters TimeR Score1 Playerpat "  (3 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie TimeR Scoreo Player billie DocstoreRevisionX Game  Zombie DMV "  (/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran Playerfran DocstoreRevisionX Game  Zombie DMV TimeR Score! "  (. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel DocstoreRevisionX Game  Zombie DMV TimeR Score Playermel "  (- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat DocstoreRevisionX Game  Zombie DMV TimeR Scorex Playerpat "  ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)v" dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)u" cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)u" cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)o" ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l" Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)v" dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l" Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|melPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  晆( PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ʗ(PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ؛(PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ͠(PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ( +'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestn ;projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2 Game  Days Gone(+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequeste ;projects/go-cloud-test-216917/databases/(default)/documents&docstore-test-2 Score2(a%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph Score TimeR DocstoreRevisionX Game  Days Gone Playersteph\V 6type.googleapis.com/google.firestore.v1.CommitResponse b b( a%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph Score TimeR DocstoreRevisionX Game  Days Gone Playersteph %type.googleapis.com/google.rpc.StatustDocument already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:9147::]:4225 : APP_ERROR(14) Document already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph ("verify_As_returns_false_when_passed_nil.replay000066400000000000000000000047511367004507500363500ustar00rootroot00000000000000go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/AsRPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2(- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph Playersteph DocstoreRevisionX Game  Days Gone TimeR Score b" b ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l"  b[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|stephPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  Λ(+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestn ;projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2 Game  Days Gone(+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequeste ;projects/go-cloud-test-216917/databases/(default)/documents&docstore-test-2 Score2( a%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph DocstoreRevisionX Game  Days Gone Playersteph Score TimeR^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( a%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph Score TimeR DocstoreRevisionX Game  Days Gone Playersteph %type.googleapis.com/google.rpc.StatustDocument already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:b2a5::]:4451 : APP_ERROR(14) Document already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Days Gone|steph ( go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/BeforeDo.replay000066400000000000000000000050071367004507500274370ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(PJ 8type.googleapis.com/google.firestore.v1.RunQueryResponse ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)`" Z Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testBeforeDo^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)`" Z Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testBeforeDo^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)\ Z Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testBeforeDo^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n a" c Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testBeforeDo a\V 6type.googleapis.com/google.firestore.v1.CommitResponse * *( 40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testBeforeDo(  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" M ~ Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testBeforeDo a " *(  ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)ZXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testBeforeDoOI 6type.googleapis.com/google.firestore.v1.CommitResponse  Ƿn(go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/BeforeQuery.replay000066400000000000000000000011271367004507500302010ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(PJ 8type.googleapis.com/google.firestore.v1.RunQueryResponse ( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(PJ 8type.googleapis.com/google.firestore.v1.RunQueryResponse ( (go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/Create.replay000066400000000000000000000357251367004507500271670ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(PJ 8type.googleapis.com/google.firestore.v1.RunQueryResponse ނ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" | Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap b DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Ԣ  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap DocstoreRevisionX b " ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)y" s Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap DocstoreRevisionX %type.googleapis.com/google.rpc.StatusrDocument already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:a023::]:4490 : APP_ERROR(14) Document already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap ( 6%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/52fdfc07-2182-454f-963f-5f0f9a621d72 b DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Џ Џ( 40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/52fdfc07-2182-454f-963f-5f0f9a621d72(  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/52fdfc07-2182-454f-963f-5f0f9a621d72 b DocstoreRevisionX Џ" Џ( (d%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct MX DocstoreRevisionX I St B EtagX U F \V 6type.googleapis.com/google.firestore.v1.CommitResponse ^ ^(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct(9 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct B F  U I St EtagX MX DocstoreRevisionX ^" ^( (x%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/9566c74d-1003-4c4d-bbbb-0407d1e2c649 DocstoreRevisionX MX U B EtagX I F  St^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ਿ ਿ(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/9566c74d-1003-4c4d-bbbb-0407d1e2c649(O Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/9566c74d-1003-4c4d-bbbb-0407d1e2c649 U I St EtagX MX DocstoreRevisionX B F  ਿ" ਿ( (x%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/81855ad8-681d-4d86-91e9-1e00167939cb MX DocstoreRevisionX EtagX St B I U F ^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/81855ad8-681d-4d86-91e9-1e00167939cb(!O Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/81855ad8-681d-4d86-91e9-1e00167939cb DocstoreRevisionX B F  U I St EtagX MX " (! (!+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(% 8type.googleapis.com/google.firestore.v1.RunQueryResponse  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/52fdfc07-2182-454f-963f-5f0f9a621d72 DocstoreRevisionX b Џ" Џ (%F 8type.googleapis.com/google.firestore.v1.RunQueryResponse  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/81855ad8-681d-4d86-91e9-1e00167939cb EtagX MX DocstoreRevisionX B F  U I St "  (%F 8type.googleapis.com/google.firestore.v1.RunQueryResponse  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/9566c74d-1003-4c4d-bbbb-0407d1e2c649 MX DocstoreRevisionX B F  U I St EtagX ਿ" ਿ (% 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap b DocstoreRevisionX "  (%0 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct MX DocstoreRevisionX B F  U I St EtagX ^" ^ (% (%%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/81855ad8-681d-4d86-91e9-1e00167939cb%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" ਿpprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/9566c74d-1003-4c4d-bbbb-0407d1e2c649%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m"  ^\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStructj%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)rpprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/52fdfc07-2182-454f-963f-5f0f9a621d72[Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMapOI 6type.googleapis.com/google.firestore.v1.CommitResponse  )(-OI 6type.googleapis.com/google.firestore.v1.CommitResponse  ر6(/QK 6type.googleapis.com/google.firestore.v1.CommitResponse  :(0OI 6type.googleapis.com/google.firestore.v1.CommitResponse  9(.%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)v" p Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap b EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ȏ ȏ(540/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap(7 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap EtagX b ȏ" ȏ(7 (7%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" g Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap EtagX %type.googleapis.com/google.rpc.StatusrDocument already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8a0f::]:4228 : APP_ERROR(14) Document already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap (;*%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/6694d2c4-22ac-4208-a007-2939487f6999 EtagX b^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (=40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/6694d2c4-22ac-4208-a007-2939487f6999(? Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ꏈ  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/6694d2c4-22ac-4208-a007-2939487f6999 b EtagX " (? (?d%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct MX DocstoreRevisionX F  St EtagX I U B^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (C40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct(E: Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" 5  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct EtagX MX DocstoreRevisionX B F  U I St " (E (Ex%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/eb9d18a4-4784-445d-87f3-c67cf22746e9 U F  B MX St DocstoreRevisionX EtagX I^X 6type.googleapis.com/google.firestore.v1.CommitResponse  诐 诐(I40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/eb9d18a4-4784-445d-87f3-c67cf22746e9(KO Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/eb9d18a4-4784-445d-87f3-c67cf22746e9 U I St EtagX MX DocstoreRevisionX B F  诐" 诐(K (Kx%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/95af5a25-3679-41ba-a2ff-6cd471c483f1 F  B MX DocstoreRevisionX I St EtagX U^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (O40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/95af5a25-3679-41ba-a2ff-6cd471c483f1(QO Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ޟ  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/95af5a25-3679-41ba-a2ff-6cd471c483f1 St EtagX MX DocstoreRevisionX B F  U I " (Q (Qgo-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/Data.replay000066400000000000000000000351561367004507500266330ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap EtagX sc ΂"  -(? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct MX B F  I EtagX sc U Sta DocstoreRevisionX "  -( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap m cC n @ aX EtagX "  -(  8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapInc m n @ i  @ aA EtagX  " ԘB -( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapWrt aX EtagX m "  -(+ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct DocstoreRevisionX F ? B U Ststr EtagX MX "  -(6 8type.googleapis.com/google.firestore.v1.RunQueryResponse  _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructInc U I Stst EtagX MX DocstoreRevisionX F ? B б"  -(. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructWrt DocstoreRevisionX B F  U Ststr EtagX MX " غ -( ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)p" ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n" \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)q" _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructInc%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)][projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap[Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap^\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapInc^\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapWrt %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)q" غ_projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructWrtOI 6type.googleapis.com/google.firestore.v1.CommitResponse  b( OI 6type.googleapis.com/google.firestore.v1.CommitResponse  ٨d( OI 6type.googleapis.com/google.firestore.v1.CommitResponse  e(UO 6type.googleapis.com/google.firestore.v1.CommitResponse  g(OI 6type.googleapis.com/google.firestore.v1.CommitResponse  x(%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l j Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ȱ ȱ(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val  ȱ" ȱ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l j Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ܟ ܟ(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val  ȱ" ܟ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l j Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ("40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData($ Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Ȧ  Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val  ȱ" ($ ($%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l j Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ((40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(* Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val  ȱ" (* (*%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l j Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val \V 6type.googleapis.com/google.firestore.v1.CommitResponse  (.40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(0 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ؂;  Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val  ȱ" (0 (0%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)c a Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val\V 6type.googleapis.com/google.firestore.v1.CommitResponse нo нo(440/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(6 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" 蚅 | Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ȱ" нo(6 (6%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)c a Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (:40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(< Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"  } Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ȱ" (< (<%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)c a Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ҙ Ҙ(@40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(B Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" К } Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ȱ" Ҙ(B (B%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)c a Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ì Ì(F40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(H Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"  } Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val  ȱ" Ì(H (H%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)c a Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val@^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (L40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(N Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"  } Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val@ ȱ" (N (N%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)j h Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val  @\V 6type.googleapis.com/google.firestore.v1.CommitResponse ҿ ҿ(R40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(T Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" 6  Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val  @ ȱ" ҿ(T (T%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)g e Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val\V 6type.googleapis.com/google.firestore.v1.CommitResponse X X(X40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData(Z Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" x  Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ȱ" X(Z (Zgo-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/Delete.replay000066400000000000000000000343421367004507500271600ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(! 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMap i_ EtagX s a string f fffff&@@! m2 aone btwo z" z (% 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP EtagX s a string f fffff&@@! m2 aone btwo i_ "  (Q 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct DocstoreRevisionX B F fffff&@@ U I_ St a string EtagX! M2 aone btwo "  (S 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFP F fffff&@@ U I_ St a string EtagX! M2 aone btwo DocstoreRevisionX B "  (Q 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWC EtagX! M2 aone btwo DocstoreRevisionX B F fffff&@@ U I_ St a string "  ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)k" Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFPO%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)XVprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapZXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l"  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWCPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ( PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  쮫( PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ( RL 6type.googleapis.com/google.firestore.v1.CommitResponse  ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)u s Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ߿ ߿(%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)k" ߿Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMapPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponseh" Ȫ.Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)~ | Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap b DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ī ī(%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)k" ߿Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMaph %type.googleapis.com/google.rpc.Status athe stored version (1591684138359728) does not match the required base version (1591684137865071) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8a03::]:4323 : APP_ERROR(15) the stored version (1591684138359728) does not match the required base version (1591684137865071) (`%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct EtagX U St MX I F  B DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n" \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStructPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  Р(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct(! Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsel" \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct(! (!`%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct St MX DocstoreRevisionX EtagX I F  B U^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ћ Ћ(% %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n" \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStructh %type.googleapis.com/google.rpc.Status athe stored version (1591684138829691) does not match the required base version (1591684138559971) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:a184::]:4294 : APP_ERROR(15) the stored version (1591684138829691) does not match the required base version (1591684138559971) ('%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)ZXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExistPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  Ϫ()+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(+ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap DocstoreRevisionX b ī" ī -(+1 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct DocstoreRevisionX B F  U I St EtagX MX Ћ" Ћ -(+ (+%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)[Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n" Ћ\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStructOI 6type.googleapis.com/google.firestore.v1.CommitResponse  N(0OI 6type.googleapis.com/google.firestore.v1.CommitResponse  Ɗw(1%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)i g Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ӛ Ӛ(4%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)k" ӚYprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMapPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (640/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap(8 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsei" Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap(8 (8 %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)r p Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMap b EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ㆡ ㆡ(<%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)k" ӚYprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteMaph %type.googleapis.com/google.rpc.Status athe stored version (1591684139606188) does not match the required base version (1591684139324323) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8c65::]:4192 : APP_ERROR(15) the stored version (1591684139606188) does not match the required base version (1591684139324323) (>`%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct St B U F  MX DocstoreRevisionX EtagX I^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (@ %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n" \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStructPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (B40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct(D Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsel" \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct(D (D`%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStruct I U MX EtagX F  St B DocstoreRevisionX\V 6type.googleapis.com/google.firestore.v1.CommitResponse 蜄& 蜄&(H %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n" \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDeleteStructh %type.googleapis.com/google.rpc.Status athe stored version (1591684140079761) does not match the required base version (1591684139758367) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8d47::]:4354 : APP_ERROR(15) the stored version (1591684140079761) does not match the required base version (1591684139758367) (J%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)ZXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExistOI 6type.googleapis.com/google.firestore.v1.CommitResponse  R(Lgo-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/ExampleInDoc.replay000066400000000000000000000102471367004507500302640ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/createandreplace I p" p 葔( 8type.googleapis.com/google.firestore.v1.RunQueryResponse ~ Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/putandupdate I M"  葔( (U%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)^\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/createandreplaceZXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/putandupdateQK 6type.googleapis.com/google.firestore.v1.CommitResponse  E(R%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Heart of a Dog pub_years J  6 author,2*  First Mikhail  Last Bulgakov\%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Master and Margarita6 author,2*  Last Bulgakov  First Mikhail pub_years J  \V 6type.googleapis.com/google.firestore.v1.CommitResponse y y(^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( 40/google.firestore.v1.Firestore/BatchGetDocumentsE @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Master and Margarita^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Heart of a Dog( + Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" мۭ  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Heart of a Dog6 author,2*  First Mikhail  Last Bulgakov pub_years J   y" y( 3 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" мۭ  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Master and Margarita pub_years J  6 author,2*  First Mikhail  Last Bulgakov " (  ( +'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestt ;projects/go-cloud-test-216917/databases/(default)/documents5docstore-test-1   author.Last Bulgakov(" 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Heart of a Dog6 author,2*  First Mikhail  Last Bulgakov pub_years J   y" y (* 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Master and Margarita6 author,2*  Last Bulgakov  First Mikhail pub_years J   "  ( (c%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)fdprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Master and Margarita`^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/The Heart of a DogRL 6type.googleapis.com/google.firestore.v1.CommitResponse  (go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/Get.replay000066400000000000000000000415711367004507500264770ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceMap EtagX sb "  (3 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceStruct Stb EtagX MX DocstoreRevisionX B F  U I h" Р ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa EtagR Ɨ Ɨ" ּ (? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct I Sta Etag R ˌ@ MX DocstoreRevisionX B F  U ˌ@"  ( ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)o" Р]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceStruct %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)p" ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStructV%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)\Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceMap][projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMapPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  Ȃ(RL 6type.googleapis.com/google.firestore.v1.CommitResponse  ( PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ʔ( ]%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMap s a string i_ f fffff&@@! m2 btwo aone DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ƚ Ƚ(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMap(7 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMap! m2 btwo aone i_ s a string DocstoreRevisionX f fffff&@@ Ƚ" Ƚ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct B! M2 btwo aone EtagX I_ St a string DocstoreRevisionX U F fffff&@@\V 6type.googleapis.com/google.firestore.v1.CommitResponse D D(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct(W Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" h  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct I_ St a string EtagX! M2 btwo aone DocstoreRevisionX B F fffff&@@ U D" D( (_%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP! m2 aone btwo DocstoreRevisionX s a string i_ f fffff&@@^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP f m.b DocstoreRevision( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP DocstoreRevisionX f fffff&@@ m2 btwo " ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFP St a string B DocstoreRevisionX EtagX I_ F fffff&@@! M2 aone btwo U^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ۇ ۇ( 40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFP St M.a DocstoreRevision(" Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Ʋ  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFP St a string M2 aone DocstoreRevisionX ۇ" ۇ(" ("%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWC F fffff&@@ St a string DocstoreRevisionX I_ U! M2 aone btwo B EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ѐ Ѐ(&40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWC st m.a(( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ޓ y [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWC Ѐ" Ѐ(( ((40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist(, Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponseh" Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist(, (,+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(0/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMap! m2 aone btwo i_ s a string DocstoreRevisionX f fffff&@@ Ƚ" Ƚ (01 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP! m2 btwo aone i_ s a string DocstoreRevisionX f fffff&@@ "  (0O 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct EtagX! M2 aone btwo DocstoreRevisionX B F fffff&@@ U I_ St a string D" D (0S 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFP EtagX! M2 aone btwo DocstoreRevisionX B F fffff&@@ U I_ St a string ۇ" ۇ (0S 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWC St a string EtagX! M2 aone btwo DocstoreRevisionX B F fffff&@@ U I_ Ѐ" Ѐ (0 (0%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)j"  DYprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" Ѐ[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWCO%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)XVprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapZXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" ۇ[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFPOI 6type.googleapis.com/google.firestore.v1.CommitResponse  &(8OI 6type.googleapis.com/google.firestore.v1.CommitResponse  6(9QK 6type.googleapis.com/google.firestore.v1.CommitResponse  8(:OI 6type.googleapis.com/google.firestore.v1.CommitResponse  D(;Q%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMap f fffff&@@! m2 aone btwo EtagX s a string i_\V 6type.googleapis.com/google.firestore.v1.CommitResponse z z(@40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMap(B* Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ֟  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMap s a string f fffff&@@! m2 aone btwo i_ EtagX z" z(B (B%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct St a string! M2 btwo aone I_ DocstoreRevisionX EtagX B U F fffff&@@^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (F40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct(HZ Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStruct I_ St a string EtagX! M2 aone btwo DocstoreRevisionX B F fffff&@@ U " (H (HS%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP f fffff&@@! m2 aone btwo EtagX s a string i_^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (L40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP f m.b Etag(N Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ߝ  Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetMapFP EtagX f fffff&@@ m2 btwo " (N (N%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFP EtagX F fffff&@@ St a string! M2 btwo aone U B I_ DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (R40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFP St M.a Etag(T  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructFP St a string EtagX M2 aone " (T (T%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWC! M2 btwo aone DocstoreRevisionX I_ B EtagX U F fffff&@@ St a string\V 6type.googleapis.com/google.firestore.v1.CommitResponse  (X40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWC st m.a(Z Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" T w [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testGetStructWC " (Z (Z40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist(^ Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponseg" tXprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist(^ (^go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/GetQuery.replay000066400000000000000000001003401367004507500275130ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2(@ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy DocstoreRevisionX GamePraise All Monsters TimeR ScoreQ Playerandy "  w(@ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran TimeR Score! Playerfran DocstoreRevisionX GamePraise All Monsters "  w(> 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel GamePraise All Monsters TimeR Score< Playermel DocstoreRevisionX "  w(> 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat Playerpat DocstoreRevisionX GamePraise All Monsters TimeR Score1 "  w(2 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie DocstoreRevisionX Game  Zombie DMV TimeR Scoreo Player billie "  w(. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran DocstoreRevisionX Game  Zombie DMV TimeR Score! Playerfran "  w(- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel Score Playermel DocstoreRevisionX Game  Zombie DMV TimeR "  w(, 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat DocstoreRevisionX Game  Zombie DMV TimeR Scorex Playerpat "  w( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)v" dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)v" dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)u" cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m" [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)u" cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)o" ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l" Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)l" Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|patPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  Š(PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  Ȫ(PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  䣰(PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ة( PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ܲ(PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ( PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat GamePraise All Monsters Playerpat Score1 TimeR DocstoreRevisionX  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel DocstoreRevisionX GamePraise All Monsters Playermel Score< TimeR  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy ScoreQ TimeR DocstoreRevisionX GamePraise All Monsters Playerandy  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran DocstoreRevisionX GamePraise All Monsters Playerfran Score! TimeR  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat TimeR DocstoreRevisionX Game  Zombie DMV Playerpat Scorex  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Scoreo TimeR DocstoreRevisionX Game  Zombie DMV Player billie  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel Playermel Score TimeR DocstoreRevisionX Game  Zombie DMV  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran Game  Zombie DMV Playerfran Score! TimeR DocstoreRevisionX 6type.googleapis.com/google.firestore.v1.CommitResponse                 (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2(A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy DocstoreRevisionX GamePraise All Monsters TimeR ScoreQ Playerandy "  ̆(A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran GamePraise All Monsters TimeR Score! Playerfran DocstoreRevisionX "  ̆(? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel DocstoreRevisionX GamePraise All Monsters TimeR Score< Playermel "  ̆(? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat TimeR Score1 Playerpat DocstoreRevisionX GamePraise All Monsters "  ̆(3 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Scoreo Player billie DocstoreRevisionX Game  Zombie DMV TimeR "  ̆(/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran TimeR Score! Playerfran DocstoreRevisionX Game  Zombie DMV "  ̆(. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel TimeR Score Playermel DocstoreRevisionX Game  Zombie DMV "  ̆(- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat TimeR Scorex Playerpat DocstoreRevisionX Game  Zombie DMV "  ̆( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequesto ;projects/go-cloud-test-216917/databases/(default)/documents0docstore-test-2 Game  Zombie DMV()3 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Player billie DocstoreRevisionX Game  Zombie DMV TimeR Scoreo "  Ȣ()/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran TimeR Score! Playerfran DocstoreRevisionX Game  Zombie DMV "  Ȣ(). 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel TimeR Score Playermel DocstoreRevisionX Game  Zombie DMV "  Ȣ()- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat Scorex Playerpat DocstoreRevisionX Game  Zombie DMV TimeR "  Ȣ() ()+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequeste ;projects/go-cloud-test-216917/databases/(default)/documents&docstore-test-2 Scored(03 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Scoreo Player billie DocstoreRevisionX Game  Zombie DMV TimeR "  ȳ(0- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat TimeR Scorex Playerpat DocstoreRevisionX Game  Zombie DMV "  ȳ(0. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel DocstoreRevisionX Game  Zombie DMV TimeR Score Playermel "  ȳ(0 (0+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestm ;projects/go-cloud-test-216917/databases/(default)/documents.docstore-test-2 Player billie(63 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie DocstoreRevisionX Game  Zombie DMV TimeR Scoreo Player billie "  َ(6 (6+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsXdocstore-test-2C A Playerandy$" GamePraise All Monsters(:A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy DocstoreRevisionX GamePraise All Monsters TimeR ScoreQ Playerandy "  (: (:+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsDdocstore-test-2/ - Playerpat Scored(>? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat DocstoreRevisionX GamePraise All Monsters TimeR Score1 Playerpat "  (> (>+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsRdocstore-test-2= ;$" GamePraise All Monsters Score2(B> 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel TimeR Score< Playermel DocstoreRevisionX GamePraise All Monsters "  '(B@ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy TimeR ScoreQ Playerandy DocstoreRevisionX GamePraise All Monsters "  '(B (B+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsIdocstore-test-24 2 Playermel TimeR(G> 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel TimeR Score< Playermel DocstoreRevisionX GamePraise All Monsters "  I(G- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel DocstoreRevisionX Game  Zombie DMV TimeR Score Playermel "  I(G (G+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequeste ;projects/go-cloud-test-216917/databases/(default)/documents&docstore-test-2 Score2(L> 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel DocstoreRevisionX GamePraise All Monsters TimeR Score< Playermel "  p(L@ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy DocstoreRevisionX GamePraise All Monsters TimeR ScoreQ Playerandy "  p(L2 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie DocstoreRevisionX Game  Zombie DMV TimeR Scoreo Player billie "  p(L, 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat DocstoreRevisionX Game  Zombie DMV TimeR Scorex Playerpat "  p(L- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel DocstoreRevisionX Game  Zombie DMV TimeR Score Playermel "  p(L (L+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest` ;projects/go-cloud-test-216917/databases/(default)/documents!docstore-test-2" Player(TA 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy DocstoreRevisionX GamePraise All Monsters TimeR ScoreQ Playerandy "  (T3 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Player billie DocstoreRevisionX Game  Zombie DMV TimeR Scoreo "  (TA 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran GamePraise All Monsters TimeR Score! Playerfran DocstoreRevisionX "  (T/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran DocstoreRevisionX Game  Zombie DMV TimeR Score! Playerfran "  (T? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel TimeR Score< Playermel DocstoreRevisionX GamePraise All Monsters "  (T. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel Score Playermel DocstoreRevisionX Game  Zombie DMV TimeR "  (T? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat Score1 Playerpat DocstoreRevisionX GamePraise All Monsters TimeR "  (T- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat DocstoreRevisionX Game  Zombie DMV TimeR Scorex Playerpat "  (T (T+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest` ;projects/go-cloud-test-216917/databases/(default)/documents!docstore-test-2" Player(_- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat DocstoreRevisionX Game  Zombie DMV TimeR Scorex Playerpat "  (_? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat DocstoreRevisionX GamePraise All Monsters TimeR Score1 Playerpat "  (_. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel DocstoreRevisionX Game  Zombie DMV TimeR Score Playermel "  (_? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel DocstoreRevisionX GamePraise All Monsters TimeR Score< Playermel "  (_/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran Playerfran DocstoreRevisionX Game  Zombie DMV TimeR Score! "  (_A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran Playerfran DocstoreRevisionX GamePraise All Monsters TimeR Score! "  (_3 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie DocstoreRevisionX Game  Zombie DMV TimeR Scoreo Player billie "  (_A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy TimeR ScoreQ Playerandy DocstoreRevisionX GamePraise All Monsters "  (_ (_+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentscdocstore-test-2@ >$" GamePraise All Monsters Player." Player(jA 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy TimeR ScoreQ Playerandy DocstoreRevisionX GamePraise All Monsters "  荽(jA 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran DocstoreRevisionX GamePraise All Monsters TimeR Score! Playerfran "  荽(j? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel TimeR Score< Playermel DocstoreRevisionX GamePraise All Monsters "  荽(j? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat TimeR Score1 Playerpat DocstoreRevisionX GamePraise All Monsters "  荽(j (j+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentscdocstore-test-2@ >$" GamePraise All Monsters Player." Player(q? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat Score1 Playerpat DocstoreRevisionX GamePraise All Monsters TimeR "  ʓ(q? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel DocstoreRevisionX GamePraise All Monsters TimeR Score< Playermel "  ʓ(qA 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran TimeR Score! Playerfran DocstoreRevisionX GamePraise All Monsters "  ʓ(qA 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy ScoreQ Playerandy DocstoreRevisionX GamePraise All Monsters TimeR "  ʓ(q (q+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestz ;projects/go-cloud-test-216917/databases/(default)/documents; &GamePlayerDocstoreRevisiondocstore-test-2(x" 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy DocstoreRevisionX GamePraise All Monsters Playerandy "  (x" 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran GamePraise All Monsters Playerfran DocstoreRevisionX "  (x  8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel Playermel DocstoreRevisionX GamePraise All Monsters "  (x  8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat Playerpat DocstoreRevisionX GamePraise All Monsters "  (x 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie DocstoreRevisionX Game  Zombie DMV Player billie "  (x 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran DocstoreRevisionX Game  Zombie DMV Playerfran "  (x 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel DocstoreRevisionX Game  Zombie DMV Playermel "  (x 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat DocstoreRevisionX Game  Zombie DMV Playerpat "  (x (x+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsD /GamePlayerScoreDocstoreRevisiondocstore-test-2(0 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy DocstoreRevisionX GamePraise All Monsters ScoreQ Playerandy "  ؋(0 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran Score! Playerfran DocstoreRevisionX GamePraise All Monsters "  ؋(. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel Score< Playermel DocstoreRevisionX GamePraise All Monsters "  ؋(. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat DocstoreRevisionX GamePraise All Monsters Score1 Playerpat "  ؋(" 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie DocstoreRevisionX Game  Zombie DMV Scoreo Player billie "  ؋( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran Playerfran DocstoreRevisionX Game  Zombie DMV Score! "  ؋( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel Playermel DocstoreRevisionX Game  Zombie DMV Score "  ؋( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat Game  Zombie DMV Scorex Playerpat DocstoreRevisionX "  ؋( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestV ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2*(B 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy ScoreQ Playerandy DocstoreRevisionX GamePraise All Monsters TimeR "  (B 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran TimeR Score! Playerfran DocstoreRevisionX GamePraise All Monsters "  ( (go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/GetQueryKeyField.replay000066400000000000000000000207041367004507500311350ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 EtagR  s3 "  ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 EtagR μ s4 μ"  ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5 s5 EtagR  " T ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6 s6' n EtagX " ϕ ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions7 s7' EtagX "  ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions8 n  EtagX s8 " ȸ ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions7caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions8ZT 6type.googleapis.com/google.firestore.v1.CommitResponse  ȝ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)y w Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf1 aone DocstoreRevisionXy w Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf2 atwo DocstoreRevisionX{ y Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf3 DocstoreRevisionX athree~x 6type.googleapis.com/google.firestore.v1.CommitResponse>       ( +'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsydocstore-test-1db __name__R*Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf3( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf1 aone DocstoreRevisionX "  ר( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf2 atwo DocstoreRevisionX "  ר( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestm ;projects/go-cloud-test-216917/databases/(default)/documents. aDocstoreRevisiondocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf1 DocstoreRevisionX aone "  ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf2 atwo DocstoreRevisionX "  ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf3 DocstoreRevisionX athree "  ( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf1 DocstoreRevisionX aone "  П( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf2 atwo DocstoreRevisionX "  П( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf3 DocstoreRevisionX athree "  П( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)RPprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf1RPprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf2RPprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf3SM 6type.googleapis.com/google.firestore.v1.CommitResponse  (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)m k Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf1 EtagX aonem k Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf2 atwo EtagXo m Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf3 athree EtagXzt 6type.googleapis.com/google.firestore.v1.CommitResponse: P P P P(!+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsydocstore-test-1db __name__R*Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf3(# 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf1 aone EtagX P" P t(# 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf2 EtagX atwo P" P t(# (#+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequesta ;projects/go-cloud-test-216917/databases/(default)/documents" aEtagdocstore-test-1(( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf1 aone EtagX P" P ܆(( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf2 EtagX atwo P" P ܆(( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/qkf3 athree EtagX P" P ܆(( ((go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/MultipleActions.replay000066400000000000000000000666301367004507500310770ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Tprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testData val ȱ" X 覷( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)VTprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testDataPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ()%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0 s0 DocstoreRevisionX)%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1 s1 DocstoreRevisionX)%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2 DocstoreRevisionX s2)%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 s3 DocstoreRevisionX)%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 DocstoreRevisionX s4)%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5 s5 DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ȍ Ȍ(^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( ^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( ^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( ^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( B%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" Ȍ  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0 s0'" DocstoreRevisionR ȌB%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2 s2'" DocstoreRevisionR B%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1" DocstoreRevisionR  s1'A%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 s3" DocstoreRevisionR A%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 s4" DocstoreRevisionR A%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5" DocstoreRevisionR  s5=%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6 DocstoreRevisionX s6  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions7 s7 DocstoreRevisionX  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions8 DocstoreRevisionX s8^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (^X 6type.googleapis.com/google.firestore.v1.CommitResponse  䕳 䕳(^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ȋ ȋ(~x 6type.googleapis.com/google.firestore.v1.CommitResponse>       (^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)s" aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)s" 䕳aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)s" aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s"  o aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6 s6'n2l aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6 n#%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" 2u aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions8 n 40/google.firestore.v1.Firestore/BatchGetDocuments"%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s"  o aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions7 s7' @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5(&OI 6type.googleapis.com/google.firestore.v1.CommitResponse   (!  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 s3" DocstoreRevisionR  " ȋ(&  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 s4" DocstoreRevisionR  " (&  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5" DocstoreRevisionR  s5 " (& (&ic 6type.googleapis.com/google.firestore.v1.CommitResponse)  !  !(%OI 6type.googleapis.com/google.firestore.v1.CommitResponse  +("\V 6type.googleapis.com/google.firestore.v1.CommitResponse . .('oi 6type.googleapis.com/google.firestore.v1.CommitResponse/ 1  1 1($OI 6type.googleapis.com/google.firestore.v1.CommitResponse  5(#40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0(3 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsep" Xaprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0(3 (3)%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 s4 DocstoreRevisionX%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions040/google.firestore.v1.Firestore/BatchGetDocumentsA%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5 s5" DocstoreRevisionR  @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3(9  Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" x  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3" DocstoreRevisionR  s3 " ȋ(9 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsep" xaprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2(9 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsep" xaprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1(9 (9 %type.googleapis.com/google.rpc.StatuszDocument already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8c45::]:4171 : APP_ERROR(14) Document already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 (7OI 6type.googleapis.com/google.firestore.v1.CommitResponse  žx(8^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ֝ ֝(:+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(C 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 s3" DocstoreRevisionR  " ȋ ܗ(C 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4" DocstoreRevisionR  s4 "  ܗ(C 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5 s5" DocstoreRevisionR  " ֝ ܗ(C 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6 n s6' DocstoreRevisionX " 1 ܗ(C 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions7 s7' DocstoreRevisionX " . ܗ(C 8type.googleapis.com/google.firestore.v1.RunQueryResponse  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions8 s8 DocstoreRevisionX n  " ! ܗ(C (C%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions7caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions8ZT 6type.googleapis.com/google.firestore.v1.CommitResponse  ڨ(L%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0 s0 EtagX%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5 s5 EtagX%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1 EtagX s1%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2 EtagX s2%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 s3 EtagX%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 s4 EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ȓ ȓ(N^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (R^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (P^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (O^X 6type.googleapis.com/google.firestore.v1.CommitResponse  μ μ(S^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (Q6%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" ȓ  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0 s0' EtagR ȓ5%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" μ  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 s4 EtagR μ6%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1 s1' EtagR 6%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2 s2' EtagR 5%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5 s5 EtagR 5%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 s3 EtagR %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)| z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6 EtagX s6| z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions7 s7 EtagX| z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions8 s8 EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (Z^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (\^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ȶ ȶ(]^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (^^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ([~x 6type.googleapis.com/google.firestore.v1.CommitResponse>       (`^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (_%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s"  o aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6 s6'n2l aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions6 n#%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" 2u aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions8 n 40/google.firestore.v1.Firestore/BatchGetDocuments%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)s" aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1"%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s"  o aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions7 s7'%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)s" ȶaprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)s" aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0 @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5(j Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ȒЫ  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 s3 EtagR  " (j Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ȒЫ  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 EtagR μ s4 μ" (j Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ȒЫ  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5 s5 EtagR  " (j (jrl 6type.googleapis.com/google.firestore.v1.CommitResponse2  ϕ  ϕ ϕ(hke 6type.googleapis.com/google.firestore.v1.CommitResponse+  ȸ  ȸ(iPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ߖ(n^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (lPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (kPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ܧ(m40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0(z Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsep" aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions0(z (z%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" z aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 s4 EtagX%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)caprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions05%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions5 s5 EtagR 40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" 9  aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions3 s3 EtagR  " ( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsep" 9aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions2( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponsep" 9aprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions1( (OI 6type.googleapis.com/google.firestore.v1.CommitResponse  :(]V 6type.googleapis.com/google.firestore.v1.CommitResponse T T( %type.googleapis.com/google.rpc.StatuszDocument already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8c84::]:4365 : APP_ERROR(14) Document already exists: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUnorderedActions4 (~go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/Put.replay000066400000000000000000000603731367004507500265310ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/6694d2c4-22ac-4208-a007-2939487f6999 EtagX b "  Ǭ(F 8type.googleapis.com/google.firestore.v1.RunQueryResponse  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/95af5a25-3679-41ba-a2ff-6cd471c483f1 St EtagX MX DocstoreRevisionX B F  U I "  Ǭ(F 8type.googleapis.com/google.firestore.v1.RunQueryResponse  pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/eb9d18a4-4784-445d-87f3-c67cf22746e9 DocstoreRevisionX B F  U I St EtagX MX 诐" 诐 Ǭ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMap EtagX b ȏ" ȏ Ǭ(2 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct U I St EtagX MX DocstoreRevisionX B F  "  Ǭ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/95af5a25-3679-41ba-a2ff-6cd471c483f1 %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n" \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateStruct%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" 诐pprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/eb9d18a4-4784-445d-87f3-c67cf22746e9j%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)rpprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/6694d2c4-22ac-4208-a007-2939487f6999[Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testCreateMapOI 6type.googleapis.com/google.firestore.v1.CommitResponse  6( OI 6type.googleapis.com/google.firestore.v1.CommitResponse  ͧ<( OI 6type.googleapis.com/google.firestore.v1.CommitResponse  H( QK 6type.googleapis.com/google.firestore.v1.CommitResponse  ؟P( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default){ y Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap b DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  × ×(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap b DocstoreRevisionX ×" ×( (]%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct EtagX U MX DocstoreRevisionX I F  St B^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct(8 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Ȋ  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct DocstoreRevisionX B F  U I St EtagX MX " ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default){ y Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap b DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ۧ  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap DocstoreRevisionX b ×" ( (]%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct MX DocstoreRevisionX I F  EtagX U St B\V 6type.googleapis.com/google.firestore.v1.CommitResponse    (#40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct(%6 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" /  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct DocstoreRevisionX B F  U I St EtagX MX "  (% (%+%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  } Wprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap2" DocstoreRevisionR J %type.googleapis.com/google.rpc.Status Rthe stored version (0) does not match the required base version (1591684126786232) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:990b::]:4373 : APP_ERROR(15) the stored version (0) does not match the required base version (1591684126786232) ()%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"    Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct2! DocstoreRevision R   Etag R   U B I F  St MXJ %type.googleapis.com/google.rpc.Status Rthe stored version (0) does not match the required base version (1591684127026598) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:83c2::]:4214 : APP_ERROR(15) the stored version (0) does not match the required base version (1591684127026598) (+%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (-40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap(/ Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Լ  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa DocstoreRevisionX " (/ (/;%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa" DocstoreRevisionR ^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ԯ Ԯ(3;%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap" DocstoreRevisionR  sah %type.googleapis.com/google.rpc.Status athe stored version (1591684127634721) does not match the required base version (1591684127414476) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:ef58::]:4123 : APP_ERROR(15) the stored version (1591684127634721) does not match the required base version (1591684127414476) (5c%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct DocstoreRevisionX EtagX I U F  B MX Sta^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ª ª(740/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct(9> Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct I Sta EtagX MX DocstoreRevisionX B F  U ª" ª(9 (9%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" ª  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct EtagX U I B MX" DocstoreRevisionR ª F  Sta\V 6type.googleapis.com/google.firestore.v1.CommitResponse  (=%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)" ª  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct MX" DocstoreRevisionR ª I B EtagX U F  Stah %type.googleapis.com/google.rpc.Status athe stored version (1591684128057017) does not match the required base version (1591684127875209) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:9283::]:4015 : APP_ERROR(15) the stored version (1591684128057017) does not match the required base version (1591684127875209) (?+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap b DocstoreRevisionX ×"  (A. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct St EtagX MX DocstoreRevisionX B F  U I "   (A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa" DocstoreRevisionR  " Ԯ (A@ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct B F  U I Sta EtagX MX" DocstoreRevisionR ª ª"  (A (AR%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)XVprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap][projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)o"  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)j"   Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStructPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (JRL 6type.googleapis.com/google.firestore.v1.CommitResponse  (HPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ൠ(I %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)o m Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap b EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ѐ Ѐ(N40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap(P Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap EtagX b Ѐ" Ѐ(P (P]%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct St B I MX DocstoreRevisionX EtagX U F ^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ö ö(T40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct(V8 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" φ  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct B F  U I St EtagX MX DocstoreRevisionX ö" ö(V (V %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)o m Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap b EtagX\V 6type.googleapis.com/google.firestore.v1.CommitResponse  (Z40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap(\ Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ,  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap EtagX b Ѐ" (\ (\]%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct DocstoreRevisionX I St MX EtagX U F  B\V 6type.googleapis.com/google.firestore.v1.CommitResponse ɮi ɮi(`40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct(b7 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Г  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct U I St EtagX MX DocstoreRevisionX B F  ö" ɮi(b (b%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   p Wprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap2 Etag R J %type.googleapis.com/google.rpc.Status Rthe stored version (0) does not match the required base version (1591684129014059) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8a87::]:4411 : APP_ERROR(15) the stored version (0) does not match the required base version (1591684129014059) (f%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  ɮi  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct2! DocstoreRevision R ɮi U F  MX Etag R ɮi I St BJ %type.googleapis.com/google.rpc.Status Rthe stored version (0) does not match the required base version (1591684129220964) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:cf87::]:4056 : APP_ERROR(15) the stored version (0) does not match the required base version (1591684129220964) (h%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)v t [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (j40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap(l Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap EtagX sa " (l (l/%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa EtagR ^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ތ ތ(p/%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap EtagR  sah %type.googleapis.com/google.rpc.Status athe stored version (1591684129832025) does not match the required base version (1591684129598361) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:828b::]:4350 : APP_ERROR(15) the stored version (1591684129832025) does not match the required base version (1591684129598361) (rc%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct F  MX U I Sta B DocstoreRevisionX EtagX\V 6type.googleapis.com/google.firestore.v1.CommitResponse    (t40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct(v; Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" J  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct F  U I Sta EtagX MX DocstoreRevisionX B  "  (v (v}%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"    ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct I U F  B DocstoreRevisionX Etag R   Sta MX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  г г(z}%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"    ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct Etag R   I U F  Sta B MX DocstoreRevisionXh %type.googleapis.com/google.rpc.Status athe stored version (1591684130304962) does not match the required base version (1591684130028212) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:a01c::]:4242 : APP_ERROR(15) the stored version (1591684130304962) does not match the required base version (1591684130028212) (|go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/Query.replay000066400000000000000000000352201367004507500270570ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2(%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat GamePraise All Monsters Playerpat Score1 TimeR DocstoreRevisionX  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel TimeR DocstoreRevisionX GamePraise All Monsters Playermel Score<  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy GamePraise All Monsters Playerandy ScoreQ TimeR DocstoreRevisionX  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran TimeR DocstoreRevisionX GamePraise All Monsters Playerfran Score!  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat Game  Zombie DMV Playerpat Scorex TimeR DocstoreRevisionX  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie TimeR DocstoreRevisionX Game  Zombie DMV Player billie Scoreo  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel DocstoreRevisionX Game  Zombie DMV Playermel Score TimeR  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran Game  Zombie DMV Playerfran Score! TimeR DocstoreRevisionX 6type.googleapis.com/google.firestore.v1.CommitResponse                 (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2(A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy Playerandy DocstoreRevisionX ScoreQ TimeR GamePraise All Monsters "  ȕۧ(A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran GamePraise All Monsters Playerfran DocstoreRevisionX Score! TimeR "  ȕۧ(? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel GamePraise All Monsters Playermel DocstoreRevisionX Score< TimeR "  ȕۧ(? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat GamePraise All Monsters Playerpat DocstoreRevisionX Score1 TimeR "  ȕۧ(3 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Scoreo TimeR Game  Zombie DMV Player billie DocstoreRevisionX "  ȕۧ(/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran Game  Zombie DMV Playerfran DocstoreRevisionX Score! TimeR "  ȕۧ(. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel TimeR Game  Zombie DMV Playermel DocstoreRevisionX Score "  ȕۧ(- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat DocstoreRevisionX Scorex TimeR Game  Zombie DMV Playerpat "  ȕۧ( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequesto ;projects/go-cloud-test-216917/databases/(default)/documents0docstore-test-2 Game  Zombie DMV(3 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Player billie DocstoreRevisionX Scoreo TimeR Game  Zombie DMV "  (/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran Game  Zombie DMV Playerfran DocstoreRevisionX Score! TimeR "  (. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel TimeR Game  Zombie DMV Playermel DocstoreRevisionX Score "  (- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat Game  Zombie DMV Playerpat DocstoreRevisionX Scorex TimeR "  ( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequeste ;projects/go-cloud-test-216917/databases/(default)/documents&docstore-test-2 Scored(2 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie TimeR Game  Zombie DMV Player billie DocstoreRevisionX Scoreo "  (, 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat TimeR Game  Zombie DMV Playerpat DocstoreRevisionX Scorex "  (- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel Game  Zombie DMV Playermel DocstoreRevisionX Score TimeR "  ( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestm ;projects/go-cloud-test-216917/databases/(default)/documents.docstore-test-2 Player billie(2 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie Game  Zombie DMV Player billie DocstoreRevisionX Scoreo TimeR "  ؽ9( (+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsXdocstore-test-2C A Playerandy$" GamePraise All Monsters(!@ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy ScoreQ TimeR GamePraise All Monsters Playerandy DocstoreRevisionX "  ɴ`(! (!+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsDdocstore-test-2/ - Playerpat Scored(%? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat Playerpat DocstoreRevisionX Score1 TimeR GamePraise All Monsters "  勂(% (%+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequest ;projects/go-cloud-test-216917/databases/(default)/documentsRdocstore-test-2= ;$" GamePraise All Monsters Score2()? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel Score< TimeR GamePraise All Monsters Playermel DocstoreRevisionX "  ()A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy TimeR GamePraise All Monsters Playerandy DocstoreRevisionX ScoreQ "  () ()+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestV ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2*(.A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy ScoreQ TimeR GamePraise All Monsters Playerandy DocstoreRevisionX "  (.A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran TimeR GamePraise All Monsters Playerfran DocstoreRevisionX Score! "  (. (.+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-2(3A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andy GamePraise All Monsters Playerandy DocstoreRevisionX ScoreQ TimeR "  (3A 8type.googleapis.com/google.firestore.v1.RunQueryResponse  dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|fran GamePraise All Monsters Playerfran DocstoreRevisionX Score! TimeR "  (3? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|mel Score< TimeR GamePraise All Monsters Playermel DocstoreRevisionX "  (3? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pat DocstoreRevisionX Score1 TimeR GamePraise All Monsters Playerpat "  (33 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billie TimeR Game  Zombie DMV Player billie DocstoreRevisionX Scoreo "  (3/ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|fran TimeR Game  Zombie DMV Playerfran DocstoreRevisionX Score! "  (3. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mel Score TimeR Game  Zombie DMV Playermel DocstoreRevisionX "  (3- 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat Game  Zombie DMV Playerpat DocstoreRevisionX Scorex TimeR "  (3 (33%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)v" dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|andyv" dprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|franu" cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|melu" cprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Praise All Monsters|pato" ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|billiem" [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|franl" Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|mell" Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-2/Zombie DMV|pat^X 6type.googleapis.com/google.firestore.v1.CommitResponse  (>go-cloud-0.20.0/docstore/gcpfirestore/testdata/TestConformance/Replace.replay000066400000000000000000000500171367004507500273260ustar00rootroot00000000000000RPCReplay+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Vprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap EtagX b Ѐ"  (. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct B F  U I St EtagX MX DocstoreRevisionX ö" ɮi ( 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap EtagR  sa " ތ (? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct I Sta Etag R   MX DocstoreRevisionX B F  U  " г ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)j"  ɮiYprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutStruct %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)p" г^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStructR%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)XVprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testPutMap][projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMapPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (RL 6type.googleapis.com/google.firestore.v1.CommitResponse  ( PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ȍ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceMap sa DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (!%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceMap sb DocstoreRevisionX\V 6type.googleapis.com/google.firestore.v1.CommitResponse 2 2(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceMap( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ŖZ  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceMap DocstoreRevisionX sb " 2( (b%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceStruct DocstoreRevisionX EtagX U F  I Sta B MX^X 6type.googleapis.com/google.firestore.v1.CommitResponse  Ş Ş(f%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceStruct Stb B DocstoreRevisionX EtagX I MX U F ^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceStruct(= Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceStruct DocstoreRevisionX B F  U I Stb EtagX MX Ş" ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)`" Z Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist %type.googleapis.com/google.rpc.StatusoNo document to update: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8413::]:4230 : APP_ERROR(13) No document to update: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa DocstoreRevisionX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   ( 40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap(" Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" ό  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa DocstoreRevisionX " (" (";%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa" DocstoreRevisionR ^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (&;%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"   [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa" DocstoreRevisionR h %type.googleapis.com/google.rpc.Status athe stored version (1591684131951637) does not match the required base version (1591684131766700) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:b32a::]:4277 : APP_ERROR(15) the stored version (1591684131951637) does not match the required base version (1591684131766700) ((c%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct U F  Sta B MX DocstoreRevisionX EtagX I\V 6type.googleapis.com/google.firestore.v1.CommitResponse ЩW ЩW(*40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct(,; Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" }  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct MX DocstoreRevisionX B F  U I Sta EtagX ЩW" ЩW(, (,}%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  ЩW  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct U Sta F  MX B! DocstoreRevision R ЩW EtagX I^X 6type.googleapis.com/google.firestore.v1.CommitResponse  ծ ծ(0}%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"  ЩW  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct! DocstoreRevision R ЩW EtagX MX U F  B I Stah %type.googleapis.com/google.rpc.Status athe stored version (1591684132366299) does not match the required base version (1591684132182818) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:a9d1::]:4098 : APP_ERROR(15) the stored version (1591684132366299) does not match the required base version (1591684132182818) (2+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(4 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceMap sb DocstoreRevisionX " 2 ش(44 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceStruct B F  U I Stb EtagX MX DocstoreRevisionX Ş"  ش(4 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa" DocstoreRevisionR  "  ش(4? 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct I Sta EtagX MX! DocstoreRevision R ЩW B F  U ЩW" ծ ش(4 (4 %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)o" ]projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceStructV%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)\Zprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testReplaceMap][projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)p" ծ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStructPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (;RL 6type.googleapis.com/google.firestore.v1.CommitResponse  ( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Ӟ  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sa DocstoreRevisionX Ӌ" Ӌ(> (>%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s" Ӌ h [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sc^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (B%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s" Ӌ h [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sch %type.googleapis.com/google.rpc.Status athe stored version (1591684142701144) does not match the required base version (1591684142526576) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:a184::]:4294 : APP_ERROR(15) the stored version (1591684142701144) does not match the required base version (1591684142526576) (Dc%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct MX DocstoreRevisionX EtagX B I U F  Sta^X 6type.googleapis.com/google.firestore.v1.CommitResponse  צ צ(F40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct(H> Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct U I Sta EtagX MX DocstoreRevisionX B F  צ" צ(H (H%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s" צ k ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct sc\V 6type.googleapis.com/google.firestore.v1.CommitResponse ؽ ؽ(L%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s" צ k ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct sch %type.googleapis.com/google.rpc.Status athe stored version (1591684143064823) does not match the required base version (1591684142886437) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8526::]:4499 : APP_ERROR(15) the stored version (1591684143064823) does not match the required base version (1591684142886437) (N+'/google.firestore.v1.Firestore/RunQuery 7type.googleapis.com/google.firestore.v1.RunQueryRequestR ;projects/go-cloud-test-216917/databases/(default)/documentsdocstore-test-1(P 8type.googleapis.com/google.firestore.v1.RunQueryResponse  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sc DocstoreRevisionX Ӌ"  ̆b(P> 8type.googleapis.com/google.firestore.v1.RunQueryResponse  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct sc F  U MX DocstoreRevisionX B I Sta EtagX צ" ؽ ̆b(P 8type.googleapis.com/google.firestore.v1.RunQueryResponse  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap n @ aX DocstoreRevisionX m cC "  ̆b(P 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapInc n @ i  @ aA DocstoreRevisionX m k"  ̆b(P 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapWrt DocstoreRevisionX m aX "  ̆b(P+ 8type.googleapis.com/google.firestore.v1.RunQueryResponse  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct Ststr EtagX MX DocstoreRevisionX F ? B U " ϭ ̆b(P5 8type.googleapis.com/google.firestore.v1.RunQueryResponse  _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructInc EtagX MX DocstoreRevisionX F ? B U I Stst U"  ̆b(P. 8type.googleapis.com/google.firestore.v1.RunQueryResponse  _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructWrt U Ststr EtagX MX DocstoreRevisionX B F  ĩ"  ̆b(P (P %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)o"  ؽ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)n" ϭ\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)q" _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructInc %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)q" _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructWrt%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)][projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap[Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap^\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapInc^\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapWrtPJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ߚ([PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ɗ(^PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  ؖڨ(]VP 6type.googleapis.com/google.firestore.v1.CommitResponse  (_PJ 6type.googleapis.com/google.firestore.v1.CommitResponse  (\5%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap EtagX aA bB n  @ i^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (e%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) a b c i m" z Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap m aX cCo2m Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap n ys 6type.googleapis.com/google.firestore.v1.CommitResponse9     @ (g40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap(i Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   Yprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMap m cC n @ aX EtagX " (i (i%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)w u \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapWrt aA EtagX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (m%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) a b m" r \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapWrt m aX^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (o40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapWrt(q Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapWrt EtagX m aX " (q (q-%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapInc aA n  @ i EtagX\V 6type.googleapis.com/google.firestore.v1.CommitResponse    (u,%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"2 \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapInc i @ m n vp 6type.googleapis.com/google.firestore.v1.CommitResponse6 ' ԘB  @ @ ԘB(w40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapInc(y Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" e  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateMapInc n @ i  @ aA EtagX m  " ԘB(y (yb%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct F  @ B DocstoreRevisionX I Stst MX EtagX U^X 6type.googleapis.com/google.firestore.v1.CommitResponse   (}%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) I St U" u \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct Ststr Ur2p \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct F ys 6type.googleapis.com/google.firestore.v1.CommitResponse9     ? (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)\projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct(6 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   \projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStruct Ststr EtagX MX DocstoreRevisionX F ? B U " ( (e%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructWrt MX DocstoreRevisionX Stst B EtagX I U F _X 6type.googleapis.com/google.firestore.v1.CommitResponse   (&%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) I St U" x _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructWrt Ststr U_X 6type.googleapis.com/google.firestore.v1.CommitResponse  غ غ(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)_projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructWrt(9 Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" Ȝ  _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructWrt B F  U Ststr EtagX MX DocstoreRevisionX " غ( (e%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructInc B F  @ Stst MX DocstoreRevisionX EtagX I U_X 6type.googleapis.com/google.firestore.v1.CommitResponse  б б(%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)"2| _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructInc F  Ung 6type.googleapis.com/google.firestore.v1.CommitResponse-   ? (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)_projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructInc(@ Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   _projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testUpdateStructInc I Stst EtagX MX DocstoreRevisionX F ? B U б" ( ( %/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)p x" e Xprojects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist xy %type.googleapis.com/google.rpc.StatusoNo document to update: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:9390::]:4085 : APP_ERROR(13) No document to update: projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/doesNotExist (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)v t [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap EtagX sa_X 6type.googleapis.com/google.firestore.v1.CommitResponse  ΂ ΂(40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)[projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap( Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse" رѨ  [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap EtagX sa ΂" ΂( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s" ΂ h [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sc_X 6type.googleapis.com/google.firestore.v1.CommitResponse   (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s" ΂ h [projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionMap sci %type.googleapis.com/google.rpc.Status athe stored version (1591684145427395) does not match the required base version (1591684145273910) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:b2a5::]:4451 : APP_ERROR(15) the stored version (1591684145427395) does not match the required base version (1591684145273910) (c%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default)  ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct B U Sta MX DocstoreRevisionX EtagX I F _X 6type.googleapis.com/google.firestore.v1.CommitResponse   (40/google.firestore.v1.Firestore/BatchGetDocuments @type.googleapis.com/google.firestore.v1.BatchGetDocumentsRequest 1projects/go-cloud-test-216917/databases/(default)^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct(? Atype.googleapis.com/google.firestore.v1.BatchGetDocumentsResponse"   ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct F  U I Sta EtagX MX DocstoreRevisionX B " ( (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s"  k ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct sc_X 6type.googleapis.com/google.firestore.v1.CommitResponse   (%/google.firestore.v1.Firestore/Commit 5type.googleapis.com/google.firestore.v1.CommitRequest 1projects/go-cloud-test-216917/databases/(default) s"  k ^projects/go-cloud-test-216917/databases/(default)/documents/docstore-test-1/testRevisionStruct sci %type.googleapis.com/google.rpc.Status athe stored version (1591684145773720) does not match the required base version (1591684145595249) (type.googleapis.com/google.rpc.DebugInfo/Firestore.Commit to [2002:a2b:8247::]:4249 : APP_ERROR(15) the stored version (1591684145773720) does not match the required base version (1591684145595249) (go-cloud-0.20.0/docstore/gcpfirestore/urls.go000066400000000000000000000055631367004507500211540ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpfirestore import ( "context" "errors" "fmt" "net/url" "path" "sync" vkit "cloud.google.com/go/firestore/apiv1" "gocloud.dev/docstore" "gocloud.dev/gcp" ) func init() { docstore.DefaultURLMux().RegisterCollection(Scheme, &lazyCredsOpener{}) } type lazyCredsOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyCredsOpener) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error) { o.init.Do(func() { creds, err := gcp.DefaultCredentials(ctx) if err != nil { o.err = err return } client, _, err := Dial(ctx, creds.TokenSource) if err != nil { o.err = err return } o.opener = &URLOpener{Client: client} }) if o.err != nil { return nil, fmt.Errorf("open collection %s: %v", u, o.err) } return o.opener.OpenCollectionURL(ctx, u) } // Scheme is the URL scheme firestore registers its URLOpener under on // docstore.DefaultMux. const Scheme = "firestore" // URLOpener opens firestore URLs like // "firestore://projects/myproject/databases/(default)/documents/mycollection?name_field=myID". // // See https://firebase.google.com/docs/firestore/data-model for more details. // // The following query parameters are supported: // // - name_field (required): gcpfirestore requires that a single string field, // name_field, be designated the primary key. Its values must be unique over all // documents in the collection, and the primary key must be provided to retrieve // a document. type URLOpener struct { // Client must be set to a non-nil client authenticated with Cloud Firestore // scope or equivalent. Client *vkit.Client } // OpenCollectionURL opens a docstore.Collection based on u. func (o *URLOpener) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error) { q := u.Query() options := &Options{ RevisionField: q.Get("revision_field"), } nameField := q.Get("name_field") if nameField == "" { return nil, errors.New("open collection %s: name_field is required to open a collection") } q.Del("name_field") q.Del("revision_field") for param := range q { return nil, fmt.Errorf("open collection %s: invalid query parameter %q", u, param) } collResourceID := path.Join(u.Host, u.Path) return OpenCollection(o.Client, collResourceID, nameField, options) } go-cloud-0.20.0/docstore/gcpfirestore/urls_test.go000066400000000000000000000036341367004507500222100ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpfirestore import ( "context" "testing" "gocloud.dev/docstore" "gocloud.dev/internal/testing/setup" ) func TestOpenCollectionFromURL(t *testing.T) { cleanup := setup.FakeGCPDefaultCredentials(t) defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"firestore://projects/myproject/databases/(default)/documents/mycoll?name_field=_id", false}, // OK, hierarchical collection. {"firestore://projects/myproject/databases/(default)/documents/mycoll/mydoc/subcoll?name_field=_id", false}, // Missing project ID. {"firestore:///mycoll?name_field=_id", true}, // Empty collection. {"firestore://projects/myproject/", true}, // Missing name field. {"firestore://projects/myproject/databases/(default)/documents/mycoll", true}, // Passing revision field. {"firestore://projects/myproject/databases/(default)/documents/mycoll?name_field=_id&revision_field=123", false}, // Invalid param. {"firestore://projects/myproject/databases/(default)/documents/mycoll?name_field=_id¶m=value", true}, } ctx := context.Background() for _, test := range tests { d, err := docstore.OpenCollection(ctx, test.URL) if d != nil { defer d.Close() } if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } } } go-cloud-0.20.0/docstore/internal/000077500000000000000000000000001367004507500167475ustar00rootroot00000000000000go-cloud-0.20.0/docstore/internal/fields/000077500000000000000000000000001367004507500202155ustar00rootroot00000000000000go-cloud-0.20.0/docstore/internal/fields/README.md000066400000000000000000000001011367004507500214640ustar00rootroot00000000000000This package is copied from cloud.google.com/go/internal/fields. go-cloud-0.20.0/docstore/internal/fields/fields.go000066400000000000000000000374041367004507500220220ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package fields provides a view of the fields of a struct that follows the Go // rules, amended to consider tags and case insensitivity. // // Usage // // First define a function that interprets tags: // // func parseTag(st reflect.StructTag) (name string, keep bool, other interface{}, err error) { ... } // // The function's return values describe whether to ignore the field // completely or provide an alternate name, as well as other data from the // parse that is stored to avoid re-parsing. // // Then define a function to validate the type: // // func validate(t reflect.Type) error { ... } // // Then, if necessary, define a function to specify leaf types - types // which should be considered one field and not be recursed into: // // func isLeafType(t reflect.Type) bool { ... } // // eg: // // func isLeafType(t reflect.Type) bool { // return t == reflect.TypeOf(time.Time{}) // } // // Next, construct a Cache, passing your functions. As its name suggests, a // Cache remembers validation and field information for a type, so subsequent // calls with the same type are very fast. // // cache := fields.NewCache(parseTag, validate, isLeafType) // // To get the fields of a struct type as determined by the above rules, call // the Fields method: // // fields, err := cache.Fields(reflect.TypeOf(MyStruct{})) // // The return value can be treated as a slice of Fields. // // Given a string, such as a key or column name obtained during unmarshalling, // call Match on the list of fields to find a field whose name is the best // match: // // field := fields.Match(name) // // Match looks for an exact match first, then falls back to a case-insensitive // comparison. package fields import ( "bytes" "reflect" "sort" "strings" "sync" ) // A Field records information about a struct field. type Field struct { Name string // effective field name NameFromTag bool // did Name come from a tag? Type reflect.Type // field type Index []int // index sequence, for reflect.Value.FieldByIndex ParsedTag interface{} // third return value of the parseTag function nameBytes []byte equalFold func(s, t []byte) bool } // ParseTagFunc is a function that accepts a struct tag and returns four values: an alternative name for the field // extracted from the tag, a boolean saying whether to keep the field or ignore it, additional data that is stored // with the field information to avoid having to parse the tag again, and an error. type ParseTagFunc func(reflect.StructTag) (name string, keep bool, other interface{}, err error) // ValidateFunc is a function that accepts a reflect.Type and returns an error if the struct type is invalid in any // way. type ValidateFunc func(reflect.Type) error // LeafTypesFunc is a function that accepts a reflect.Type and returns true if the struct type a leaf, or false if not. // TODO(deklerk) is this description accurate? type LeafTypesFunc func(reflect.Type) bool // A Cache records information about the fields of struct types. // // A Cache is safe for use by multiple goroutines. type Cache struct { parseTag ParseTagFunc validate ValidateFunc leafTypes LeafTypesFunc cache sync.Map // from reflect.Type to cacheValue } // NewCache constructs a Cache. // // Its first argument should be a function that accepts // a struct tag and returns four values: an alternative name for the field // extracted from the tag, a boolean saying whether to keep the field or ignore // it, additional data that is stored with the field information to avoid // having to parse the tag again, and an error. // // Its second argument should be a function that accepts a reflect.Type and // returns an error if the struct type is invalid in any way. For example, it // may check that all of the struct field tags are valid, or that all fields // are of an appropriate type. func NewCache(parseTag ParseTagFunc, validate ValidateFunc, leafTypes LeafTypesFunc) *Cache { if parseTag == nil { parseTag = func(reflect.StructTag) (string, bool, interface{}, error) { return "", true, nil, nil } } if validate == nil { validate = func(reflect.Type) error { return nil } } if leafTypes == nil { leafTypes = func(reflect.Type) bool { return false } } return &Cache{ parseTag: parseTag, validate: validate, leafTypes: leafTypes, } } // A fieldScan represents an item on the fieldByNameFunc scan work list. type fieldScan struct { typ reflect.Type index []int } // Fields returns all the exported fields of t, which must be a struct type. It // follows the standard Go rules for embedded fields, modified by the presence // of tags. The result is sorted lexicographically by index. // // These rules apply in the absence of tags: // Anonymous struct fields are treated as if their inner exported fields were // fields in the outer struct (embedding). The result includes all fields that // aren't shadowed by fields at higher level of embedding. If more than one // field with the same name exists at the same level of embedding, it is // excluded. An anonymous field that is not of struct type is treated as having // its type as its name. // // Tags modify these rules as follows: // A field's tag is used as its name. // An anonymous struct field with a name given in its tag is treated as // a field having that name, rather than an embedded struct (the struct's // fields will not be returned). // If more than one field with the same name exists at the same level of embedding, // but exactly one of them is tagged, then the tagged field is reported and the others // are ignored. func (c *Cache) Fields(t reflect.Type) (List, error) { if t.Kind() != reflect.Struct { panic("fields: Fields of non-struct type") } return c.cachedTypeFields(t) } // A List is a list of Fields. type List []Field // MatchExact returns the field in the list with the given name, or nil if there is // none. func (l List) MatchExact(name string) *Field { return l.MatchExactBytes([]byte(name)) } // MatchExactBytes is identical to MatchExact, except that the argument is a byte slice. func (l List) MatchExactBytes(name []byte) *Field { for _, f := range l { if bytes.Equal(f.nameBytes, name) { return &f } } return nil } // MatchFold returns the field in the list whose name best matches the supplied // name, nor nil if no field does. If there is a field with the exact name, it // is returned. Otherwise the first field (sorted by index) whose name matches // case-insensitively is returned. func (l List) MatchFold(name string) *Field { return l.MatchFoldBytes([]byte(name)) } // MatchFoldBytes is identical to MatchFold, except that the argument is a byte slice. func (l List) MatchFoldBytes(name []byte) *Field { var f *Field for i := range l { ff := &l[i] if bytes.Equal(ff.nameBytes, name) { return ff } if f == nil && ff.equalFold(ff.nameBytes, name) { f = ff } } return f } type cacheValue struct { fields List err error } // cachedTypeFields is like typeFields but uses a cache to avoid repeated work. // This code has been copied and modified from // https://go.googlesource.com/go/+/go1.7.3/src/encoding/json/encode.go. func (c *Cache) cachedTypeFields(t reflect.Type) (List, error) { var cv cacheValue x, ok := c.cache.Load(t) if ok { cv = x.(cacheValue) } else { if err := c.validate(t); err != nil { cv = cacheValue{nil, err} } else { f, err := c.typeFields(t) cv = cacheValue{List(f), err} } c.cache.Store(t, cv) } return cv.fields, cv.err } func (c *Cache) typeFields(t reflect.Type) ([]Field, error) { fields, err := c.listFields(t) if err != nil { return nil, err } sort.Sort(byName(fields)) // Delete all fields that are hidden by the Go rules for embedded fields. // The fields are sorted in primary order of name, secondary order of field // index length. So the first field with a given name is the dominant one. var out []Field for advance, i := 0, 0; i < len(fields); i += advance { // One iteration per name. // Find the sequence of fields with the name of this first field. fi := fields[i] name := fi.Name for advance = 1; i+advance < len(fields); advance++ { fj := fields[i+advance] if fj.Name != name { break } } // Find the dominant field, if any, out of all fields that have the same name. dominant, ok := dominantField(fields[i : i+advance]) if ok { out = append(out, dominant) } } sort.Sort(byIndex(out)) return out, nil } func (c *Cache) listFields(t reflect.Type) ([]Field, error) { // This uses the same condition that the Go language does: there must be a unique instance // of the match at a given depth level. If there are multiple instances of a match at the // same depth, they annihilate each other and inhibit any possible match at a lower level. // The algorithm is breadth first search, one depth level at a time. // The current and next slices are work queues: // current lists the fields to visit on this depth level, // and next lists the fields on the next lower level. current := []fieldScan{} next := []fieldScan{{typ: t}} // nextCount records the number of times an embedded type has been // encountered and considered for queueing in the 'next' slice. // We only queue the first one, but we increment the count on each. // If a struct type T can be reached more than once at a given depth level, // then it annihilates itself and need not be considered at all when we // process that next depth level. var nextCount map[reflect.Type]int // visited records the structs that have been considered already. // Embedded pointer fields can create cycles in the graph of // reachable embedded types; visited avoids following those cycles. // It also avoids duplicated effort: if we didn't find the field in an // embedded type T at level 2, we won't find it in one at level 4 either. visited := map[reflect.Type]bool{} var fields []Field // Fields found. for len(next) > 0 { current, next = next, current[:0] count := nextCount nextCount = nil // Process all the fields at this depth, now listed in 'current'. // The loop queues embedded fields found in 'next', for processing during the next // iteration. The multiplicity of the 'current' field counts is recorded // in 'count'; the multiplicity of the 'next' field counts is recorded in 'nextCount'. for _, scan := range current { t := scan.typ if visited[t] { // We've looked through this type before, at a higher level. // That higher level would shadow the lower level we're now at, // so this one can't be useful to us. Ignore it. continue } visited[t] = true for i := 0; i < t.NumField(); i++ { f := t.Field(i) exported := (f.PkgPath == "") // If a named field is unexported, ignore it. An anonymous // unexported field is processed, because it may contain // exported fields, which are visible. if !exported && !f.Anonymous { continue } // Examine the tag. tagName, keep, other, err := c.parseTag(f.Tag) if err != nil { return nil, err } if !keep { continue } if c.leafTypes(f.Type) { fields = append(fields, newField(f, tagName, other, scan.index, i)) continue } var ntyp reflect.Type if f.Anonymous { // Anonymous field of type T or *T. ntyp = f.Type if ntyp.Kind() == reflect.Ptr { ntyp = ntyp.Elem() } } // Record fields with a tag name, non-anonymous fields, or // anonymous non-struct fields. if tagName != "" || ntyp == nil || ntyp.Kind() != reflect.Struct { if !exported { continue } fields = append(fields, newField(f, tagName, other, scan.index, i)) if count[t] > 1 { // If there were multiple instances, add a second, // so that the annihilation code will see a duplicate. fields = append(fields, fields[len(fields)-1]) } continue } // Queue embedded struct fields for processing with next level, // but only if the embedded types haven't already been queued. if nextCount[ntyp] > 0 { nextCount[ntyp] = 2 // exact multiple doesn't matter continue } if nextCount == nil { nextCount = map[reflect.Type]int{} } nextCount[ntyp] = 1 if count[t] > 1 { nextCount[ntyp] = 2 // exact multiple doesn't matter } var index []int index = append(index, scan.index...) index = append(index, i) next = append(next, fieldScan{ntyp, index}) } } } return fields, nil } func newField(f reflect.StructField, tagName string, other interface{}, index []int, i int) Field { name := tagName if name == "" { name = f.Name } sf := Field{ Name: name, NameFromTag: tagName != "", Type: f.Type, ParsedTag: other, nameBytes: []byte(name), } sf.equalFold = foldFunc(sf.nameBytes) sf.Index = append(sf.Index, index...) sf.Index = append(sf.Index, i) return sf } // byName sorts fields using the following criteria, in order: // 1. name // 2. embedding depth // 3. tag presence (preferring a tagged field) // 4. index sequence. type byName []Field func (x byName) Len() int { return len(x) } func (x byName) Swap(i, j int) { x[i], x[j] = x[j], x[i] } func (x byName) Less(i, j int) bool { if x[i].Name != x[j].Name { return x[i].Name < x[j].Name } if len(x[i].Index) != len(x[j].Index) { return len(x[i].Index) < len(x[j].Index) } if x[i].NameFromTag != x[j].NameFromTag { return x[i].NameFromTag } return byIndex(x).Less(i, j) } // byIndex sorts field by index sequence. type byIndex []Field func (x byIndex) Len() int { return len(x) } func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] } func (x byIndex) Less(i, j int) bool { xi := x[i].Index xj := x[j].Index ln := len(xi) if l := len(xj); l < ln { ln = l } for k := 0; k < ln; k++ { if xi[k] != xj[k] { return xi[k] < xj[k] } } return len(xi) < len(xj) } // dominantField looks through the fields, all of which are known to have the // same name, to find the single field that dominates the others using Go's // embedding rules, modified by the presence of tags. If there are multiple // top-level fields, the boolean will be false: This condition is an error in // Go and we skip all the fields. func dominantField(fs []Field) (Field, bool) { // The fields are sorted in increasing index-length order, then by presence of tag. // That means that the first field is the dominant one. We need only check // for error cases: two fields at top level, either both tagged or neither tagged. if len(fs) > 1 && len(fs[0].Index) == len(fs[1].Index) && fs[0].NameFromTag == fs[1].NameFromTag { return Field{}, false } return fs[0], true } // ParseStandardTag extracts the sub-tag named by key, then parses it using the // de facto standard format introduced in encoding/json: // "-" means "ignore this tag", unless it has options (that is, is followed by a comma), // in which case it is treated a name. // "" provides an alternative name for the field // ",opt1,opt2,..." specifies options after the name. // The options are returned as a []string. func ParseStandardTag(key string, t reflect.StructTag) (name string, keep bool, options []string) { s := t.Get(key) parts := strings.Split(s, ",") if parts[0] == "-" && len(parts) == 1 { return "", false, nil } if len(parts) > 1 { options = parts[1:] } return parts[0], true, options } go-cloud-0.20.0/docstore/internal/fields/fields_test.go000066400000000000000000000333241367004507500230560ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package fields import ( "encoding/json" "errors" "fmt" "reflect" "testing" "time" "github.com/google/go-cmp/cmp" ) type embed1 struct { Em1 int Dup int // annihilates with embed2.Dup Shadow int embed3 } type embed2 struct { Dup int embed3 embed4 } type embed3 struct { Em3 int // annihilated because embed3 is in both embed1 and embed2 embed5 } type embed4 struct { Em4 int Dup int // annihilation of Dup in embed1, embed2 hides this Dup *embed1 // ignored because it occurs at a higher level } type embed5 struct { x int } type Anonymous int type S1 struct { Exported int unexported int Shadow int // shadows S1.Shadow embed1 *embed2 Anonymous } type Time struct { time.Time } var intType = reflect.TypeOf(int(0)) func field(name string, tval interface{}, index ...int) *Field { return &Field{ Name: name, Type: reflect.TypeOf(tval), Index: index, ParsedTag: []string(nil), } } func tfield(name string, tval interface{}, index ...int) *Field { return &Field{ Name: name, Type: reflect.TypeOf(tval), Index: index, NameFromTag: true, ParsedTag: []string(nil), } } func TestFieldsNoTags(t *testing.T) { c := NewCache(nil, nil, nil) got, err := c.Fields(reflect.TypeOf(S1{})) if err != nil { t.Fatal(err) } want := []*Field{ field("Exported", int(0), 0), field("Shadow", int(0), 2), field("Em1", int(0), 3, 0), field("Em4", int(0), 4, 2, 0), field("Anonymous", Anonymous(0), 5), } for _, f := range want { f.ParsedTag = nil } if msg, ok := compareFields(got, want); !ok { t.Error(msg) } } func TestAgainstJSONEncodingNoTags(t *testing.T) { // Demonstrates that this package produces the same set of fields as encoding/json. s1 := S1{ Exported: 1, unexported: 2, Shadow: 3, embed1: embed1{ Em1: 4, Dup: 5, Shadow: 6, embed3: embed3{ Em3: 7, embed5: embed5{x: 8}, }, }, embed2: &embed2{ Dup: 9, embed3: embed3{ Em3: 10, embed5: embed5{x: 11}, }, embed4: embed4{ Em4: 12, Dup: 13, embed1: &embed1{Em1: 14}, }, }, Anonymous: Anonymous(15), } var want S1 want.embed2 = &embed2{} // need this because reflection won't create it jsonRoundTrip(t, s1, &want) var got S1 got.embed2 = &embed2{} fields, err := NewCache(nil, nil, nil).Fields(reflect.TypeOf(got)) if err != nil { t.Fatal(err) } setFields(fields, &got, s1) if !cmp.Equal(got, want, cmp.AllowUnexported(S1{}, embed1{}, embed2{}, embed3{}, embed4{}, embed5{})) { t.Errorf("got\n%+v\nwant\n%+v", got, want) } } // Tests use of LeafTypes parameter to NewCache func TestAgainstJSONEncodingEmbeddedTime(t *testing.T) { timeLeafFn := func(t reflect.Type) bool { return t == reflect.TypeOf(time.Time{}) } // Demonstrates that this package can produce the same set of // fields as encoding/json for a struct with an embedded time.Time. now := time.Now().UTC() myt := Time{ now, } var want Time jsonRoundTrip(t, myt, &want) var got Time fields, err := NewCache(nil, nil, timeLeafFn).Fields(reflect.TypeOf(got)) if err != nil { t.Fatal(err) } setFields(fields, &got, myt) if !cmp.Equal(got, want) { t.Errorf("got\n%+v\nwant\n%+v", got, want) } } type S2 struct { NoTag int XXX int `json:"tag"` // tag name takes precedence Anonymous `json:"anon"` // anonymous non-structs also get their name from the tag unexported int `json:"tag"` Embed `json:"em"` // embedded structs with tags become fields Tag int YYY int `json:"Tag"` // tag takes precedence over untagged field of the same name Empty int `json:""` // empty tag is noop tEmbed1 tEmbed2 } type Embed struct { Em int } type tEmbed1 struct { Dup int X int `json:"Dup2"` } type tEmbed2 struct { Y int `json:"Dup"` // takes precedence over tEmbed1.Dup because it is tagged Z int `json:"Dup2"` // same name as tEmbed1.X and both tagged, so ignored } func jsonTagParser(t reflect.StructTag) (name string, keep bool, other interface{}, err error) { n, k, o := ParseStandardTag("json", t) return n, k, o, nil } func validateFunc(t reflect.Type) (err error) { if t.Kind() != reflect.Struct { return errors.New("non-struct type used") } for i := 0; i < t.NumField(); i++ { if t.Field(i).Type.Kind() == reflect.Slice { return fmt.Errorf("slice field found at field %s on struct %s", t.Field(i).Name, t.Name()) } } return nil } func TestFieldsWithTags(t *testing.T) { got, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(S2{})) if err != nil { t.Fatal(err) } want := []*Field{ field("NoTag", int(0), 0), tfield("tag", int(0), 1), tfield("anon", Anonymous(0), 2), tfield("em", Embed{}, 4), tfield("Tag", int(0), 6), field("Empty", int(0), 7), tfield("Dup", int(0), 8, 0), } if msg, ok := compareFields(got, want); !ok { t.Error(msg) } } func TestAgainstJSONEncodingWithTags(t *testing.T) { // Demonstrates that this package produces the same set of fields as encoding/json. s2 := S2{ NoTag: 1, XXX: 2, Anonymous: 3, Embed: Embed{ Em: 4, }, tEmbed1: tEmbed1{ Dup: 5, X: 6, }, tEmbed2: tEmbed2{ Y: 7, Z: 8, }, } var want S2 jsonRoundTrip(t, s2, &want) var got S2 fields, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(got)) if err != nil { t.Fatal(err) } setFields(fields, &got, s2) if !cmp.Equal(got, want, cmp.AllowUnexported(S2{})) { t.Errorf("got\n%+v\nwant\n%+v", got, want) } } func TestUnexportedAnonymousNonStruct(t *testing.T) { // An unexported anonymous non-struct field should not be recorded. // This is currently a bug in encoding/json. // https://github.com/golang/go/issues/18009 type ( u int v int S struct { u v `json:"x"` int } ) got, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(S{})) if err != nil { t.Fatal(err) } if len(got) != 0 { t.Errorf("got %d fields, want 0", len(got)) } } func TestUnexportedAnonymousStruct(t *testing.T) { // An unexported anonymous struct with a tag is ignored. // This is currently a bug in encoding/json. // https://github.com/golang/go/issues/18009 type ( s1 struct{ X int } S2 struct { s1 `json:"Y"` } ) got, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(S2{})) if err != nil { t.Fatal(err) } if len(got) != 0 { t.Errorf("got %d fields, want 0", len(got)) } } func TestDominantField(t *testing.T) { // With fields sorted by index length and then by tag presence, // the dominant field is always the first. Make sure all error // cases are caught. for _, test := range []struct { fields []Field wantOK bool }{ // A single field is OK. {[]Field{{Index: []int{0}}}, true}, {[]Field{{Index: []int{0}, NameFromTag: true}}, true}, // A single field at top level is OK. {[]Field{{Index: []int{0}}, {Index: []int{1, 0}}}, true}, {[]Field{{Index: []int{0}}, {Index: []int{1, 0}, NameFromTag: true}}, true}, {[]Field{{Index: []int{0}, NameFromTag: true}, {Index: []int{1, 0}, NameFromTag: true}}, true}, // A single tagged field is OK. {[]Field{{Index: []int{0}, NameFromTag: true}, {Index: []int{1}}}, true}, // Two untagged fields at the same level is an error. {[]Field{{Index: []int{0}}, {Index: []int{1}}}, false}, // Two tagged fields at the same level is an error. {[]Field{{Index: []int{0}, NameFromTag: true}, {Index: []int{1}, NameFromTag: true}}, false}, } { _, gotOK := dominantField(test.fields) if gotOK != test.wantOK { t.Errorf("%v: got %t, want %t", test.fields, gotOK, test.wantOK) } } } func TestIgnore(t *testing.T) { type S struct { X int `json:"-"` Y int `json:"-,"` // field with name "-" } got, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(S{})) if err != nil { t.Fatal(err) } if len(got) != 1 { t.Errorf("got %d fields, want 1", len(got)) } } func TestParsedTag(t *testing.T) { type S struct { X int `json:"name,omitempty"` } got, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(S{})) if err != nil { t.Fatal(err) } want := []*Field{ {Name: "name", NameFromTag: true, Type: intType, Index: []int{0}, ParsedTag: []string{"omitempty"}}, } if msg, ok := compareFields(got, want); !ok { t.Error(msg) } } func TestValidateFunc(t *testing.T) { type MyInvalidStruct struct { A string B []int } _, err := NewCache(nil, validateFunc, nil).Fields(reflect.TypeOf(MyInvalidStruct{})) if err == nil { t.Fatal("expected error, got nil") } type MyValidStruct struct { A string B int } _, err = NewCache(nil, validateFunc, nil).Fields(reflect.TypeOf(MyValidStruct{})) if err != nil { t.Fatalf("expected nil, got error: %s\n", err) } } func compareFields(got []Field, want []*Field) (msg string, ok bool) { if len(got) != len(want) { return fmt.Sprintf("got %d fields, want %d", len(got), len(want)), false } for i, g := range got { w := *want[i] if !fieldsEqual(&g, &w) { return fmt.Sprintf("got\n%+v\nwant\n%+v", g, w), false } } return "", true } // Need this because Field contains a function, which cannot be compared. func fieldsEqual(f1, f2 *Field) bool { if f1 == nil || f2 == nil { return f1 == f2 } return f1.Name == f2.Name && f1.NameFromTag == f2.NameFromTag && f1.Type == f2.Type && cmp.Equal(f1.ParsedTag, f2.ParsedTag) } // Set the fields of dst from those of src. // dst must be a pointer to a struct value. // src must be a struct value. func setFields(fields []Field, dst, src interface{}) { vsrc := reflect.ValueOf(src) vdst := reflect.ValueOf(dst).Elem() for _, f := range fields { fdst := vdst.FieldByIndex(f.Index) fsrc := vsrc.FieldByIndex(f.Index) fdst.Set(fsrc) } } func jsonRoundTrip(t *testing.T, in, out interface{}) { bytes, err := json.Marshal(in) if err != nil { t.Fatal(err) } if err := json.Unmarshal(bytes, out); err != nil { t.Fatal(err) } } type S3 struct { S4 Abc int AbC int Tag int X int `json:"Tag"` unexported int } type S4 struct { ABc int Y int `json:"Abc"` // ignored because of top-level Abc } func TestMatchExact(t *testing.T) { fields, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(S3{})) if err != nil { t.Fatal(err) } for _, test := range []struct { name string want *Field }{ // Exact match wins. {"Abc", field("Abc", int(0), 1)}, {"AbC", field("AbC", int(0), 2)}, {"ABc", field("ABc", int(0), 0, 0)}, // Matches must be exact. {"abc", nil}, // Tag name takes precedence over untagged field of the same name. {"Tag", tfield("Tag", int(0), 4)}, // Unexported fields disappear. {"unexported", nil}, // Untagged embedded structs disappear. {"S4", nil}, } { if got := fields.MatchExact(test.name); !fieldsEqual(got, test.want) { t.Errorf("match %q:\ngot %+v\nwant %+v", test.name, got, test.want) } } } func TestMatchFold(t *testing.T) { fields, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(S3{})) if err != nil { t.Fatal(err) } for _, test := range []struct { name string want *Field }{ // Exact match wins. {"Abc", field("Abc", int(0), 1)}, {"AbC", field("AbC", int(0), 2)}, {"ABc", field("ABc", int(0), 0, 0)}, // If there are multiple matches but no exact match or tag, // the first field wins, lexicographically by index. // Here, "ABc" is at a deeper embedding level, but since S4 appears // first in S3, its index precedes the other fields of S3. {"abc", field("ABc", int(0), 0, 0)}, // Tag name takes precedence over untagged field of the same name. {"Tag", tfield("Tag", int(0), 4)}, // Unexported fields disappear. {"unexported", nil}, // Untagged embedded structs disappear. {"S4", nil}, } { if got := fields.MatchFold(test.name); !fieldsEqual(got, test.want) { t.Errorf("match %q:\ngot %+v\nwant %+v", test.name, got, test.want) } } } func TestAgainstJSONMatchingField(t *testing.T) { s3 := S3{ S4: S4{ABc: 1, Y: 2}, Abc: 3, AbC: 4, Tag: 5, X: 6, unexported: 7, } var want S3 jsonRoundTrip(t, s3, &want) v := reflect.ValueOf(want) fields, err := NewCache(jsonTagParser, nil, nil).Fields(reflect.TypeOf(S3{})) if err != nil { t.Fatal(err) } for _, test := range []struct { name string got int }{ {"Abc", 3}, {"AbC", 4}, {"ABc", 1}, {"abc", 1}, {"Tag", 6}, } { f := fields.MatchFold(test.name) if f == nil { t.Fatalf("%s: no match", test.name) } w := v.FieldByIndex(f.Index).Interface() if test.got != w { t.Errorf("%s: got %d, want %d", test.name, test.got, w) } } } func TestTagErrors(t *testing.T) { called := false c := NewCache(func(t reflect.StructTag) (string, bool, interface{}, error) { called = true s := t.Get("f") if s == "bad" { return "", false, nil, errors.New("error") } return s, true, nil, nil }, nil, nil) type T struct { X int `f:"ok"` Y int `f:"bad"` } _, err := c.Fields(reflect.TypeOf(T{})) if !called { t.Fatal("tag parser not called") } if err == nil { t.Error("want error, got nil") } // Second time, we should cache the error. called = false _, err = c.Fields(reflect.TypeOf(T{})) if called { t.Fatal("tag parser called on second time") } if err == nil { t.Error("want error, got nil") } } go-cloud-0.20.0/docstore/internal/fields/fold.go000066400000000000000000000077501367004507500215010ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package fields // This file was copied from https://go.googlesource.com/go/+/go1.7.3/src/encoding/json/fold.go. // Only the license and package were changed. import ( "bytes" "unicode/utf8" ) const ( caseMask = ^byte(0x20) // Mask to ignore case in ASCII. kelvin = '\u212a' smallLongEss = '\u017f' ) // foldFunc returns one of four different case folding equivalence // functions, from most general (and slow) to fastest: // // 1) bytes.EqualFold, if the key s contains any non-ASCII UTF-8 // 2) equalFoldRight, if s contains special folding ASCII ('k', 'K', 's', 'S') // 3) asciiEqualFold, no special, but includes non-letters (including _) // 4) simpleLetterEqualFold, no specials, no non-letters. // // The letters S and K are special because they map to 3 runes, not just 2: // * S maps to s and to U+017F 'ſ' Latin small letter long s // * k maps to K and to U+212A 'K' Kelvin sign // See https://play.golang.org/p/tTxjOc0OGo // // The returned function is specialized for matching against s and // should only be given s. It's not curried for performance reasons. func foldFunc(s []byte) func(s, t []byte) bool { nonLetter := false special := false // special letter for _, b := range s { if b >= utf8.RuneSelf { return bytes.EqualFold } upper := b & caseMask if upper < 'A' || upper > 'Z' { nonLetter = true } else if upper == 'K' || upper == 'S' { // See above for why these letters are special. special = true } } if special { return equalFoldRight } if nonLetter { return asciiEqualFold } return simpleLetterEqualFold } // equalFoldRight is a specialization of bytes.EqualFold when s is // known to be all ASCII (including punctuation), but contains an 's', // 'S', 'k', or 'K', requiring a Unicode fold on the bytes in t. // See comments on foldFunc. func equalFoldRight(s, t []byte) bool { for _, sb := range s { if len(t) == 0 { return false } tb := t[0] if tb < utf8.RuneSelf { if sb != tb { sbUpper := sb & caseMask if 'A' <= sbUpper && sbUpper <= 'Z' { if sbUpper != tb&caseMask { return false } } else { return false } } t = t[1:] continue } // sb is ASCII and t is not. t must be either kelvin // sign or long s; sb must be s, S, k, or K. tr, size := utf8.DecodeRune(t) switch sb { case 's', 'S': if tr != smallLongEss { return false } case 'k', 'K': if tr != kelvin { return false } default: return false } t = t[size:] } if len(t) > 0 { return false } return true } // asciiEqualFold is a specialization of bytes.EqualFold for use when // s is all ASCII (but may contain non-letters) and contains no // special-folding letters. // See comments on foldFunc. func asciiEqualFold(s, t []byte) bool { if len(s) != len(t) { return false } for i, sb := range s { tb := t[i] if sb == tb { continue } if ('a' <= sb && sb <= 'z') || ('A' <= sb && sb <= 'Z') { if sb&caseMask != tb&caseMask { return false } } else { return false } } return true } // simpleLetterEqualFold is a specialization of bytes.EqualFold for // use when s is all ASCII letters (no underscores, etc) and also // doesn't contain 'k', 'K', 's', or 'S'. // See comments on foldFunc. func simpleLetterEqualFold(s, t []byte) bool { if len(s) != len(t) { return false } for i, b := range s { if b&caseMask != t[i]&caseMask { return false } } return true } go-cloud-0.20.0/docstore/internal/fields/fold_test.go000066400000000000000000000067561367004507500225450ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package fields // This file was copied from https://go.googlesource.com/go/+/go1.7.3/src/encoding/json/fold_test.go. // Only the license and package were changed. import ( "bytes" "strings" "testing" "unicode/utf8" ) var foldTests = []struct { fn func(s, t []byte) bool s, t string want bool }{ {equalFoldRight, "", "", true}, {equalFoldRight, "a", "a", true}, {equalFoldRight, "", "a", false}, {equalFoldRight, "a", "", false}, {equalFoldRight, "a", "A", true}, {equalFoldRight, "AB", "ab", true}, {equalFoldRight, "AB", "ac", false}, {equalFoldRight, "sbkKc", "ſbKKc", true}, {equalFoldRight, "SbKkc", "ſbKKc", true}, {equalFoldRight, "SbKkc", "ſbKK", false}, {equalFoldRight, "e", "é", false}, {equalFoldRight, "s", "S", true}, {simpleLetterEqualFold, "", "", true}, {simpleLetterEqualFold, "abc", "abc", true}, {simpleLetterEqualFold, "abc", "ABC", true}, {simpleLetterEqualFold, "abc", "ABCD", false}, {simpleLetterEqualFold, "abc", "xxx", false}, {asciiEqualFold, "a_B", "A_b", true}, {asciiEqualFold, "aa@", "aa`", false}, // verify 0x40 and 0x60 aren't case-equivalent } func TestFold(t *testing.T) { for i, tt := range foldTests { if got := tt.fn([]byte(tt.s), []byte(tt.t)); got != tt.want { t.Errorf("%d. %q, %q = %v; want %v", i, tt.s, tt.t, got, tt.want) } truth := strings.EqualFold(tt.s, tt.t) if truth != tt.want { t.Errorf("strings.EqualFold doesn't agree with case %d", i) } } } func TestFoldAgainstUnicode(t *testing.T) { const bufSize = 5 buf1 := make([]byte, 0, bufSize) buf2 := make([]byte, 0, bufSize) var runes []rune for i := 0x20; i <= 0x7f; i++ { runes = append(runes, rune(i)) } runes = append(runes, kelvin, smallLongEss) funcs := []struct { name string fold func(s, t []byte) bool letter bool // must be ASCII letter simple bool // must be simple ASCII letter (not 'S' or 'K') }{ { name: "equalFoldRight", fold: equalFoldRight, }, { name: "asciiEqualFold", fold: asciiEqualFold, simple: true, }, { name: "simpleLetterEqualFold", fold: simpleLetterEqualFold, simple: true, letter: true, }, } for _, ff := range funcs { for _, r := range runes { if r >= utf8.RuneSelf { continue } if ff.letter && !isASCIILetter(byte(r)) { continue } if ff.simple && (r == 's' || r == 'S' || r == 'k' || r == 'K') { continue } for _, r2 := range runes { buf1 := append(buf1[:0], 'x') buf2 := append(buf2[:0], 'x') buf1 = buf1[:1+utf8.EncodeRune(buf1[1:bufSize], r)] buf2 = buf2[:1+utf8.EncodeRune(buf2[1:bufSize], r2)] buf1 = append(buf1, 'x') buf2 = append(buf2, 'x') want := bytes.EqualFold(buf1, buf2) if got := ff.fold(buf1, buf2); got != want { t.Errorf("%s(%q, %q) = %v; want %v", ff.name, buf1, buf2, got, want) } } } } } func isASCIILetter(b byte) bool { return ('A' <= b && b <= 'Z') || ('a' <= b && b <= 'z') } go-cloud-0.20.0/docstore/memdocstore/000077500000000000000000000000001367004507500174545ustar00rootroot00000000000000go-cloud-0.20.0/docstore/memdocstore/codec.go000066400000000000000000000111311367004507500210550ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memdocstore import ( "fmt" "reflect" "time" "gocloud.dev/gcerrors" "gocloud.dev/docstore/driver" ) // encodeDoc encodes a driver.Document as a storedDoc. func encodeDoc(doc driver.Document) (storedDoc, error) { var e encoder if err := doc.Encode(&e); err != nil { return nil, err } return storedDoc(e.val.(map[string]interface{})), nil } func encodeValue(v interface{}) (interface{}, error) { var e encoder if err := driver.Encode(reflect.ValueOf(v), &e); err != nil { return nil, err } return e.val, nil } type encoder struct { val interface{} } func (e *encoder) EncodeNil() { e.val = nil } func (e *encoder) EncodeBool(x bool) { e.val = x } func (e *encoder) EncodeInt(x int64) { e.val = x } func (e *encoder) EncodeUint(x uint64) { e.val = int64(x) } func (e *encoder) EncodeBytes(x []byte) { e.val = x } func (e *encoder) EncodeFloat(x float64) { e.val = x } func (e *encoder) EncodeString(x string) { e.val = x } func (e *encoder) ListIndex(int) { panic("impossible") } func (e *encoder) MapKey(string) { panic("impossible") } var typeOfGoTime = reflect.TypeOf(time.Time{}) func (e *encoder) EncodeSpecial(v reflect.Value) (bool, error) { if v.Type() == typeOfGoTime { e.val = v.Interface() return true, nil } return false, nil } func (e *encoder) EncodeList(n int) driver.Encoder { // All slices and arrays are encoded as []interface{} s := make([]interface{}, n) e.val = s return &listEncoder{s: s} } type listEncoder struct { s []interface{} encoder } func (e *listEncoder) ListIndex(i int) { e.s[i] = e.val } type mapEncoder struct { m map[string]interface{} encoder } func (e *encoder) EncodeMap(n int) driver.Encoder { m := make(map[string]interface{}, n) e.val = m return &mapEncoder{m: m} } func (e *mapEncoder) MapKey(k string) { e.m[k] = e.val } //////////////////////////////////////////////////////////////// // decodeDoc decodes m into ddoc. func decodeDoc(m storedDoc, ddoc driver.Document, fps [][]string) error { var m2 map[string]interface{} if len(fps) == 0 { m2 = m } else { // Make a document to decode from that has only the field paths. // (We don't need the key field because ddoc must already have it.) m2 = map[string]interface{}{} for _, fp := range fps { val, err := getAtFieldPath(m, fp) if err != nil { if gcerrors.Code(err) == gcerrors.NotFound { continue } return err } if err := setAtFieldPath(m2, fp, val); err != nil { return err } } } return ddoc.Decode(decoder{m2}) } type decoder struct { val interface{} } func (d decoder) String() string { return fmt.Sprint(d.val) } func (d decoder) AsNull() bool { return d.val == nil } func (d decoder) AsBool() (bool, bool) { b, ok := d.val.(bool) return b, ok } func (d decoder) AsString() (string, bool) { s, ok := d.val.(string) return s, ok } func (d decoder) AsInt() (int64, bool) { i, ok := d.val.(int64) return i, ok } func (d decoder) AsUint() (uint64, bool) { i, ok := d.val.(int64) return uint64(i), ok } func (d decoder) AsFloat() (float64, bool) { f, ok := d.val.(float64) return f, ok } func (d decoder) AsBytes() ([]byte, bool) { bs, ok := d.val.([]byte) return bs, ok } func (d decoder) AsInterface() (interface{}, error) { return d.val, nil } func (d decoder) ListLen() (int, bool) { if s, ok := d.val.([]interface{}); ok { return len(s), true } return 0, false } func (d decoder) DecodeList(f func(i int, d2 driver.Decoder) bool) { for i, e := range d.val.([]interface{}) { if !f(i, decoder{e}) { return } } } func (d decoder) MapLen() (int, bool) { if m, ok := d.val.(map[string]interface{}); ok { return len(m), true } return 0, false } func (d decoder) DecodeMap(f func(key string, d2 driver.Decoder, _ bool) bool) { for k, v := range d.val.(map[string]interface{}) { if !f(k, decoder{v}, true) { return } } } func (d decoder) AsSpecial(v reflect.Value) (bool, interface{}, error) { if v.Type() == typeOfGoTime { return true, d.val, nil } return false, nil, nil } go-cloud-0.20.0/docstore/memdocstore/codec_test.go000066400000000000000000000063211367004507500221210ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memdocstore import ( "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/docstore/drivertest" ) type aStruct struct { X int embed Z *bool W uint T time.Time L []int F float32 B []byte } type embed struct { Y string } func TestEncodeDoc(t *testing.T) { var b bool = true tm := time.Now() for _, test := range []struct { in interface{} want storedDoc }{ { in: map[string]interface{}{ "x": map[int]interface{}{ 1: "a", 2: 17, 3: []float32{1.0, 2.5}, 4: map[string]bool{"false": false, "true": true}, }, }, want: storedDoc{ "x": map[string]interface{}{ "1": "a", "2": int64(17), "3": []interface{}{float64(1.0), float64(2.5)}, "4": map[string]interface{}{"false": false, "true": true}, }, }, }, { in: &aStruct{ X: 3, embed: embed{Y: "y"}, Z: &b, W: 33, T: tm, L: []int{4, 5}, F: 2.5, B: []byte("abc"), }, want: storedDoc{ "X": int64(3), "Y": "y", "Z": true, "W": int64(33), "T": tm, "L": []interface{}{int64(4), int64(5)}, "F": 2.5, "B": []byte("abc"), }, }, } { doc := drivertest.MustDocument(test.in) got, err := encodeDoc(doc) if err != nil { t.Fatal(err) } if diff := cmp.Diff(got, test.want); diff != "" { t.Errorf("%+v: %s", test.in, diff) } } } func TestDecodeDoc(t *testing.T) { var b bool = true tm := time.Now() for _, test := range []struct { in storedDoc val interface{} want interface{} }{ { storedDoc{ "x": map[string]interface{}{ "1": "a", "2": int64(17), "3": []interface{}{float64(1.0), float64(2.5)}, "4": map[string]interface{}{"false": false, "true": true}, }, }, map[string]interface{}{}, map[string]interface{}{ "x": map[string]interface{}{ "1": "a", "2": int64(17), "3": []interface{}{1.0, 2.5}, "4": map[string]interface{}{"false": false, "true": true}, }, }, }, { storedDoc{ "X": int64(3), "Y": "y", "Z": true, "W": int64(33), "T": tm, "L": []interface{}{int64(4), int64(5)}, "F": 2.5, "B": []byte("abc"), }, &aStruct{}, &aStruct{ X: 3, embed: embed{Y: "y"}, Z: &b, W: 33, T: tm, L: []int{4, 5}, F: 2.5, B: []byte("abc"), }, }, } { got := test.val doc := drivertest.MustDocument(test.val) if err := decodeDoc(test.in, doc, nil); err != nil { t.Fatal(err) } if diff := cmp.Diff(got, test.want, cmp.AllowUnexported(aStruct{})); diff != "" { t.Errorf("%+v: %s", test.in, diff) } } } go-cloud-0.20.0/docstore/memdocstore/example_test.go000066400000000000000000000045001367004507500224740ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memdocstore_test import ( "context" "log" "gocloud.dev/docstore" "gocloud.dev/docstore/memdocstore" ) func ExampleOpenCollection() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. coll, err := memdocstore.OpenCollection("keyField", nil) if err != nil { log.Fatal(err) } defer coll.Close() // PRAGMA: On gocloud.dev, hide lines until the next blank line. // Output: } func ExampleOpenCollectionWithKeyFunc() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. type HighScore struct { Game string Player string } // The name of a document is constructed from the Game and Player fields. nameFromDocument := func(doc docstore.Document) interface{} { hs := doc.(*HighScore) return hs.Game + "|" + hs.Player } coll, err := memdocstore.OpenCollectionWithKeyFunc(nameFromDocument, nil) if err != nil { log.Fatal(err) } defer coll.Close() // PRAGMA: On gocloud.dev, hide lines until the next blank line. // Output: } func Example_openCollectionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/docstore/memdocstore" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // docstore.OpenCollection creates a *docstore.Collection from a URL. coll, err := docstore.OpenCollection(ctx, "mem://collection/keyField") if err != nil { log.Fatal(err) } defer coll.Close() // PRAGMA: On gocloud.dev, hide lines until the next blank line. // Output: } go-cloud-0.20.0/docstore/memdocstore/mem.go000066400000000000000000000373641367004507500205760ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package memdocstore provides an in-process in-memory implementation of the docstore // API. It is suitable for local development and testing. // // Every document in a memdocstore collection has a unique primary key. The primary // key values need not be strings; they may be any comparable Go value. // // // Action Lists // // Action lists are executed concurrently. Each action in an action list is executed // in a separate goroutine. // // memdocstore calls the BeforeDo function of an ActionList once before executing the // actions. Its As function never returns true. // // // URLs // // For docstore.OpenCollection, memdocstore registers for the scheme // "mem". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. package memdocstore // import "gocloud.dev/docstore/memdocstore" import ( "context" "encoding/gob" "fmt" "os" "reflect" "sort" "strconv" "strings" "sync" "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" ) // Options are optional arguments to the OpenCollection functions. type Options struct { // The name of the field holding the document revision. // Defaults to docstore.DefaultRevisionField. RevisionField string // The maximum number of concurrent goroutines started for a single call to // ActionList.Do. If less than 1, there is no limit. MaxOutstandingActions int // The filename associated with this collection. // When a collection is opened with a non-nil filename, the collection // is loaded from the file if it exists. Otherwise, an empty collection is created. // When the collection is closed, its contents are saved to the file. Filename string // Call this function when the collection is closed. // For internal use only. onClose func() } // TODO(jba): make this package thread-safe. // OpenCollection creates a *docstore.Collection backed by memory. keyField is the // document field holding the primary key of the collection. func OpenCollection(keyField string, opts *Options) (*docstore.Collection, error) { c, err := newCollection(keyField, nil, opts) if err != nil { return nil, err } return docstore.NewCollection(c), nil } // OpenCollectionWithKeyFunc creates a *docstore.Collection backed by memory. keyFunc takes // a document and returns the document's primary key. It should return nil if the // document is missing the information to construct a key. This will cause all // actions, even Create, to fail. // // For the collection to be usable with Query.Delete and Query.Update, // keyFunc must work with map[string]interface{} as well as whatever // struct type the collection normally uses (if any). func OpenCollectionWithKeyFunc(keyFunc func(docstore.Document) interface{}, opts *Options) (*docstore.Collection, error) { c, err := newCollection("", keyFunc, opts) if err != nil { return nil, err } return docstore.NewCollection(c), nil } func newCollection(keyField string, keyFunc func(docstore.Document) interface{}, opts *Options) (driver.Collection, error) { if keyField == "" && keyFunc == nil { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "must provide either keyField or keyFunc") } if opts == nil { opts = &Options{} } if opts.RevisionField == "" { opts.RevisionField = docstore.DefaultRevisionField } docs, err := loadDocs(opts.Filename) if err != nil { return nil, err } return &collection{ keyField: keyField, keyFunc: keyFunc, docs: docs, opts: opts, curRevision: 0, }, nil } // A storedDoc is a document that is stored in a collection. // // We store documents as maps from keys to values. Even if the user is using // map[string]interface{}, we make our own copy. // // Using a separate helps distinguish documents coming from a user (those "on // the client," in a more typical driver that acts as a network client) from // those stored in a collection (those "on the server"). type storedDoc map[string]interface{} type collection struct { keyField string keyFunc func(docstore.Document) interface{} opts *Options mu sync.Mutex docs map[interface{}]storedDoc curRevision int64 // incremented on each write } func (c *collection) Key(doc driver.Document) (interface{}, error) { if c.keyField != "" { key, _ := doc.GetField(c.keyField) // no error on missing key, and it will be nil return key, nil } key := c.keyFunc(doc.Origin) if key == nil || driver.IsEmptyValue(reflect.ValueOf(key)) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "missing document key") } return key, nil } func (c *collection) RevisionField() string { return c.opts.RevisionField } // ErrorCode implements driver.ErrorCode. func (c *collection) ErrorCode(err error) gcerrors.ErrorCode { return gcerrors.Code(err) } // RunActions implements driver.RunActions. func (c *collection) RunActions(ctx context.Context, actions []*driver.Action, opts *driver.RunActionsOptions) driver.ActionListError { errs := make([]error, len(actions)) // Run the actions concurrently with each other. run := func(as []*driver.Action) { t := driver.NewThrottle(c.opts.MaxOutstandingActions) for _, a := range as { a := a t.Acquire() go func() { defer t.Release() errs[a.Index] = c.runAction(ctx, a) }() } t.Wait() } if opts.BeforeDo != nil { if err := opts.BeforeDo(func(interface{}) bool { return false }); err != nil { for i := range errs { errs[i] = err } return driver.NewActionListError(errs) } } beforeGets, gets, writes, afterGets := driver.GroupActions(actions) run(beforeGets) run(gets) run(writes) run(afterGets) return driver.NewActionListError(errs) } // runAction executes a single action. func (c *collection) runAction(ctx context.Context, a *driver.Action) error { // Stop if the context is done. if ctx.Err() != nil { return ctx.Err() } // Get the key from the doc so we can look it up in the map. c.mu.Lock() defer c.mu.Unlock() // If there is a key, get the current document with that key. var ( current storedDoc exists bool ) if a.Key != nil { current, exists = c.docs[a.Key] } // Check for a NotFound error. if !exists && (a.Kind == driver.Replace || a.Kind == driver.Update || a.Kind == driver.Get) { return gcerr.Newf(gcerr.NotFound, nil, "document with key %v does not exist", a.Key) } switch a.Kind { case driver.Create: // It is an error to attempt to create an existing document. if exists { return gcerr.Newf(gcerr.AlreadyExists, nil, "Create: document with key %v exists", a.Key) } // If the user didn't supply a value for the key field, create a new one. if a.Key == nil { a.Key = driver.UniqueString() // Set the new key in the document. if err := a.Doc.SetField(c.keyField, a.Key); err != nil { return gcerr.Newf(gcerr.InvalidArgument, nil, "cannot set key field %q", c.keyField) } } fallthrough case driver.Replace, driver.Put: if err := c.checkRevision(a.Doc, current); err != nil { return err } doc, err := encodeDoc(a.Doc) if err != nil { return err } if a.Doc.HasField(c.opts.RevisionField) { c.changeRevision(doc) if err := a.Doc.SetField(c.opts.RevisionField, doc[c.opts.RevisionField]); err != nil { return err } } c.docs[a.Key] = doc case driver.Delete: if err := c.checkRevision(a.Doc, current); err != nil { return err } delete(c.docs, a.Key) case driver.Update: if err := c.checkRevision(a.Doc, current); err != nil { return err } if err := c.update(current, a.Mods); err != nil { return err } if a.Doc.HasField(c.opts.RevisionField) { c.changeRevision(current) if err := a.Doc.SetField(c.opts.RevisionField, current[c.opts.RevisionField]); err != nil { return err } } case driver.Get: // We've already retrieved the document into current, above. // Now we copy its fields into the user-provided document. if err := decodeDoc(current, a.Doc, a.FieldPaths); err != nil { return err } default: return gcerr.Newf(gcerr.Internal, nil, "unknown kind %v", a.Kind) } return nil } // Must be called with the lock held. // Does not change the stored doc's revision field; that is up to the caller. func (c *collection) update(doc storedDoc, mods []driver.Mod) error { // Sort mods by first field path element so tests are deterministic. sort.Slice(mods, func(i, j int) bool { return mods[i].FieldPath[0] < mods[j].FieldPath[0] }) // To make update atomic, we first convert the actions into a form that can't // fail. type guaranteedMod struct { parentMap map[string]interface{} // the map holding the key to be modified key string encodedValue interface{} // the value after encoding } gmods := make([]guaranteedMod, len(mods)) var err error for i, mod := range mods { gmod := &gmods[i] // Check that the field path is valid. That is, every component of the path // but the last refers to a map, and no component along the way is nil. if gmod.parentMap, err = getParentMap(doc, mod.FieldPath, false); err != nil { return err } gmod.key = mod.FieldPath[len(mod.FieldPath)-1] if inc, ok := mod.Value.(driver.IncOp); ok { amt, err := encodeValue(inc.Amount) if err != nil { return err } if gmod.encodedValue, err = add(gmod.parentMap[gmod.key], amt); err != nil { return err } } else if mod.Value != nil { // Make sure the value encodes successfully. if gmod.encodedValue, err = encodeValue(mod.Value); err != nil { return err } } } // Now execute the guaranteed mods. for _, m := range gmods { if m.encodedValue == nil { delete(m.parentMap, m.key) } else { m.parentMap[m.key] = m.encodedValue } } return nil } // Add two encoded numbers. // Since they're encoded, they are either int64 or float64. // Allow adding a float to an int, producing a float. // TODO(jba): see how other drivers handle that. func add(x, y interface{}) (interface{}, error) { if x == nil { return y, nil } switch x := x.(type) { case int64: switch y := y.(type) { case int64: return x + y, nil case float64: return float64(x) + y, nil default: // This shouldn't happen because it should be checked by docstore. return nil, gcerr.Newf(gcerr.Internal, nil, "bad increment aount type %T", y) } case float64: switch y := y.(type) { case int64: return x + float64(y), nil case float64: return x + y, nil default: // This shouldn't happen because it should be checked by docstore. return nil, gcerr.Newf(gcerr.Internal, nil, "bad increment aount type %T", y) } default: return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "value %v being incremented not int64 or float64", x) } } // Must be called with the lock held. func (c *collection) changeRevision(doc storedDoc) { c.curRevision++ doc[c.opts.RevisionField] = c.curRevision } func (c *collection) checkRevision(arg driver.Document, current storedDoc) error { if current == nil { return nil // no existing document or the incoming doc has no revision } curRev, ok := current[c.opts.RevisionField] if !ok { return nil // there is no revision to check } curRev = curRev.(int64) r, err := arg.GetField(c.opts.RevisionField) if err != nil || r == nil { return nil // no incoming revision information: nothing to check } wantRev, ok := r.(int64) if !ok { return gcerr.Newf(gcerr.InvalidArgument, nil, "revision field %s is not an int64", c.opts.RevisionField) } if wantRev != curRev { return gcerr.Newf(gcerr.FailedPrecondition, nil, "mismatched revisions: want %d, current %d", wantRev, curRev) } return nil } // getAtFieldPath gets the value of m at fp. It returns an error if fp is invalid // (see getParentMap). func getAtFieldPath(m map[string]interface{}, fp []string) (interface{}, error) { m2, err := getParentMap(m, fp, false) if err != nil { return nil, err } v, ok := m2[fp[len(fp)-1]] if ok { return v, nil } return nil, gcerr.Newf(gcerr.NotFound, nil, "field %s not found", fp) } // setAtFieldPath sets m's value at fp to val. It creates intermediate maps as // needed. It returns an error if a non-final component of fp does not denote a map. func setAtFieldPath(m map[string]interface{}, fp []string, val interface{}) error { m2, err := getParentMap(m, fp, true) if err != nil { return err } m2[fp[len(fp)-1]] = val return nil } // Delete the value from m at the given field path, if it exists. func deleteAtFieldPath(m map[string]interface{}, fp []string) { m2, _ := getParentMap(m, fp, false) // ignore error if m2 != nil { delete(m2, fp[len(fp)-1]) } } // getParentMap returns the map that directly contains the given field path; // that is, the value of m at the field path that excludes the last component // of fp. If a non-map is encountered along the way, an InvalidArgument error is // returned. If nil is encountered, nil is returned unless create is true, in // which case a map is added at that point. func getParentMap(m map[string]interface{}, fp []string, create bool) (map[string]interface{}, error) { var ok bool for _, k := range fp[:len(fp)-1] { if m[k] == nil { if !create { return nil, nil } m[k] = map[string]interface{}{} } m, ok = m[k].(map[string]interface{}) if !ok { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "invalid field path %q at %q", strings.Join(fp, "."), k) } } return m, nil } // RevisionToBytes implements driver.RevisionToBytes. func (c *collection) RevisionToBytes(rev interface{}) ([]byte, error) { r, ok := rev.(int64) if !ok { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "revision %v of type %[1]T is not an int64", rev) } return strconv.AppendInt(nil, r, 10), nil } // BytesToRevision implements driver.BytesToRevision. func (c *collection) BytesToRevision(b []byte) (interface{}, error) { return strconv.ParseInt(string(b), 10, 64) } // As implements driver.As. func (c *collection) As(i interface{}) bool { return false } // As implements driver.Collection.ErrorAs. func (c *collection) ErrorAs(err error, i interface{}) bool { return false } // Close implements driver.Collection.Close. // If the collection was created with a Filename option, Close writes the // collection's documents to the file. func (c *collection) Close() error { if c.opts.onClose != nil { c.opts.onClose() } return saveDocs(c.opts.Filename, c.docs) } type mapOfDocs = map[interface{}]storedDoc // Read a map from the filename if is is not empty and the file exists. // Otherwise return an empty (not nil) map. func loadDocs(filename string) (mapOfDocs, error) { if filename == "" { return mapOfDocs{}, nil } f, err := os.Open(filename) if err != nil { if !os.IsNotExist(err) { return nil, err } // If the file doesn't exist, return an empty map without error. return mapOfDocs{}, nil } defer f.Close() var m mapOfDocs if err := gob.NewDecoder(f).Decode(&m); err != nil { return nil, fmt.Errorf("failed to decode from %q: %v", filename, err) } return m, nil } // saveDocs saves m to filename if filename is not empty. func saveDocs(filename string, m mapOfDocs) error { if filename == "" { return nil } f, err := os.Create(filename) if err != nil { return err } if err := gob.NewEncoder(f).Encode(m); err != nil { _ = f.Close() return fmt.Errorf("failed to encode to %q: %v", filename, err) } return f.Close() } go-cloud-0.20.0/docstore/memdocstore/mem_test.go000066400000000000000000000131151367004507500216210ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memdocstore import ( "context" "io/ioutil" "os" "path/filepath" "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/docstore/drivertest" ) type harness struct{} func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return &harness{}, nil } func (h *harness) MakeCollection(_ context.Context, kind drivertest.CollectionKind) (driver.Collection, error) { switch kind { case drivertest.SingleKey, drivertest.NoRev: return newCollection(drivertest.KeyField, nil, nil) case drivertest.TwoKey: return newCollection("", drivertest.HighScoreKey, nil) case drivertest.AltRev: return newCollection(drivertest.KeyField, nil, &Options{RevisionField: drivertest.AlternateRevisionField}) default: panic("bad kind") } } func (*harness) BeforeDoTypes() []interface{} { return nil } func (*harness) BeforeQueryTypes() []interface{} { return nil } func (*harness) RevisionsEqual(rev1, rev2 interface{}) bool { return rev1 == rev2 } func (*harness) Close() {} func TestConformance(t *testing.T) { // CodecTester is nil because memdocstore has no native representation. drivertest.RunConformanceTests(t, newHarness, nil, nil) } type docmap = map[string]interface{} // memdocstore-specific tests. // The following tests test memdocstore's backend implementation. func TestUpdateEncodesValues(t *testing.T) { // Check that update encodes the values in mods. ctx := context.Background() dc, err := newCollection(drivertest.KeyField, nil, nil) if err != nil { t.Fatal(err) } coll := docstore.NewCollection(dc) defer coll.Close() doc := docmap{drivertest.KeyField: "testUpdateEncodes", "a": 1, dc.RevisionField(): nil} if err := coll.Put(ctx, doc); err != nil { t.Fatal(err) } if err := coll.Update(ctx, doc, docstore.Mods{"a": 2}); err != nil { t.Fatal(err) } got := docmap{drivertest.KeyField: doc[drivertest.KeyField]} // This Get will fail if the int value 2 in the above mod was not encoded to an int64. if err := coll.Get(ctx, got); err != nil { t.Fatal(err) } want := docmap{ drivertest.KeyField: doc[drivertest.KeyField], "a": int64(2), dc.RevisionField(): got[dc.RevisionField()], } if !cmp.Equal(got, want) { t.Errorf("got %v, want %v", got, want) } } func TestUpdateAtomic(t *testing.T) { // Check that update is atomic. ctx := context.Background() dc, err := newCollection(drivertest.KeyField, nil, nil) if err != nil { t.Fatal(err) } coll := docstore.NewCollection(dc) defer coll.Close() doc := docmap{drivertest.KeyField: "testUpdateAtomic", "a": "A", "b": "B", dc.RevisionField(): nil} mods := docstore.Mods{"a": "Y", "b.c": "Z"} // "b" is not a map, so "b.c" is an error if err := coll.Put(ctx, doc); err != nil { t.Fatal(err) } if errs := coll.Actions().Update(doc, mods).Do(ctx); errs == nil { t.Fatal("got nil, want errors") } got := docmap{drivertest.KeyField: doc[drivertest.KeyField]} if err := coll.Get(ctx, got); err != nil { t.Fatal(err) } want := docmap{ drivertest.KeyField: doc[drivertest.KeyField], dc.RevisionField(): got[dc.RevisionField()], "a": "A", "b": "B", } if !cmp.Equal(got, want) { t.Errorf("got %v, want %v", got, want) } } func TestSortDocs(t *testing.T) { newDocs := func() []storedDoc { return []storedDoc{ {"a": int64(1), "b": "1", "c": 3.0}, {"a": int64(2), "b": "2", "c": 4.0}, {"a": int64(3), "b": "3"}, // missing "c" } } inorder := newDocs() reversed := newDocs() for i := 0; i < len(reversed)/2; i++ { j := len(reversed) - i - 1 reversed[i], reversed[j] = reversed[j], reversed[i] } for _, test := range []struct { field string ascending bool want []storedDoc }{ {"a", true, inorder}, {"a", false, reversed}, {"b", true, inorder}, {"b", false, reversed}, {"c", true, inorder}, {"c", false, []storedDoc{inorder[1], inorder[0], inorder[2]}}, } { got := newDocs() sortDocs(got, test.field, test.ascending) if diff := cmp.Diff(got, test.want); diff != "" { t.Errorf("%q, asc=%t:\n%s", test.field, test.ascending, diff) } } } func TestSaveAndLoad(t *testing.T) { // Save and then load into a file. dir, err := ioutil.TempDir("", t.Name()) if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) // Load from nonexistent file should return empty data. f := filepath.Join(dir, "saveAndLoad") got, err := loadDocs(f) if err != nil { t.Fatalf("loading from nonexistent file, got %v, want nil", err) } if len(got) != 0 { t.Fatalf("loading from nonexistent file, got %v, want empty map", got) } // Save some data into the file. docs := map[interface{}]storedDoc{ "k1": {"key": "k1", "a": 1}, "k2": {"key": "k2", "b": 2}, } if err := saveDocs(f, docs); err != nil { t.Fatal(err) } // File should exist now. if _, err := os.Lstat(f); err != nil { t.Fatal(err) } // Reload the data. got, err = loadDocs(f) if err != nil { t.Fatal(err) } if !cmp.Equal(got, docs) { t.Errorf("\ngot %v\nwant %v", got, docs) } } go-cloud-0.20.0/docstore/memdocstore/query.go000066400000000000000000000073321367004507500211550ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memdocstore import ( "context" "io" "reflect" "sort" "strings" "time" "gocloud.dev/docstore/driver" ) func (c *collection) RunGetQuery(_ context.Context, q *driver.Query) (driver.DocumentIterator, error) { if q.BeforeQuery != nil { if err := q.BeforeQuery(func(interface{}) bool { return false }); err != nil { return nil, err } } c.mu.Lock() defer c.mu.Unlock() var resultDocs []storedDoc for _, doc := range c.docs { if q.Limit > 0 && len(resultDocs) == q.Limit { break } if filtersMatch(q.Filters, doc) { resultDocs = append(resultDocs, doc) } } if q.OrderByField != "" { sortDocs(resultDocs, q.OrderByField, q.OrderAscending) } // Include the key field in the field paths if there is one. var fps [][]string if len(q.FieldPaths) > 0 && c.keyField != "" { fps = append([][]string{{c.keyField}}, q.FieldPaths...) } else { fps = q.FieldPaths } return &docIterator{ docs: resultDocs, fieldPaths: fps, revField: c.opts.RevisionField, }, nil } func filtersMatch(fs []driver.Filter, doc storedDoc) bool { for _, f := range fs { if !filterMatches(f, doc) { return false } } return true } func filterMatches(f driver.Filter, doc storedDoc) bool { docval, err := getAtFieldPath(doc, f.FieldPath) // missing or bad field path => no match if err != nil { return false } c, ok := compare(docval, f.Value) if !ok { return false } return applyComparison(f.Op, c) } // op is one of the five permitted docstore operators ("=", "<", etc.) // c is the result of strings.Compare or the like. // TODO(jba): dedup from gcpfirestore/query? func applyComparison(op string, c int) bool { switch op { case driver.EqualOp: return c == 0 case ">": return c > 0 case "<": return c < 0 case ">=": return c >= 0 case "<=": return c <= 0 default: panic("bad op") } } func compare(x1, x2 interface{}) (int, bool) { v1 := reflect.ValueOf(x1) v2 := reflect.ValueOf(x2) if v1.Kind() == reflect.String && v2.Kind() == reflect.String { return strings.Compare(v1.String(), v2.String()), true } if cmp, err := driver.CompareNumbers(v1, v2); err == nil { return cmp, true } if t1, ok := x1.(time.Time); ok { if t2, ok := x2.(time.Time); ok { return driver.CompareTimes(t1, t2), true } } return 0, false } func sortDocs(docs []storedDoc, field string, asc bool) { sort.Slice(docs, func(i, j int) bool { c, ok := compare(docs[i][field], docs[j][field]) if !ok { return false } if asc { return c < 0 } else { return c > 0 } }) } type docIterator struct { docs []storedDoc fieldPaths [][]string revField string err error } func (it *docIterator) Next(ctx context.Context, doc driver.Document) error { if it.err != nil { return it.err } if len(it.docs) == 0 { it.err = io.EOF return it.err } if err := decodeDoc(it.docs[0], doc, it.fieldPaths); err != nil { it.err = err return it.err } it.docs = it.docs[1:] return nil } func (it *docIterator) Stop() { it.err = io.EOF } func (it *docIterator) As(i interface{}) bool { return false } func (c *collection) QueryPlan(q *driver.Query) (string, error) { return "", nil } go-cloud-0.20.0/docstore/memdocstore/urls.go000066400000000000000000000054141367004507500207740ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memdocstore import ( "context" "fmt" "net/url" "strings" "sync" "gocloud.dev/docstore" ) func init() { docstore.DefaultURLMux().RegisterCollection(Scheme, &URLOpener{}) } // Scheme is the URL scheme memdocstore registers its URLOpener under on // docstore.DefaultMux. const Scheme = "mem" // URLOpener opens URLs like "mem://collection/_id". // // The URL's host is the name of the collection. // The URL's path is used as the keyField. // // The following query parameters are supported: // // - revision_field (optional): the name of the revision field. // - filename (optional): the filename to store the collection in. type URLOpener struct { mu sync.Mutex collections map[string]urlColl } type urlColl struct { keyName string coll *docstore.Collection } // OpenCollectionURL opens a docstore.Collection based on u. func (o *URLOpener) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error) { q := u.Query() collName := u.Host if collName == "" { return nil, fmt.Errorf("open collection %v: empty collection name", u) } keyName := u.Path if strings.HasPrefix(keyName, "/") { keyName = keyName[1:] } if keyName == "" || strings.ContainsRune(keyName, '/') { return nil, fmt.Errorf("open collection %v: invalid key name %q (must be non-empty and have no slashes)", u, keyName) } options := &Options{ RevisionField: q.Get("revision_field"), Filename: q.Get("filename"), onClose: func() { o.mu.Lock() delete(o.collections, collName) o.mu.Unlock() }, } q.Del("revision_field") q.Del("filename") for param := range q { return nil, fmt.Errorf("open collection %v: invalid query parameter %q", u, param) } o.mu.Lock() defer o.mu.Unlock() if o.collections == nil { o.collections = map[string]urlColl{} } ucoll, ok := o.collections[collName] if !ok { coll, err := OpenCollection(keyName, options) if err != nil { return nil, err } o.collections[collName] = urlColl{keyName, coll} return coll, nil } if ucoll.keyName != keyName { return nil, fmt.Errorf("open collection %v: key name %q does not equal existing key name %q", u, keyName, ucoll.keyName) } return ucoll.coll, nil } go-cloud-0.20.0/docstore/memdocstore/urls_test.go000066400000000000000000000030301367004507500220230ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package memdocstore import ( "context" "testing" "gocloud.dev/docstore" ) func TestOpenCollectionFromURL(t *testing.T) { tests := []struct { URL string wantErr bool }{ // OK. {"mem://coll/_id", false}, // "coll" already has key "_id". {"mem://coll/foo.bar", true}, {"mem://coll2/foo.bar", false}, // Missing collection. {"mem://", true}, // Missing key. {"mem://coll", true}, // Key with slash. {"mem://coll/my/key", true}, // Passing revision field. {"mem://coll/_id?revision_field=123", false}, // Passing filename. {"mem://coll/_id?filename=foo.out", false}, // Invalid parameter. {"mem://coll/key?param=value", true}, } ctx := context.Background() for _, test := range tests { d, err := docstore.OpenCollection(ctx, test.URL) if d != nil { defer d.Close() } if (err != nil) != test.wantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.wantErr) } } } go-cloud-0.20.0/docstore/mongodocstore/000077500000000000000000000000001367004507500200155ustar00rootroot00000000000000go-cloud-0.20.0/docstore/mongodocstore/awsdocdb/000077500000000000000000000000001367004507500216035ustar00rootroot00000000000000go-cloud-0.20.0/docstore/mongodocstore/awsdocdb/main.tf000066400000000000000000000040771367004507500230720ustar00rootroot00000000000000# Specify the provider and access details provider "aws" { version = "~> 2.0" region = "${var.aws_region}" } resource "aws_security_group" "docdbtest" { name_prefix = "docdbtest" description = "Test mongo driver on docdb" vpc_id = "${var.vpc_id}" ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] description = "Public SSH access" } ingress { from_port = 0 to_port = 0 protocol = "-1" self = true description = "Allow traffic within the security group for port forwarding" } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } } # Provisioning a DocumentDB cluster with an instance. resource "aws_docdb_cluster_instance" "docdbtest" { cluster_identifier = "${aws_docdb_cluster.docdbtest.id}" identifier_prefix = "${aws_docdb_cluster.docdbtest.id}" instance_class = "db.r5.large" apply_immediately = true } resource "aws_docdb_cluster" "docdbtest" { cluster_identifier = "docstore-test-cluster" master_username = "${var.db_username}" master_password = "${var.db_password}" db_cluster_parameter_group_name = "docstore-test-pg" vpc_security_group_ids = ["${aws_security_group.docdbtest.id}"] skip_final_snapshot = true } # Provisioning an EC2 instance within the same VPC group for port forwarding. resource "aws_key_pair" "docdbtest" { key_name_prefix = "docdbtest" public_key = "${var.ssh_public_key}" } data "aws_ami" "ubuntu" { most_recent = true filter { name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*"] } filter { name = "virtualization-type" values = ["hvm"] } owners = ["099720109477"] } resource "aws_instance" "docdbtest" { ami = "${data.aws_ami.ubuntu.id}" instance_type = "t2.micro" vpc_security_group_ids = ["${aws_security_group.docdbtest.id}"] key_name = "${aws_key_pair.docdbtest.key_name}" associate_public_ip_address = true } go-cloud-0.20.0/docstore/mongodocstore/awsdocdb/outputs.tf000066400000000000000000000002241367004507500236570ustar00rootroot00000000000000output "setup_ssh_tunnel" { value = "ssh -L 27019:${aws_docdb_cluster.docdbtest.endpoint}:27017 ubuntu@${aws_instance.docdbtest.public_dns} -N" } go-cloud-0.20.0/docstore/mongodocstore/awsdocdb/variables.tf000066400000000000000000000011361367004507500241070ustar00rootroot00000000000000variable "aws_region" { description = "The AWS region to create docdb cluster and ec2 instance in." default = "us-east-2" } variable "vpc_id" { description = "The ID of the default VPC used by docdb cluster and ec2 instance." } variable "ssh_public_key" { description = "A public key line in .ssh/authorized_keys format to use to authenticate to your instance. This must be added to your SSH agent for provisioning to succeed." } variable "db_username" { description = "The master username to login docdb" } variable "db_password" { description = "The master password to login docdb" } go-cloud-0.20.0/docstore/mongodocstore/codec.go000066400000000000000000000144371367004507500214320ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mongodocstore import ( "fmt" "reflect" "strings" "time" "go.mongodb.org/mongo-driver/bson/primitive" "gocloud.dev/docstore/driver" ) // Encode and decode to map[string]interface{}. // This isn't ideal, because the mongo client encodes/decodes a second time. // TODO(jba): Benchmark the double decode to see if it's worth trying to avoid it. // This code is copied from memdocstore/codec.go, except for special treatment of // primitive.Binary. func encodeDoc(doc driver.Document, lowercaseFields bool) (map[string]interface{}, error) { e := encoder{lowercaseFields: lowercaseFields} if err := doc.Encode(&e); err != nil { return nil, err } return e.val.(map[string]interface{}), nil } func encodeValue(x interface{}) (interface{}, error) { var e encoder if err := driver.Encode(reflect.ValueOf(x), &e); err != nil { return nil, err } return e.val, nil } type encoder struct { val interface{} lowercaseFields bool } func (e *encoder) EncodeNil() { e.val = nil } func (e *encoder) EncodeBool(x bool) { e.val = x } func (e *encoder) EncodeInt(x int64) { e.val = x } func (e *encoder) EncodeUint(x uint64) { e.val = int64(x) } func (e *encoder) EncodeBytes(x []byte) { e.val = x } func (e *encoder) EncodeFloat(x float64) { e.val = x } func (e *encoder) EncodeString(x string) { e.val = x } func (e *encoder) ListIndex(int) { panic("impossible") } func (e *encoder) MapKey(string) { panic("impossible") } var ( typeOfGoTime = reflect.TypeOf(time.Time{}) typeOfObjectID = reflect.TypeOf(primitive.ObjectID{}) ) func (e *encoder) EncodeSpecial(v reflect.Value) (bool, error) { // Treat time specially as itself (otherwise its BinaryMarshal method will be called). // Also, ObjectIDs are already encoded. if v.Type() == typeOfGoTime || v.Type() == typeOfObjectID { e.val = v.Interface() return true, nil } return false, nil } func (e *encoder) EncodeList(n int) driver.Encoder { // All slices and arrays are encoded as []interface{} s := make([]interface{}, n) e.val = s return &listEncoder{s: s, encoder: encoder{lowercaseFields: e.lowercaseFields}} } type listEncoder struct { s []interface{} encoder } func (e *listEncoder) ListIndex(i int) { e.s[i] = e.val } type mapEncoder struct { m map[string]interface{} isStruct bool encoder } func (e *encoder) EncodeMap(n int) driver.Encoder { m := make(map[string]interface{}, n) e.val = m return &mapEncoder{m: m, encoder: encoder{lowercaseFields: e.lowercaseFields}} } func (e *mapEncoder) MapKey(k string) { if e.lowercaseFields { k = strings.ToLower(k) } e.m[k] = e.val } //////////////////////////////////////////////////////////////// // decodeDoc decodes m into ddoc. func decodeDoc(m map[string]interface{}, ddoc driver.Document, idField string, lowercaseFields bool) error { switch idField { case mongoIDField: // do nothing case "": // user uses idFunc delete(m, mongoIDField) default: // user documents have a different ID field m[idField] = m[mongoIDField] delete(m, mongoIDField) } return ddoc.Decode(decoder{val: m, lowercaseFields: lowercaseFields}) } type decoder struct { val interface{} lowercaseFields bool } func (d decoder) String() string { return fmt.Sprint(d.val) } func (d decoder) AsNull() bool { return d.val == nil } func (d decoder) AsBool() (bool, bool) { b, ok := d.val.(bool) return b, ok } func (d decoder) AsString() (string, bool) { s, ok := d.val.(string) return s, ok } func (d decoder) AsInt() (int64, bool) { switch v := d.val.(type) { case int64: return v, true case int32: return int64(v), true default: return 0, false } } func (d decoder) AsUint() (uint64, bool) { i, ok := d.val.(int64) return uint64(i), ok } func (d decoder) AsFloat() (float64, bool) { f, ok := d.val.(float64) return f, ok } func (d decoder) AsBytes() ([]byte, bool) { switch v := d.val.(type) { case []byte: return v, true case primitive.Binary: return v.Data, true default: return nil, false } } func (d decoder) AsInterface() (interface{}, error) { return toGoValue(d.val) } func toGoValue(v interface{}) (interface{}, error) { switch v := v.(type) { case primitive.A: r := make([]interface{}, len(v)) for i, e := range v { d, err := toGoValue(e) if err != nil { return nil, err } r[i] = d } return r, nil case primitive.Binary: return v.Data, nil case primitive.DateTime: return bsonDateTimeToTime(v), nil case map[string]interface{}: r := map[string]interface{}{} for k, e := range v { d, err := toGoValue(e) if err != nil { return nil, err } r[k] = d } return r, nil default: return v, nil } } func (d decoder) ListLen() (int, bool) { if s, ok := d.val.(primitive.A); ok { return len(s), true } return 0, false } func (d decoder) DecodeList(f func(i int, d2 driver.Decoder) bool) { for i, e := range d.val.(primitive.A) { if !f(i, decoder{e, d.lowercaseFields}) { return } } } func (d decoder) MapLen() (int, bool) { if m, ok := d.val.(map[string]interface{}); ok { return len(m), true } return 0, false } func (d decoder) DecodeMap(f func(key string, d2 driver.Decoder, exactMatch bool) bool) { for k, v := range d.val.(map[string]interface{}) { if !f(k, decoder{v, d.lowercaseFields}, !d.lowercaseFields) { return } } } func (d decoder) AsSpecial(v reflect.Value) (bool, interface{}, error) { switch v := d.val.(type) { case primitive.Binary: return true, v.Data, nil case primitive.DateTime: // A DateTime represents milliseconds since the Unix epoch. return true, bsonDateTimeToTime(v), nil default: return false, nil, nil } } func bsonDateTimeToTime(dt primitive.DateTime) time.Time { return time.Unix(int64(dt)/1000, int64(dt)%1000*1e6) } go-cloud-0.20.0/docstore/mongodocstore/cosmos_test.go000066400000000000000000000035101367004507500227050ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mongodocstore import ( "context" "os" "testing" "gocloud.dev/docstore/drivertest" "gocloud.dev/internal/testing/setup" ) // Run conformance tests on Azure Cosmos. var ( // See https://docs.microsoft.com/en-us/azure/cosmos-db/connect-mongodb-account // on how to get a MongoDB connection string for Azure Cosmos. cosmosConnString = os.Getenv("COSMOS_CONNECTION_STRING") ) func TestConformanceCosmos(t *testing.T) { if !*setup.Record { t.Skip("replaying is not yet supported for Azure Cosmos") } if cosmosConnString == "" { t.Fatal("test harness requires COSMOS_CONNECTION_STRING environment variable to run") } ctx := context.Background() client, err := Dial(ctx, cosmosConnString) if err != nil { t.Fatalf("dialing to %s: %v", cosmosConnString, err) } if err := client.Ping(ctx, nil); err != nil { t.Fatalf("connecting to %s: %v", cosmosConnString, err) } defer func() { // Cleanup any resource to avoid wastes. client.Database(dbName).Drop(ctx) client.Disconnect(ctx) }() newHarness := func(context.Context, *testing.T) (drivertest.Harness, error) { return &harness{client.Database(dbName)}, nil } drivertest.RunConformanceTests(t, newHarness, codecTester{}, []drivertest.AsTest{verifyAs{}}) } go-cloud-0.20.0/docstore/mongodocstore/docdb_test.go000066400000000000000000000040321367004507500224550ustar00rootroot00000000000000package mongodocstore import ( "context" "fmt" "os" "testing" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "gocloud.dev/docstore/drivertest" "gocloud.dev/internal/testing/setup" ) const connectionStringTemplate = "mongodb://%s:%s@%s/?connect=direct&connectTimeoutMS=3000" // To run the conformance tests against Amazon DocumentDB: // // 1. Run `terraform apply` in awsdocdb directory to provision a docdb cluster and an EC2 instance. // 2. Run the command provided by the terraform output string to setup port-forwarding. // 3. Set the following environment variables and run this test with `-record` flag. var ( username = os.Getenv("AWSDOCDB_USERNAME") password = os.Getenv("AWSDOCDB_PASSWORD") endpoint = os.Getenv("AWSDOCDB_ENDPOINT") // optional, default to localhost:27019 ) func TestConformanceDocDB(t *testing.T) { if !*setup.Record { t.Skip("replaying is not yet supported for Amazon DocumentDB") } if username == "" || password == "" { t.Fatal("environment not setup to run DocDB test") } client := newDocDBTestClient(t) defer client.Disconnect(context.Background()) newHarness := func(context.Context, *testing.T) (drivertest.Harness, error) { return &harness{db: client.Database(dbName)}, nil } drivertest.RunConformanceTests(t, newHarness, codecTester{}, []drivertest.AsTest{verifyAs{}}) } func newDocDBTestClient(t *testing.T) *mongo.Client { ctx := context.Background() if endpoint == "" { endpoint = "localhost:27019" } connectionURI := fmt.Sprintf(connectionStringTemplate, username, password, endpoint) o := options.Client().ApplyURI(connectionURI) if err := o.Validate(); err != nil { t.Fatal(err) } client, err := mongo.NewClient(o) if err != nil { t.Fatalf("Failed to create client: %v", err) } err = client.Connect(ctx) if err != nil { t.Fatalf("Failed to connect to cluster: %v", err) } // Force a connection to verify our connection string err = client.Ping(ctx, nil) if err != nil { t.Fatalf("Failed to ping cluster: %v", err) } return client } go-cloud-0.20.0/docstore/mongodocstore/example_test.go000066400000000000000000000050571367004507500230450ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mongodocstore_test import ( "context" "log" "gocloud.dev/docstore" "gocloud.dev/docstore/mongodocstore" ) func ExampleOpenCollection() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() client, err := mongodocstore.Dial(ctx, "mongodb://my-host") if err != nil { log.Fatal(err) } mcoll := client.Database("my-db").Collection("my-coll") coll, err := mongodocstore.OpenCollection(mcoll, "userID", nil) if err != nil { log.Fatal(err) } defer coll.Close() } func ExampleOpenCollectionWithIDFunc() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() type HighScore struct { Game string Player string } client, err := mongodocstore.Dial(ctx, "mongodb://my-host") if err != nil { log.Fatal(err) } mcoll := client.Database("my-db").Collection("my-coll") // The name of a document is constructed from the Game and Player fields. nameFromDocument := func(doc docstore.Document) interface{} { hs := doc.(*HighScore) return hs.Game + "|" + hs.Player } coll, err := mongodocstore.OpenCollectionWithIDFunc(mcoll, nameFromDocument, nil) if err != nil { log.Fatal(err) } defer coll.Close() } func Example_openCollectionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/docstore/mongodocstore" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // docstore.OpenCollection creates a *docstore.Collection from a URL. coll, err := docstore.OpenCollection(ctx, "mongo://my-db/my-collection?id_field=userID") if err != nil { log.Fatal(err) } defer coll.Close() } go-cloud-0.20.0/docstore/mongodocstore/go.mod000066400000000000000000000017051367004507500211260ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev/docstore/mongodocstore go 1.12 require ( github.com/google/go-cmp v0.4.1 github.com/google/wire v0.4.0 github.com/klauspost/compress v1.10.8 // indirect github.com/xdg/stringprep v1.0.0 // indirect go.mongodb.org/mongo-driver v1.3.4 gocloud.dev v0.20.0 golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 // indirect ) go-cloud-0.20.0/docstore/mongodocstore/go.sum000066400000000000000000001603461367004507500211620ustar00rootroot00000000000000bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3 h1:0sMegbmn/8uTwpNkB0q9cLEpZ2W5a6kl+wtBQgPWBJQ= cloud.google.com/go v0.44.3/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.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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.2.0 h1:zrl+2VJAYC/C6WzEPnkqZIBeHyHFs/UmtzJdXU4Bvmo= cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 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/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= 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/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= 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/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 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/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.9.5 h1:U+CaK85mrNNb4k8BNOfgJtJ/gr6kswUCFj6miSzVC6M= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.8 h1:eLeJ3dr/Y9+XRfJT4l+8ZjmtB5RPJhucH2HeCV5+IZY= github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149 h1:HfxbT6/JcvIljmERptWhwa8XzP7H3T+Z2N26gTsaDaA= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCdE= go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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/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/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.5.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 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= 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/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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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-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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 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/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= go-cloud-0.20.0/docstore/mongodocstore/localmongo.sh000077500000000000000000000023671367004507500225160ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Starts two local MongoDB instances (v3 and v4) via Docker listening on two # different ports. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail set -euo pipefail echo "Starting MongoDB v4 listening on 27017..." docker rm -f mongo4 &> /dev/null || : docker run -d --name mongo4 -p 27017:27017 mongo:4 &> /dev/null echo "...done. Run \"docker rm -f mongo4\" to clean up the container." echo echo "Starting MongoDB v3 listening on 27018..." docker rm -f mongo3 &> /dev/null || : docker run -d --name mongo3 -p 27018:27017 mongo:3 &> /dev/null echo "...done. Run \"docker rm -f mongo3\" to clean up the container." echo go-cloud-0.20.0/docstore/mongodocstore/mongo.go000066400000000000000000000537441367004507500215000ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package mongodocstore provides a docstore implementation for MongoDB // and MongoDB-compatible services hosted on-premise or by cloud providers, // including Amazon DocumentDB and Azure Cosmos DB. // // // URLs // // For docstore.OpenCollection, mongodocstore registers for the scheme "mongo". // The default URL opener will dial a Mongo server using the environment // variable "MONGO_SERVER_URL". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // // Action Lists // // mongodocstore uses the unordered BulkWrite call of the underlying driver for writes, and uses Find with a list of document IDs for Get. // (These implementation choices are subject to change.) // It calls the BeforeDo function once before each call to the underlying driver. The as function passed // to the BeforeDo function exposes the following types: // - Gets: *options.FindOptions // - writes: []mongo.WriteModel and *options.BulkWriteOptions // // As // // mongodocstore exposes the following types for As: // - Collection: *mongo.Collection // - Query.BeforeQuery: *options.FindOptions or bson.D (the filter for Delete and Update queries) // - DocumentIterator: *mongo.Cursor // - Error: mongo.CommandError, mongo.BulkWriteError, mongo.BulkWriteException // // // Special Considerations // // MongoDB represents times to millisecond precision, while Go's time.Time type has // nanosecond precision. To save time.Times to MongoDB without loss of precision, // save the result of calling UnixNano on the time. // // The official Go driver for MongoDB, go.mongodb.org/mongo-driver/mongo, lowercases // struct field names; other docstore drivers do not. This means that you have to choose // between interoperating with the MongoDB driver and interoperating with other docstore drivers. // See Options.LowercaseFields for more information. package mongodocstore // import "gocloud.dev/docstore/mongodocstore" // MongoDB reference manual: https://docs.mongodb.com/manual // Client documentation: https://godoc.org/go.mongodb.org/mongo-driver/mongo // // The client methods accept a document of type interface{}, // which is marshaled by the go.mongodb.org/mongo-driver/bson package. import ( "context" "reflect" "strings" "github.com/google/wire" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" ) // Dial returns a new mongoDB client that is connected to the server URI. func Dial(ctx context.Context, uri string) (*mongo.Client, error) { opts := options.Client().ApplyURI(uri) if err := opts.Validate(); err != nil { return nil, err } client, err := mongo.NewClient(opts) if err != nil { return nil, err } if err := client.Connect(ctx); err != nil { return nil, err } return client, nil } // Set holds Wire providers for this package. var Set = wire.NewSet( Dial, wire.Struct(new(URLOpener), "Client"), ) type collection struct { coll *mongo.Collection idField string idFunc func(docstore.Document) interface{} revisionField string opts *Options } type Options struct { // Lowercase all field names for document encoding, field selection, update // modifications and queries. // // If false (the default), then struct fields and MongoDB document fields will // have the same names. For example, a struct field F will correspond to a // MongoDB document field "F". This setting matches the behavior of other // docstore drivers, making code portable across services. // // If true, all fields correspond to lower-cased MongoDB document fields. The // field name F will correspond to the MongoDB document field "f", for // instance. Use this to make code that uses this package interoperate with // code that uses the official Go client for MongoDB, // go.mongodb.org/mongo-driver/mongo, which lowercases field names. LowercaseFields bool // The name of the field holding the document revision. // Defaults to docstore.DefaultRevisionField. RevisionField string // Whether Query.Update writes a new revision into the updated documents. // The default is false, meaning that a revision will be written to all // documents that satisfy the query's conditions. Set to true if and only if // the collection's documents do not have revision fields. NoWriteQueryUpdateRevisions bool } // OpenCollection opens a MongoDB collection for use with Docstore. // The idField argument is the name of the document field to use for the document ID // (MongoDB's _id field). If it is empty, the field "_id" will be used. func OpenCollection(mcoll *mongo.Collection, idField string, opts *Options) (*docstore.Collection, error) { dc, err := newCollection(mcoll, idField, nil, opts) if err != nil { return nil, err } return docstore.NewCollection(dc), nil } // OpenCollectionWithIDFunc opens a MongoDB collection for use with Docstore. // The idFunc argument is function that accepts a document and returns the value to // be used for the document ID (MongoDB's _id field). IDFunc should return nil if the // document is missing the information to construct an ID. This will cause all // actions, even Create, to fail. func OpenCollectionWithIDFunc(mcoll *mongo.Collection, idFunc func(docstore.Document) interface{}, opts *Options) (*docstore.Collection, error) { dc, err := newCollection(mcoll, "", idFunc, opts) if err != nil { return nil, err } return docstore.NewCollection(dc), nil } func newCollection(mcoll *mongo.Collection, idField string, idFunc func(docstore.Document) interface{}, opts *Options) (*collection, error) { if opts == nil { opts = &Options{} } if opts.RevisionField == "" { opts.RevisionField = docstore.DefaultRevisionField } c := &collection{ coll: mcoll, idField: idField, idFunc: idFunc, revisionField: opts.RevisionField, opts: opts, } if c.idField == "" && c.idFunc == nil { c.idField = mongoIDField } if opts.LowercaseFields { c.idField = strings.ToLower(c.idField) c.revisionField = strings.ToLower(c.revisionField) } return c, nil } func (c *collection) Key(doc driver.Document) (interface{}, error) { if c.idField != "" { id, _ := doc.GetField(c.idField) return id, nil // missing field is not an error } id := c.idFunc(doc.Origin) if id == nil || driver.IsEmptyValue(reflect.ValueOf(id)) { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "missing document key") } return id, nil } func (c *collection) RevisionField() string { return c.opts.RevisionField } // From https://docs.mongodb.com/manual/core/document: "The field name _id is // reserved for use as a primary key; its value must be unique in the collection, is // immutable, and may be of any type other than an array." const mongoIDField = "_id" func (c *collection) RunActions(ctx context.Context, actions []*driver.Action, opts *driver.RunActionsOptions) driver.ActionListError { errs := make([]error, len(actions)) beforeGets, gets, writes, afterGets := driver.GroupActions(actions) c.runGets(ctx, beforeGets, errs, opts) ch := make(chan []error) go func() { ch <- c.bulkWrite(ctx, writes, errs, opts) }() c.runGets(ctx, gets, errs, opts) writeErrs := <-ch c.runGets(ctx, afterGets, errs, opts) alerr := driver.NewActionListError(errs) for _, werr := range writeErrs { alerr = append(alerr, indexedError{-1, werr}) } return alerr } type indexedError = struct { Index int Err error } func (c *collection) runGets(ctx context.Context, gets []*driver.Action, errs []error, opts *driver.RunActionsOptions) { // TODO(shantuo): figure out a reasonable batch size, there is no hard limit on // the item number or filter string length. The limit for bulk write batch size // is 100,000. for _, group := range driver.GroupByFieldPath(gets) { c.bulkFind(ctx, group, errs, opts) } } func (c *collection) bulkFind(ctx context.Context, gets []*driver.Action, errs []error, dopts *driver.RunActionsOptions) { // errors need to be mapped to the actions' indices. setErr := func(err error) { for _, get := range gets { if errs[get.Index] == nil { errs[get.Index] = err } } } opts := options.Find() if len(gets[0].FieldPaths) > 0 { opts.Projection = c.projectionDoc(gets[0].FieldPaths) } ids := bson.A{} idToAction := map[interface{}]*driver.Action{} for _, a := range gets { id, err := encodeValue(a.Key) if err != nil { errs[a.Index] = err } else { ids = append(ids, id) idToAction[id] = a } } if dopts.BeforeDo != nil { if err := dopts.BeforeDo(driver.AsFunc(opts)); err != nil { setErr(err) return } } cursor, err := c.coll.Find(ctx, bson.D{bson.E{Key: mongoIDField, Value: bson.D{{Key: "$in", Value: ids}}}}, opts) if err != nil { setErr(err) return } defer cursor.Close(ctx) found := make(map[*driver.Action]bool) for cursor.Next(ctx) { var m map[string]interface{} if err := cursor.Decode(&m); err != nil { continue } a := idToAction[m[mongoIDField]] errs[a.Index] = decodeDoc(m, a.Doc, c.idField, c.opts.LowercaseFields) found[a] = true } for _, a := range gets { if !found[a] { errs[a.Index] = gcerr.Newf(gcerr.NotFound, nil, "item with key %v not found", a.Key) } } } // Construct a mongo "projection document" from field paths. // Always include the revision field. func (c *collection) projectionDoc(fps [][]string) bson.D { proj := bson.D{{Key: c.revisionField, Value: 1}} for _, fp := range fps { proj = append(proj, bson.E{Key: c.toMongoFieldPath(fp), Value: 1}) } return proj } func (c *collection) toMongoFieldPath(fp []string) string { if c.opts.LowercaseFields { sliceToLower(fp) } return strings.Join(fp, ".") } func sliceToLower(s []string) { for i, e := range s { s[i] = strings.ToLower(e) } } func (c *collection) prepareCreate(a *driver.Action) (mdoc, createdID interface{}, rev string, err error) { id := a.Key if id == nil { // Create a unique ID here. (The MongoDB Go client does this for us when calling InsertOne, // but not for BulkWrite.) id = primitive.NewObjectID() createdID = id } else { id, err = encodeValue(id) if err != nil { return nil, nil, "", err } } mdoc, rev, err = c.encodeDoc(a.Doc, id) if err != nil { return nil, nil, "", err } return mdoc, createdID, rev, nil } func (c *collection) prepareReplace(a *driver.Action) (filter bson.D, mdoc map[string]interface{}, rev string, err error) { id, err := encodeValue(a.Key) if err != nil { return nil, nil, "", err } filter, _, err = c.makeFilter(id, a.Doc) if err != nil { return nil, nil, "", err } mdoc, rev, err = c.encodeDoc(a.Doc, id) if err != nil { return nil, nil, "", err } return filter, mdoc, rev, nil } // encodeDoc encodes doc and sets its ID to the encoded value id. It also creates a new revision and sets it. // It returns the encoded document and the new revision. func (c *collection) encodeDoc(doc driver.Document, id interface{}) (map[string]interface{}, string, error) { mdoc, err := encodeDoc(doc, c.opts.LowercaseFields) if err != nil { return nil, "", err } if id != nil { if c.idField != "" { delete(mdoc, c.idField) } mdoc[mongoIDField] = id } var rev string if c.hasField(doc, c.revisionField) { rev = driver.UniqueString() mdoc[c.revisionField] = rev } return mdoc, rev, nil } func (c *collection) prepareUpdate(a *driver.Action) (filter bson.D, updateDoc map[string]bson.D, rev string, err error) { id, err := encodeValue(a.Key) if err != nil { return nil, nil, "", err } filter, _, err = c.makeFilter(id, a.Doc) if err != nil { return nil, nil, "", err } updateDoc, rev, err = c.newUpdateDoc(a.Mods, c.hasField(a.Doc, c.revisionField)) if err != nil { return nil, nil, "", err } return filter, updateDoc, rev, nil } func (c *collection) newUpdateDoc(mods []driver.Mod, writeRevision bool) (map[string]bson.D, string, error) { var ( sets bson.D unsets bson.D incs bson.D ) for _, m := range mods { key := c.toMongoFieldPath(m.FieldPath) if m.Value == nil { unsets = append(unsets, bson.E{Key: key, Value: ""}) } else if inc, ok := m.Value.(driver.IncOp); ok { val, err := encodeValue(inc.Amount) if err != nil { return nil, "", err } incs = append(incs, bson.E{Key: key, Value: val}) } else { val, err := encodeValue(m.Value) if err != nil { return nil, "", err } sets = append(sets, bson.E{Key: key, Value: val}) } } updateDoc := map[string]bson.D{} var rev string if writeRevision { rev = driver.UniqueString() sets = append(sets, bson.E{Key: c.revisionField, Value: rev}) } updateDoc["$set"] = sets if len(unsets) > 0 { updateDoc["$unset"] = unsets } if len(incs) > 0 { updateDoc["$inc"] = incs } return updateDoc, rev, nil } // makeFilter constructs a filter using the given encoded id and the document's revision field, if any. func (c *collection) makeFilter(id interface{}, doc driver.Document) (filter bson.D, rev interface{}, err error) { rev, err = doc.GetField(c.revisionField) if err != nil && gcerrors.Code(err) != gcerrors.NotFound { return nil, nil, err } // Only select the document with the given ID. filter = bson.D{bson.E{Key: "_id", Value: id}} // If the given document has a revision, it must match the stored document. if rev != nil { filter = append(filter, bson.E{Key: c.revisionField, Value: rev}) } return filter, rev, nil } // bulkWrite calls the Mongo driver's BulkWrite RPC in unordered mode with the // actions, which must be writes. // errs is the slice of errors indexed by the position of the action in the original // action list. bulkWrite populates this slice. In addition, bulkWrite returns a list // of errors that cannot be attributed to any single action. func (c *collection) bulkWrite(ctx context.Context, actions []*driver.Action, errs []error, dopts *driver.RunActionsOptions) []error { var ( models []mongo.WriteModel modelActions []*driver.Action // corresponding action for each model newIDs []interface{} // new IDs for Create actions, corresponding to models slice revs []string // new revisions, corresponding to models slice nDeletes int64 nNonCreateWrite int64 // total operations expected from Put, Replace and Update ) for _, a := range actions { var m mongo.WriteModel var err error var newID interface{} var rev string switch a.Kind { case driver.Create: m, newID, rev, err = c.newCreateModel(a) case driver.Delete: m, err = c.newDeleteModel(a) if err == nil { nDeletes++ } case driver.Replace, driver.Put: m, rev, err = c.newReplaceModel(a, a.Kind == driver.Put) if err == nil { nNonCreateWrite++ } case driver.Update: m, rev, err = c.newUpdateModel(a) if err == nil && m != nil { nNonCreateWrite++ } default: err = gcerr.Newf(gcerr.Internal, nil, "bad action %+v", a) } if err != nil { errs[a.Index] = err } else if m != nil { // m can be nil for a no-op update models = append(models, m) modelActions = append(modelActions, a) newIDs = append(newIDs, newID) revs = append(revs, rev) } } if len(models) == 0 { return nil } bopts := options.BulkWrite().SetOrdered(false) if dopts.BeforeDo != nil { asFunc := func(target interface{}) bool { switch t := target.(type) { case *[]mongo.WriteModel: *t = models case **options.BulkWriteOptions: *t = bopts default: return false } return true } if err := dopts.BeforeDo(asFunc); err != nil { return []error{err} } } // TODO(jba): improve independent execution. I think that even if BulkWrite returns an error, // some of the actions may have succeeded. var reterrs []error res, err := c.coll.BulkWrite(ctx, models, bopts) if err != nil { bwe, ok := err.(mongo.BulkWriteException) if !ok { // assume everything failed with this error return []error{err} } // The returned indexes of the WriteErrors are wrong. See https://jira.mongodb.org/browse/GODRIVER-1028. // Until it's fixed, use negative values for the indexes in the errors we return. for _, w := range bwe.WriteErrors { reterrs = append(reterrs, gcerr.Newf(translateMongoCode(w.Code), w, "%s", w.Message)) } return reterrs } for i, newID := range newIDs { if newID == nil { continue } a := modelActions[i] if err := a.Doc.SetField(c.idField, newID); err != nil { errs[a.Index] = err } } for i, rev := range revs { a := modelActions[i] if rev != "" && c.hasField(a.Doc, c.revisionField) { if err := a.Doc.SetField(c.revisionField, rev); err != nil && errs[a.Index] == nil { errs[a.Index] = err } } } if res.DeletedCount != nDeletes { // Some Delete actions failed. It's not an error if a Delete failed because // the document didn't exist, but it is an error if it failed because of a // precondition mismatch. Find all the documents with revisions we tried to delete; if // any are still present, that's an error. c.determineDeleteErrors(ctx, models, modelActions, errs) } if res.MatchedCount+res.UpsertedCount != nNonCreateWrite { reterrs = append(reterrs, gcerr.Newf(gcerr.NotFound, nil, "some writes failed (replaced %d, upserted %d, out of total %d)", res.MatchedCount, res.UpsertedCount, nNonCreateWrite)) } return reterrs } func (c *collection) determineDeleteErrors(ctx context.Context, models []mongo.WriteModel, actions []*driver.Action, errs []error) { // TODO(jba): do this concurrently. for i, m := range models { if dm, ok := m.(*mongo.DeleteOneModel); ok { filter := dm.Filter.(bson.D) if len(filter) > 1 { // Delete with both ID and revision. See if the document is still there. idOnlyFilter := filter[:1] // TODO(shantuo): use Find instead of FindOne. res := c.coll.FindOne(ctx, idOnlyFilter) // Assume an error means the document wasn't found. // That means either that it was deleted successfully, or that it never // existed. Either way, it's not an error. // TODO(jba): distinguish between not found and other errors. if res.Err() == nil { // The document exists, but we didn't delete it: assume we had the wrong // revision. errs[actions[i].Index] = gcerr.Newf(gcerr.FailedPrecondition, nil, "wrong revision for document with ID %v", actions[i].Key) } } } } } func (c *collection) newCreateModel(a *driver.Action) (*mongo.InsertOneModel, interface{}, string, error) { mdoc, createdID, rev, err := c.prepareCreate(a) if err != nil { return nil, nil, "", err } return &mongo.InsertOneModel{Document: mdoc}, createdID, rev, nil } func (c *collection) newDeleteModel(a *driver.Action) (*mongo.DeleteOneModel, error) { id, err := encodeValue(a.Key) if err != nil { return nil, err } filter, _, err := c.makeFilter(id, a.Doc) if err != nil { return nil, err } return &mongo.DeleteOneModel{Filter: filter}, nil } func (c *collection) newReplaceModel(a *driver.Action, upsert bool) (*mongo.ReplaceOneModel, string, error) { filter, mdoc, rev, err := c.prepareReplace(a) if err != nil { return nil, "", err } return &mongo.ReplaceOneModel{ Filter: filter, Replacement: mdoc, Upsert: &upsert, }, rev, nil } func (c *collection) newUpdateModel(a *driver.Action) (*mongo.UpdateOneModel, string, error) { filter, updateDoc, rev, err := c.prepareUpdate(a) if err != nil { return nil, "", err } if filter == nil { // no-op return nil, "", nil } return &mongo.UpdateOneModel{Filter: filter, Update: updateDoc}, rev, nil } // RevisionToBytes implements driver.RevisionToBytes. func (c *collection) RevisionToBytes(rev interface{}) ([]byte, error) { s, ok := rev.(string) if !ok { return nil, gcerr.Newf(gcerr.InvalidArgument, nil, "revision %v of type %[1]T is not a string", rev) } return []byte(s), nil } func (c *collection) hasField(doc driver.Document, field string) bool { if c.opts.LowercaseFields { return doc.HasFieldFold(field) } return doc.HasField(field) } // BytesToRevision implements driver.BytesToRevision. func (c *collection) BytesToRevision(b []byte) (interface{}, error) { return string(b), nil } // As implements driver.As. func (c *collection) As(i interface{}) bool { p, ok := i.(**mongo.Collection) if !ok { return false } *p = c.coll return true } // ErrorAs implements driver.Collection.ErrorAs func (c *collection) ErrorAs(err error, i interface{}) bool { switch e := err.(type) { case mongo.CommandError: if p, ok := i.(*mongo.CommandError); ok { *p = e return true } case mongo.BulkWriteError: if p, ok := i.(*mongo.BulkWriteError); ok { *p = e return true } case mongo.BulkWriteException: if p, ok := i.(*mongo.BulkWriteException); ok { *p = e return true } } return false } // ErrorCode implements driver.Collection.ErrorCode. func (c *collection) ErrorCode(err error) gcerrors.ErrorCode { if g, ok := err.(*gcerr.Error); ok { return g.Code } if err == mongo.ErrNoDocuments { return gcerrors.NotFound } if wexc, ok := err.(mongo.WriteException); ok && len(wexc.WriteErrors) > 0 { return translateMongoCode(wexc.WriteErrors[0].Code) } return gcerrors.Unknown } // Close implements driver.Collection.Close. func (c *collection) Close() error { return nil } // Error code for a write error when no documents match a filter. // (The Go mongo driver doesn't define an exported constant for this.) const mongoDupKeyCode = 11000 func translateMongoCode(code int) gcerrors.ErrorCode { switch code { case mongoDupKeyCode: return gcerrors.AlreadyExists default: return gcerrors.Unknown } } go-cloud-0.20.0/docstore/mongodocstore/mongo_test.go000066400000000000000000000211461367004507500225260ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mongodocstore // To run these tests against a real MongoDB server, first run ./localmongo.sh. // Then wait a few seconds for the server to be ready. import ( "context" "errors" "fmt" "testing" "time" "github.com/google/go-cmp/cmp" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "gocloud.dev/docstore" "gocloud.dev/docstore/driver" "gocloud.dev/docstore/drivertest" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/testing/setup" ) const ( serverURIV4 = "mongodb://localhost:27017" serverURIV3 = "mongodb://localhost:27018" dbName = "docstore-test" collectionName1 = "docstore-test-1" collectionName2 = "docstore-test-2" collectionName3 = "docstore-test-3" ) type harness struct { db *mongo.Database } func (h *harness) MakeCollection(ctx context.Context, kind drivertest.CollectionKind) (driver.Collection, error) { var coll *collection var err error switch kind { case drivertest.SingleKey: coll, err = newCollection(h.db.Collection(collectionName1), drivertest.KeyField, nil, nil) case drivertest.TwoKey: coll, err = newCollection(h.db.Collection(collectionName2), "", drivertest.HighScoreKey, nil) case drivertest.AltRev: coll, err = newCollection(h.db.Collection(collectionName1), drivertest.KeyField, nil, &Options{RevisionField: drivertest.AlternateRevisionField}) case drivertest.NoRev: coll, err = newCollection(h.db.Collection(collectionName1), drivertest.KeyField, nil, &Options{NoWriteQueryUpdateRevisions: true}) default: panic("bad kind") } if err != nil { return nil, err } // It seems that the client doesn't actually connect until the first RPC. So // time out quickly if there's a problem. tctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() if err := coll.coll.Drop(tctx); err != nil { return nil, err } return coll, nil } func (*harness) BeforeDoTypes() []interface{} { return []interface{}{ []mongo.WriteModel{}, &options.FindOptions{}, } } func (*harness) BeforeQueryTypes() []interface{} { return []interface{}{&options.FindOptions{}, bson.D{}} } func (*harness) RevisionsEqual(rev1, rev2 interface{}) bool { return rev1 == rev2 } func (*harness) Close() {} type codecTester struct{} func (codecTester) UnsupportedTypes() []drivertest.UnsupportedType { return []drivertest.UnsupportedType{drivertest.NanosecondTimes} } func (codecTester) DocstoreEncode(x interface{}) (interface{}, error) { m, err := encodeDoc(drivertest.MustDocument(x), true) if err != nil { return nil, err } return bson.Marshal(m) } func (codecTester) DocstoreDecode(value, dest interface{}) error { var m map[string]interface{} if err := bson.Unmarshal(value.([]byte), &m); err != nil { return err } return decodeDoc(m, drivertest.MustDocument(dest), mongoIDField, true) } func (codecTester) NativeEncode(x interface{}) (interface{}, error) { return bson.Marshal(x) } func (codecTester) NativeDecode(value, dest interface{}) error { return bson.Unmarshal(value.([]byte), dest) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) CollectionCheck(coll *docstore.Collection) error { var mc *mongo.Collection if !coll.As(&mc) { return errors.New("Collection.As failed") } return nil } func (verifyAs) QueryCheck(it *docstore.DocumentIterator) error { var c *mongo.Cursor if !it.As(&c) { return errors.New("DocumentIterator.As failed") } return nil } func (verifyAs) ErrorCheck(c *docstore.Collection, err error) error { var cmderr mongo.CommandError var bwerr mongo.BulkWriteError var bwexc mongo.BulkWriteException if !c.ErrorAs(err, &cmderr) && !c.ErrorAs(err, &bwerr) && !c.ErrorAs(err, &bwexc) { if e, ok := err.(*gcerr.Error); ok { err = e.Unwrap() } return fmt.Errorf("Collection.ErrorAs failed, got %T", err) } return nil } func TestConformance(t *testing.T) { t.Run("V3", func(t *testing.T) { testConformance(t, serverURIV4) }) t.Run("V4", func(t *testing.T) { testConformance(t, serverURIV3) }) } func testConformance(t *testing.T, serverURI string) { client := newTestClient(t, serverURI) defer client.Disconnect(context.Background()) newHarness := func(context.Context, *testing.T) (drivertest.Harness, error) { return &harness{client.Database(dbName)}, nil } drivertest.RunConformanceTests(t, newHarness, codecTester{}, []drivertest.AsTest{verifyAs{}}) } func newTestClient(t *testing.T, serverURI string) *mongo.Client { if !setup.HasDockerTestEnvironment() { t.Skip("Skipping Mongo tests since the Mongo server is not available") } ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() client, err := Dial(ctx, serverURI) if err != nil { t.Fatalf("dialing to %s: %v", serverURI, err) } if err := client.Ping(ctx, nil); err != nil { t.Fatalf("connecting to %s: %v", serverURI, err) } return client } func BenchmarkConformance(b *testing.B) { ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) defer cancel() // Only run benchmark once (against MongoDB v4). client, err := Dial(ctx, serverURIV4) if err != nil { b.Fatalf("dialing to %s: %v", serverURIV4, err) } if err := client.Ping(ctx, nil); err != nil { b.Fatalf("connecting to %s: %v", serverURIV4, err) } defer func() { client.Disconnect(context.Background()) }() db := client.Database(dbName) coll, err := newCollection(db.Collection(collectionName3), drivertest.KeyField, nil, nil) if err != nil { b.Fatal(err) } drivertest.RunBenchmarks(b, docstore.NewCollection(coll)) } // Mongo-specific tests. // Testing the driver lower all fields in lowercaseFields mode to match the // behavior of the official Go MongoDB client library. func TestLowercaseFields(t *testing.T) { // Verify that the LowercaseFields option works in all cases. must := func(err error) { t.Helper() if err != nil { t.Fatal(err) } } ctx := context.Background() client := newTestClient(t, serverURIV4) defer func() { client.Disconnect(ctx) }() db := client.Database(dbName) dc, err := newCollection(db.Collection("lowercase-fields"), "id", nil, &Options{LowercaseFields: true}) if err != nil { t.Fatal(err) } coll := docstore.NewCollection(dc) defer coll.Close() type S struct { ID, F, G int DocstoreRevision interface{} } // driver.Document.GetField is case-insensitive on structs. doc := drivertest.MustDocument(&S{ID: 1, DocstoreRevision: 1}) for _, f := range []string{"ID", "Id", "id", "DocstoreRevision", "docstorerevision"} { got, err := doc.GetField(f) if err != nil { t.Errorf("%s: %v", f, err) } if got != 1 { t.Errorf("got %q, want 1", got) } } check := func(got, want interface{}) { t.Helper() if !cmp.Equal(got, want) { t.Errorf("\ngot %+v\nwant %+v", got, want) } } sdoc := &S{ID: 1, F: 2, G: 3} must(coll.Put(ctx, sdoc)) if sdoc.DocstoreRevision == nil { t.Fatal("revision is nil") } // Get with a struct. got := S{ID: 1} must(coll.Get(ctx, &got)) check(got, S{ID: 1, F: 2, G: 3, DocstoreRevision: sdoc.DocstoreRevision}) // Get with map. got2 := map[string]interface{}{"id": 1} must(coll.Get(ctx, got2)) check(got2, map[string]interface{}{"id": int64(1), "f": int64(2), "g": int64(3), "docstorerevision": sdoc.DocstoreRevision}) // Field paths in Get. got3 := S{ID: 1} must(coll.Get(ctx, &got3, "G")) check(got3, S{ID: 1, F: 0, G: 3, DocstoreRevision: sdoc.DocstoreRevision}) // Field paths in Update. got4 := map[string]interface{}{"id": 1} udoc := &S{ID: 1} must(coll.Actions().Update(udoc, docstore.Mods{"F": 4}).Get(got4).Do(ctx)) check(got4, map[string]interface{}{"id": int64(1), "f": int64(4), "g": int64(3), "docstorerevision": udoc.DocstoreRevision}) // Query filters. var got5 S must(coll.Query().Where("ID", "=", 1).Where("G", ">", 2).Get(ctx).Next(ctx, &got5)) check(got5, S{ID: 1, F: 4, G: 3, DocstoreRevision: udoc.DocstoreRevision}) // Query orders. sdoc2 := &S{ID: 2, F: 5, G: 6} must(coll.Put(ctx, sdoc2)) var got6 S must(coll.Query().OrderBy("G", docstore.Descending).Get(ctx).Next(ctx, &got6)) check(got6, *sdoc2) } go-cloud-0.20.0/docstore/mongodocstore/query.go000066400000000000000000000116761367004507500215240ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mongodocstore import ( "context" "fmt" "io" "strings" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "gocloud.dev/docstore/driver" ) func (c *collection) RunGetQuery(ctx context.Context, q *driver.Query) (driver.DocumentIterator, error) { opts := options.Find() if len(q.FieldPaths) > 0 { opts.Projection = c.projectionDoc(q.FieldPaths) } if q.Limit > 0 { lim := int64(q.Limit) opts.Limit = &lim } if q.OrderByField != "" { f := q.OrderByField if c.opts.LowercaseFields { f = strings.ToLower(f) } var dir int if q.OrderAscending { dir = 1 } else { dir = -1 } opts.Sort = bson.D{{Key: f, Value: dir}} } filter := bson.D{} // must be a zero-length slice, not nil for _, f := range q.Filters { bf, err := c.filterToBSON(f) if err != nil { return nil, err } filter = append(filter, bf) } if q.BeforeQuery != nil { if err := q.BeforeQuery(driver.AsFunc(opts)); err != nil { return nil, err } } cursor, err := c.coll.Find(ctx, filter, opts) if err != nil { return nil, err } return &docIterator{cursor: cursor, idField: c.idField, ctx: ctx, lowercaseFields: c.opts.LowercaseFields}, nil } var mongoQueryOps = map[string]string{ driver.EqualOp: "$eq", ">": "$gt", ">=": "$gte", "<": "$lt", "<=": "$lte", } // filtersToBSON converts a []driver.Filter to the MongoDB equivalent, expressed // as a bson.D (list of key-value pairs). func (c *collection) filtersToBSON(fs []driver.Filter) (bson.D, error) { filter := bson.D{} // must be a zero-length slice, not nil for _, f := range fs { bf, err := c.filterToBSON(f) if err != nil { return nil, err } filter = append(filter, bf) } return filter, nil } // filterToBSON converts a driver.Filter to the MongoDB equivalent, expressed // as a bson.E (key-value pair). // The MongoDB document corresponding to "field op value" is // {field: {mop: value}} // where mop is the mongo version of op (see the mongoQueryOps map above). func (c *collection) filterToBSON(f driver.Filter) (bson.E, error) { key := c.toMongoFieldPath(f.FieldPath) if c.idField != "" && key == c.idField { key = mongoIDField } val, err := encodeValue(f.Value) if err != nil { return bson.E{}, err } op := mongoQueryOps[f.Op] if op == "" { return bson.E{}, fmt.Errorf("no mongo operator for %q", f.Op) } return bson.E{Key: key, Value: bson.D{{Key: op, Value: val}}}, nil } type docIterator struct { cursor *mongo.Cursor idField string ctx context.Context // remember for Stop lowercaseFields bool } func (it *docIterator) Next(ctx context.Context, doc driver.Document) error { m, err := it.nextMap(ctx) if err != nil { return err } return decodeDoc(m, doc, it.idField, it.lowercaseFields) } func (it *docIterator) nextMap(ctx context.Context) (map[string]interface{}, error) { if !it.cursor.Next(ctx) { if it.cursor.Err() != nil { return nil, it.cursor.Err() } return nil, io.EOF } var m map[string]interface{} if err := it.cursor.Decode(&m); err != nil { return nil, fmt.Errorf("cursor.Decode: %v", err) } return m, nil } func (it *docIterator) Stop() { // Ignore error on Close. _ = it.cursor.Close(it.ctx) } func (it *docIterator) As(i interface{}) bool { p, ok := i.(**mongo.Cursor) if !ok { return false } *p = it.cursor return true } func (c *collection) QueryPlan(q *driver.Query) (string, error) { return "unknown", nil } func (c *collection) RunDeleteQuery(ctx context.Context, q *driver.Query) error { filter, err := c.filtersToBSON(q.Filters) if err != nil { return err } if q.BeforeQuery != nil { if err := q.BeforeQuery(driver.AsFunc(filter)); err != nil { return err } } _, err = c.coll.DeleteMany(ctx, filter) return err } func (c *collection) RunUpdateQuery(ctx context.Context, q *driver.Query, mods []driver.Mod) error { filter, err := c.filtersToBSON(q.Filters) if err != nil { return err } // TODO(#2458): provide an option for the user to choose whether or not to // update the revision. updateDoc, _, err := c.newUpdateDoc(mods, !c.opts.NoWriteQueryUpdateRevisions) if err != nil { return err } if q.BeforeQuery != nil { if err := q.BeforeQuery(driver.AsFunc(filter)); err != nil { return err } } _, err = c.coll.UpdateMany(ctx, filter, updateDoc) return err } go-cloud-0.20.0/docstore/mongodocstore/testdata/000077500000000000000000000000001367004507500216265ustar00rootroot00000000000000go-cloud-0.20.0/docstore/mongodocstore/testdata/README000066400000000000000000000002071367004507500225050ustar00rootroot00000000000000This directory is here just so that the prerelease script (internal/testing/prerelease.sh) will run this package's tests with -record. go-cloud-0.20.0/docstore/mongodocstore/urls.go000066400000000000000000000061731367004507500213400ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mongodocstore import ( "context" "errors" "fmt" "net/url" "os" "strings" "sync" "go.mongodb.org/mongo-driver/mongo" "gocloud.dev/docstore" ) func init() { docstore.DefaultURLMux().RegisterCollection(Scheme, new(defaultDialer)) } // defaultDialer dials a default Mongo server based on the environment variable // MONGO_SERVER_URL. type defaultDialer struct { init sync.Once opener *URLOpener err error } func (o *defaultDialer) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error) { o.init.Do(func() { serverURL := os.Getenv("MONGO_SERVER_URL") if serverURL == "" { o.err = errors.New("MONGO_SERVER_URL environment variable is not set") return } client, err := Dial(ctx, serverURL) if err != nil { o.err = fmt.Errorf("failed to dial default Mongo server at %q: %v", serverURL, err) return } o.opener = &URLOpener{Client: client} }) if o.err != nil { return nil, fmt.Errorf("open collection %s: %v", u, o.err) } return o.opener.OpenCollectionURL(ctx, u) } // Scheme is the URL scheme mongodocstore registers its URLOpener under on // docstore.DefaultMux. const Scheme = "mongo" // URLOpener opens URLs like "mongo://mydb/mycollection". // See https://docs.mongodb.com/manual/reference/limits/#naming-restrictions for // naming restrictions. // // The URL Host is used as the database name. // The URL Path is used as the collection name. // // The following query parameters are supported: // // - id_field (optional): the field name to use for the "_id" field. type URLOpener struct { // A Client is a MongoDB client that performs operations on the db, must be // non-nil. Client *mongo.Client // Options specifies the options to pass to OpenCollection. Options Options } // OpenCollectionURL opens the Collection URL. func (o *URLOpener) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error) { q := u.Query() idField := q.Get("id_field") q.Del("id_field") o.Options.RevisionField = q.Get("revision_field") q.Del("revision_field") for param := range q { return nil, fmt.Errorf("open collection %s: invalid query parameter %q", u, param) } dbName := u.Host if dbName == "" { return nil, fmt.Errorf("open collection %s: URL must have a non-empty Host (database name)", u) } collName := strings.TrimPrefix(u.Path, "/") if collName == "" { return nil, fmt.Errorf("open collection %s: URL must have a non-empty Path (collection name)", u) } return OpenCollection(o.Client.Database(dbName).Collection(collName), idField, &o.Options) } go-cloud-0.20.0/docstore/mongodocstore/urls_test.go000066400000000000000000000033541367004507500223750ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mongodocstore import ( "context" "os" "testing" "gocloud.dev/docstore" ) func fakeConnectionStringInEnv() func() { oldURLVal := os.Getenv("MONGO_SERVER_URL") os.Setenv("MONGO_SERVER_URL", "mongodb://localhost") return func() { os.Setenv("MONGO_SERVER_URL", oldURLVal) } } func TestOpenCollectionURL(t *testing.T) { cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"mongo://mydb/mycollection", false}, // Missing database name. {"mongo:///mycollection", true}, // Missing collection name. {"mongo://mydb/", true}, // Passing id_field parameter. {"mongo://mydb/mycollection?id_field=foo", false}, // Passing revision field. {"mongo://mydb/mycollection?id_field=foo&revision_field=123", false}, // Invalid parameter. {"mongo://mydb/mycollection?param=value", true}, } ctx := context.Background() for _, test := range tests { d, err := docstore.OpenCollection(ctx, test.URL) if d != nil { defer d.Close() } if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } } } go-cloud-0.20.0/docstore/oc_test.go000066400000000000000000000027551367004507500171330ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package docstore_test import ( "context" "testing" "gocloud.dev/docstore" "gocloud.dev/docstore/memdocstore" "gocloud.dev/gcerrors" "gocloud.dev/internal/testing/octest" ) func TestOpenCensus(t *testing.T) { ctx := context.Background() te := octest.NewTestExporter(docstore.OpenCensusViews) defer te.Unregister() coll, err := memdocstore.OpenCollection("_id", nil) if err != nil { t.Fatal(err) } defer coll.Close() // ActionList.Do. if err := coll.Create(ctx, map[string]interface{}{"_id": "a", "count": 0}); err != nil { t.Fatal(err) } // Query.Get. iter := coll.Query().Get(ctx) iter.Stop() const driver = "gocloud.dev/docstore/memdocstore" diff := octest.Diff(te.Spans(), te.Counts(), "gocloud.dev/docstore", driver, []octest.Call{ {Method: "ActionList.Do", Code: gcerrors.OK}, {Method: "Query.Get", Code: gcerrors.OK}, }) if diff != "" { t.Error(diff) } } go-cloud-0.20.0/docstore/query.go000066400000000000000000000165661367004507500166450ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package docstore import ( "context" "io" "reflect" "time" "gocloud.dev/docstore/driver" "gocloud.dev/internal/gcerr" ) // Query represents a query over a collection. type Query struct { coll *Collection dq *driver.Query err error } // Query creates a new Query over the collection. func (c *Collection) Query() *Query { return &Query{coll: c, dq: &driver.Query{}} } // Where expresses a condition on the query. // Valid ops are: "=", ">", "<", ">=", "<=". // Valid values are strings, integers, floating-point numbers, and time.Time values. func (q *Query) Where(fp FieldPath, op string, value interface{}) *Query { if q.err != nil { return q } pfp, err := parseFieldPath(fp) if err != nil { q.err = err return q } if !validOp[op] { return q.invalidf("invalid filter operator: %q. Use one of: =, >, <, >=, <=", op) } if !validFilterValue(value) { return q.invalidf("invalid filter value: %v", value) } q.dq.Filters = append(q.dq.Filters, driver.Filter{ FieldPath: pfp, Op: op, Value: value, }) return q } var validOp = map[string]bool{ "=": true, ">": true, "<": true, ">=": true, "<=": true, } func validFilterValue(v interface{}) bool { if v == nil { return false } if _, ok := v.(time.Time); ok { return true } switch reflect.TypeOf(v).Kind() { case reflect.String: return true case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return true case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: return true case reflect.Float32, reflect.Float64: return true default: return false } } // Limit will limit the results to at most n documents. // n must be positive. // It is an error to specify Limit more than once in a Get query, or // at all in a Delete or Update query. func (q *Query) Limit(n int) *Query { if q.err != nil { return q } if n <= 0 { return q.invalidf("limit value of %d must be greater than zero", n) } if q.dq.Limit > 0 { return q.invalidf("query can have at most one limit clause") } q.dq.Limit = n return q } // Ascending and Descending are constants for use in the OrderBy method. const ( Ascending = "asc" Descending = "desc" ) // OrderBy specifies that the returned documents appear sorted by the given field in // the given direction. // A query can have at most one OrderBy clause. If it has none, the order of returned // documents is unspecified. // If a query has a Where clause and an OrderBy clause, the OrderBy clause's field // must appear in a Where clause. // It is an error to specify OrderBy in a Delete or Update query. func (q *Query) OrderBy(field, direction string) *Query { if q.err != nil { return q } if field == "" { return q.invalidf("OrderBy: empty field") } if direction != Ascending && direction != Descending { return q.invalidf("OrderBy: direction must be one of %q or %q", Ascending, Descending) } if q.dq.OrderByField != "" { return q.invalidf("a query can have at most one OrderBy") } q.dq.OrderByField = field q.dq.OrderAscending = (direction == Ascending) return q } // BeforeQuery takes a callback function that will be called before the Query is // executed to the underlying service's query functionality. The callback takes // a parameter, asFunc, that converts its argument to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. func (q *Query) BeforeQuery(f func(asFunc func(interface{}) bool) error) *Query { q.dq.BeforeQuery = f return q } // Get returns an iterator for retrieving the documents specified by the query. If // field paths are provided, only those paths are set in the resulting documents. // // Call Stop on the iterator when finished. func (q *Query) Get(ctx context.Context, fps ...FieldPath) *DocumentIterator { return q.get(ctx, true, fps...) } // get implements Get, with optional OpenCensus tracing so it can be used internally. func (q *Query) get(ctx context.Context, oc bool, fps ...FieldPath) *DocumentIterator { dcoll := q.coll.driver if err := q.initGet(fps); err != nil { return &DocumentIterator{err: wrapError(dcoll, err)} } var err error if oc { ctx = q.coll.tracer.Start(ctx, "Query.Get") defer func() { q.coll.tracer.End(ctx, err) }() } it, err := dcoll.RunGetQuery(ctx, q.dq) return &DocumentIterator{iter: it, coll: q.coll, err: wrapError(dcoll, err)} } func (q *Query) initGet(fps []FieldPath) error { if q.err != nil { return q.err } if err := q.coll.checkClosed(); err != nil { return errClosed } pfps, err := parseFieldPaths(fps) if err != nil { return err } q.dq.FieldPaths = pfps if q.dq.OrderByField != "" && len(q.dq.Filters) > 0 { found := false for _, f := range q.dq.Filters { if len(f.FieldPath) == 1 && f.FieldPath[0] == q.dq.OrderByField { found = true break } } if !found { return gcerr.Newf(gcerr.InvalidArgument, nil, "OrderBy field %s must appear in a Where clause", q.dq.OrderByField) } } return nil } func (q *Query) invalidf(format string, args ...interface{}) *Query { q.err = gcerr.Newf(gcerr.InvalidArgument, nil, format, args...) return q } // DocumentIterator iterates over documents. // // Always call Stop on the iterator. type DocumentIterator struct { iter driver.DocumentIterator coll *Collection err error // already wrapped } // Next stores the next document in dst. It returns io.EOF if there are no more // documents. // Once Next returns an error, it will always return the same error. func (it *DocumentIterator) Next(ctx context.Context, dst Document) error { if it.err != nil { return it.err } if err := it.coll.checkClosed(); err != nil { it.err = err return it.err } ddoc, err := driver.NewDocument(dst) if err != nil { it.err = wrapError(it.coll.driver, err) return it.err } it.err = wrapError(it.coll.driver, it.iter.Next(ctx, ddoc)) return it.err } // Stop stops the iterator. Calling Next on a stopped iterator will return io.EOF, or // the error that Next previously returned. func (it *DocumentIterator) Stop() { if it.err != nil { return } it.err = io.EOF it.iter.Stop() } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (it *DocumentIterator) As(i interface{}) bool { if i == nil || it.iter == nil { return false } return it.iter.As(i) } // Plan describes how the query would be executed if its Get method were called with // the given field paths. Plan uses only information available to the client, so it // cannot know whether a service uses indexes or scans internally. func (q *Query) Plan(fps ...FieldPath) (string, error) { if err := q.initGet(fps); err != nil { return "", err } return q.coll.driver.QueryPlan(q.dq) } go-cloud-0.20.0/docstore/query_test.go000066400000000000000000000056171367004507500176770ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package docstore import ( "context" "strings" "testing" "gocloud.dev/docstore/driver" "gocloud.dev/gcerrors" ) func TestQueryValidFilter(t *testing.T) { for _, fp := range []FieldPath{"", ".a", "a..b", "b."} { q := Query{dq: &driver.Query{}} q.Where(fp, ">", 1) if got := gcerrors.Code(q.err); got != gcerrors.InvalidArgument { t.Errorf("fieldpath %q: got %s, want InvalidArgument", fp, got) } } for _, op := range []string{"==", "!="} { q := Query{dq: &driver.Query{}} q.Where("a", op, 1) if got := gcerrors.Code(q.err); got != gcerrors.InvalidArgument { t.Errorf("op %s: got %s, want InvalidArgument", op, got) } } for _, v := range []interface{}{nil, 5 + 2i, []byte("x"), func() {}, []int{}, map[string]bool{}} { q := Query{dq: &driver.Query{}} q.Where("a", "=", v) if got := gcerrors.Code(q.err); got != gcerrors.InvalidArgument { t.Errorf("value %+v: got %s, want InvalidArgument", v, got) } } } func TestInvalidQuery(t *testing.T) { ctx := context.Background() // We detect that these queries are invalid before they reach the driver. c := &Collection{} for _, test := range []struct { desc string appliesToGet bool q *Query contains string // error text must contain this string }{ {"negative Limit", true, c.Query().Limit(-1), "limit"}, {"zero Limit", true, c.Query().Limit(0), "limit"}, {"two Limits", true, c.Query().Limit(1).Limit(2), "limit"}, {"empty OrderBy field", true, c.Query().OrderBy("", Ascending), "empty field"}, {"bad OrderBy direction", true, c.Query().OrderBy("x", "y"), "direction"}, {"two OrderBys", true, c.Query().OrderBy("x", Ascending).OrderBy("y", Descending), "orderby"}, {"OrderBy not in Where", true, c.Query().OrderBy("x", Ascending).Where("y", ">", 1), "orderby"}, {"any Limit", false, c.Query().Limit(1), "limit"}, {"any OrderBy", false, c.Query().OrderBy("x", Descending), "orderby"}, } { check := func(err error) { if gcerrors.Code(err) != gcerrors.InvalidArgument { t.Errorf("%s: got %v, want InvalidArgument", test.desc, err) return } if !strings.Contains(strings.ToLower(err.Error()), test.contains) { t.Errorf("%s: got %q, wanted it to contain %q", test.desc, err.Error(), test.contains) } } if test.appliesToGet { check(test.q.Get(ctx).Next(ctx, nil)) } } } go-cloud-0.20.0/docstore/urls.go000066400000000000000000000065711367004507500164600ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package docstore import ( "context" "net/url" "gocloud.dev/internal/openurl" ) // CollectionURLOpener opens a collection of documents based on a URL. // The opener must not modify the URL argument. It must be safe to call from // multiple goroutines. // // This interface is generally implemented by types in driver packages. type CollectionURLOpener interface { OpenCollectionURL(ctx context.Context, u *url.URL) (*Collection, error) } // URLMux is a URL opener multiplexer. It matches the scheme of the URLs against // a set of registered schemes and calls the opener that matches the URL's // scheme. See https://gocloud.dev/concepts/urls/ for more information. // // The zero value is a multiplexer with no registered scheme. type URLMux struct { schemes openurl.SchemeMap } // CollectionSchemes returns a sorted slice of the registered Collection schemes. func (mux *URLMux) CollectionSchemes() []string { return mux.schemes.Schemes() } // ValidCollectionScheme returns true iff scheme has been registered for Collections. func (mux *URLMux) ValidCollectionScheme(scheme string) bool { return mux.schemes.ValidScheme(scheme) } // RegisterCollection registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterCollection panics. func (mux *URLMux) RegisterCollection(scheme string, opener CollectionURLOpener) { mux.schemes.Register("docstore", "Collection", scheme, opener) } // OpenCollection calls OpenCollectionURL with the URL parsed from urlstr. // OpenCollection is safe to call from multiple goroutines. func (mux *URLMux) OpenCollection(ctx context.Context, urlstr string) (*Collection, error) { opener, u, err := mux.schemes.FromString("Collection", urlstr) if err != nil { return nil, err } return opener.(CollectionURLOpener).OpenCollectionURL(ctx, u) } // OpenCollectionURL dispatches the URL to the opener that is registered with // the URL's scheme. OpenCollectionURL is safe to call from multiple goroutines. func (mux *URLMux) OpenCollectionURL(ctx context.Context, u *url.URL) (*Collection, error) { opener, err := mux.schemes.FromURL("Collection", u) if err != nil { return nil, err } return opener.(CollectionURLOpener).OpenCollectionURL(ctx, u) } var defaultURLMux = new(URLMux) // DefaultURLMux returns the URLMux used by OpenCollection. // // Driver packages can use this to register their CollectionURLOpener on the mux. func DefaultURLMux() *URLMux { return defaultURLMux } // OpenCollection opens the collection identified by the URL given. // See the URLOpener documentation in driver subpackages for details // on supported URL formats, and https://gocloud.dev/concepts/urls/ for more // information. func OpenCollection(ctx context.Context, urlstr string) (*Collection, error) { return defaultURLMux.OpenCollection(ctx, urlstr) } go-cloud-0.20.0/docstore/urls_test.go000066400000000000000000000057571367004507500175240ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package docstore import ( "context" "errors" "net/url" "testing" "github.com/google/go-cmp/cmp" ) func TestURLMux(t *testing.T) { ctx := context.Background() mux := new(URLMux) fake := &fakeOpener{} mux.RegisterCollection("foo", fake) mux.RegisterCollection("err", fake) if diff := cmp.Diff(mux.CollectionSchemes(), []string{"err", "foo"}); diff != "" { t.Errorf("Schemes: %s", diff) } if !mux.ValidCollectionScheme("foo") || !mux.ValidCollectionScheme("err") { t.Errorf("ValidCollectionScheme didn't return true for valid scheme") } if mux.ValidCollectionScheme("foo2") || mux.ValidCollectionScheme("http") { t.Errorf("ValidCollectionScheme didn't return false for invalid scheme") } for _, tc := range []struct { name string url string wantErr bool }{ { name: "empty URL", wantErr: true, }, { name: "invalid URL", url: ":foo", wantErr: true, }, { name: "invalid URL no scheme", url: "foo", wantErr: true, }, { name: "unregistered scheme", url: "bar://mycollection", wantErr: true, }, { name: "func returns error", url: "err://mycollection", wantErr: true, }, { name: "no query options", url: "foo://mycollection", }, { name: "empty query options", url: "foo://mycollection?", }, { name: "using api scheme prefix", url: "docstore+foo://bar", }, { name: "using api+type scheme prefix", url: "docstore+collection+foo://bar", }, } { t.Run(tc.name, func(t *testing.T) { _, gotErr := mux.OpenCollection(ctx, tc.url) if (gotErr != nil) != tc.wantErr { t.Fatalf("got err %v, want error %v", gotErr, tc.wantErr) } if gotErr != nil { return } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } // Repeat with OpenCollectionURL. parsed, err := url.Parse(tc.url) if err != nil { t.Fatal(err) } _, gotErr = mux.OpenCollectionURL(ctx, parsed) if gotErr != nil { t.Fatalf("got err %v want nil", gotErr) } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } }) } } type fakeOpener struct { u *url.URL // last url passed to OpenCollectionURL } func (o *fakeOpener) OpenCollectionURL(ctx context.Context, u *url.URL) (*Collection, error) { if u.Scheme == "err" { return nil, errors.New("fail") } o.u = u return nil, nil } go-cloud-0.20.0/gcerrors/000077500000000000000000000000001367004507500151375ustar00rootroot00000000000000go-cloud-0.20.0/gcerrors/errors.go000066400000000000000000000054031367004507500170040ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcerrors provides support for getting error codes from // errors returned by Go CDK APIs. package gcerrors import ( "context" "gocloud.dev/internal/gcerr" "golang.org/x/xerrors" ) // An ErrorCode describes the error's category. Programs should act upon an error's // code, not its message. type ErrorCode = gcerr.ErrorCode const ( // Returned by the Code function on a nil error. It is not a valid // code for an error. OK ErrorCode = gcerr.OK // The error could not be categorized. Unknown ErrorCode = gcerr.Unknown // The resource was not found. NotFound ErrorCode = gcerr.NotFound // The resource exists, but it should not. AlreadyExists ErrorCode = gcerr.AlreadyExists // A value given to a Go CDK API is incorrect. InvalidArgument ErrorCode = gcerr.InvalidArgument // Something unexpected happened. Internal errors always indicate // bugs in the Go CDK (or possibly the underlying service). Internal ErrorCode = gcerr.Internal // The feature is not implemented. Unimplemented ErrorCode = gcerr.Unimplemented // The system was in the wrong state. FailedPrecondition ErrorCode = gcerr.FailedPrecondition // The caller does not have permission to execute the specified operation. PermissionDenied ErrorCode = gcerr.PermissionDenied // Some resource has been exhausted, typically because a service resource limit // has been reached. ResourceExhausted ErrorCode = gcerr.ResourceExhausted // The operation was canceled. Canceled ErrorCode = gcerr.Canceled // The operation timed out. DeadlineExceeded ErrorCode = gcerr.DeadlineExceeded ) // Code returns the ErrorCode of err if it, or some error it wraps, is an *Error. // If err is context.Canceled or context.DeadlineExceeded, or wraps one of those errors, // it returns the Canceled or DeadlineExceeded codes, respectively. // If err is nil, it returns the special code OK. // Otherwise, it returns Unknown. func Code(err error) ErrorCode { if err == nil { return OK } var e *gcerr.Error if xerrors.As(err, &e) { return e.Code } if xerrors.Is(err, context.Canceled) { return Canceled } if xerrors.Is(err, context.DeadlineExceeded) { return DeadlineExceeded } return Unknown } go-cloud-0.20.0/gcerrors/errors_test.go000066400000000000000000000026151367004507500200450ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcerrors import ( "context" "io" "testing" "gocloud.dev/internal/gcerr" ) type wrappedErr struct { err error } func (w wrappedErr) Error() string { return "wrapped" } func (w wrappedErr) Unwrap() error { return w.err } func TestCode(t *testing.T) { for _, test := range []struct { in error want ErrorCode }{ {nil, OK}, {gcerr.New(AlreadyExists, nil, 1, ""), AlreadyExists}, {wrappedErr{gcerr.New(PermissionDenied, nil, 1, "")}, PermissionDenied}, {context.Canceled, Canceled}, {context.DeadlineExceeded, DeadlineExceeded}, {wrappedErr{context.Canceled}, Canceled}, {wrappedErr{context.DeadlineExceeded}, DeadlineExceeded}, {io.EOF, Unknown}, } { got := Code(test.in) if got != test.want { t.Errorf("%v: got %s, want %s", test.in, got, test.want) } } } go-cloud-0.20.0/gcp/000077500000000000000000000000001367004507500140625ustar00rootroot00000000000000go-cloud-0.20.0/gcp/cloudsql/000077500000000000000000000000001367004507500157105ustar00rootroot00000000000000go-cloud-0.20.0/gcp/cloudsql/cloudsql.go000066400000000000000000000026551367004507500200750ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package cloudsql contains Wire providers that are common across Google Cloud // SQL. package cloudsql // import "gocloud.dev/gcp/cloudsql" import ( "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/certs" "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/proxy" "github.com/google/wire" "gocloud.dev/gcp" ) // CertSourceSet is a Wire provider set that binds a Cloud SQL proxy // certificate source from an GCP-authenticated HTTP client. var CertSourceSet = wire.NewSet( NewCertSource, wire.Bind(new(proxy.CertSource), new(*certs.RemoteCertSource))) // NewCertSource creates a local certificate source that uses the given // HTTP client. The client is assumed to make authenticated requests. func NewCertSource(c *gcp.HTTPClient) *certs.RemoteCertSource { return certs.NewCertSourceOpts(&c.Client, certs.RemoteOpts{}) } go-cloud-0.20.0/gcp/gcp.go000066400000000000000000000056331367004507500151710ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcp provides fundamental Wire providers and types for Google Cloud Platform (GCP). package gcp // import "gocloud.dev/gcp" import ( "context" "errors" "net/http" "github.com/google/wire" "golang.org/x/oauth2" "golang.org/x/oauth2/google" ) // DefaultIdentity is a Wire provider set that provides the project ID // and token source from Application Default Credentials (ADC). var DefaultIdentity = wire.NewSet( CredentialsTokenSource, DefaultCredentials, DefaultProjectID) // ProjectID is a GCP Project ID. type ProjectID string // TokenSource wraps a GCP token source that provides Cloud-Platform- // scoped tokens. type TokenSource oauth2.TokenSource // HTTPClient is an HTTP client that makes requests authenticated with Cloud- // Platform-scoped authentication tokens. type HTTPClient struct { http.Client } // NewAnonymousHTTPClient creates a new anonymous HTTP client. func NewAnonymousHTTPClient(transport http.RoundTripper) *HTTPClient { return &HTTPClient{ Client: http.Client{ Transport: transport, }, } } // NewHTTPClient creates a new authenticated HTTP client. func NewHTTPClient(transport http.RoundTripper, ts TokenSource) (*HTTPClient, error) { if ts == nil { return nil, errors.New("gcp: no credentials available") } return &HTTPClient{ Client: http.Client{ Transport: &oauth2.Transport{ Base: transport, Source: ts, }, }, }, nil } // DefaultTransport returns http.DefaultTransport. func DefaultTransport() http.RoundTripper { return http.DefaultTransport } // DefaultCredentials obtains the default GCP credentials with Cloud Platform // scope. func DefaultCredentials(ctx context.Context) (*google.Credentials, error) { adc, err := google.FindDefaultCredentials(ctx, "https://www.googleapis.com/auth/cloud-platform") if err != nil { return nil, err } return adc, nil } // CredentialsTokenSource extracts the token source from GCP credentials. func CredentialsTokenSource(creds *google.Credentials) TokenSource { if creds == nil { return nil } return TokenSource(creds.TokenSource) } // DefaultProjectID obtains the project ID from the default GCP credentials. func DefaultProjectID(creds *google.Credentials) (ProjectID, error) { if creds == nil { return "", errors.New("gcp: no project found in credentials") } return ProjectID(creds.ProjectID), nil } go-cloud-0.20.0/gcp/gcp_test.go000066400000000000000000000034311367004507500162220ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcp_test import ( "context" "testing" "gocloud.dev/gcp" "gocloud.dev/internal/testing/setup" ) func TestNewHTTPClient(t *testing.T) { transport := gcp.DefaultTransport() _, err := gcp.NewHTTPClient(transport, nil) if err == nil { t.Error("got nil want error") } creds, err := setup.FakeGCPCredentials(context.Background()) if err != nil { t.Fatal(err) } _, err = gcp.NewHTTPClient(transport, gcp.CredentialsTokenSource(creds)) if err != nil { t.Error(err) } } func TestCredentialsTokenSource(t *testing.T) { ts := gcp.CredentialsTokenSource(nil) if ts != nil { t.Error("got non-nil TokenSource from nil creds, want nil") } creds, err := setup.FakeGCPCredentials(context.Background()) if err != nil { t.Fatal(err) } ts = gcp.CredentialsTokenSource(creds) if ts == nil { t.Error("got nil TokenSource from creds, want non-nil") } } func TestDefaultProjectID(t *testing.T) { _, err := gcp.DefaultProjectID(nil) if err == nil { t.Error("got nil error from nil creds, want error") } creds, err := setup.FakeGCPCredentials(context.Background()) if err != nil { t.Fatal(err) } _, err = gcp.DefaultProjectID(creds) if err != nil { t.Error(err) } } go-cloud-0.20.0/gcp/gcpcloud/000077500000000000000000000000001367004507500156625ustar00rootroot00000000000000go-cloud-0.20.0/gcp/gcpcloud/example_test.go000066400000000000000000000047231367004507500207110ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpcloud_test import ( "context" "fmt" "log" "net/http" "github.com/google/wire" "go.opencensus.io/trace" "gocloud.dev/gcp/gcpcloud" "gocloud.dev/server" "gocloud.dev/server/health" ) // This is an example of how to bootstrap an HTTP server running on // Google Cloud Platform (GCP). The code in this function would be // placed in main(). func Example() { // Connect and authenticate to GCP. srv, cleanup, err := setup(context.Background()) if err != nil { log.Fatal(err) } defer cleanup() // Set up the HTTP routes. http.HandleFunc("/", greet) // Run the server. This behaves much like http.ListenAndServe, // including that passing a nil handler will use http.DefaultServeMux. log.Fatal(srv.ListenAndServe(":8080")) } // setup is a Wire injector function that creates an HTTP server // configured to send diagnostics to Stackdriver. The second return // value is a clean-up function that can be called to shut down any // resources created by setup. // // The body of this function will be filled in by running Wire. While // the name of the function does not matter, the signature signals to // Wire what provider functions to call. See // https://github.com/google/wire/blob/master/docs/guide.md#injectors // for more details. func setup(ctx context.Context) (*server.Server, func(), error) { wire.Build( // The GCP set includes all the default wiring for GCP, including // for *server.Server. gcpcloud.GCP, // Providing nil instructs the server to use the default sampling policy. wire.Value(trace.Sampler(nil)), // Health checks can be added to delay your server reporting healthy // to the load balancer before critical dependencies are available. wire.Value([]health.Checker{}), ) return nil, nil, nil } // greet is an ordinary http.HandleFunc. func greet(w http.ResponseWriter, req *http.Request) { fmt.Fprintln(w, "Hello, World!") } go-cloud-0.20.0/gcp/gcpcloud/gcpcloud.go000066400000000000000000000031661367004507500200170ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcpcloud contains Wire providers for GCP services. package gcpcloud // import "gocloud.dev/gcp/gcpcloud" import ( "github.com/google/wire" "gocloud.dev/blob/gcsblob" "gocloud.dev/docstore/gcpfirestore" "gocloud.dev/gcp" "gocloud.dev/gcp/cloudsql" "gocloud.dev/pubsub/gcppubsub" "gocloud.dev/runtimevar/gcpruntimeconfig" "gocloud.dev/secrets/gcpkms" "gocloud.dev/server/sdserver" ) // GCP is a Wire provider set that includes all Google Cloud Platform services // in this repository and authenticates using Application Default Credentials. var GCP = wire.NewSet(Services, gcp.DefaultIdentity) // Services is a Wire provider set that includes the default wiring for all // Google Cloud Platform services in this repository, but does not include // credentials. Individual services may require additional configuration. var Services = wire.NewSet( gcp.DefaultTransport, gcp.NewHTTPClient, gcpruntimeconfig.Set, gcpkms.Set, gcppubsub.Set, gcsblob.Set, cloudsql.CertSourceSet, gcpfirestore.Set, sdserver.Set, ) go-cloud-0.20.0/go.mod000066400000000000000000000047431367004507500144270ustar00rootroot00000000000000// Copyright 2018-2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev go 1.12 require ( cloud.google.com/go v0.58.0 cloud.google.com/go/firestore v1.2.0 cloud.google.com/go/pubsub v1.3.1 cloud.google.com/go/storage v1.9.0 contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0 contrib.go.opencensus.io/exporter/stackdriver v0.12.1 contrib.go.opencensus.io/integrations/ocsql v0.1.4 github.com/Azure/azure-amqp-common-go/v3 v3.0.0 github.com/Azure/azure-pipeline-go v0.2.2 github.com/Azure/azure-sdk-for-go v37.1.0+incompatible github.com/Azure/azure-service-bus-go v0.10.1 github.com/Azure/azure-storage-blob-go v0.9.0 github.com/Azure/go-amqp v0.12.7 github.com/Azure/go-autorest/autorest v0.9.3 github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae github.com/aws/aws-sdk-go v1.31.13 github.com/fsnotify/fsnotify v1.4.7 github.com/go-sql-driver/mysql v1.5.0 github.com/golang/protobuf v1.4.2 github.com/google/go-cmp v0.4.1 github.com/google/go-replayers/grpcreplay v0.1.0 github.com/google/go-replayers/httpreplay v0.1.0 github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible // indirect github.com/google/uuid v1.1.1 github.com/google/wire v0.4.0 github.com/googleapis/gax-go v2.0.2+incompatible github.com/googleapis/gax-go/v2 v2.0.5 github.com/lib/pq v1.1.1 github.com/mattn/go-ieproxy v0.0.1 // indirect go.opencensus.io v0.22.3 golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 golang.org/x/net v0.0.0-20200602114024-627f9648deb9 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 // indirect golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 google.golang.org/api v0.26.0 google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 google.golang.org/grpc v1.29.1 ) go-cloud-0.20.0/go.sum000066400000000000000000001472231367004507500144550ustar00rootroot00000000000000bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3 h1:0sMegbmn/8uTwpNkB0q9cLEpZ2W5a6kl+wtBQgPWBJQ= cloud.google.com/go v0.44.3/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.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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.2.0 h1:zrl+2VJAYC/C6WzEPnkqZIBeHyHFs/UmtzJdXU4Bvmo= cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 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/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35g= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0 h1:YsbWYxDZkC7x2OxlsDEYvvEXZ3cBI3qBgUK5BqkZvRw= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1 h1:Dll2uFfOVI3fa8UzsHyP6z0M6fEc9ZTAMo+Y3z282Xg= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4 h1:kfg5Yyy1nYUrqzyfW5XX+dzMASky8IJXhtHe0KTYNS4= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0 h1:j9tjcwhypb/jek3raNrwlCIl7iKQYOug7CLpSyBBodc= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible h1:aFlw3lP7ZHQi4m1kWCpcwYtczhDkGhDoRaMTaxcOf68= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1 h1:w9foWsHoOt1n8R0O58Co/ddrazx5vfDY0g64/6UWyuo= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7 h1:/Uyqh30J5JrDFAOERQtEqP0qPWkrNXxr94vRnSa54Ac= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0 h1:zebkZaadz7+wIQYgC7GXaz3Wb28yKYfVkkBKwc38VF8= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0 h1:15vMO4y76dehZSq7pAaOLQxC6dZYsSrj2GQpflyM/L4= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae h1:sTOp2Ajiew5XIH92YSdwhYc+bgpUX5j5TKK/Ac8Saw8= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= 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/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1 h1:/eqq+otEXm5vhfBrbREPCSVQbvofip6kIz+mX5TUH7k= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149 h1:HfxbT6/JcvIljmERptWhwa8XzP7H3T+Z2N26gTsaDaA= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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/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/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b h1:mSUCVIwDx4hfXJfWsOPfdzEHxzb2Xjl6BQ8YgPnazQA= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0 h1:Dh6fw+p6FyRl5x/FvNswO1ji0lIGzm3KP8Y9VkS9PTE= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6 h1:5Y8c5HBW6hBYnGEE3AbJPV0R8RsQmg1/eaJrpvasns0= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.5.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 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= 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/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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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-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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 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/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= go-cloud-0.20.0/gocloud.code-workspace000066400000000000000000000031531367004507500175770ustar00rootroot00000000000000{ "folders": [ { "path": "." }, { "path": "internal/cmd/gocdk" }, { "path": "internal/contributebot" }, { "path": "internal/website" }, { "path": "samples" } ], "settings": { "cSpell.words": [ "Hashicorp", "MongoDB", "MongoDB's", "NATS", "Nanos", "Newf", "RPC", "RPCs", "Shopify", "URL's", "ack", "acked", "acking", "acks", "amazonaws", "amqp", "appengine", "awserr", "awserror", "awskms", "awsmysql", "awsparamstore", "awspostgres", "awssns", "awssnssqs", "awssqs", "azuresb", "biome's", "bson", "cloudkms", "contributebot", "curr", "dbname", "dynamodb", "etag", "etcd", "etcdvar", "fsnotify", "gRPC", "gcaws", "gcerr", "gcerrors", "gcpkms", "gcpmysql", "gcppostgres", "gcppubsub", "gcsblob", "gocdk", "gocloud", "googleapis", "healthz", "knative", "memblob", "mempubsub", "mongodocstore", "msg", "msgs", "mybucket", "mycfg", "mycollection", "mydb", "myinstance", "mykey", "myproject", "mysub", "mysubject", "mysubscription", "mytable", "mytopic", "myvar", "nackable", "nacked", "nacking", "nacks", "natspubsub", "oauth", "oauth2", "ocsql", "pctx", "postgres", "protobuf", "protos", "ptypes", "sarama", "sess", "specifier", "specifier's", "structs", "tfstate", "unacked", "uploader", "upsert", "usagef", "uuid", "vals", "vkit", "waitc", "xerrors" ], "files.associations": { "*.htmlt": "html" } } } go-cloud-0.20.0/internal/000077500000000000000000000000001367004507500151255ustar00rootroot00000000000000go-cloud-0.20.0/internal/admin/000077500000000000000000000000001367004507500162155ustar00rootroot00000000000000go-cloud-0.20.0/internal/admin/README.md000066400000000000000000000013041367004507500174720ustar00rootroot00000000000000# The Go CDK Project Terraform Setup This is a [Terraform][] configuration for the Go CDK open source project. It manages GitHub ACLs, issue labels, and the module proxy buckets on GCS. To apply the configuration to the project's resources, [sign into the gcloud CLI][gcloud auth login], grab a [GitHub access token][], and then do the following: ```bash internal/admin$ echo 'github_token = "INSERT TOKEN HERE"' > terraform.tfvars internal/admin$ terraform init internal/admin$ terraform apply ``` [gcloud auth login]: https://cloud.google.com/sdk/docs/authorizing#running_gcloud_auth_login [GitHub access token]: https://github.com/settings/tokens/new?scopes=repo [Terraform]: https://www.terraform.io/ go-cloud-0.20.0/internal/admin/main.tf000066400000000000000000000027321367004507500175000ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. terraform { backend "gcs" { bucket = "go-cloud-tfstate" } required_version = "~>0.12" } provider "github" { version = "~> 2.0" organization = "google" token = var.github_token } provider "google" { version = "~> 2.5" } module "go_cloud_repo" { source = "./repository" name = "go-cloud" description = "The Go Cloud Development Kit (Go CDK): A library and tools for open cloud development in Go." homepage_url = "https://gocloud.dev/" topics = [ "cloud", "golang", "portable", "server", "multi-cloud", "hybrid-cloud", "go", "aws", "gcp", "azure", ] } module "wire_repo" { source = "./repository" name = "wire" description = "Compile-time Dependency Injection for Go" topics = [ "go", "golang", "dependency-injection", "codegen", "initialization", ] } go-cloud-0.20.0/internal/admin/repository/000077500000000000000000000000001367004507500204345ustar00rootroot00000000000000go-cloud-0.20.0/internal/admin/repository/main.tf000066400000000000000000000123361367004507500217200ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. resource "github_repository" "repo" { name = "${var.name}" description = "${var.description}" homepage_url = "${var.homepage_url}" topics = "${var.topics}" has_downloads = true has_issues = true has_projects = false has_wiki = false default_branch = "master" allow_merge_commit = false allow_squash_merge = true allow_rebase_merge = false } resource "github_branch_protection" "default_branch" { repository = "${github_repository.repo.name}" branch = "${github_repository.repo.default_branch}" enforce_admins = true required_status_checks { strict = false contexts = [ "Travis CI - Pull Request", "cla/google", ] } required_pull_request_reviews {} } # Permissions data "github_team" "eng" { slug = "go-cloud-eng" } resource "github_team_repository" "eng" { team_id = "${data.github_team.eng.id}" repository = "${github_repository.repo.name}" permission = "admin" } data "github_team" "devrel" { slug = "go-devrel" } resource "github_team_repository" "devrel" { team_id = "${data.github_team.devrel.id}" repository = "${github_repository.repo.name}" permission = "push" } resource "github_repository_collaborator" "sameer" { repository = "${github_repository.repo.name}" username = "Sajmani" permission = "admin" } resource "github_repository_collaborator" "rsc" { repository = "${github_repository.repo.name}" username = "rsc" permission = "push" } # Labels resource "github_issue_label" "blocked" { repository = "${github_repository.repo.name}" name = "blocked" color = "e89884" description = "Blocked on a different issue" } resource "github_issue_label" "bug" { repository = "${github_repository.repo.name}" name = "bug" color = "d73a4a" description = "Something isn't working" } resource "github_issue_label" "cla_no" { repository = "${github_repository.repo.name}" name = "cla: no" color = "b60205" description = "Cannot accept contribution until Google CLA is signed." } resource "github_issue_label" "cla_yes" { repository = "${github_repository.repo.name}" name = "cla: yes" color = "0e8a16" description = "Google CLA has been signed!" } resource "github_issue_label" "code_health" { repository = "${github_repository.repo.name}" name = "code health" color = "bfd4f2" description = "Code health task, either refactoring or testing" } resource "github_issue_label" "documentation" { repository = "${github_repository.repo.name}" name = "documentation" color = "edd782" description = "Documentation change" } resource "github_issue_label" "duplicate" { repository = "${github_repository.repo.name}" name = "duplicate" color = "cfd3d7" description = "This issue or pull request already exists" } resource "github_issue_label" "enhancement" { repository = "${github_repository.repo.name}" name = "enhancement" color = "a2eeef" description = "New feature or request" } # The "good first issue" label is treated specially by GitHub: # https://help.github.com/en/articles/helping-new-contributors-find-your-project-with-labels resource "github_issue_label" "good_first_issue" { repository = "${github_repository.repo.name}" name = "good first issue" color = "7057ff" description = "Good for newcomers" } resource "github_issue_label" "process" { repository = "${github_repository.repo.name}" name = "process" color = "a2aaef" description = "Improvement to the engineering process" } resource "github_issue_label" "in_progress" { repository = "${github_repository.repo.name}" name = "in progress" color = "99ffad" description = "This is being actively worked on" } resource "github_issue_label" "needs_info" { repository = "${github_repository.repo.name}" name = "needs info" color = "d876e3" description = "Further discussion or clarification is necessary" } resource "github_issue_label" "ready_to_submit" { repository = "${github_repository.repo.name}" name = "ready to submit" color = "0e8a16" description = "Pull request has been approved and should be merged once tests pass" } resource "github_issue_label" "P0" { repository = "${github_repository.repo.name}" name = "P0" color = "990000" } resource "github_issue_label" "P1" { repository = "${github_repository.repo.name}" name = "P1" color = "ff6666" } resource "github_issue_label" "P2" { repository = "${github_repository.repo.name}" name = "P2" color = "cc9900" } go-cloud-0.20.0/internal/admin/repository/variables.tf000066400000000000000000000017461367004507500227470ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. variable "name" { type = "string" description = "Name of the repository (without the google/)." } variable "description" { type = "string" description = "Description of the repository." } variable "homepage_url" { default = "" description = "Description of the repository." } variable "topics" { default = [] description = "Repository topics/keywords." } go-cloud-0.20.0/internal/admin/variables.tf000066400000000000000000000013111367004507500205140ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. variable "github_token" { type = string description = "An OAuth token to connect to GitHub with" } go-cloud-0.20.0/internal/contributebot/000077500000000000000000000000001367004507500200105ustar00rootroot00000000000000go-cloud-0.20.0/internal/contributebot/.vscode/000077500000000000000000000000001367004507500213515ustar00rootroot00000000000000go-cloud-0.20.0/internal/contributebot/.vscode/tasks.json000066400000000000000000000005751367004507500234000ustar00rootroot00000000000000{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "Test", "type": "shell", "command": "go test ./...", "group": { "kind": "test", "isDefault": true } } ] } go-cloud-0.20.0/internal/contributebot/Dockerfile000066400000000000000000000020421367004507500220000ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This Dockerfile expects to have the context of the whole repository. # Step 1: Build Go binary. FROM golang:1.11beta3 as build ENV GO111MODULE on COPY . /go/src/go-cloud WORKDIR /go/src/go-cloud/internal/contributebot RUN go build # Step 2: Create image with built Go binary. FROM gcr.io/distroless/base COPY --from=build /go/src/go-cloud/internal/contributebot/contributebot / # Expose 8080 for health checks EXPOSE 8080 ENTRYPOINT ["/contributebot"] go-cloud-0.20.0/internal/contributebot/README.md000066400000000000000000000147201367004507500212730ustar00rootroot00000000000000# Contribute Bot Contribute Bot is a small service (written using the Go CDK!) that performs automated checks on issues and pull requests to help keep contributions organized and easy to triage for maintainers. Contribute Bot has two servers: a webhook endpoint and an event listener. The webhook endpoint publishes events to a Cloud Pub/Sub topic that are eventually processed by the event listener. GitHub has a [10 second webhook response time limit][github-async] combined with a [5000 request/hour API rate limit][github-ratelimit], so this adds buffering with the assumption that incoming events are bursty. [github-async]: https://developer.github.com/v3/guides/best-practices-for-integrators/#favor-asynchronous-work-over-synchronous [github-ratelimit]: https://developer.github.com/v3/#rate-limiting ## Configuration Contribute Bot will look for a configuration file at the root of the repository called `.contributebot` on the repository's default branch. This allows changes to the configuration to be version-controlled and reviewed using the project's normal process. The configuration file is in JSON format and has the following keys:
issue_title_pattern
An RE2 regular expression of an acceptable issue title. Any issue that does not match the pattern will receive a response. The default pattern is ^([a-z0-9./-]+|[A-Z_]+): .*$.
issue_title_response
The text of the comment that will be added to an issue that does not match the title pattern. This can use GitHub-flavored Markdown.
pull_request_title_pattern
An RE2 regular expression of an acceptable pull request title. Any issue that does not match the pattern will receive a response. The default pattern is ^([a-z0-9./-]+|[A-Z_]+): .*$.
pull_request_title_response
The text of the comment that will be added to a pull request that does not match the title pattern. This can use GitHub-flavored Markdown.
require_pull_request_fork_branch
If true, then pull requests coming from branches on the same repository will be automatically closed. Defaults to true.
## DevOps Setup To set up your own instance of Contribute Bot for local testing or deployment: 1. [Create a new GCP project][]. 1. Set your project using `gcloud config set project PROJECTID`, where `PROJECTID` is the project's ID. 1. Download default application credentials with `gcloud auth application-default login`. 1. Enable App Engine with `gcloud app create`. 1. Copy the `prod` directory to a directory called `dev`. 1. In `dev/main.tf`, remove the `backend "gcs"` block and change the project IDs to your new GCP project. 1. Run `terraform init` from the new `dev` directory. 1. Run `terraform apply` to set up the infrastructure. 1. [Deploy the webhook][], creating a random webhook secret. 1. [Create the GitHub application][], setting the webhook URL to `https://PROJECTID.appspot.com/webhook`, where `PROJECTID` is your GCP project ID. * Set the `Webhook secret` to the random webhook secret you created above. * Make sure to give Read & Write access to Issues, Pull Requests, Checks, Repository Contents and Read-only access to Repository metadata and Repository administration. * Subscribe to pull request, issue, check run, and push events. 1. Download a GitHub application secret key and copy the contents into a new Terraform [variable file][] in the `dev` directory, setting the `github_app_key` variable. It's useful to use a ["here doc"][]. Then run `terraform apply` again to update the secret material. Your variable file should look something like this: ```bash contributebot/dev$ cat terraform.tfvars github_app_key = < Developer Settings > Github Apps`, then `Edit` your app and select `Install App`). 1. Download a GitHub application secret key for your test application. 1. Run `contributebot`, setting the flags for your test GCP project and GitHub application. You can find the App ID under `About` on the Github page for your app. Example: ```go go run . --project=your-project-name --github_app=42 --github_key=/foo.pem ``` ## Deploying ### To production To deploy an updated Contribute Bot to production, follow these steps. ```shell # If you're working on production Contribute Bot, Cloud Build will # automatically build a new version of the Docker image when commits are # made to internal/contributebot. Find a new image at # https://console.cloud.google.com/cloud-build/builds?project=go-cloud-contribute-bot # Otherwise, fire off a manual Cloud Build. gcloud builds submit --config cloudbuild.yaml ../.. --project=go-cloud-contribute-bot # Edit prod/k8s/contributebot.yaml and replace the image with the one # you just created. # Apply to cluster. Replace project and zone with the actual values. gcloud container clusters get-credentials \ --project=go-cloud-contribute-bot \ --zone=us-central1-c \ contributebot-cluster kubectl apply -f prod/k8s # Check that the deployment was successful: kubectl describe pods --selector=app=contributebot-worker # Send a PR with the updated .yaml file. ``` ### Somewhere else If you want to deploy to your own cluster, modify `k8s/contributebot.yaml` to replace `go-cloud-contribute-bot` with your own project ID, and `15206` with your own Github App ID. Run the commands above, using your own project ID in the command line arguments instead of `go-cloud-contribute-bot`. go-cloud-0.20.0/internal/contributebot/cloudbuild.yaml000066400000000000000000000014651367004507500230300ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/contributebot:$BUILD_ID', '-f', 'internal/contributebot/Dockerfile', '.'] images: - 'gcr.io/$PROJECT_ID/contributebot:$BUILD_ID' go-cloud-0.20.0/internal/contributebot/design/000077500000000000000000000000001367004507500212615ustar00rootroot00000000000000go-cloud-0.20.0/internal/contributebot/design/README.md000066400000000000000000000305721367004507500225470ustar00rootroot00000000000000# Contribute Bot Design Author: [@zombiezen][]
Date: 2018-08-01
Part of [#216][] [@zombiezen]: https://github.com/zombiezen [#216]: https://github.com/google/go-cloud/issues/216 ## Objective As a maintainer of the Go CDK, there are a number of conventions about format of issues, pull requests, and commits that keep the project tidy and easy to navigate. However, new contributors (and even seasoned contributors) forget to meet these conventions. It adds toil for maintainers of the Go CDK to correct contributions to match these conventions. The objective is to eliminate maintainer toil by notifying contributors of convention violations (or even correcting them automatically where possible). ## Overview To reduce maintainer toil, this document proposes a [GitHub Application][] that does various checks. The bot will check the following (but likely more will be added): - Issue title format - PR title format - Commit message format (one line summary, "Fixes" on last line of description) - License headers in new files - Branches are in a fork, not on the main repository - Removing the "In Progress" label from closed issues The bot is not responsible for any "correctness" checks: the continuous integration (CI) must be responsible for such checks. [GitHub Application]: https://developer.github.com/apps/about-apps/#about-github-apps ## Background: GitHub Applications From the [GitHub documentation][about-github-apps]: > GitHub Apps are first-class actors within GitHub. A GitHub App acts on its own > behalf, taking actions via the API directly using its own identity, which > means you don't need to maintain a bot or service account as a separate user. > > GitHub Apps can be installed directly on organizations and user accounts and > granted access to specific repositories. They come with built-in webhooks and > narrow, specific permissions. GitHub Apps are somewhat like GCP service accounts in that they act as standalone roles. Administrators of the app can furnish keys for API authentication, which the server must use in order to act as the GitHub App. A GitHub App must surface a [webhook][] endpoint over HTTPS to listen for events from GitHub. At a minimum, this webhook must respond to ping and installation events. [about-github-apps]: https://developer.github.com/apps/about-apps/#about-github-apps [webhook]: https://developer.github.com/webhooks/ ## Detailed Design Architecture diagram showing GitHub communicating with a webhook endpoint, which sends to a Cloud Pub/Sub queue, which is read by an event worker, which then communicates with GitHub. A highly available webhook endpoint (running on App Engine Standard) will listen for webhook events from GitHub and write them to a Cloud Pub/Sub topic. A single event worker (running on Google Kubernetes Engine) will process the event queue and communicate with the GitHub API to make changes. Running the webhook on App Engine Standard keeps the availability of the webhook high and comes with a built-in domain name (appspot.com) and [HTTPS certificate][App Engine HTTPS certificate]. However, the Go CDK [does not support App Engine Standard][#210]. This is fine, since the endpoint is going to be quite fixed and not expected to change frequently. The event worker must only be running one instance and one subscription, since running multiple instances can cause confusing concurrent modifications. To ensure this level of scaling control (as well as leveraging the secrets), the event worker will run on Google Kubernetes Engine. [App Engine HTTPS certificate]: https://cloud.google.com/appengine/docs/standard/go/securing-custom-domains-with-ssl [#210]: https://github.com/google/go-cloud/issues/210 ### Event Worker Checks The primary logic of the event worker will be determining if an event matches some condition and then taking appropriate action (adding a comment or running checks). Event payloads include a snapshot of the affected resource, which allows the event worker to make checks without affecting the [GitHub API rate limit][]. Since the events are delivered asynchronously, the event worker must only use the event payload as a hint: if action might be required, it should query GitHub for the latest state. It is expected that more checks will be added over time, but they will likely be refinements of the rules below. Any increase in permission scope should be accompanied by a design doc. [GitHub API rate limit]: https://developer.github.com/v3/#rate-limiting #### Issue Title Format Check When an [IssuesEvent][] is received indicating an issue has been created or the title has changed: 1. The issue title is queried to see whether it follows the regex `^[a-z0-9/]+: .*$`. 1. If the title does not follow the regex, then the issue's comments are queried to see whether the bot has commented on the improper format since the title change. 1. If no such comment exists, then the event worker issues a comment about the title not matching the format. [IssuesEvent]: https://developer.github.com/v3/activity/events/types/#issuesevent #### Removing the "In Progress" Label When an [IssuesEvent][] is received and it indicates the issue has been closed: 1. The issue is queried to see whether it is still closed and check its labels. 1. If the issue is closed and its set of labels contains "In Progress", the "In Progress" label is removed. #### Branches in Fork Check When an [PullRequestEvent][] is received and it indicates a pull request has been created: 1. Query the current pull request metadata. 1. If it is in the same repository and it is open, close it with a message to the effect of please create pull requests from your own fork and to perhaps delete the branch. [PullRequestEvent]: https://developer.github.com/v3/activity/events/types/#pullrequestevent #### Pull Request Linting When an [PullRequestEvent][] is received and it indicates a pull request has been created or synchronized (the content has changed): 1. If no check run exists for the latest commit on the pull request, create one with an `in_progress` status. If one exists, don't do anything more. 1. Query the first differing commit's message. If the commit message's first line does not match the regex `^[a-z0-9/]+: .*$`, then add a line item to the status check output that the message format is wrong and fail the check. If the commit message includes the regex (case-insensitive) `Fixes #[0-9]+` but this match is not on its own set of lines at the end of the message, then add a line item to the status check output that the message format is wrong and fail the check. 1. Query the pull request's description. If the description includes an issue number the first differing commit's message does not include it, add a line item to the status check output to verify the commit message includes the issue information. At most, the check's status will be neutral. 1. Check any added source files in the latest commit (**TODO: exact set of file extensions**) to see if they include the license header. If they do not, add an annotation to the first line of the file that a license header is missing and fail the check. 1. If any new imports are added to go.mod, add an annotation to verify that the license is one of the `notice`, `permissive`, or `unencumbered` licences under the categories [defined by Google Open Source][thirdparty licenses]. 1. If any commits in the pull request have a commit author that is not in the [CONTRIBUTORS][] file, then add a line item to the status check output to add the contributors to the file and fail the check. [thirdparty licenses]: https://opensource.google.com/docs/thirdparty/licenses/ [CONTRIBUTORS]: https://github.com/google/go-cloud/blob/master/CONTRIBUTORS ## Redundancy and Reliability The focus for this application is to ensure that events are not dropped on the ground. It is acceptable for the worker to be unavailable (impact is simply more maintainer toil), as long as the queue of events does not build up to the 7 day limit. GitHub requires the webhook have [a response time of <10s][GitHub async work] and does not appear to redeliver events. * Cloud Pub/Sub has a [99.95% uptime SLA][Cloud Pub/Sub SLA]. * App Engine has a [99.95% uptime SLA][App Engine SLA]. * GitHub itself has no SLA. Given these SLAs, the webhook listener's maximum uptime SLO is 99.9%. [GitHub async work]: https://developer.github.com/v3/guides/best-practices-for-integrators/#favor-asynchronous-work-over-synchronous [Cloud Pub/Sub SLA]: https://cloud.google.com/pubsub/sla [App Engine SLA]: https://cloud.google.com/appengine/sla ## Security Considerations This GitHub application will have the following permissions: * [Read repository metadata][] (enabled for every GitHub application) * [Read & write checks][] (adding annotations to pull requests) * [Read & write issues][] (adding comments to issues) * [Read & write pull requests][] (adding comments to pull requests) GitHub applications are scoped to particular installed repositories, so they cannot act beyond the repositories that a human has explicitly "installed" them on. This prevents a compromised server or credentials from impacting more than just the Go CDK repository. Communication between GitHub and the webhook endpoint will take place over HTTPS, and the webhook endpoint will [verify the webhook secret][] in the payload to ensure that the event came from GitHub. Communication with Cloud Pub/Sub occurs over HTTPS, and messages in Cloud Pub/Sub are [encrypted at rest][Cloud Pub/Sub benefits]. [Read repository metadata]: https://developer.github.com/v3/apps/permissions/#metadata-permissions [Read & write checks]: https://developer.github.com/v3/apps/permissions/#permission-on-checks [Read & write issues]: https://developer.github.com/v3/apps/permissions/#permission-on-issues [Read & write pull requests]: https://developer.github.com/v3/apps/permissions/#permission-on-pull-requests [verify the webhook secret]: https://developer.github.com/webhooks/securing/ [Cloud Pub/Sub benefits]: https://cloud.google.com/pubsub/docs/overview#benefits ## Privacy Considerations The bot will only be operating on public GitHub data. Some of this data will be persisted in a Cloud Pub/Sub queue, but will be deleted after 7 days as per [Pub/Sub's retention policy][]. [Pub/Sub's retention policy]: https://cloud.google.com/pubsub/docs/faq#persistent ## Testing Plan This service is largely defined by its interaction with GitHub, but unfortunately, GitHub does not provide an emulator or staging environment. I see two possible approaches: 1. Create a fake GitHub API server. This has the benefit of making the test run hermetic and fast, but also has a high upfront development cost. It's also possible for the fake to not match real GitHub API behavior. However, GitHub's docs include full sample requests and responses, so this might still be viable. 1. Run tests against a sandbox repository. (This appears to be what [GitHub recommends][install app on your account].) This is not hermetic, but gives higher confidence in the tests. Each dev would create a GitHub application and install it to a sandbox repository. The local dev setup is somewhat complex, though, since the primary interaction is through webhooks, which requires the local server to be exposed over HTTPS. [GitHub recommends][GitHub app setup] using [smee.io](https://smee.io) or [ngrok](https://ngrok.com/), but these are not acceptable in all developer circumstances. A workaround would be to use an isolated VM like Google Cloud Shell, but this does complicate local dev story. Some of this cost could be mitigated by using HTTP replay, but recording would still be a complicated setup. [install app on your account]: https://developer.github.com/apps/building-your-first-github-app/#install-the-app-on-your-account [GitHub app setup]: https://developer.github.com/apps/building-your-first-github-app/#one-time-setup ## Related Work This bot serves a similar purpose to [GopherBot][], but the Go CDK only uses GitHub data, not Gerrit. While [Maintner][] exists as an eventual consistency cache to serve GitHub data, the Go CDK is not at the scale yet where rate limiting would be an issue, so the Contribute Bot just makes direct calls to the GitHub API. [GopherBot]: https://github.com/golang/go/wiki/gopherbot [Maintner]: https://godoc.org/golang.org/x/build/maintner go-cloud-0.20.0/internal/contributebot/design/architecture.svg000066400000000000000000001063701367004507500244730ustar00rootroot00000000000000go-cloud-0.20.0/internal/contributebot/design/merge.md000066400000000000000000000106701367004507500227060ustar00rootroot00000000000000# Contribute Bot Auto-Merge Design Author: [@zombiezen][]
Date: 2018-12-17
Part of [#687][] [@zombiezen]: https://github.com/zombiezen [#687]: https://github.com/google/go-cloud/issues/687 ## Objective The maintainers of the Go CDK want pull requests merged in as quickly as they can be merged after receiving approvals, assuming there are no test breakages or merge conflicts. Currently, merging requires a manual process: ``` while branch is not up-to-date with master { press update branch button wait for Travis run to finish } click squash-and-merge ``` This loop is especially expensive the longer the waiting is, since it increases the likelihood that the branch is not up-to-date and thus causing the cycle to increase iterations (more waiting!). The objective of this design is to reduce the amount of maintainer [toil][] in this process. [toil]: https://landing.google.com/sre/sre-book/chapters/eliminating-toil/ ## Overview To reduce maintainer toil, this document proposes a new set of interactions for Contribute Bot. If a user writes a comment on a pull request that starts with the text "/merge", Contribute Bot will: 1. Verify that the commenter has `write` or `admin` access to the repository. If they do not, do not proceed and leave an error comment on the PR. 2. Verify that the pull request has the approvals required by the [GitHub branch protections][required reviews]. If it does not, do not proceed and leave an error comment on the PR. 3. Verify that there are no other commits on the pull request branch since the last approved commit (or a manually entered commit hash entered by the commenter) other than those created by Contribute Bot. If such commits exist, then do not proceed and leave a comment on the PR mentioning that "/merge COMMITHASH" will bypass this. While this is stricter than what the branch protections might allow, it avoids accidentally merging in unreviewed changes. 4. Leave a comment on the PR to the effect that Contribute Bot has received the request and that it will report back if it is unable to merge the PR. 5. If the pull request is not up to date with the changes on the base branch, then create a merge commit on the pull request branch. If the merge commit cannot be created due to merge conflicts, then stop trying to merge the PR and make an error comment on the PR. 6. Wait for any necessary check runs to report completion. If any report failure, then stop trying to merge the PR and make an error comment on the PR. 7. Merge the pull request using the project's allowed merge method (`squash` for Go CDK and Wire), using the title and body of the pull request (the first comment) as the commit message in the case of `merge` or `squash`. Multiple pull requests may be requested to be merged at the same time. In this case, Contribute Bot will hold off on proceeding through Steps 4-6 until the merge requests made earlier have either been merged or stopped due to errors. [required reviews]: https://help.github.com/articles/about-required-reviews-for-pull-requests/ ## Detailed Design TODO ## Security Considerations Contribute Bot will need the following new permissions: - [Read & write repository contents][] (writing the merge commit) - [Read repository administration][] (identifying which check runs are necessary to pass branch protections) [Read repository administration]: https://developer.github.com/v3/apps/permissions/#permission-on-administration [Read & write repository contents]: https://developer.github.com/v3/apps/permissions/#permission-on-contents ## Testing Plan This will be tested just like Contribute Bot is tested currently: by running manual tests against a sandbox repository. ## Alternatives Considered There are a handful of different off-the-shelf solutions that act as GitHub merge bots, but each would need to be customized to suit our needs. It would also increase the number of systems that the Go CDK contributors would need to maintain and monitor. This could also be implemented as a tool that each maintainer individually runs. However, this would require an always-on connection and additional per-maintainer burden, versus having a centralized implementation that's already connected and properly authorized to the project. Having a centralized service merge the pull requests also reduces load on Travis, since it can hold off on doing unnecessary merges while other pull requests are queued for merging. go-cloud-0.20.0/internal/contributebot/ghauth.go000066400000000000000000000231111367004507500216150ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "crypto/rsa" "encoding/json" "errors" "fmt" "log" "net/http" "strconv" "sync" "time" jwt "github.com/dgrijalva/jwt-go" "github.com/google/go-github/github" "gocloud.dev/runtimevar" ) // gitHubAppAuth makes HTTP requests with GitHub application credentials. // It watches a private key file, which can be rotated. type gitHubAppAuth struct { id int64 base http.RoundTripper available <-chan struct{} cancelWatch context.CancelFunc watchDone <-chan struct{} mu sync.RWMutex privateKey *rsa.PrivateKey } func newGitHubAppAuth(id int64, privateKey *runtimevar.Variable, rt http.RoundTripper) *gitHubAppAuth { watchDone := make(chan struct{}) available := make(chan struct{}) ctx, cancel := context.WithCancel(context.Background()) auth := &gitHubAppAuth{ id: id, base: rt, available: available, cancelWatch: cancel, watchDone: watchDone, } go func() { // Watch privateKey until Stop cancels the context. // available is used to notify waitPublicKey. defer close(watchDone) auth.watch(ctx, available, privateKey) }() return auth } // Stop stops watching the private key. func (auth *gitHubAppAuth) Stop() { auth.cancelWatch() <-auth.watchDone auth.mu.Lock() auth.privateKey = nil auth.mu.Unlock() } // watch watches the private key variable until the context is cancelled. // The available channel is closed on the first successful Watch or after the // context's cancellation, whichever comes first. func (auth *gitHubAppAuth) watch(ctx context.Context, available chan<- struct{}, v *runtimevar.Variable) { first := true for ctx.Err() == nil { snap, err := v.Watch(ctx) if err != nil { log.Println("Watching GitHub private key:", err) continue } curr := snap.Value.(*rsa.PrivateKey) auth.mu.Lock() auth.privateKey = curr auth.mu.Unlock() if first { close(available) first = false } log.Println("Using new GitHub private key") } // Stop waitPrivateKey from blocking indefinitely (it will catch the error). if first { close(available) } } // CheckHealth returns an error before auth's private key is available. // It implements the health.Checker interface. func (auth *gitHubAppAuth) CheckHealth() error { auth.mu.RLock() ok := auth.privateKey != nil auth.mu.RUnlock() if !ok { return errors.New("GitHub application private key not available") } return nil } // RoundTrip sends a request with the application's credentials, useful for // listing installations and such. func (auth *gitHubAppAuth) RoundTrip(req *http.Request) (*http.Response, error) { if !isGitHubAPIRequest(req) { // Pass through without adding credentials. return auth.base.RoundTrip(req) } forwarded := false if req.Body != nil { // As per http.RoundTripper interface, the RoundTrip method must always // close the Body. defer func() { if forwarded { return } if err := req.Body.Close(); err != nil { log.Println("Closing GitHub API request body:", err) } }() } // Compute authorization header. ctx := req.Context() key, err := auth.waitPrivateKey(ctx) if err != nil { return nil, err } now := time.Now() tok := jwt.NewWithClaims(jwt.SigningMethodRS256, &jwt.StandardClaims{ IssuedAt: now.Unix(), ExpiresAt: now.Add(10 * time.Minute).Unix(), Issuer: strconv.FormatInt(auth.id, 10), }) sig, err := tok.SignedString(key) if err != nil { return nil, fmt.Errorf("signing GitHub API request: %v", err) } // RoundTrippers must not modify the passed in request. // Clone the headers then add the new authorization header. req2 := new(http.Request) *req2 = *req req2.Header = cloneHeaders(req.Header) req2.Header.Set("Authorization", "Bearer "+sig) forwarded = true return auth.base.RoundTrip(req2) } func (auth *gitHubAppAuth) waitPrivateKey(ctx context.Context) (*rsa.PrivateKey, error) { select { case <-auth.available: case <-ctx.Done(): return nil, fmt.Errorf("waiting for GitHub application private key: %v", ctx.Err()) } auth.mu.RLock() key := auth.privateKey auth.mu.RUnlock() if key == nil { return nil, errors.New("GitHub application private key unavailable") } return key, nil } func (auth *gitHubAppAuth) forInstall(id int64) *gitHubInstallAuth { // TODO(light): Cache instances for the same ID. return &gitHubInstallAuth{app: auth, id: id} } // installationAuthAccept is the Accept header required to use GitHub // application installation tokens. const installationAuthAccept = "application/vnd.github.machine-man-preview+json" // fetchInstallToken obtains an authentication token for the given installation. func (auth *gitHubAppAuth) fetchInstallToken(ctx context.Context, id int64) (string, time.Time, error) { client := &http.Client{Transport: auth} u := fmt.Sprintf("https://api.github.com/installations/%d/access_tokens", id) req, err := http.NewRequest("POST", u, nil) if err != nil { return "", time.Time{}, fmt.Errorf("fetch GitHub installation token: %v", err) } req.Header.Set("Content-Length", "0") req.Header.Set("Accept", installationAuthAccept) req.Header.Set("User-Agent", userAgent) resp, err := client.Do(req.WithContext(ctx)) if err != nil { return "", time.Time{}, fmt.Errorf("fetch GitHub installation token: %v", err) } defer func() { if err := resp.Body.Close(); err != nil { log.Println("Close GitHub API response body:", err) } }() if resp.StatusCode != http.StatusCreated { e := new(github.ErrorResponse) if err := json.NewDecoder(resp.Body).Decode(e); err != nil { return "", time.Time{}, fmt.Errorf("fetch GitHub installation token: HTTP %s", resp.Status) } e.Response = resp return "", time.Time{}, fmt.Errorf("fetch GitHub installation token: %v", e) } var content struct { Token string `json:"token"` ExpiresAt string `json:"expires_at"` } if err := json.NewDecoder(resp.Body).Decode(&content); err != nil { return "", time.Time{}, fmt.Errorf("fetch GitHub installation token: parse response: %v", err) } expiry, err := time.Parse(time.RFC3339, content.ExpiresAt) if err != nil { return "", time.Time{}, fmt.Errorf("fetch GitHub installation token: parse response: %v", err) } return content.Token, expiry, nil } // gitHubInstallAuth makes HTTP requests with GitHub application installation credentials. type gitHubInstallAuth struct { app *gitHubAppAuth id int64 mu sync.Mutex token string expiry time.Time cond chan struct{} } // fetchToken obtains a reasonably fresh access token. func (auth *gitHubInstallAuth) fetchToken(ctx context.Context) (string, error) { // Block if another goroutine is fetching a token. auth.mu.Lock() for auth.cond != nil { c := auth.cond auth.mu.Unlock() select { case <-c: auth.mu.Lock() case <-ctx.Done(): return "", fmt.Errorf("waiting for GitHub installation token: %v", ctx.Err()) } } // Lock held: is token still valid? (Renew a minute ahead of time to reduce // clock skew issues.) now := time.Now() if auth.token != "" && now.Before(auth.expiry.Add(60*time.Second)) { tok := auth.token auth.mu.Unlock() return tok, nil } // Invalid token. Set the condition variable and fetch the new token. c := make(chan struct{}) auth.cond = c auth.mu.Unlock() tok, expiry, err := auth.app.fetchInstallToken(ctx, auth.id) auth.mu.Lock() // Report results back to caller, unlocking before doing so. // Release condition variable even if we fail so others can attempt later. close(c) auth.cond = nil if err != nil { auth.mu.Unlock() return "", err } // Token is valid. auth.token = tok auth.expiry = expiry auth.mu.Unlock() return tok, nil } // RoundTrip sends a request with an installation's credentials, possibly // fetching a new access token. func (auth *gitHubInstallAuth) RoundTrip(req *http.Request) (*http.Response, error) { if !isGitHubAPIRequest(req) { // Pass through without adding credentials. return auth.app.base.RoundTrip(req) } forwarded := false if req.Body != nil { // As per http.RoundTripper interface, the RoundTrip method must always // close the Body. defer func() { if forwarded { return } if err := req.Body.Close(); err != nil { log.Println("Closing GitHub API request body:", err) } }() } // Obtain token to use in header. tok, err := auth.fetchToken(req.Context()) if err != nil { return nil, err } // RoundTrippers must not modify the passed in request. // Clone the headers then add the new authorization header. req2 := new(http.Request) *req2 = *req req2.Header = cloneHeaders(req.Header) req2.Header.Set("Authorization", "token "+tok) req2.Header.Set("Accept", installationAuthAccept) forwarded = true return auth.app.base.RoundTrip(req2) } func cloneHeaders(h http.Header) http.Header { h2 := make(http.Header, len(h)) for k, v := range h { h2[k] = v } return h2 } // isGitHubAPIRequest reports whether r is a request to the GitHub API. // It is conservative, as this is used to ensure credentials are not // leaked accidentally to other origins. func isGitHubAPIRequest(r *http.Request) bool { return r.URL.Scheme == "https" && r.URL.Host == "api.github.com" } go-cloud-0.20.0/internal/contributebot/go.mod000066400000000000000000000022671367004507500211250ustar00rootroot00000000000000// Copyright 2018-2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev/internal/contributebot go 1.12 require ( cloud.google.com/go/pubsub v1.4.0 github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/google/go-cmp v0.4.1 github.com/google/go-github v17.0.0+incompatible github.com/google/go-querystring v1.0.0 // indirect github.com/google/wire v0.4.0 go.opencensus.io v0.22.3 gocloud.dev v0.20.0 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 google.golang.org/api v0.26.0 google.golang.org/appengine v1.6.6 ) go-cloud-0.20.0/internal/contributebot/go.sum000066400000000000000000001506631367004507500211560ustar00rootroot00000000000000bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3/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.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= cloud.google.com/go v0.52.0 h1:GGslhk/BU052LPlnI1vpp3fcbUs+hQ3E+Doti/3/vF8= 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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0 h1:EpMNVUorLiZIELdMZbCYX/ByTFCdoYopYAGxaGVz9ms= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/pubsub v1.4.0 h1:76oR7VBOkL7ivoIrFKyW0k7YDCRelrlxktIzQiIUGgg= cloud.google.com/go/pubsub v1.4.0/go.mod h1:LFrqilwgdw4X2cJS9ALgzYmMu+ULyrUN6IHV3CPK4TM= 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 h1:RPUcBvDeYgQFMfQu1eBMq6piD1SXmLH+vK3qjewZPus= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35g= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= 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/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= 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/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc= 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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149 h1:HfxbT6/JcvIljmERptWhwa8XzP7H3T+Z2N26gTsaDaA= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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 h1:A1gGSx58LAGVHUUsOf7IiR0u8Xb6W51gRwfDBhkdcaw= 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/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a h1:7Wlg8L54In96HTWOaI4sreLJ6qfyGuvSau5el3fK41Y= 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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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 h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367 h1:0IiAsCRByjO2QjX7ZPkw5oU9x+n1YqRL802rjC0c3Aw= 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/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/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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 h1:LfCXLvNmTYH9kEmVgqbnsWfruoXZIrh4YBgqVHtDvw0= 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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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 h1:KW20qMcLRWuIgjdCpHFJbVZA7zsDKtFXPNcm7/eI5ZA= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200527183253-8e7acdbce89d h1:SR+e35rACZFBohNb4Om1ibX6N3iO0FtdbwqGSuD9dBU= golang.org/x/tools v0.0.0-20200527183253-8e7acdbce89d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= 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.5.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 h1:Q3Ui3V3/CVinFWFiW39Iw0kMuVrRzYX0wN6OPFp0lTA= 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/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0 h1:0q95w+VuFtv4PAx4PZVQdBMmYbaCHbnfKaEiDIcVyag= 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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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-20191108220845-16a3f7862a1a h1:Ob5/580gVHBJZgXnff1cZDbG+xLtMVE5mDRTe+nIsX4= 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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200528110217-3d3490e7e671/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 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 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= go-cloud-0.20.0/internal/contributebot/main.go000066400000000000000000000224021367004507500212630ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // contributebot is a service for keeping the Go Cloud Development Kit // project tidy. package main import ( "context" "encoding/json" "flag" "fmt" "io" "log" "net/http" "os" "sync" "time" "github.com/google/go-github/github" "gocloud.dev/pubsub" ) const userAgent = "google/go-cloud Contribute Bot" type flagConfig struct { project string subscription string gitHubAppID int64 keyPath string } func main() { addr := flag.String("listen", ":8080", "address to listen for health checks") var cfg flagConfig flag.StringVar(&cfg.project, "project", "", "GCP project for topic") flag.StringVar(&cfg.subscription, "subscription", "contributebot-github-events", "subscription name inside project") flag.Int64Var(&cfg.gitHubAppID, "github_app", 0, "GitHub application ID") flag.StringVar(&cfg.keyPath, "github_key", "", "path to GitHub application private key") flag.Parse() if cfg.project == "" || cfg.gitHubAppID == 0 || cfg.keyPath == "" { fmt.Fprintln(os.Stderr, "contributebot: must specify -project, -github_app, and -github_key") os.Exit(2) } ctx := context.Background() w, server, cleanup, err := setup(ctx, cfg) if err != nil { log.Fatal(err) } defer cleanup() log.Printf("Serving health checks at %s", *addr) go server.ListenAndServe(*addr) log.Fatal(w.receive(ctx)) } // worker contains the connections used by this server. type worker struct { sub *pubsub.Subscription auth *gitHubAppAuth mu sync.Mutex configCache map[repoKey]*repoConfigCacheEntry } func newWorker(sub *pubsub.Subscription, auth *gitHubAppAuth) *worker { return &worker{ sub: sub, auth: auth, configCache: make(map[repoKey]*repoConfigCacheEntry), } } const configCacheTTL = 2 * time.Minute type repoKey struct { owner string repo string } type repoConfigCacheEntry struct { // On initial placement in the cache, ready will be an open channel. // It will be closed once the entry has been fetched and the other // fields are thus safe to read. ready <-chan struct{} config repoConfig err error fetched time.Time } // receive listens for events on its subscription and handles them. func (w *worker) receive(ctx context.Context) error { for { msg, err := w.sub.Receive(ctx) if err != nil { return err } id := msg.Metadata["X-GitHub-Delivery"] eventType := msg.Metadata["X-GitHub-Event"] if eventType == "integration_installation" || eventType == "integration_installation_repositories" { // Deprecated event types. Ignore them in favor of supported ones. log.Printf("Skipped event %s of deprecated type %s", id, eventType) msg.Ack() continue } event, err := github.ParseWebHook(eventType, msg.Body) if err != nil { log.Printf("Parsing %s event %s: %v", eventType, id, err) msg.Ack() // We did process the message, albeit unsuccessfully. continue } var handleErr error switch event := event.(type) { case *github.IssuesEvent: handleErr = w.receiveIssueEvent(ctx, event) case *github.PullRequestEvent: handleErr = w.receivePullRequestEvent(ctx, event) case *github.PingEvent, *github.InstallationEvent, *github.CheckRunEvent, *github.CheckSuiteEvent, *github.PushEvent: // No-op. default: log.Printf("Unhandled webhook event type %s (%T) for %s", eventType, event, id) msg.Ack() // Although we don't know what event type this is, we did // process the message, by doing nothing. continue } if handleErr != nil { log.Printf("Failed processing %s event %s: %v", eventType, id, handleErr) // Don't ack or nack; let the message expire, and hope the error won't happen // when it's redelivered. continue } msg.Ack() log.Printf("Processed %s event %s", eventType, id) } } func (w *worker) receiveIssueEvent(ctx context.Context, e *github.IssuesEvent) error { client := w.ghClient(e.GetInstallation().GetID()) // Pull out the interesting data from the event. data := &issueData{ Action: e.GetAction(), Owner: e.GetRepo().GetOwner().GetLogin(), Repo: e.GetRepo().GetName(), Issue: e.GetIssue(), Change: e.GetChanges(), } // Fetch repository configuration. cfg, err := w.repoConfig(ctx, client, data.Owner, data.Repo) if err != nil { return err } // Refetch the issue in case the event data is stale. iss, _, err := client.Issues.Get(ctx, data.Owner, data.Repo, data.Issue.GetNumber()) if err != nil { return err } data.Issue = iss // Process the issue, deciding what actions to take (if any). log.Printf("Identifying actions for issue: %v", data) edits := processIssueEvent(cfg, data) log.Printf("-> %v", edits) // Execute the actions (if any). return edits.Execute(ctx, client, data) } func (w *worker) receivePullRequestEvent(ctx context.Context, e *github.PullRequestEvent) error { client := w.ghClient(e.GetInstallation().GetID()) // Pull out the interesting data from the event. data := &pullRequestData{ Action: e.GetAction(), OwnerLogin: e.GetRepo().GetOwner().GetLogin(), Repo: e.GetRepo().GetName(), PullRequest: e.GetPullRequest(), Change: e.GetChanges(), } // Fetch repository configuration. cfg, err := w.repoConfig(ctx, client, data.OwnerLogin, data.Repo) if err != nil { return err } // Refetch the pull request in case the event data is stale. pr, _, err := client.PullRequests.Get(ctx, data.OwnerLogin, data.Repo, data.PullRequest.GetNumber()) if err != nil { return err } data.PullRequest = pr // Process the pull request, deciding what actions to take (if any). log.Printf("Identifying actions for pull request: %v", data) edits := processPullRequestEvent(cfg, data) log.Printf("-> %v", edits) // Execute the actions (if any). return edits.Execute(ctx, client, data) } // repoConfig fetches the parsed Contribute Bot configuration for the given // repository. The result may be cached. func (w *worker) repoConfig(ctx context.Context, client *github.Client, owner, repo string) (_ *repoConfig, err error) { cacheKey := repoKey{owner, repo} queryTime := time.Now() w.mu.Lock() ent := w.configCache[cacheKey] if ent != nil { select { case <-ent.ready: // Entry has been fully written. Check if we can use its results. if ent.err == nil && queryTime.Sub(ent.fetched) < configCacheTTL { // Cache hit; no processing necessary. w.mu.Unlock() return &ent.config, nil } default: // Another goroutine is currently retrieving the configuration. Block on that result. w.mu.Unlock() select { case <-ent.ready: if ent.err != nil { return nil, ent.err } return &ent.config, nil case <-ctx.Done(): return nil, fmt.Errorf("read repository %s/%s config: %v", owner, repo, ctx.Err()) } } } // Cache miss. Reserve the fetch work. done := make(chan struct{}) ent = &repoConfigCacheEntry{ ready: done, config: *defaultRepoConfig(), } w.configCache[cacheKey] = ent w.mu.Unlock() defer func() { ent.fetched = time.Now() ent.err = err // err is the named return value. close(done) }() // Fetch the configuration from the repository. content, _, response, err := client.Repositories.GetContents(ctx, owner, repo, ".contributebot", nil) if response != nil && response.StatusCode == http.StatusNotFound { // File not found. Use default configuration. return &ent.config, nil } if err != nil { return nil, fmt.Errorf("read repository %s/%s config: %v", owner, repo, err) } data, err := content.GetContent() if err != nil { return nil, fmt.Errorf("read repository %s/%s config: %v", owner, repo, err) } if err := json.Unmarshal([]byte(data), &ent.config); err != nil { return nil, fmt.Errorf("read repository %s/%s config: %v", owner, repo, err) } return &ent.config, nil } // isClosed tests whether a channel is closed without blocking. func isClosed(c <-chan struct{}) bool { select { case _, ok := <-c: return !ok default: return false } } // ghClient creates a GitHub client authenticated for the given installation. func (w *worker) ghClient(installID int64) *github.Client { c := github.NewClient(&http.Client{Transport: w.auth.forInstall(installID)}) c.UserAgent = userAgent return c } func (w *worker) CheckHealth() error { return w.auth.CheckHealth() } // frontPage serves a page explaining that this port is only open for health checks. func frontPage(resp http.ResponseWriter, req *http.Request) { if req.URL.Path != "/" { http.NotFound(resp, req) return } const responseData = ` Go Cloud Development Kit Contribute Bot Worker

Go Cloud Development Kit Contribute Bot Worker

This HTTP port is only open to serve health checks.

` resp.Header().Set("Content-Length", fmt.Sprint(len(responseData))) resp.Header().Set("Content-Type", "text/html; charset=utf-8") io.WriteString(resp, responseData) } go-cloud-0.20.0/internal/contributebot/main.tf000066400000000000000000000107171367004507500212750ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. terraform { required_version = "~>0.12" } locals { appengine_service_account = "${var.project}@appspot.gserviceaccount.com" } resource "google_project_service" "cloudbuild" { service = "cloudbuild.googleapis.com" project = var.project disable_on_destroy = false } # Service account for the event worker resource "google_service_account" "worker" { account_id = "contributebot" project = var.project display_name = "Contribute Bot Server" } resource "google_service_account_key" "worker" { service_account_id = google_service_account.worker.name } # Stackdriver Tracing resource "google_project_service" "trace" { service = "cloudtrace.googleapis.com" project = var.project disable_on_destroy = false } resource "google_project_iam_member" "worker_trace" { role = "roles/cloudtrace.agent" project = var.project member = "serviceAccount:${google_service_account.worker.email}" } # Pub/Sub resource "google_pubsub_topic" "github_events" { name = "contributebot-github-events" project = var.project } data "google_iam_policy" "github_events" { binding { role = "roles/pubsub.publisher" members = [ "serviceAccount:${local.appengine_service_account}", ] } binding { role = "roles/pubsub.subscriber" members = [ "serviceAccount:${google_service_account.worker.email}", ] } } resource "google_pubsub_topic_iam_policy" "github_events" { topic = google_pubsub_topic.github_events.name project = var.project policy_data = data.google_iam_policy.github_events.policy_data } resource "google_pubsub_subscription" "worker" { name = "contributebot-github-events" topic = google_pubsub_topic.github_events.id project = var.project } data "google_iam_policy" "worker_subscription" { binding { role = "roles/pubsub.subscriber" members = [ "serviceAccount:${google_service_account.worker.email}", ] } binding { role = "roles/pubsub.viewer" members = [ "serviceAccount:${google_service_account.worker.email}", ] } } resource "google_pubsub_subscription_iam_policy" "worker" { subscription = google_pubsub_subscription.worker.id project = var.project policy_data = data.google_iam_policy.worker_subscription.policy_data } # Kubernetes Engine resource "google_project_service" "container" { service = "container.googleapis.com" disable_on_destroy = false } resource "google_container_cluster" "contributebot" { name = "contributebot-cluster" project = var.project zone = var.zone initial_node_count = 3 node_config { machine_type = "n1-standard-1" disk_size_gb = 10 oauth_scopes = [ "https://www.googleapis.com/auth/compute", "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", ] } # Needed for Kubernetes provider below. enable_legacy_abac = true depends_on = [google_project_service.container] } provider "kubernetes" { version = "~> 1.1" host = "https://${google_container_cluster.contributebot.endpoint}" client_certificate = base64decode( google_container_cluster.contributebot.master_auth[0].client_certificate, ) client_key = base64decode( google_container_cluster.contributebot.master_auth[0].client_key, ) cluster_ca_certificate = base64decode( google_container_cluster.contributebot.master_auth[0].cluster_ca_certificate, ) } resource "kubernetes_secret" "worker_service_account" { metadata { name = "worker-service-account" } data = { "key.json" = base64decode(google_service_account_key.worker.private_key) } } resource "kubernetes_secret" "github_app_key" { metadata { name = "github-app-key" } data = { "key.pem" = var.github_app_key } } go-cloud-0.20.0/internal/contributebot/outputs.tf000066400000000000000000000027121367004507500220700ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. output "project" { value = var.project description = "The GCP project ID." } output "github_events_topic" { value = "projects/${var.project}/topics/${google_pubsub_topic.github_events.name}" description = "The fully qualified name of the topic." } output "github_events_worker_subscription" { value = google_pubsub_subscription.worker.path description = "The fully qualified name of the event worker's subscription." } output "worker_service_account" { value = google_service_account.worker.email description = "The service account email that will be used for the worker running inside the GKE cluster." } output "cluster_name" { value = google_container_cluster.contributebot.name description = "GKE cluster name." } output "cluster_zone" { value = var.zone description = "GCP zone that the GKE cluster is in." } go-cloud-0.20.0/internal/contributebot/process.go000066400000000000000000000226571367004507500220310ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "fmt" "log" "regexp" "strings" "github.com/google/go-github/github" ) // inProgressLabel is the name of the label used to indicate that an // issue is currently being worked on. const inProgressLabel = "in progress" // branchesInForkCloseResponse is the comment response given when a // branch is created on the repository instead of a fork. const branchesInForkCloseResponse = "Please create pull requests from your own fork instead of from branches in the main repository. Also, please delete this branch." type repoConfig struct { RequirePullRequestForkBranch bool `json:"require_pull_request_fork_branch"` IssueTitlePattern string `json:"issue_title_pattern"` IssueTitleResponse string `json:"issue_title_response"` PullRequestTitlePattern string `json:"pull_request_title_pattern"` PullRequestTitleResponse string `json:"pull_request_title_response"` } func defaultRepoConfig() *repoConfig { const titlePattern = `^([a-z0-9./-]+|[A-Z_]+): .*$` return &repoConfig{ RequirePullRequestForkBranch: true, IssueTitlePattern: titlePattern, IssueTitleResponse: "Please edit the title of this issue with the name of the affected package, or \"all\", followed by a colon, followed by a short summary of the issue. Example: `blob/gcsblob: not blobby enough`.", PullRequestTitlePattern: titlePattern, PullRequestTitleResponse: "Please edit the title of this pull request with the name of the affected package, or \"all\", followed by a colon, followed by a short summary of the change. Example: `blob/gcsblob: improve comments`.", } } // issueData is information about an issue event. // See the github documentation for more details about the fields: // https://godoc.org/github.com/google/go-github/github#IssuesEvent type issueData struct { // Action that this event is for. // Possible values are: "assigned", "unassigned", "labeled", "unlabeled", "opened", "closed", "reopened", "edited". Action string // Repo is the repository the pull request wants to commit to. Repo string // Owner is the owner of the repository. Owner string // Issue the event is for. Issue *github.Issue // Change made as part of the event. Change *github.EditChange } func (i *issueData) String() string { return fmt.Sprintf("[%s issue #%d]", i.Action, i.Issue.GetNumber()) } // hasLabel returns true iff the issue has the given label. func hasLabel(iss *github.Issue, label string) bool { for i := range iss.Labels { if iss.Labels[i].GetName() == label { return true } } return false } // titleChanged returns true iff the title changed. func titleChanged(title string, edit *github.EditChange) bool { return edit != nil && edit.Title != nil && edit.Title.From != nil && *edit.Title.From != title } // processIssueEvent identifies actions that should be taken based on the issue // event represented by data. func processIssueEvent(cfg *repoConfig, data *issueData) *issueEdits { edits := &issueEdits{} if data.Action == "closed" { if hasLabel(data.Issue, inProgressLabel) { edits.RemoveLabels = append(edits.RemoveLabels, inProgressLabel) } return edits } // Add a comment if the title doesn't match our regexp, and it's a new issue, // or an issue whose title has just been modified. if re, err := regexp.Compile(cfg.IssueTitlePattern); err != nil { // TODO(light): Increment a configuration error metric. log.Printf("Invalid issue title pattern %q: %v", cfg.IssueTitlePattern, err) } else if !re.MatchString(data.Issue.GetTitle()) && (data.Action == "opened" || (data.Action == "edited" && titleChanged(data.Issue.GetTitle(), data.Change))) { edits.AddComments = append(edits.AddComments, cfg.IssueTitleResponse) } return edits } // issueEdits captures all of the edits to be made to an issue. type issueEdits struct { RemoveLabels []string AddComments []string } func (i *issueEdits) String() string { var actions []string for _, label := range i.RemoveLabels { actions = append(actions, fmt.Sprintf("remove label %q", label)) } for _, comment := range i.AddComments { actions = append(actions, fmt.Sprintf("add comment %q", comment)) } if len(actions) == 0 { return "[no changes]" } return strings.Join(actions, ", ") } // Execute applies all of the requested edits, aborting on error. func (i *issueEdits) Execute(ctx context.Context, client *github.Client, data *issueData) error { for _, label := range i.RemoveLabels { _, err := client.Issues.RemoveLabelForIssue(ctx, data.Owner, data.Repo, data.Issue.GetNumber(), label) if err != nil { return err } } for _, comment := range i.AddComments { _, _, err := client.Issues.CreateComment(ctx, data.Owner, data.Repo, data.Issue.GetNumber(), &github.IssueComment{ Body: github.String(comment)}) if err != nil { return err } } return nil } // pullRequestData is information about a pull request event. // See the github documentation for more details about the fields: // https://developer.github.com/v3/activity/events/types/#pullrequestevent type pullRequestData struct { // Action that this event is for. // Possible values are: "assigned", "unassigned", "labeled", "unlabeled", // "opened", "closed", "reopened", "edited". Action string // OwnerLogin is the owner's name of the repository. OwnerLogin string // Repo is the name of the repository the pull request wants to commit to. Repo string // PullRequest the event is for. PullRequest *github.PullRequest // Change made as part of the event. Change *github.EditChange } func (pr *pullRequestData) String() string { return fmt.Sprintf("[%s #%d]", pr.Action, pr.PullRequest.GetNumber()) } // processPullRequestEvent identifies actions that should be taken based on the // pull request event represented by data. func processPullRequestEvent(cfg *repoConfig, data *pullRequestData) *pullRequestEdits { edits := &pullRequestEdits{} pr := data.PullRequest // Skip the process when the PR is closed, we check this here instead of when // calling processPullRequest so that it is easier to add any process in future // for closed PR's. if pr.GetState() == "closed" { return edits } // If the pull request is not from a fork, close it and request that it comes // from a fork instead. if cfg.RequirePullRequestForkBranch && data.Action == "opened" && pr.GetHead().GetRepo().GetID() == pr.GetBase().GetRepo().GetID() { edits.Close = true edits.AddComments = append(edits.AddComments, branchesInForkCloseResponse) // Short circuit since we're closing anyway. return edits } // If unassigned, assign to the first requested reviewer. if pr.GetAssignee() == nil && len(pr.RequestedReviewers) > 0 { for _, r := range pr.RequestedReviewers { edits.AssignTo = append(edits.AssignTo, r.GetLogin()) } } // Add a comment if the title doesn't match our regexp, and it's a new issue, // or an issue whose title has just been modified. if re, err := regexp.Compile(cfg.PullRequestTitlePattern); err != nil { // TODO(light): Increment a configuration error metric. log.Printf("Invalid pull request title pattern %q: %v", cfg.PullRequestTitlePattern, err) } else if !re.MatchString(pr.GetTitle()) && (data.Action == "opened" || (data.Action == "edited" && titleChanged(pr.GetTitle(), data.Change))) { edits.AddComments = append(edits.AddComments, cfg.PullRequestTitleResponse) } return edits } // pullRequestEdits captures all of the edits to be made to an issue. type pullRequestEdits struct { Close bool AssignTo []string AddComments []string } func (i *pullRequestEdits) String() string { var actions []string if i.Close { actions = append(actions, "close") } if len(i.AssignTo) > 0 { actions = append(actions, fmt.Sprintf("assign to %s", strings.Join(i.AssignTo, " + "))) } for _, comment := range i.AddComments { actions = append(actions, fmt.Sprintf("add comment %q", comment)) } if len(actions) == 0 { return "[no changes]" } return strings.Join(actions, ", ") } // Execute applies all of the requested edits, aborting on error. func (i *pullRequestEdits) Execute(ctx context.Context, client *github.Client, data *pullRequestData) error { for _, comment := range i.AddComments { // Note: Use the Issues service since we're adding a top-level comment: // https://developer.github.com/v3/guides/working-with-comments/. _, _, err := client.Issues.CreateComment(ctx, data.OwnerLogin, data.Repo, data.PullRequest.GetNumber(), &github.IssueComment{ Body: github.String(comment)}) if err != nil { return err } } if len(i.AssignTo) > 0 { _, _, err := client.Issues.AddAssignees(ctx, data.OwnerLogin, data.Repo, data.PullRequest.GetNumber(), i.AssignTo) if err != nil { return err } } if i.Close { _, _, err := client.PullRequests.Edit(ctx, data.OwnerLogin, data.Repo, data.PullRequest.GetNumber(), &github.PullRequest{ State: github.String("closed"), }) if err != nil { return err } } return nil } go-cloud-0.20.0/internal/contributebot/process_test.go000066400000000000000000000204711367004507500230600ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "regexp" "testing" "github.com/google/go-cmp/cmp" "github.com/google/go-github/github" ) func TestDefaultRepoConfig(t *testing.T) { cfg := defaultRepoConfig() if _, err := regexp.Compile(cfg.IssueTitlePattern); err != nil { t.Error("Issue title pattern:", err) } if _, err := regexp.Compile(cfg.PullRequestTitlePattern); err != nil { t.Error("Pull request title pattern:", err) } } func TestProcessIssueEvent(t *testing.T) { const ( defaultTitle = "foo: bar" ) tests := []struct { description string action string title string prevTitle string labels []string want *issueEdits }{ // Closed issue should not be checked other than "in progress" label { description: "close with invalid title -> no change", action: "closed", title: "foo", want: &issueEdits{}, }, // Remove "in progress" label from closed issues. { description: "close with random label -> no change", action: "closed", title: defaultTitle, labels: []string{"foo"}, want: &issueEdits{}, }, { description: "open with in progress label -> no change", action: "opened", title: defaultTitle, labels: []string{"in progress"}, want: &issueEdits{}, }, { description: "close with in progress label -> remove it", action: "closed", title: defaultTitle, labels: []string{"in progress"}, want: &issueEdits{ RemoveLabels: []string{"in progress"}, }, }, // Check issue title looks like "foo: bar". { description: "open with invalid issue title -> add comment", action: "opened", title: "foo", want: &issueEdits{ AddComments: []string{defaultRepoConfig().IssueTitleResponse}, }, }, { description: "edit on invalid issue title but title didn't change -> no change", action: "edited", title: "foo", prevTitle: "foo", want: &issueEdits{}, }, { description: "edit to invalid issue title -> add comment", action: "edited", title: "prev", prevTitle: "foo", want: &issueEdits{ AddComments: []string{defaultRepoConfig().IssueTitleResponse}, }, }, } for _, tc := range tests { t.Run(tc.description, func(t *testing.T) { lbls := make([]github.Label, len(tc.labels)) for i, label := range tc.labels { lbls[i] = github.Label{Name: &label} } iss := &github.Issue{ Labels: lbls, Title: github.String(tc.title), } var chg *github.EditChange if tc.action == "edited" { chg = &github.EditChange{} if tc.prevTitle != "" { title := struct { From *string `json:"from,omitempty"` }{From: github.String(tc.prevTitle)} chg.Title = &title } } data := &issueData{ Action: tc.action, Issue: iss, Change: chg, } got := processIssueEvent(defaultRepoConfig(), data) if diff := cmp.Diff(tc.want, got); diff != "" { t.Errorf("diff: (-want +got)\n%s", diff) } }) } } func TestProcessPullRequestEvent(t *testing.T) { const ( mainRepoOwner = "google" mainRepoName = "go-cloud" defaultTitle = "foo: bar" defaultAuthor = "octocat" ) sameRepoBranchesCfg := defaultRepoConfig() sameRepoBranchesCfg.RequirePullRequestForkBranch = false tests := []struct { description string cfg *repoConfig action string state string reviewers []string title string prevTitle string headOwner string want *pullRequestEdits }{ // Skip processing when the PR is closed. { description: "closed with invalid title -> no change", title: defaultTitle, state: "closed", headOwner: defaultAuthor, want: &pullRequestEdits{}, }, // If the pull request is from a branch of the main repo, close it (when configuration says to). { description: "open with branch from fork -> no change", action: "opened", title: defaultTitle, headOwner: defaultAuthor, want: &pullRequestEdits{}, }, { description: "open with branch from main repo -> close", action: "opened", title: defaultTitle, headOwner: mainRepoOwner, want: &pullRequestEdits{ Close: true, AddComments: []string{branchesInForkCloseResponse}, }, }, { description: "open with branch from main repo, config allows -> no change", cfg: sameRepoBranchesCfg, action: "opened", title: defaultTitle, headOwner: mainRepoOwner, want: &pullRequestEdits{}, }, // Assign to reviewers. { description: "open with no assignee and a reviewer -> assign", action: "opened", title: defaultTitle, reviewers: []string{"foo"}, headOwner: defaultAuthor, want: &pullRequestEdits{AssignTo: []string{"foo"}}, }, { description: "open with no assignee and multiple reviewers -> assign", action: "opened", title: defaultTitle, reviewers: []string{"foo", "bar"}, headOwner: defaultAuthor, want: &pullRequestEdits{AssignTo: []string{"foo", "bar"}}, }, { description: "closed with no assignee and a reviewer -> no change", action: "edited", title: defaultTitle, state: "closed", reviewers: []string{"foo"}, headOwner: defaultAuthor, want: &pullRequestEdits{}, }, // Check title looks like "foo: bar". { description: "open with invalid title -> add comment", action: "opened", title: "foo", headOwner: defaultAuthor, want: &pullRequestEdits{ AddComments: []string{defaultRepoConfig().PullRequestTitleResponse}, }, }, { description: "edit on invalid title but title didn't change -> no change", action: "edited", title: "foo", prevTitle: "foo", headOwner: defaultAuthor, want: &pullRequestEdits{}, }, { description: "edit to invalid title -> add comment", action: "edited", title: "prev", prevTitle: "foo", headOwner: defaultAuthor, want: &pullRequestEdits{ AddComments: []string{defaultRepoConfig().PullRequestTitleResponse}, }, }, } for _, tc := range tests { t.Run(tc.description, func(t *testing.T) { pr := &github.PullRequest{ Base: &github.PullRequestBranch{ Repo: &github.Repository{ ID: github.Int64(1234), Owner: &github.User{ Login: github.String(mainRepoOwner), }, Name: github.String(mainRepoName), }, Ref: github.String("master"), }, Head: &github.PullRequestBranch{ // Repo will be filled in below. Ref: github.String("feature"), }, Title: github.String(tc.title), State: github.String(tc.state), } for _, reviewer := range tc.reviewers { pr.RequestedReviewers = append(pr.RequestedReviewers, &github.User{Login: github.String(reviewer)}) } if tc.headOwner == mainRepoOwner { pr.Head.Repo = pr.Base.Repo } else { pr.Head.Repo = &github.Repository{ ID: github.Int64(5678), Owner: &github.User{ Login: github.String(tc.headOwner), }, Name: github.String(mainRepoName), } } var chg *github.EditChange if tc.action == "edited" { chg = &github.EditChange{} if tc.prevTitle != "" { title := struct { From *string `json:"from,omitempty"` }{From: github.String(tc.prevTitle)} chg.Title = &title } } data := &pullRequestData{ Action: tc.action, OwnerLogin: mainRepoOwner, Repo: mainRepoName, PullRequest: pr, Change: chg, } cfg := tc.cfg if cfg == nil { cfg = defaultRepoConfig() } got := processPullRequestEvent(cfg, data) if diff := cmp.Diff(tc.want, got); diff != "" { t.Errorf("diff: (-want +got)\n%s", diff) } }) } } go-cloud-0.20.0/internal/contributebot/prod/000077500000000000000000000000001367004507500207545ustar00rootroot00000000000000go-cloud-0.20.0/internal/contributebot/prod/README.md000066400000000000000000000010001367004507500222220ustar00rootroot00000000000000# Contribute Bot Production Configuration Primary documentation is in the [main README][]. This is the production configuration for Contribute Bot. It is set up as a separate [Terraform module][] to keep the configuration in version control while allowing developers to create their own modules for test deployments. As noted in the main README, you can use this directory as a template for your own dev setup. [main README]: ../README.md [Terraform module]: https://www.terraform.io/docs/modules/usage.html go-cloud-0.20.0/internal/contributebot/prod/k8s/000077500000000000000000000000001367004507500214615ustar00rootroot00000000000000go-cloud-0.20.0/internal/contributebot/prod/k8s/contributebot.yaml000066400000000000000000000035301367004507500252310ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. apiVersion: extensions/v1beta1 kind: Deployment metadata: name: contributebot-worker labels: app: contributebot-worker spec: replicas: 1 selector: matchLabels: app: contributebot-worker strategy: type: Recreate template: metadata: labels: app: contributebot-worker spec: volumes: - name: github-app-key secret: secretName: github-app-key - name: google-cloud-key secret: secretName: worker-service-account containers: - name: contributebot image: gcr.io/go-cloud-contribute-bot/contributebot:60dbbbc6-726c-4485-b32b-820ff4a1e9c5 args: - "-project=go-cloud-contribute-bot" - "-github_app=15206" - "-github_key=/var/secrets/github/key.pem" imagePullPolicy: IfNotPresent ports: - containerPort: 8080 protocol: TCP volumeMounts: - name: github-app-key mountPath: /var/secrets/github - name: google-cloud-key mountPath: /var/secrets/google env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/secrets/google/key.json livenessProbe: httpGet: path: /healthz/liveness port: 8080 go-cloud-0.20.0/internal/contributebot/prod/main.tf000066400000000000000000000021551367004507500222360ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. terraform { backend "gcs" { bucket = "go-cloud-contribute-bot-tfstate" } required_version = "~>0.12" } provider "google" { version = "~> 2.5" project = "go-cloud-contribute-bot" } variable "github_app_key" { default = "" description = "PEM-encoded GitHub application private key. This defaults to empty for bootstrapping reasons." } module "contributebot" { source = "./.." project = "go-cloud-contribute-bot" zone = "us-central1-c" github_app_key = var.github_app_key } go-cloud-0.20.0/internal/contributebot/setup.go000066400000000000000000000055171367004507500215070ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // +build wireinject package main import ( "context" "crypto/rsa" "errors" "net/http" psapi "cloud.google.com/go/pubsub/apiv1" jwt "github.com/dgrijalva/jwt-go" "github.com/google/wire" "go.opencensus.io/trace" "gocloud.dev/gcp" "gocloud.dev/pubsub" "gocloud.dev/pubsub/gcppubsub" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/filevar" "gocloud.dev/server" "gocloud.dev/server/health" "gocloud.dev/server/requestlog" ) func setup(ctx context.Context, cfg flagConfig) (*worker, *server.Server, func(), error) { ws, cleanup, err := inject(ctx, cfg) if err != nil { return nil, nil, nil, err } return ws.worker, ws.server, cleanup, nil } type workerAndServer struct { worker *worker server *server.Server } func inject(ctx context.Context, cfg flagConfig) (workerAndServer, func(), error) { wire.Build( gcp.CredentialsTokenSource, gcp.DefaultCredentials, gitHubAppAuthFromConfig, healthChecks, gcppubsub.Dial, gcppubsub.SubscriberClient, server.Set, subscriptionFromConfig, trace.NeverSample, wire.InterfaceValue(new(http.RoundTripper), http.DefaultTransport), wire.InterfaceValue(new(requestlog.Logger), (requestlog.Logger)(nil)), wire.InterfaceValue(new(trace.Exporter), (trace.Exporter)(nil)), wire.Struct(new(workerAndServer), "*"), newWorker, wire.InterfaceValue(new(http.Handler), http.HandlerFunc(frontPage)), ) return workerAndServer{}, nil, errors.New("will be replaced by Wire") } func gitHubAppAuthFromConfig(rt http.RoundTripper, cfg flagConfig) (*gitHubAppAuth, func(), error) { d := runtimevar.NewDecoder(new(rsa.PrivateKey), func(ctx context.Context, p []byte, val interface{}) error { key, err := jwt.ParseRSAPrivateKeyFromPEM(p) if err != nil { return err } *(val.(**rsa.PrivateKey)) = key return nil }) v, err := filevar.OpenVariable(cfg.keyPath, d, nil) if err != nil { return nil, nil, err } auth := newGitHubAppAuth(cfg.gitHubAppID, v, rt) return auth, func() { auth.Stop() v.Close() }, nil } func subscriptionFromConfig(client *psapi.SubscriberClient, cfg flagConfig) *pubsub.Subscription { return gcppubsub.OpenSubscription(client, gcp.ProjectID(cfg.project), cfg.subscription, nil) } func healthChecks(w *worker) []health.Checker { return []health.Checker{w} } go-cloud-0.20.0/internal/contributebot/sync.go000066400000000000000000000147371367004507500213270ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "bytes" "context" "fmt" "io/ioutil" "log" "net/url" "os" "os/exec" "path/filepath" "strings" "github.com/google/go-github/github" "golang.org/x/sys/unix" ) // syncParams is the set of parameters to syncPullRequest. type syncParams struct { BaseOwner string BaseRepo string BaseBranch string PRNumber int HeadOwner string HeadRepo string HeadBranch string } // syncPullRequest merges the latest changes on the base branch into the head branch. // syncPullRequest only returns errors if the interactions with GitHub fail. func syncPullRequest(ctx context.Context, gitPath string, auth *gitHubInstallAuth, client *github.Client, params syncParams) error { tok, err := auth.fetchToken(ctx) if err != nil { // If this doesn't work, nothing else will. return err } // Perform the merge. The Git authentication scheme is described at // https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#http-based-git-access-by-an-installation headURL := &url.URL{ Scheme: "https", User: url.UserPassword("x-access-token", tok), Host: "github.com", Path: fmt.Sprintf("%s/%s.git", params.HeadOwner, params.HeadRepo), } baseURL := &url.URL{ Scheme: "https", User: url.UserPassword("x-access-token", tok), Host: "github.com", Path: fmt.Sprintf("%s/%s.git", params.BaseOwner, params.BaseRepo), } err = gitSync(ctx, gitPath, remoteGitBranch{repo: headURL.String(), branch: params.HeadBranch}, remoteGitBranch{repo: baseURL.String(), branch: params.BaseBranch}) if err == nil { // Success is much simpler than failure. Return early. return nil } // Log the error in case there's a bigger issue. prName := fmt.Sprintf("%s/%s#%d", params.BaseOwner, params.BaseRepo, params.PRNumber) log.Printf("Could not sync %s: %v", prName, err) // Add comment to PR indicating failure. msg := fmt.Sprintf("I was unable to merge %s:%s into %s:%s. This is likely due to merge conflicts. A project maintainer must merge the branches manually.", params.BaseOwner, params.BaseBranch, params.HeadOwner, params.HeadBranch) _, _, err = client.Issues.CreateComment(ctx, params.BaseOwner, params.BaseRepo, params.PRNumber, &github.IssueComment{Body: github.String(msg)}) if err != nil { return fmt.Errorf("add merge failure comment to %s: %v", prName, err) } return nil } // remoteGitBranch identifies a remote Git branch. type remoteGitBranch struct { repo string // URL or path to repository, like "https://github.com/octocat/example.git" branch string // name of branch, like "master" } // gitSync merges the changes on branch src into branch dst. It performs the Git // operations locally. If the src branch's head commit is an ancestor of the dst // branch (i.e. all changes have already been merged in), then the head branch // will remain unchanged. func gitSync(ctx context.Context, gitPath string, dst, src remoteGitBranch) error { if src.branch == "" || strings.HasPrefix(src.branch, "-") { return fmt.Errorf("invalid source branch %q", src.branch) } if dst.branch == "" || strings.HasPrefix(dst.branch, "-") { return fmt.Errorf("invalid destination branch %q", dst.branch) } tempDir, err := ioutil.TempDir("", "contributebot_sync") if err != nil { return fmt.Errorf("%v", err) } defer func() { if err := os.RemoveAll(tempDir); err != nil { log.Printf("Failed to clean up temporary directory %s after sync: %v", tempDir, err) } }() // Clone to temporary directory. err = runCommand(ctx, tempDir, gitPath, []string{ "clone", "--quiet", "--branch", dst.branch, "--", dst.repo, "."}) if err != nil { return err } // Merge in upstream. err = runCommand(ctx, tempDir, gitPath, []string{ // Use Contribute Bot identity for created commits. "-c", "user.name=Contribute Bot", "-c", "user.email=noreply@gocloud.dev", // Use pull: fetch + merge. "pull", "--quiet", // Always create a merge commit. "--commit", "--no-edit", // Source for merge. "--", src.repo, "refs/heads/" + src.branch}) if err != nil { return err } // Push the resulting commit back to the head ref. return runCommand(ctx, tempDir, gitPath, []string{ "push", "--quiet", "origin", "HEAD:refs/heads/" + dst.branch}) } // runCommand starts a subprocess and waits for it to finish. If the subprocess // exits with failure, the returned error's message will include the combined // stdout and stderr. If the context is cancelled, then runCommand sends the // subprocess SIGTERM (this differs from CommandContext, which sends SIGKILL). func runCommand(ctx context.Context, dir string, exe string, args []string) error { c := exec.Command(exe, args...) c.Dir = dir out := new(bytes.Buffer) c.Stdout = out c.Stderr = out if err := c.Start(); err != nil { return err } // Wait for subprocess to finish. While doing so, listen for context cancellation. waitDone := make(chan struct{}) go func() { select { case <-ctx.Done(): // Ignore error: if we can't signal, it's likely because the process already exited. _ = c.Process.Signal(unix.SIGTERM) case <-waitDone: } // No further synchronization back to the main goroutine, because signal is uninterruptable and // there's no meaningful work after the waitDone signal is received. }() err := c.Wait() close(waitDone) if err != nil { // Return an error with the stderr in the message. exeName := filepath.Base(exe) stderr := bytes.TrimSuffix(out.Bytes(), []byte{'\n'}) if len(stderr) == 0 { return fmt.Errorf("run %s: %v", exeName, err) } if _, isExit := err.(*exec.ExitError); isExit { // Exit errors don't add useful details if output is not empty. // Just show the output. if bytes.IndexByte(stderr, '\n') == -1 { // Collapse into single line. return fmt.Errorf("run %s: %s", exeName, stderr) } return fmt.Errorf("run %s:\n%s", exeName, stderr) } return fmt.Errorf("run %s: %v\n%s", exeName, err, stderr) } return nil } go-cloud-0.20.0/internal/contributebot/sync_test.go000066400000000000000000000323671367004507500223650ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "fmt" "io/ioutil" "os" "os/exec" "path/filepath" "strings" "testing" ) func TestGitSync(t *testing.T) { gitPath, err := exec.LookPath("git") if err != nil { t.Skip("Can't find system Git:", err) } c := exec.Command(gitPath, "--version") versionBuf := new(strings.Builder) c.Stdout = versionBuf if err := c.Run(); err != nil { t.Fatal("Getting Git version info:", err) } t.Logf("Git version: %s", strings.TrimSuffix(versionBuf.String(), "\n")) // Test suite: t.Run("BranchesEven", func(t *testing.T) { testGitSyncBranchesEven(t, gitPath) }) t.Run("BranchAhead", func(t *testing.T) { testGitSyncBranchAhead(t, gitPath) }) t.Run("BranchBehind", func(t *testing.T) { testGitSyncBranchBehind(t, gitPath) }) t.Run("Diverge", func(t *testing.T) { testGitSyncDiverge(t, gitPath) }) } func testGitSyncBranchesEven(t *testing.T, gitPath string) { tempDir, err := ioutil.TempDir("", "contributebot_sync_test") if err != nil { t.Fatal(err) } defer func() { if err := os.RemoveAll(tempDir); err != nil { t.Errorf("Cleaning up %s: %v", tempDir, err) } }() // Create a repository A with a single commit on master. ctx := context.Background() if err := runCommand(ctx, tempDir, gitPath, []string{"init", "repoA"}); err != nil { t.Fatal(err) } repoRootA := filepath.Join(tempDir, "repoA") if err := dummyFile(repoRootA, "file.txt"); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"add", "file.txt"}); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"commit", "--quiet", "-m", "first"}); err != nil { t.Fatal(err) } master, err := revParse(repoRootA, gitPath, "HEAD") if err != nil { t.Fatal(err) } if err := makeRepoBare(repoRootA, gitPath); err != nil { t.Fatal(err) } // Clone repository A to repository B. // Create a feature branch that points to the same commit as master. if err := runCommand(ctx, tempDir, gitPath, []string{"clone", "--quiet", "repoA", "repoB"}); err != nil { t.Fatal(err) } repoRootB := filepath.Join(tempDir, "repoB") if err := runCommand(ctx, repoRootB, gitPath, []string{"checkout", "--quiet", "-b", "feature"}); err != nil { t.Fatal(err) } if err := makeRepoBare(repoRootB, gitPath); err != nil { t.Fatal(err) } // Run sync. err = gitSync(ctx, gitPath, remoteGitBranch{repo: repoRootB, branch: "feature"}, // destination remoteGitBranch{repo: repoRootA, branch: "master"}) // source if err != nil { t.Error("gitSync:", err) } // Verify that feature branch still points to same commit. if got, err := revParse(repoRootB, gitPath, "refs/heads/feature"); err != nil { t.Error(err) } else if got != master { t.Error("feature now points to a different commit; want to keep branch the same") } } func testGitSyncBranchAhead(t *testing.T, gitPath string) { tempDir, err := ioutil.TempDir("", "contributebot_sync_test") if err != nil { t.Fatal(err) } defer func() { if err := os.RemoveAll(tempDir); err != nil { t.Errorf("Cleaning up %s: %v", tempDir, err) } }() // Create a repository A with a single commit on master. ctx := context.Background() if err := runCommand(ctx, tempDir, gitPath, []string{"init", "repoA"}); err != nil { t.Fatal(err) } repoRootA := filepath.Join(tempDir, "repoA") if err := dummyFile(repoRootA, "file1.txt"); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"add", "file1.txt"}); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"commit", "--quiet", "-m", "first"}); err != nil { t.Fatal(err) } commit1, err := revParse(repoRootA, gitPath, "HEAD") if err != nil { t.Fatal(err) } if err := makeRepoBare(repoRootA, gitPath); err != nil { t.Fatal(err) } // Clone repository A to repository B. // Create a feature branch based on master and create a second commit. if err := runCommand(ctx, tempDir, gitPath, []string{"clone", "--quiet", "repoA", "repoB"}); err != nil { t.Fatal(err) } repoRootB := filepath.Join(tempDir, "repoB") if err := runCommand(ctx, repoRootB, gitPath, []string{"checkout", "--quiet", "-b", "feature", "HEAD"}); err != nil { t.Fatal(err) } if err := dummyFile(repoRootB, "file2.txt"); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootB, gitPath, []string{"add", "file2.txt"}); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootB, gitPath, []string{"commit", "--quiet", "-m", "second"}); err != nil { t.Fatal(err) } commit2, err := revParse(repoRootB, gitPath, "HEAD") if err != nil { t.Fatal(err) } if err := makeRepoBare(repoRootB, gitPath); err != nil { t.Fatal(err) } // Run sync. err = gitSync(ctx, gitPath, remoteGitBranch{repo: repoRootB, branch: "feature"}, // destination remoteGitBranch{repo: repoRootA, branch: "master"}) // source if err != nil { t.Error("gitSync:", err) } // Verify that feature branch points to commit 2. if got, err := revParse(repoRootB, gitPath, "refs/heads/feature"); err != nil { t.Error(err) } else if got == commit1 { t.Error("feature = commit 1; want commit 2") } else if got != commit2 { t.Error("feature = ; want commit 2") } } func testGitSyncBranchBehind(t *testing.T, gitPath string) { tempDir, err := ioutil.TempDir("", "contributebot_sync_test") if err != nil { t.Fatal(err) } defer func() { if err := os.RemoveAll(tempDir); err != nil { t.Errorf("Cleaning up %s: %v", tempDir, err) } }() // Create a repository A with a single commit on master. ctx := context.Background() if err := runCommand(ctx, tempDir, gitPath, []string{"init", "repoA"}); err != nil { t.Fatal(err) } repoRootA := filepath.Join(tempDir, "repoA") if err := dummyFile(repoRootA, "file1.txt"); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"add", "file1.txt"}); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"commit", "--quiet", "-m", "first"}); err != nil { t.Fatal(err) } commit1, err := revParse(repoRootA, gitPath, "HEAD") if err != nil { t.Fatal(err) } if err := dummyFile(repoRootA, "file2.txt"); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"add", "file2.txt"}); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"commit", "--quiet", "-m", "second"}); err != nil { t.Fatal(err) } commit2, err := revParse(repoRootA, gitPath, "HEAD") if err != nil { t.Fatal(err) } if err := makeRepoBare(repoRootA, gitPath); err != nil { t.Fatal(err) } // Clone repository A to repository B. // Create a feature branch pointing to the first commit on master. if err := runCommand(ctx, tempDir, gitPath, []string{"clone", "--quiet", "repoA", "repoB"}); err != nil { t.Fatal(err) } repoRootB := filepath.Join(tempDir, "repoB") if err := runCommand(ctx, repoRootB, gitPath, []string{"checkout", "--quiet", "-b", "feature", "HEAD^"}); err != nil { t.Fatal(err) } if err := makeRepoBare(repoRootB, gitPath); err != nil { t.Fatal(err) } // Run sync. err = gitSync(ctx, gitPath, remoteGitBranch{repo: repoRootB, branch: "feature"}, // destination remoteGitBranch{repo: repoRootA, branch: "master"}) // source if err != nil { t.Error("gitSync:", err) } // Verify that feature branch points to commit 2. if got, err := revParse(repoRootB, gitPath, "refs/heads/feature"); err != nil { t.Error(err) } else if got == commit1 { t.Error("feature = commit 1; want commit 2") } else if got != commit2 { t.Error("feature = ; want commit 2") } } func testGitSyncDiverge(t *testing.T, gitPath string) { tempDir, err := ioutil.TempDir("", "contributebot_sync_test") if err != nil { t.Fatal(err) } defer func() { if err := os.RemoveAll(tempDir); err != nil { t.Errorf("Cleaning up %s: %v", tempDir, err) } }() // Create a repository A with two commits on master. ctx := context.Background() if err := runCommand(ctx, tempDir, gitPath, []string{"init", "repoA"}); err != nil { t.Fatal(err) } repoRootA := filepath.Join(tempDir, "repoA") if err := dummyFile(repoRootA, "file1.txt"); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"add", "file1.txt"}); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"commit", "--quiet", "-m", "first"}); err != nil { t.Fatal(err) } commit1, err := revParse(repoRootA, gitPath, "HEAD") if err != nil { t.Fatal(err) } if err := dummyFile(repoRootA, "file2.txt"); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"add", "file2.txt"}); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootA, gitPath, []string{"commit", "--quiet", "-m", "second"}); err != nil { t.Fatal(err) } commit2, err := revParse(repoRootA, gitPath, "HEAD") if err != nil { t.Fatal(err) } if err := makeRepoBare(repoRootA, gitPath); err != nil { t.Fatal(err) } // Clone repository A to repository B. // Create a feature branch based on the first commit on master and create a third commit. if err := runCommand(ctx, tempDir, gitPath, []string{"clone", "--quiet", "repoA", "repoB"}); err != nil { t.Fatal(err) } repoRootB := filepath.Join(tempDir, "repoB") if err := runCommand(ctx, repoRootB, gitPath, []string{"checkout", "--quiet", "-b", "feature", "HEAD^"}); err != nil { t.Fatal(err) } if err := dummyFile(repoRootB, "file3.txt"); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootB, gitPath, []string{"add", "file3.txt"}); err != nil { t.Fatal(err) } if err := runCommand(ctx, repoRootB, gitPath, []string{"commit", "--quiet", "-m", "third"}); err != nil { t.Fatal(err) } commit3, err := revParse(repoRootB, gitPath, "HEAD") if err != nil { t.Fatal(err) } if err := makeRepoBare(repoRootB, gitPath); err != nil { t.Fatal(err) } // Run sync. err = gitSync(ctx, gitPath, remoteGitBranch{repo: repoRootB, branch: "feature"}, // destination remoteGitBranch{repo: repoRootA, branch: "master"}) // source if err != nil { t.Error("gitSync:", err) } // Verify that feature branch points to a new commit. if got, err := revParse(repoRootB, gitPath, "refs/heads/feature"); err != nil { t.Error(err) } else if got == commit1 { t.Error("feature = commit 1; want new merge commit") } else if got == commit2 { t.Error("feature = commit 2; want new merge commit") } else if got == commit3 { t.Error("feature = commit 3; want new merge commit") } // Verify that parent 1 of the feature branch is commit 3. if got, err := revParse(repoRootB, gitPath, "refs/heads/feature^1"); err != nil { t.Error(err) } else if got == commit1 { t.Error("feature^1 = commit 1; want commit 3") } else if got == commit2 { t.Error("feature^1 = commit 2; want commit 3") } else if got != commit3 { t.Error("feature^1 = ; want commit 3") } // Verify that parent 2 of the feature branch is commit 3. if got, err := revParse(repoRootB, gitPath, "refs/heads/feature^2"); err != nil { t.Error(err) } else if got == commit1 { t.Error("feature^2 = commit 1; want commit 2") } else if got == commit3 { t.Error("feature^2 = commit 3; want commit 2") } else if got != commit2 { t.Error("feature^2 = ; want commit 2") } } // revParse obtains the Git commit hash of the named revision. // More details at git-rev-parse(1) and revision syntax at gitrevisions(7). func revParse(dir string, gitPath string, rev string) (string, error) { c := exec.Command(gitPath, "rev-parse", "-q", "--verify", "--revs-only", rev) c.Dir = dir buf := new(strings.Builder) c.Stdout = buf err := c.Run() return strings.TrimSuffix(buf.String(), "\n"), err } // makeRepoBare converts a repository with a working copy into a bare one. // This uses the method described at https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_make_existing_non-bare_repository_bare.3F func makeRepoBare(dir string, gitPath string) error { dir, err := filepath.Abs(dir) if err != nil { return fmt.Errorf("make repo %s bare: %v", dir, err) } tempDir := dir + ".git" if err := os.Rename(filepath.Join(dir, ".git"), tempDir); err != nil { return fmt.Errorf("make repo %s bare: %v", dir, err) } err = runCommand(context.Background(), tempDir, gitPath, []string{"--git-dir=" + tempDir, "config", "core.bare", "true"}) if err != nil { return fmt.Errorf("make repo %s bare: %v", dir, err) } if err := os.RemoveAll(dir); err != nil { return fmt.Errorf("make repo %s bare: %v", dir, err) } if err := os.Rename(tempDir, dir); err != nil { return fmt.Errorf("make repo %s bare: %v", dir, err) } return nil } func dummyFile(root, slashpath string) error { path := filepath.Join(root, filepath.FromSlash(slashpath)) return ioutil.WriteFile(path, []byte("Hello, World!\n"), 0666) } go-cloud-0.20.0/internal/contributebot/variables.tf000066400000000000000000000020261367004507500223130ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. variable "project" { type = string description = "Project to set up." } variable "zone" { type = string description = "GCP zone to create the GKE cluster in, like 'us-central1-a'. See https://cloud.google.com/compute/docs/regions-zones/ for valid values." } variable "github_app_key" { default = "" description = "PEM-encoded GitHub application private key. This defaults to empty for bootstrapping reasons." } go-cloud-0.20.0/internal/contributebot/webhook/000077500000000000000000000000001367004507500214465ustar00rootroot00000000000000go-cloud-0.20.0/internal/contributebot/webhook/README.md000066400000000000000000000014131367004507500227240ustar00rootroot00000000000000# Contribute Bot Webhook Listener Contribute Bot Webhook Listener is a microservice that listens for [GitHub webhook][] events and publishes them to a [Cloud Pub/Sub][] topic. You will need the [Go App Engine SDK][] to develop this server. [Cloud Pub/Sub]: https://cloud.google.com/pubsub/docs/publisher [GitHub webhook]: https://developer.github.com/webhooks/ [Go App Engine SDK]: https://cloud.google.com/appengine/docs/standard/go/download ## Running Locally ```shell cp app.yaml.in app.yaml # Edit app.yaml to fill in configuration. dev_appserver.py . ``` ## Deploying ```shell cp app.yaml.in app.yaml # Edit app.yaml to fill in configuration. # You may have to run `go get`. # If you're using go 1.11+, you may have to set `GO111MODULE=off`. gcloud app deploy . ``` go-cloud-0.20.0/internal/contributebot/webhook/app.yaml.in000066400000000000000000000003651367004507500235230ustar00rootroot00000000000000runtime: go api_version: go1 env_variables: # Uncomment this line and replace with the actual webhook secret. # CONTRIBUTEBOT_WEBHOOK_SECRET: xyzzy handlers: - url: /.* script: _go_app secure: always skip_files: - \.md$ - \.yaml\.in$ go-cloud-0.20.0/internal/contributebot/webhook/main.go000066400000000000000000000100451367004507500227210ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "encoding/base64" "fmt" "io" "net/http" "os" "github.com/google/go-github/github" "golang.org/x/oauth2" "google.golang.org/api/pubsub/v1" "google.golang.org/appengine" "google.golang.org/appengine/log" "google.golang.org/appengine/urlfetch" ) func main() { http.HandleFunc("/", handleDefault) http.HandleFunc("/webhook", handleWebhook) appengine.Main() } // handleDefault serves a static landing page for checking whether the // service is running. func handleDefault(w http.ResponseWriter, r *http.Request) { const responseData = ` Go Cloud Development Kit Contribute Bot

Go Cloud Development Kit Contribute Bot

Hello, you've reached the Go Cloud Development Kit's contribute bot!

` if r.URL.Path != "/" { http.NotFound(w, r) return } if r.Method != "GET" && r.Method != "HEAD" { w.Header().Set("Allow", "GET, HEAD") http.Error(w, "Only GET or HEAD allowed", http.StatusMethodNotAllowed) return } w.Header().Set("Content-Length", fmt.Sprint(len(responseData))) w.Header().Set("Content-Type", "text/html; charset=utf-8") if r.Method == "GET" { io.WriteString(w, responseData) } } // handleWebhook serves the webhook endpoint called by GitHub. // See https://developer.github.com/webhooks/ for more details. func handleWebhook(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { w.Header().Set("Allow", "POST") http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed) return } ctx := appengine.NewContext(r) id := r.Header.Get("X-GitHub-Delivery") payload, err := github.ValidatePayload(r, []byte(os.Getenv("CONTRIBUTEBOT_WEBHOOK_SECRET"))) if err != nil { log.Errorf(ctx, "Validate %s: %v", id, err) http.Error(w, "Payload signature did not match", http.StatusBadRequest) return } if err := publishEvent(ctx, r.Header, payload); err != nil { log.Errorf(ctx, "Publish %s: %v", id, err) http.Error(w, "PubSub publish failed", http.StatusInternalServerError) return } } // publishEvent sends a payload to the Pub/Sub topic. func publishEvent(ctx context.Context, h http.Header, payload []byte) error { client, err := newPubSubClient(ctx) if err != nil { return err } projectID := appengine.AppID(ctx) topic := "projects/" + projectID + "/topics/contributebot-github-events" call := client.Projects.Topics.Publish(topic, &pubsub.PublishRequest{ Messages: []*pubsub.PubsubMessage{ { Data: base64.URLEncoding.EncodeToString(payload), Attributes: map[string]string{ "X-GitHub-Event": h.Get("X-GitHub-Event"), "X-GitHub-Delivery": h.Get("X-GitHub-Delivery"), }, }, }, }) if _, err := call.Context(ctx).Do(); err != nil { return err } return nil } // newPubSubClient constructs a Pub/Sub REST client authenticated with // the App Engine service account. func newPubSubClient(ctx context.Context) (*pubsub.Service, error) { tok, expiry, err := appengine.AccessToken(ctx, "https://www.googleapis.com/auth/cloud-platform") if err != nil { return nil, fmt.Errorf("create pubsub client: %v", err) } hc := &http.Client{ Transport: &oauth2.Transport{ Source: oauth2.StaticTokenSource(&oauth2.Token{ AccessToken: tok, TokenType: "Bearer", Expiry: expiry, }), Base: &urlfetch.Transport{Context: ctx}, }, } srv, err := pubsub.New(hc) if err != nil { return nil, fmt.Errorf("create pubsub client: %v", err) } return srv, nil } go-cloud-0.20.0/internal/contributebot/wire_gen.go000066400000000000000000000063661367004507500221510ustar00rootroot00000000000000// Code generated by Wire. DO NOT EDIT. //go:generate wire //+build !wireinject package main import ( "cloud.google.com/go/pubsub/apiv1" "context" "crypto/rsa" "github.com/dgrijalva/jwt-go" "go.opencensus.io/trace" "gocloud.dev/gcp" pubsub2 "gocloud.dev/pubsub" "gocloud.dev/pubsub/gcppubsub" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/filevar" "gocloud.dev/server" "gocloud.dev/server/health" "gocloud.dev/server/requestlog" "net/http" ) // Injectors from setup.go: func inject(ctx context.Context, cfg flagConfig) (workerAndServer, func(), error) { credentials, err := gcp.DefaultCredentials(ctx) if err != nil { return workerAndServer{}, nil, err } tokenSource := gcp.CredentialsTokenSource(credentials) clientConn, cleanup, err := gcppubsub.Dial(ctx, tokenSource) if err != nil { return workerAndServer{}, nil, err } subscriberClient, err := gcppubsub.SubscriberClient(ctx, clientConn) if err != nil { cleanup() return workerAndServer{}, nil, err } subscription := subscriptionFromConfig(subscriberClient, cfg) roundTripper := _wireRoundTripperValue mainGitHubAppAuth, cleanup2, err := gitHubAppAuthFromConfig(roundTripper, cfg) if err != nil { cleanup() return workerAndServer{}, nil, err } mainWorker := newWorker(subscription, mainGitHubAppAuth) handler := _wireHandlerFuncValue logger := _wireLoggerValue v := healthChecks(mainWorker) exporter := _wireExporterValue sampler := trace.NeverSample() defaultDriver := _wireDefaultDriverValue options := &server.Options{ RequestLogger: logger, HealthChecks: v, TraceExporter: exporter, DefaultSamplingPolicy: sampler, Driver: defaultDriver, } serverServer := server.New(handler, options) mainWorkerAndServer := workerAndServer{ worker: mainWorker, server: serverServer, } return mainWorkerAndServer, func() { cleanup2() cleanup() }, nil } var ( _wireRoundTripperValue = http.DefaultTransport _wireHandlerFuncValue = http.HandlerFunc(frontPage) _wireLoggerValue = (requestlog.Logger)(nil) _wireExporterValue = (trace.Exporter)(nil) _wireDefaultDriverValue = &server.DefaultDriver{} ) // setup.go: func setup(ctx context.Context, cfg flagConfig) (*worker, *server.Server, func(), error) { ws, cleanup, err := inject(ctx, cfg) if err != nil { return nil, nil, nil, err } return ws.worker, ws.server, cleanup, nil } type workerAndServer struct { worker *worker server *server.Server } func gitHubAppAuthFromConfig(rt http.RoundTripper, cfg flagConfig) (*gitHubAppAuth, func(), error) { d := runtimevar.NewDecoder(new(rsa.PrivateKey), func(ctx context.Context, p []byte, val interface{}) error { key, err := jwt.ParseRSAPrivateKeyFromPEM(p) if err != nil { return err } *(val.(**rsa.PrivateKey)) = key return nil }) v, err := filevar.OpenVariable(cfg.keyPath, d, nil) if err != nil { return nil, nil, err } auth := newGitHubAppAuth(cfg.gitHubAppID, v, rt) return auth, func() { auth.Stop() v.Close() }, nil } func subscriptionFromConfig(client *pubsub.SubscriberClient, cfg flagConfig) *pubsub2.Subscription { return gcppubsub.OpenSubscription(client, gcp.ProjectID(cfg.project), cfg.subscription, nil) } func healthChecks(w *worker) []health.Checker { return []health.Checker{w} } go-cloud-0.20.0/internal/docs/000077500000000000000000000000001367004507500160555ustar00rootroot00000000000000go-cloud-0.20.0/internal/docs/README.md000066400000000000000000000002711367004507500173340ustar00rootroot00000000000000# Docs This is the documentation for developers of the Go CDK, describing various coding practices and project processes. - [Design Decisions](design.md) - [Releases](release.md) go-cloud-0.20.0/internal/docs/design.md000066400000000000000000001075641367004507500176650ustar00rootroot00000000000000# Design Decisions This document outlines important design decisions made for this repository and attempts to provide succinct rationales. Recording these decisions helps maintain consistency across packages, especially as an open source project where contributors can join at any point during development. A broad design goal for the Go Cloud Development Kit (Go CDK) is for the API style to be consistent. Consistency aids users in building a mental model of how to use the APIs. As such, the design of individual packages must also consider their impact on the Go CDK as a whole. This is a [Living Document](https://en.wikipedia.org/wiki/Living_document). The decisions in here are not set in stone, but simply describe our current thinking about how to guide the Go Cloud Development Kit project. While it is useful to link to this document when having discussions in an issue, it is not to be used as a means of closing issues without discussion at all. Discussion on an issue can lead to revisions of this document. ## Developers and Operators The Go CDK is designed with two different personas in mind: the developer and the operator. In the world of DevOps, these may be the same person. A developer may be directly deploying their application into production, especially on smaller teams. In a larger organization, these may be different teams entirely, but working closely together. Regardless, these two personas have two very different ways of looking at a Go program: - The developer persona wants to write business logic that is agnostic of underlying cloud provider. Their focus is on making software correct for the requirements at hand. - The operator persona wants to incorporate the business logic into the organization's policies and provision resources for the logic to run. Their focus is making software run predictably and reliably with the resources at hand. The Go CDK uses Go interfaces at the boundary between these two personas: a developer is meant to use an interface, and an operator is meant to provide an implementation of that interface. This distinction prevents the Go CDK going down a path of complexity that makes application portability difficult. The [`blob.Bucket`][] type is a prime example: the API does not provide a way of creating a new bucket. To properly and safely create such a bucket requires careful consideration, getting something like ACLs wrong could lead to a catastrophic data leak. To generate the ACLs correctly requires modeling of IAM users and roles for each cloud platform, and some way of mapping those users and roles across clouds. While not impossible, the level of complexity and the high likelihood of a leaky abstraction leads us to believe this is not the right direction for the Go CDK. Instead of adding large amounts of leaky complexity to the Go CDK, we expect the operator role to handle the management of non-portable platform-specific resources. An implementor of the `Bucket` interface does not need to determine the content type of incoming data, as that is a developer's concern. This separation of concerns allows these two personas to communicate using a shared language while focusing on their respective areas of expertise. [`blob.Bucket`]: https://godoc.org/github.com/google/go-cloud/blob#Bucket ## Portable Types and Drivers The portable APIs that the Go CDK exports (like [`blob.Bucket`][] or [`runtimevar.Variable`][]) are concrete types, not interfaces. To understand why, imagine if we used a plain interface: ![Diagram showing user code depending on blob.Bucket, which is implemented by awsblob.Bucket.](img/user-facing-type-no-driver.png) Consider the [`Bucket.NewWriter` method][], which infers the content type of the blob based on the first bytes written to it. If `blob.Bucket` was an interface, each implementation of `blob.Bucket` would have to replicate this behavior precisely. This does not scale: conformance tests would be needed to ensure that each interface method actually behaves in the way that the docs describe. This makes the interfaces hard to implement, which runs counter to the goals of the project. Instead, we follow the example of [`database/sql`][] and separate out the implementation-agnostic logic from the interface. The implementation-agnostic logic-containing concrete type is the **portable type**. We call the interface the **driver**. Visually, it looks like this: ![Diagram showing user code depending on blob.Bucket, which holds a driver.Bucket implemented by awsblob.Bucket.](img/user-facing-type.png) This has a number of benefits: - The portable type can perform higher level logic without making the interface complex to implement. In the blob example, the portable type's `NewWriter` method can do the content type detection and then pass the final result to the driver type. - Methods can be added to the portable type without breaking compatibility. Contrast with adding methods to an interface, which is a breaking change. - When new operations on the driver are added as new optional interfaces, the portable type can hide the need for type-assertions from the user. As a rule, if a method `Foo` has the same inputs and semantics in the portable type and the driver type, then the driver method may be called `Foo`, even though the return signatures may differ. Otherwise, the driver method name should be different to reduce confusion. New Go CDK APIs should always follow this portable type and driver pattern. [`runtimevar.Variable`]: https://godoc.org/github.com/google/go-cloud/runtimevar#Variable [`Bucket.NewWriter` method]: https://godoc.org/github.com/google/go-cloud/blob#Bucket.NewWriter [`database/sql`]: https://godoc.org/database/sql ## Minimize Global State As a library, the Go CDK should not introduce global state. Global state is difficult to reason about in large codebases, where it can be necessary for different parts of the application to use different states. Instead of adding global state, push responsibility to the application to inject the state where it is needed. The exception we permit is URL scheme registration as documented under [URLs](#urls). The amount of boilerplate setup code required for URL muxes for multiple drivers without use of a tool like Wire is an unreasonable burden for users of Go CDK. We want the Go CDK to be usable both with and without Wire. A global registry is acceptable as long as its use is not mandatory, but the burden is to prove the benefit over the cost. ## Driver Package Naming Conventions Inside this repository, we name packages that handle cloud services after the service name, not the providing cloud (`s3blob` instead of `awsblob`). While a cloud provider may provide a unique offering for a particular API, they may not always provide only one, so distinguishing them in this way keeps the API symbols stable over time. The naming convention is ``, where: * `` is the provider name, like `aws` or `gcp` or `azure`. * Omit for 3rd party/open source/local packages. * May also be omitted in cases where the product name is sufficient (e.g., `s3blob` not `awss3blob` since S3 is well-known, `gcsblob` not `gcpgcsblob` since GCS already references Google). * Required if the product name is not unique across providers (e.g., `gcpkms` and `awskms`). * ``is the product/service name. * `` is the portable API name. * Include for local/test packages like (e.g., `fileblob`, `mempubsub`). * May be omitted when it makes the package name too long (e.g. `awssnssqs` is long enough, don't add `pubsub`). * Encouraged when it helps distinguish the package from the service's own package name (e.g., `s3blob` not `s3`). ## Portable Type Constructors Portable type constructors are the functions defined in driver packages that end users call to get an instance of the portable type. For example, `gcsblob.OpenBucket`, which returns an instance of the `*blob.Bucket` portable type backed by GCS. - Portable type constructors should be top-level functions that return the portable type directly. Avoid helpers (e.g., a `Client` struct with a function that returns the portable type instead of it being top-level) and wrappers (e.g., a `fooblob.Bucket` type returned from `fooblob.OpenBucket` that wraps the portable type). Top level functions without wrappers are easier to use, especially when we're consistent about it. - Order arguments that are less likely to change across multiple calls to the constructor before ones that are likely to change. For example, connection and authorization related arguments should go before names, so `OpenBucket(ctx, client, "mybucket")` instead of `OpenBucket(ctx, "mybucket", client)`. - All public constructors should take an `Options` struct (see next section). ### Option Structs All public constructors should take an `Options` struct, even if it is currently empty, to ensure that we can add arguments to the APIs in the future without breaking backward compatibility. - This includes driver constructors (e.g., `gcsblob.OpenBucket`) as well as API functions (e.g., `blob.NewReader`). When in doubt, if you think it's possible that we'll add arguments, add `Options`. - The argument should be of type `*Options`, so that `nil` can be passed in the default case. - Name the `Options` struct appropriately. `Options` is usually fine for portable type constructors since the package generally only exposes a constructor. Inside a driver interface or in a portable type like `blob`, use more descriptive names like `ReaderOptions` or `WriterOptions`. - If a function already has a struct argument, don't add a separate `Options` struct. Example: the various `sql.Open` functions take a `Params` struct with connection parameters; we chose to add new options to `Params` instead of introducing a separate `Options` struct. This keeps the function signature simpler and avoid confusion about which struct new parameters should be added to. - When similar `Options` are part of a driver interface and also part of the portable type (e.g., `blob.WriterOptions`), duplicate the struct instead of aliasing or embedding it, and copy the struct fields explicitly where needed. This allows the godoc for each type to be tailored to the appropriate audience (e.g. end-users for the portable type, driver implementors for the driver interface), and also allows the structs to diverge over time if appropriate. - Required arguments must not be in an `Options` struct, and all fields of the `Options` struct must have reasonable defaults. Exception: struct arguments that don't have `Options` in the name can contain required arguments (e.g., see the `Params` example for `sql.Open` above). Regarding empty `Options` structs: we considered only adding them when the first option is added, and using a separate constructor for compatibility (e.g., start with `foo.New(...)` and later add `foo.NewWithOptions(..., opts *Options)` if needed). However, this would result in inconsistent names over time (e.g., some packages would expose `New` with an `Options`, while others would expose `NewWithOptions`). ### Compound IDs Many cloud providers have resource IDs that are made up of subcomponents in some well-defined syntax. For example, [GCP KMS key IDs][] take the form `projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]`. We call these _compound IDs_. There are two broad compound ID usage patterns we have observed: 1. Applications will keep resources in the same location, so the application will build the ID from the subcomponents rather than passing the entire resource ID around. 2. Applications will pass a verbatim string from configuration down to the API, since this is what was easily copy-pasteable from the cloud console UI. Go CDK constructors that take in compound IDs should take in a `string` with the full compound ID. Helper functions to build these compound IDs from subcomponents may be provided as needed. URL openers (described below) should prefer to use the full compound ID in their URL format. [GCP KMS key IDs]: https://cloud.google.com/kms/docs/object-hierarchy#key ### URLs To enable the [Backing services factor][] of a Twelve-Factor Application, Go Cloud includes the ability to construct each of its API objects using identifying URLs. The portable type's package should include APIs like the following: ```go // Package foo is a portable API. foo could be something like blob or pubsub. // // Throughout this example, Widget is used as a stand-in for a portable type // inside foo, like Bucket or Subscription. package foo // A type that implements WidgetURLOpener can open widgets based on a URL. // The opener must not modify the URL argument. OpenWidgetURL must be safe to // call from multiple goroutines. // // WidgetURLOpeners should not assume that the URL has a particular scheme. type WidgetURLOpener interface { OpenWidgetURL(ctx context.Context, u *url.URL) (*Widget, error) } // URLMux is a URL opener multiplexer. It matches the scheme of the URLs // against a set of registered schemes and calls the opener that matches the // URL's scheme. // // The zero value is a multiplexer with no registered schemes. type URLMux struct { // ... } // RegisterWidget registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterWidget panics. func (mux *URLMux) RegisterWidget(scheme string, opener WidgetURLOpener) { // ... } // OpenWidget calls OpenWidgetURL with the URL parsed from urlstr. // OpenWidget is safe to call from multiple goroutines. func (mux *URLMux) OpenWidget(ctx context.Context, urlstr string) (*Widget, error) { u, err := url.Parse(urlstr) if err != nil { return nil, fmt.Errorf("open widget: %v", err) } return mux.OpenWidgetURL(ctx, u) } // OpenWidgetURL dispatches the URL to the opener that is registered with the // URL's scheme. OpenWidgetURL is safe to call from multiple goroutines. func (mux *URLMux) OpenWidgetURL(ctx context.Context, u *url.URL) (*Widget, error) { // ... } // DefaultURLMux returns the URLMux used by OpenWidget. func DefaultURLMux() *URLMux { return defaultURLMux } var defaultURLMux = new(URLMux) // OpenWidget opens the Widget identified by the URL given. URL openers must be // registered in the DefaultURLMux, which is typically done in driver // packages' initialization. func OpenWidget(ctx context.Context, urlstr string) (*Widget, error) { return DefaultURLMux().OpenWidget(urlstr) } ``` The repetition of `Widget` in the method names permits a type to handle multiple resources within the API. Exporting the `URLMux` allows applications to build their own muxes, potentially wrapping existing ones. Driver packages should include their own `URLOpener` struct type which implements all the relevant `WidgetURLOpener` methods. The URL should only serve to identify which resource to open. Any credentials or other complex values should be taken in as struct fields, not as input from URL. If the driver package registers its `URLOpener` with the `DefaultURLMux`, then it should populate these complex fields from environment variables. If doing so is undesirable or expensive, then it should not register with the `DefaultURLMux` and instead rely on users to create their own mux. If there already exists a well-established URI format for the backend (like S3 URLs or database connection URIs), then drivers should honor them where possible. [Backing services factor]: https://12factor.net/backing-services #### URL Examples A `WidgetURLOpener` implementation for a hypothetical GCP service: ```go package gcpfoo // ... const Scheme = "gcpwidget" type URLOpener struct { Client *gcp.HTTPClient Options Options } func (o *URLOpener) OpenWidgetURL(ctx context.Context, u *url.URL) (*foo.Widget, error) { // ... return OpenWidget(ctx, o.Client, u.Host, &o.Options) } type lazyURLOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyURLOpener) OpenWidgetURL(ctx context.Context, u *url.URL) (*foo.Widget, error) { o.init.Once(func() { creds, err := gcp.DefaultCredentials(ctx) if err != nil { o.err = err return } o.opener = new(URLOpener) o.opener.Client, _ = gcp.NewHTTPClient(http.DefaultTransport, creds.TokenSource) }) if o.err != nil { return nil, o.err } return o.opener.OpenWidgetURL(ctx, u) } func init() { foo.DefaultURLMux().Register(Scheme, new(lazyURLOpener)) } // OpenWidget is the exported non-URL constructor. func OpenWidget(ctx context.Context, c *gcp.HTTPClient, name string, opts *Options) (*foo.Widget, error) { // ... } ``` Using the global default mux: ```go import _ "gocloud.dev/foo/gcpfoo" // ... widget, err := foo.OpenWidget(context.Background(), "gcpwidget://xyzzy") ``` Using a custom mux created during server initialization: ```go myMux := new(foo.URLMux) myMux.Register(gcpfoo.Scheme, &gcpfoo.URLOpener{ Client: client, }) widget, err := myMux.OpenWidget(context.Background(), "gcpwidget://xyzzy") ``` ## Errors ### General - The callee is expected to return `error`s with messages that include information about the particular call, as opposed to the caller adding this information. This aligns with common Go practice. ### Drivers Driver implementations should: - Return the raw errors from the underlying service, and not wrap them in `fmt.Errorf` calls, so that they can be exposed to end users via `ErrorAs`. ### Portable Types Portable types should: - Wrap errors returned from driver implementations before returning them to end users, so that users can't peek into driver-specific error details without using `As`. Make sure not to double-wrap. - Use `internal/gcerr.New` when wrapping driver errors, like so: `if err := driver.Call(xyz); err != nil { return gcerr.New(code, err, 1, "blob") }` The first argument is an error code. See below for advice on choosing the appropriate code. The third argument is the distance in stack frames from the function whose location should be associated with the error. It should be `1` if you are calling `New` from the same function that made the driver call, `2` if you are calling new from a helper function, and so on. The fourth argument is an additional string that will display with the error. You should pass the API name. - By default, choose the code `Unknown`, keeping details of returned `error`s unspecified. The most common case is that the caller will only care whether an operation succeeds or not. - If certain `error`s are interesting for callers to distinguish, choose one of the other codes from the `gcerrors.ErrorCode` enum, so user programs can act on the kind of error without having to look at driver-specific errors. - If more than one error code makes sense, choose the most specific one. - If none make sense, choose `Unknown`. - If none make sense but you want something more specific than `Unknown`: - If you can generalize your code to make it applicable to more than just your API, add it to `gcerrors.ErrorCode`. Look at the [gRPC error codes](https://github.com/grpc/grpc-go/blob/master/codes/codes.go) for inspiration. - Otherwise, you can define a custom code in your portable API package. Your code should use a negative integer. - For now, your package should expose an `ErrorAs` function to allow users to access driver-specific error types. We may review this choice if `golang.org/x/xerrors.As` becomes part of the standard library. - Handle transient network errors. Retry logic is best handled as low in the stack as possible to avoid [cascading failure][]. APIs should try to surface "permanent" errors (e.g. malformed request, bad permissions) where appropriate so that application logic does not attempt to retry non-idempotent operations, but the responsibility is largely on the library, not on the application. [cascading failure]: https://landing.google.com/sre/book/chapters/addressing-cascading-failures.html ## Escape Hatches using As The Go CDK allows users to escape the abstraction as needed using `As` functions, described in more detail in the [concept guide](https://gocloud.dev/concepts/as/). `As` functions take an `interface{}` and return a `bool`; they return `true` if the underlying concrete type could be converted into the type provided as the `interface{}`. An alternative approach would have been something like [`os.ProcessState.Sys`](https://golang.org/pkg/os/#ProcessState.Sys), which returns an `interface{}` that the user can then type cast/assert to service-specific types. We ended up going with `As` because: 1. Most portable types have an `As` function for errors; choosing `As` results in an easy and natural implementation for chained errors once the [Go 2 proposal for errors](https://go.googlesource.com/proposal/+/master/design/29934-error-values.md) arrives. It is currently implemented in [xerrors](https://godoc.org/golang.org/x/xerrors#As), and we're already using that in some drivers. 2. `As` adds more flexibility for drivers to support conversions to multiple types. Specifically, not the case where there are multiple possible underlying types, but rather that a single underlying type can be converted to multiple types. * Chained errors is one example of this, where the top-level error may always be the same type, but may also represent a chain of other errors with different types. * Another example is that a driver might choose to support `As`-level compatibility with another driver; e.g., driver `foo` could support all of the `As` types defined by `s3blob`, converting them internally, and then any code that runs with driver `s3blob` would also work with driver `foo` (even if it uses the `As` escape hatches). ## Enforcing Portability The Go CDK APIs will end up exposing functionality that is not supported by all services. In addition, some functionality details will differ across services. Some theoretical examples using [`blob.Bucket`][]: 1. **Top-level APIs**: There might be a service that supports reads, but not writes or deletes. 1. **Data fields**. Some services may support key/value metadata associated with a blob, others may not. 1. **Naming rules**. Different services may allow different name lengths, or allow/disallow non-ASCII unicode characters. See [Strings](#strings) below for more on handling string differences. 1. **Semantic guarantees**. Different services may have different consistency guarantees; for example, S3 only provides eventually consistency while GCS provides strong consistency. How can we maintain portability while these differences exist? ### Guiding Principle Any incompatibilities between drivers should be visible to the user as soon as possible. From best to worst: 1. At compile time 1. At configuration/app startup time (e.g., when the portable type is created) 1. At runtime (e.g., when the incompatible behavior is accessed), via a non-nil error 1. At runtime, via panic ### Approaches Considered 1. **Documentation**. We could try to document non-uniform or optional functionality across drivers. Optional fields or functionality would return "not implemented" errors or zero values. 1. **Restrict functionality to the intersection**. We could explicitly only support the intersection of all services. For example, if not all services allow unicode characters in names, then **blob** would not allow it either. 1. **Enforced feature codes**: Go CDK APIs could enumerate the ways in which drivers differ as a `FeatureCode` enum. * Drivers would declare which feature codes they support, enforced by extensions to the existing conformance tests. * API users would declare which feature codes they need. * Mismatches between what a user requests and what the driver supports would be enforced at initialization time. * As much as possible, the API (via the portable type) would enforce that the user is only exposed to optional functionality that they asked for. * For example, the default legal name for a blob might be ASCII only, with a `FeatureUnicodeNames` feature code. Users that don't request this feature code would only be able to use blobs with ASCII names, even if the underlying service supports unicode. If the user requested `FeatureUnicodeNames`, and their driver supports it, they could then use blobs with unicode; if their driver doesn't support it, they would get an initialization-time error. ``` b, err := blob.NewBucket(d, blob.FeatureUnicodeNames) ... ``` Design discussions regarding enforcing portability are ongoing; we welcome input on the [mailing list](https://groups.google.com/forum/#!forum/go-cloud). ### Strings Services often differ on what they accept in particular strings (e.g., blob names, metadata keys, etc.). A couple of specific examples: * Azure Blob only [accepts C# identifiers](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-properties-metadata) as metadata keys. * S3 drops double slashes in blob names (e.g., `foo//bar` will end up being saved as `foo/bar`). These differences lead to a loss of portability and predictability for users. To resolve this issue, we insist that Go CDK can handle any UTF-8 string, and force drivers to use escaping mechanisms to handle strings that the underlying service can't handle. We enforce driver compliance with conformance tests. Behavior for non-UTF-8 strings is undefined (but see https://github.com/google/go-cloud/issues/1281 and https://github.com/google/go-cloud/issues/1260). We try to use URL encoding as the escaping mechanism where possible; however, sometimes it is not and we'll use custom escaping. As an example, a driver for a service that only allows underscores and ASCII alphanumeric characters might escape the string `foo.bar` to `foo__0x2e__bar` (URL escaping won't work because `%` isn't allowed). Pros of this approach: * Go CDK APIs are internally consistent in that a user can write any string to any service and get the original string back when they read it back. * Go CDK APIs have visibility into all existing strings for all services. Cons: * Go CDK could overwrite existing data if a Go CDK-written key escapes to an already-existing value (e.g., if the `foo__0x2e__bar` string already existed, it would be overwritten by a Go CDK write to `foo.bar`). * Escaping may push a string over the maximum allowed string length for a service. Escaping does not solve (and in fact may exacerbate) problems with different maximum string lengths across services. * Existing strings that happen to look like Go CDK-escaped strings will be unescaped by Go CDK (e.g., an existing string `foo__0x2e__bar` would appear as `foo.bar` when read through the Go CDK). * Strings that were written through the Go CDK and needed escaping will appear in their escaped form when viewed outside of Go CDK (e.g., `foo__0x2e__bar` would appear on the service's UI). Most of these cons are mitigated by choosing unusual-looking escape mechanisms that are unlikely to appear in existing data. Drivers should escape strings when writing to the underlying service, and unescape them when reading them back. The Go CDK will provide helpers for these operations, as well as a test suite of strings for conformance tests. Sample code for the helper for escaping strings: ``` // package escape provides helpers for escaping and unescaping strings. package escape // Escape returns s, with all runes for which shouldEscape returns true // escaped to "__0xXXXX__", where XXXX is the hex representation of the rune // value. For example, " " would escape to "__0x20__". // // Non-UTF-8 strings will have their non-UTF-8 characters escaped to // unicode.ReplacementChar; the original value is lost. Please file an // issue if you need non-UTF8 support. // // Note: shouldEscape takes the whole string as a slice of runes and an // index. Passing it a single byte or a single rune doesn't provide // enough context for some escape decisions; for example, the caller might // want to escape the second "/" in "//" but not the first one. // We pass a slice of runes instead of the string or a slice of bytes // because some decisions will be made on a rune basis (e.g., encode // all non-ASCII runes). func Escape(s string, shouldEscape func(s []rune, i int) bool) string { ... } // Unescape reverses Escape. func Unescape(s string) string {...} ``` Sample code for how a driver might use it, using metadata keys for a `blob` as the example string: ``` // When writing metadata keys, escape the keys: // ... gcdkMetadata is the metadata passed to the GCDK API. for k, v := range gcdkMetadata { e := escape.Escape(k, func (r []rune, i int) bool {...}) if _, ok := serviceMetadata[e]; ok { return fmt.Errorf("duplicate keys after escaping: %q => %q", k, e) } serviceMetadata[e] = v } // ... write serviceMetadata to the service. // When reading metadata keys, unescape them: // ... serviceMetadata is the metadata read from the service. for k, v := range serviceMetadata { gcdkMetadata[escape.Unescape(k)] = v } // ... return gcdkMetadata. ``` The details of what runes need to be escaped will vary from service to service. The details of how to escape may also vary, although we expect to use URL encoding where possible, and a common custom escaping where not. For the custom escaping, we plan to escape each rune for which `shouldEscape` returns true with `__0xXXX__`, where `XCX` is the hex representation of the rune value. ### Alternatives Considered * We considered restricting Go CDK's APIs to strings that all services support. For example, we could have asserted that Go CDK's `blob` only supports ASCII plus `/` for blob names (and no `//`!). However, such a rule would mean that we couldn't cleanly handle existing strings created through some mechanism other than through Go CDK APIs that violate the rule. For example, an existing blob in S3 with a unicode name. Filtering out such strings so that they aren't visible at all through the Go CDK would be both surprising and limiting, and could easily result in data loss (e.g., if a user read a set of metadata for a blob via the Go CDK, and some keys were filtered out, and then wrote the metadata back, the filtered keys would be lost). Not filtering such strings would mean that the Go CDK isn't internally consistent (i.e., you can read some strings but not write them). Overall, we decided that this approach is unacceptable. * We could expose the escaper used by drivers in their `Options` structs (including options like disabling it, overriding the set of bytes to be escaped, or overriding the escaping mechanism), but we'll wait to see if there's demand for that. ## Coding Conventions We try to adhere to commonly accepted Go coding conventions, some of which are described on the [Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) wiki page. We also adopt the following guidelines: - Prefer `map[K]V{}` to `make(map[K]V)`. It's more concise. - When writing a loop appending to a slice `s`, prefer ``` var s []T for ... { ... s = append(s, ...) ... } ``` to ``` s := make([]T, 0, N) for ... { ... s = append(s, ...) ... } ``` or ``` s := make([]T, N) for ... { ... s[i] = ... ... } ``` (Exception: the loop body is trivial and the loop is performance-sensitive.) The first version is shorter and easier to read, and it is impossible to get the length wrong. - Prefer `log.Fatal` to `panic` in example tests. - Ensure you've run `goimports` on your code to properly group import statements. - Order arguments that are less likely to change across multiple calls to the constructor before ones that are likely to change. For example, connection and authorization related arguments should go before names, so `OpenBucket(ctx, client, "mybucket")` instead of `OpenBucket(ctx, "mybucket", client)`. ## Tests ### Conformance Tests Since our goal is for users to be able to use drivers interchangeably, it is critical that they behave similarly. To this end, each portable API (e.g., `blob`) must provide a suite of conformance tests that driver implementations should run. The conformance tests should be comprehensive; drivers should not need additional unit tests for the core driver semantics. ### Provisioning For Tests Portable API integration tests require developer-specific resources to be created and destroyed. We use [Terraform](http://terraform.io) to do so, and record the resource info and network interactions so that they can be replayed as fast and repeatable unit tests. ### Replay Mode Tests normally run in replay mode. In this mode, they don't require any provisioned resources or network interactions. Replay tests verify that: - The same test inputs produce the same requests (e.g., HTTP requests) to the cloud service. Some parts of the request may be dynamic (e.g., dates in the HTTP request headers), so the replay tests do some scrubbing when verifying that requests match. Some parts of this scrubbing are service-specific. - The replayed service responses produce the expected results from the portable API library. ### Record Mode In `-record` mode, tests run as integration tests, making live requests to backend servers and recording the requests/responses for later use in replay mode. To use `-record`: 1. Provision resources. - For example, the tests for the AWS implementation of Blob requires a bucket to be provisioned. - TODO(issue #300): Use Terraform scripts to provision the resources needed for a given test. - For now, do this manually. 2. Run the test with `-record`. - TODO(issue #300): The test will read the Terraform output to find its inputs. - For now, pass the required resources via test-specific flags. - When changing or adding tests, please only record the tests that are changed/affected by passing the `-run` flag to `go test` with the name of the test(s). Re-recording all tests of a driver creates a lot of noise and a large diff that's difficult to review. 3. The test will save the network interactions for subsequent replays. - TODO(issue #300): The test will save the Terraform output to a file in order to replay using the same inputs. - Commit the new replay files along with your code change. Expect to see lots of diffs; see below for more discussion. ### Diffs in replay files Each time portable API tests are run in `-record` mode, the resulting replay files are different. Looking at diffs of these files isn't particularly useful. We [considered](https://github.com/google/go-cloud/issues/276) trying to scrub the files of dynamic data so that diffs would be useful. We ended up deciding not to do this, for several reasons: - There's a lot of dynamic data, in structured data of various forms (e.g., HTTP headers, XML/JSON body, etc.). It would be difficult and fragile to scrub it all. - The scrub process would also be fragile relative to changes in services (e.g., adding a new dynamic HTTP response header). - The scrub process would need to be implemented for every new service, increasing the barrier to entry for new implementations. - Scrubbing would likely be even more difficult for services using a non-HTTP-based protocol (e.g., gRPC). - Scrubbing the data decreases the fidelity of the replay test, since it wouldn't be operating on the original data. Overall, massive diffs in the replay files are expected and fine. As part of a code change, you may want to check for things like the number of RPCs made to identify performance regressions. go-cloud-0.20.0/internal/docs/img/000077500000000000000000000000001367004507500166315ustar00rootroot00000000000000go-cloud-0.20.0/internal/docs/img/user-facing-type-no-driver.png000066400000000000000000000225401367004507500244270ustar00rootroot00000000000000PNG  IHDR %'IDATxx`@N'! $ oPAbE++X[iCTEJWV/Wlť\VY.Kwq/M-j fs22L朜sNIޯ=̜I;~3@ivhhv=[Gi4(L0`4q@"RQ8%iv[Ό`{;3+ffe17/SAfM'~ 8(ɯ$7̬`ASJnf~j q$N8 h˻{`FFW︫uo~rLiib*H 8ڽ.oֲG=p7=K$'/99WAHqQ њs=gnHvN[AHqJ34Ѽ'$$N GAMCff`^U|/ֵE/mOwH 8C(.-;P,>wɚugO'@ AYYٜW׫wSR^9Z8'@q4ee)< qc1'$N GA`QɠY}0sB41+\8'QGh؅#)6:;nsB@H GA/iF 8A(@@%8y#.YPPT9;Aه/ '@(@RYuuyvn^ ;֝A(@@QKyVfVi0A(@@9*/QPg[ViyA(@@=o-> .>.@Z32A(@@ax~hDUT\q$NQ8ƨc! ش#[ A(@@s3<#vMwq k؈<)wҳ2.l *P|V"ڶҲ{ q QǬ뮿upPkd=ZOYU.=m .XlZY^mo۳9a 1$NQ8jd¤Ϲo~a.<~{_v}kC@#Cd¿MtڹzH k1\n/o+)>hQ-Z+>:oq{ijj"qFnJ@e˖P늟'֓O>#_2n)@&Ϙ; o4G|FNynϳW$)mSb::qD6H:nz/=sLvi$61!ԺoǏӧO'䲆ioݳ njIg|" ]L~mԩ +U=z4HJĩsqwPD`7B$^oa͙3' q&}~+K!V'{E(@mZiׯ%.@bqv;HH+@JJJΉǯ=~.@b%=)QϿmkdegl'>hzE*% _bQV7jbusss(Ii7|3&IZ=4:\BWoϑ#GBE΋/׎;֩uMe2+ *o # HDqH1Og#}>~2T 7LԻ.}W{w#Se)@s=iQQys?sLqi&Nc߸n?wh֩c]9ߋi-񯨤EO((Hl]V^~[gtcW$i ՝ Yjj媫ۭ s9a„N# J" h[SI˛t.\8s~(j9ĸ!:oƿh=z3LFcNo8 R3Xs3τދ{z T{Zo4mbWámiCW?~Ѭ3pސ[_#) ܶ=hOhl^)@T4,[/WttEHY}'܉c=lqBIMbY~ݡ$"| K ]'DDEW|մMsGCu%ҬS:5L!z@ɽM=t)Nq{hQ՝|޹L鳪a ]7}⭘~M&j\i }u|7o @ޘeMϴz;!܉)&{~޳ޓ&nFsqzU|oU:g[]XSW|i9n.ifȘ9n)Q$z=+o8%{_^sD\&̕u5[n7;`$2%{;r>{R`5wBw %*qp_)^AM9 gmwj5'ᬳ 3d۫`_Ϫ.*d^L Q/ m}YSN=(y?-.ƺc@>7W;1E5]RS佀ҙDBўrhTy{ i);y&TBK&S ?B)+]4=/%p'~M 4$J &1'ڞh_3Ü'i#w"L;pa^xO~u\w b f2z5E}uO!Z ӳ)PLZySЛx+2cwWzC)@z:3bz4xfzzDRX\z9 o&CdGUߎ]q˗'pw& ɲw-M9 { wmEL>HMKݮtHwRn%A2Q::L/_|Q9P%+Nhfx(/;M'sO"~',{clƢp Lҙ;}i?P+!^pM# #˯Qt]2YۈψG;•`M}nW-ę%%D۟hwW{@̰+9\ELĭ{o0SwW,mïPt/21o1=cݷ)4DEwޛ7D*@n}\p˺ }6tAOڎ~_3/z_ &M>ȓܸcpC2t ' *L֕|]AAɱIJ 1抛IJZw,$$3S#Ad󖙔dOW3~]mj}?;V\=vmX} ޯ7"HU־%a[N/[#1E}vSoNxoag96'\+>s)z]'Z] ExbIGs'-üCs5s+a&Cņ~"Ӊ7LKR5C ?wl+t\r;Sh5\#_lRb~3aĿ\v} n]1?v V\^>)Yz!)6ux9 JRޠnNWͩPVrҨ34Mńx?\O/oa7K'%tb tu[ }&<L*WԪw6L&R|דϸn)ے;)hڎ9Y1WM3Iy[u(N)z)c]1_:SCлM}mSpͻ0Es@ϪҺbw^ ѱq3Ldʗ>6wb7ͽ=1R,3O5OUA.DIi *JS*D=Wͽٽa/(apOB7 2w~F=ww}?Sq3ׁ|~(>{~O9 HOW4um'wTrS7OC?gb^u("HH9jޘ{9v= ]Qýw?``#) Զo8Jlqqt>yA߸>ii q 2p.ZBq6hpt8 G^G [)~V~$. P8 8Z2ϿEB۷P}>O\qqK~|ۊoS$$S q :^1tx ð}Ӊ q >ffe7kB|?:`@?A(@@.j\ qju'h1juŔ+mJ.;7qPԖV6x '@(@4jϲrzBr+ReX n3?!&(E%> b1Hq_UF0ޏɓg̝od(S<[i k-b'[ q H /p1{.e?Ѫva 2Q1ºaZhU,{S223?gq$NQ8Y?乗~WoZz8_w|ғ 3X?˘o㦯hfH q F.>u[ڹ [vcMumq'GsCC߸5MO0S0A(@@I=q- 4[ó2C^  ҭt/*v Z=WT}ҧo߿& P8 G;Z4t*â4KŁD+VCԻmc^Xtyh UC- |0Hd _t`F ^8 Gy蟑1=79НTTv.bD&0v}_in_Z2xHQG_VV֊ʡ'ыMC2 wA(@@%8EEۯ2b}]V03K" 8A%8iy+[):6MO=$N GA`f4Yy"ť'322o&ւ 8(Q f`'&΂ 8(q pIS|7NLmu{b! '@ &愼c%ë/n/AHq-zD<{5ePYkn '@ v EҐՏl= ZWYGL qQGCuvNs~# =M}VfVvsYY)H 8\ |-w~,<ֲsZ~_%R8'@q4y<yЧ$>l|>! 8(gz^Nu[4Ykd濗 bb'H$N8(_J+NI9"}gp3Cn豓$N8 h ^9txkφT߶ڞ;/=5zԎ q GAdf^~.RT2sq%|ئ kR򊪦q'=vL#@ 8;hUMmݺʡ:bh벆iAYP Ҝ 3i\_97n - ܥ#`fkMGzaD '@nzxݸ/tk.PҘȋ!~TPXY .8կ_3E%kjŗ\_0}GԙMҬnjO-H qQ8 'B hQ)4Ab-4q@zIKl;؂8JGZ~;R NCݎ;[Qۭ7LG=vzʻQ+uNh. HnmOYwr\˔ح1Psv{n{k(U?7KnGvn'=ina1]͟CrD;epY9S4;EHi1EG.+@6:NkLf;_@ZW5@ 9Ņ7gq]tnȓ~mu§xBM9jį9l @7 m=՞@@.&;* :OSYSy<)@txA=v8'Oچcvv}η~O7cOwR^ hx'ow[8w¹<*&`ϺҺP@@!_S䇞ҜMְ* Qc=q[?t׫ZWf gPUh?a3n㫉3|_û z?;E&O:](%NVcuNaq:p{g8ey\SpONZvI}g hG Nh6q pv$x ڻ[T:;UZU{G,hph?d],q-W@W H (@$9Q,L6-=@=PEc~ݱ0F'zLP{v;aqucv[3^C mpU96v[ g;naW^=P6,7)^N8?hU w=SSrv{Up8_)*<[ p z`r*jfz(bZgٚ;mGoQ2Qvb:dGLUV3&jv.cP[@8{㜪j{>}Ω?-& vq$t. ]B҆HV%RVQ1 $T Kt.]v Me\tqǑ )-+4l؅*@e)Ohݍzeu}> Kt.]fC=|xyޗF_ Kt.]fACo_Woݦ=|سdqhx*P%D.G}}ʪ/nyG;dB@BE]L#55CKJ>jC[BXPH]K@!^S;}1&D  .%tI3Ξ;dv,M ! ]Kt 2|i a4RV^aNB*@e9ĹU51c+hx H$Tt .e777Weyǣek- .%LO<_/\8x7KJ* ]KtA#޿a(0nn_I:]$>o\u-NEESH:%@x~Fb{ @.]KtOxW݇0#VUU'PK@]:څgUV`͏f++c{LKB*@e:|Υ QZ+㤉 B-v/ooI:%@gwxoך̻Ļ޿nݸ%Ǯ͞;߻O]q? y%e9NBA.%9q¤ɱҷ[=aq-ڍ@&Z#tj+? z7&(S6q), @.]KtS^Y m s-.XPabxo^c5gwE_>oB $Tt .%s3~ٙ4 zc Uy+_Wǵ2 @.]K!>z2Z|l|uBp˝x7صw=>$oӫ} @.]Ky\52SΘ=o,Nhf=׻oؓJz_ػk2_{I:%豺uԴ6 ^{W>j4C@itUFڧı8ccHBA.%@qc}~aU| O-j0]48\3Tɜ2vp 9/* g6VP(t%Kt tyօߨxmY)Ͽ7iLw>oqpwDej 9e2;Y9=K?H:%q5陞~ @.]K˹\&Nd9+vSf $T t.yġ<|fšY Џp̜HwqoG|}7N%M B'ܴiS۷yo6@[w=ЩJt:z/]jU{t'ރ>->\~/]b@&Ϙ| $I_??P&dmpqǢ#lɉ㧚شLJHaVhؽ{wV?tnRx܏}~,4I"%U99طo_^wڕw=qz2;t^K/:i6Lx6I{V䔖ioܴ,ǜZi`b]dBmG*>bԩ޶mڀ_=Pu?1 5 7BW_ͩ)bĈ/Ϻ9BG)jww.1 x<}[ʚɔQ5kVq&wף0YE7S kB`@:5&DĔD)kOj#'nYɞU|M7W])3:X?vDA $}_|ޏx>iXi豭Z"޿+--[EI1ʄ*sD_IushTh;+E7oޜʕs޹sg{}vo͚5O?ڷ>¾CO}>I{11]ZS^Ee]D"9c@r0nܸCιᰮ 'OHav}LC*v"DO5_|Y;a9s[bÚ}F]C}BGZ6[DŽGb@ts?RwTa}:?GZRMj}*G"b~3h ^U/ vu[_bYwn}sgmJeeelB=NRۛ0pF;Ď(0z.eF`0>0}Jn!bZWLW ]{:k^O~uCZVWCŞk-aPT1SuF(!ۅ]o܁90$Cǂ.tGbkUh֋U<$tLiŰ LoؽFa׌~gw +UPk;W?{i%O.?=3&ֱZ?de1 jhiuN2!v2;Y$uܘc@zuԁ7kd9m*<*l  +<@'1a)$& FnTФr#7PѡDdBQ"`#5 8Kes*FݾE0Oob+ H@d1 Jq&(kҍ}͛Zע{}uo-֫CŌkcIQyHEy~#ޒhDz麽qi<^"J6҆7xӢ'"f6^<[[ yͰ'&#cLF=Cci2 ;b@~Rc>1j:V֮na@}ERɺ]m6,Xn+p@c p d3G)}pSe?P?ґIy(*)yi{CH4m<2 %h5@}>c@dEmB7lUtQnKgb HX tRJQWXkFV[t%6D{If?j{Jڇi-ӟ?)i1ܖ72!FP6ىf dŲ{M&ꌎQVA6d1 KRߡ+8,'EMlB- Hx0]0 VQdM$QA~2&g&%gr[ $V0'v#IfP]*ItL v K<`ި%0! [߻y 4 &GV2b]>nT?kV^>Ԛ{n@F׉d3W/FzJWN6QL`ʵ9(ϢLyn HSca]{[WmHDO<ݷiLAcKO6Y;|'ӵjB:6Ĵl:Ki%<ˈIa]8Q- a)HlSe[ gw HTxݼ웈9 i67O hu G'v1Sz {3FI7k3qLt=+c8aueձSX4HnpC &m;߰iKcHa0l]"ߣ1nqmzw,SūmץSf1L݋V3l i 3&vO:qǀS5 >kS6flk焰s6^yؓ1g&Y ; ރٙ{6eډ<]}h]*zf~L'YեT khAq: ёr6 pNOL- ӯn=ZPS.܉'9(?S*9F͂%e4grp%q.p4K/ 3 u*BSiɢ) mm)ĴjiWu}ff +xdI۰C(t=NԤgѪ^7kݷ L/Ҝ̤efWtMYD{ݭP=DBzI>KX.j,sO}9"s1crYP:7SsT(DO'Okod9N9mc&F)t;d>'%Qw%{.uIJ؜avw}+vs٧PVAvCQr5S)ƬuS[D%Y!%kwnj93 <ߝ 5Ǟ6X]9Vk.eؚ3*ntV1Š&s}sQ1^ YnMI4BAY2Cz﩮(Li[*Bsak G}qu^vԵ-s1æ6ڹ9:0\%wJ{W1x,bm(17}oQfusW!i]1_V7d>f7"2v }TKfsvY{ gч]b@|u}d94& O[ N~榫f$P%%f=>}f͍A XG=53ÍdӂIœF=:oXD+6kvfD+`WKtKי sS h^zw%tK}&>Չakۍd|s1kQ+',$ t.aZֶuU*Q1}]* ^ﶺ5Ǿw;vME]tfҁ5a:6+'[\w^޽´gs>tܨ|=6Is&lrπyէLd9+>̳A9e@r2Kt.]k)Ï)rkt% ]Kt  ۿe.Ab͆׼¾;H:%葺(t%Kt ЃuTQYs+) B]D=Zs/a2}wޣz~ @.]KƜ+?P(t%Kt УuYV]wڐa#膕"ޟw! B]D=^%mYL~#-'*t.Хctwc2cOI:%@^иE 3`0U! B]D2aV7/ztUޛ7knZ}o+;ǶB*t.塌o~?cG{MXqw q'Omک}=Yow϶ @.]Kt0``ӆӭj )p/ݺd.uXgP(t%Kt .i*yyiY{9^tedw+u=8^:޻ֿ}px5*t.eVAO_ti[DݲƎ?kzLQ C-32yLkz֔s B]D21eҾ.}\ZD}۝uxq;V~M1L1.ⶢx$T*@2|Y}iigϝ&Ǜz9O8׶}>;Z:j ;=<*4o @BE]FaiY%6b/ժ  ]Kt 2hohPa?zK_UTVr̈|x *P%D.Qu Z0hH:4ѣO  ]Kt 貛P>d؈ť n=KY5:;/(-+3/ou$T Kt.]vcz̗[US;sq XnZZO{נ Zǝ3veqcc>I:OTԶ 1I?ykLvԙ'}Kǎɱj9 H:]K (%AKtI}ȳhE.%AK_%ym~\. ]K@ga]WS~TOu~ ::a@h lُ H*o`VlߩnY4 q?~F?ʬmj;bq_c~l~m S8Wm@`nE~cwDg;ە~l Ll. 0 c[jBFkW04i LH?9,ԀEXl1 a86)jP;<;|ۆء㖙h }t€ y}\._^`Bǀٮ xV. ̠V.J6E=p[?4(p;@Fa[b4>#uc@~ LLZrv:`Rw:1bZ܍/f2blfZQ D X_;t@ͱ/i$e@n}1XԾbK>;UA5R[#H/e6 3$Q``@ (Ka;`9@zB@;(L"4_3Vy|=-FεV@cW/Kn?9k۝~, %x\1A$3 bՍutov,w!?oc_BwSvS;V׀L ~lo+螌Lǫ ~( ^ ۀh֐dj~)mGێHbb?Rl綀,NPt?E0v C/ ڐm1 [MNl1]/@Dsf* Hkv>`mn螬@ TQEL+ʨ+c[D s 2@7!vpc7buyfż6&yMYu S~Ϧ /ZEjxڮ-m/;|8f;{cLnJSS.vɌBY(6to?ȣIENDB`go-cloud-0.20.0/internal/docs/pubsub/000077500000000000000000000000001367004507500173555ustar00rootroot00000000000000go-cloud-0.20.0/internal/docs/pubsub/design.md000066400000000000000000000667731367004507500211730ustar00rootroot00000000000000# Go CDK `pubsub` Design ## Summary This document proposes a new `pubsub` package for the Go CDK. ## Motivation A developer designing a new system with cross-cloud portability in mind could choose a messaging system supporting pubsub, such as ZeroMQ, Kafka or RabbitMQ. These pubsub systems run on AWS, Azure, GCP and others, so they pose no obstacle to portability between clouds. They can also be run on-prem. Users wanting managed pubsub could go with Confluent Cloud for Kafka (AWS, GCP), or CloudAMQP for RabbitMQ (AWS, Azure) without losing much in the way of portability. So what’s missing? The solution described above means being locked into a particular implementation of pubsub. There is also a potential for lock-in when building systems in terms of the cloud-specific services such as AWS SNS+SQS, GCP PubSub or Azure Service Bus. Developers may wish to compare different pubsub systems in terms of their performance, reliability, cost or other factors, and they may want the option to move between these systems without too much friction. A `pubsub` package in the Go CDK could lower the cost of such experiments and migrations. ## Goals * Publish messages to an existing topic. * Receive messages from an existing subscription. * Perform not much worse than 90% compared to directly using the APIs of various pubsub systems. * Work well with managed pubsub services on AWS, Azure, GCP and the most used open source pubsub systems. ## Non-goals * Create new topics in the cloud. The Go CDK focuses on developer concerns, but topic creation is an [operator concern](https://github.com/google/go-cloud/blob/master/internal/docs/design.md#developers-and-operators). * Create new subscriptions in the cloud. The subscribers are assumed to correspond to components of a distributed system rather than to users of that system. ## Background [Pubsub](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern) is a frequently requested feature for the Go CDK project \[[github issue](https://github.com/google/go-cloud/issues/312)]. A key use case motivating these requests is to support [event driven architectures](https://en.wikipedia.org/wiki/Event-driven_architecture). There are several pubsub systems available that could be made to work with the Go CDK by writing drivers for them. Here is a [table](https://docs.google.com/a/google.com/spreadsheets/d/e/2PACX-1vQ2CML8muCrqhinxOeKTcWtwAeGk-RFFFMjB3O2u5DbbBt9R3YnUQcgRjRp6TySXe1CzSOtPVCsKACY/pubhtml) comparing some of them. ## Design overview ### Developer’s perspective Given a topic that has already been created on the pubsub server, messages can be sent to that topic by calling `acmepubsub.OpenTopic` and calling the `Send` method of the returned `Topic`, like this (assuming a fictional pubsub service called "acme"): ```go package main import ( "context" "log" "net/http" rawacmepubsub "github.com/acme/pubsub" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/acmepubsub" ) func main() { log.Fatal(serve()) } func serve() error { ctx := context.Background() client, err := rawacmepubsub.NewClient(ctx, "unicornvideohub") if err != nil { return err } t, err := acmepubsub.OpenTopic(ctx, client, "user-signup", nil) if err != nil { return err } defer t.Close() http.HandleFunc("/signup", func(w http.ResponseWriter, r *http.Request) { err := t.Send(r.Context(), pubsub.Message{Body: []byte("Someone signed up")}) if err != nil { log.Println(err) } }) return http.ListenAndServe(":8080", nil) } ``` The call to `Send` will only return after the message has been sent to the server or its sending has failed. Messages can be received from an existing subscription to a topic by calling the `Receive` method on a `Subscription` object returned from `acmepubsub.OpenSubscription`, like this: ```go package main import ( "context" "fmt" "log" rawacmepubsub "github.com/acme/pubsub" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/acmepubsub" ) func main() { if err := receive(); err != nil { log.Fatal(err) } } func receive() error { ctx := context.Background() client, err := rawacmepubsub.NewClient(ctx, "unicornvideohub") if err != nil { return err } s, err := acmepubsub.OpenSubscription(ctx, client, "user-signup-minder", nil) if err != nil { return err } defer s.Close() msg, err := s.Receive(ctx) if err != nil { return err } // Do something with msg. fmt.Printf("Got message: %s\n", msg.Body) // Acknowledge that we handled the message. msg.Ack() } ``` A more realistic subscriber client would process messages in a loop, like this: ```go package main import ( "context" "log" "os" "os/signal" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/acmepubsub" ) func main() { if err := receive(); err != nil { log.Fatal(err) } } func receive() error { ctx := context.Background() client, err := rawacmepubsub.NewClient(ctx, "unicornvideohub") if err != nil { return err } s, err := acmepubsub.OpenSubscription(ctx, client, "signup-minder", nil) if err != nil { return err } defer s.Close() // Process messages. for { msg, err := s.Receive(ctx) if err { return err } log.Printf("Got message: %s\n", msg.Body) msg.Ack() } } ``` The messages can be processed concurrently with an [inverted worker pool](https://www.youtube.com/watch?v=5zXAHh5tJqQ&t=26m58s), like this: ```go package main import ( "context" "log" "os" "os/signal" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/acmepubsub" ) func main() { if err := receive(); err != nil { log.Fatal(err) } } func receive() error { ctx := context.Background() client, err := rawacmepubsub.NewClient(ctx, "unicornvideohub") if err != nil { return err } s, err := acmepubsub.OpenSubscription(ctx, client, "user-signup-minder", nil) if err != nil { return err } defer s.Close() // Process messages. const poolSize = 10 // Use a buffered channel as a semaphore. sem := make(chan struct{}, poolSize) for { msg, err := s.Receive(ctx) if err { return err } sem <- struct{}{} go func() { log.Printf("Got message: %s", msg.Body) msg.Ack() <-sem }() } for n := poolSize; n > 0; n-- { sem <- struct{}{} } } ``` ### Driver implementer’s perspective Adding support for a new pubsub system involves the following steps, continuing with the "acme" example: 1. Add a new package called `acmepubsub`. 2. Add private `topic` and `subscription` types to `acmepubsub` implementing the corresponding interfaces in the `github.com/go-cloud/pubsub/driver` package. 3. Add `func OpenTopic(...)` that creates an `acmepubsub.topic` and returns a concrete `pubsub.Topic` object made from it. 4. Add `func OpenSubscription(...)` that creates an `acmepubsub.subscription` and returns a `pubsub.Subscription` object made from it. Here is a sketch of what the `acmepubsub` package could look like: ```go package acmepubsub import ( "context" rawacmepubsub "github.com/acme/pubsub" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/driver" ) // OpenTopic opens an existing topic on the pubsub server and returns a Topic // that can be used to send messages to that topic. func OpenTopic(ctx context.Context, client *rawacmepubsub.Client, topicName string) (*pubsub.Topic, error) { rt, err := client.Topic(ctx, topicName) if err != nil { return nil, err } rt, err := client.Topic(ctx, topicName) if err != nil { return err } t := &topic{ rawTopic: rt } return pubsub.NewTopic(t) } // OpenSubscription opens an existing subscription on the server and returns a // Subscription that can be used to receive messages. func OpenSubscription(ctx context.Context, client *rawacmepubsub.Client, subscriptionName string) (*pubsub.Subscription, error) { rs, err := client.Subscription(ctx, subscriptionName) if err != nil { return err } s := &subscription{ rawSub: rs } return pubsub.NewSubscription(s) } type topic struct { rawTopic *rawacmepubsub.Topic } func (t *topic) SendBatch(ctx context.Context, []*pubsub.Message) error { // ... } func (t *topic) Close() error { // ... } type subscription struct { rawSub *rawacmepubsub.Subscription } func (s *subscription) ReceiveBatch(ctx context.Context) ([]*pubsub.Message, error) { // ... } func (s *subscription) SendAcks(ctx context.Context, []pubsub.AckID) error { // ... } func (s *subscription) Close() error { // ... } ``` The driver interfaces are batch-oriented because some pubsub systems can more efficiently deal with batches of messages than with one at a time. Streaming was considered but it does not appear to provide enough of a performance gain to be worth the additional complexity of supporting it across different pubsub systems \[[benchmarks](https://github.com/ijt/pubsub/tree/master/benchmarks)]. The driver interfaces will be located in the `github.com/google/go-cloud/pubsub/driver` package and will look something like this: ```go package driver type AckID interface{} type Message struct { // Body contains the content of the message. Body []byte // Attributes has key/value metadata for the message. Attributes map[string]string // AckID identifies the message on the server. // It can be used to ack the message after it has been received. AckID AckID } // Topic publishes messages. type Topic interface { // SendBatch publishes all the messages in ms. SendBatch(ctx context.Context, ms []*Message) error // Close disconnects the Topic. Close() error } // Subscription receives published messages. type Subscription interface { // ReceiveBatch should return a batch of messages that have queued up // for the subscription on the server. // // If there is a transient failure, this method should not retry but // should return a nil slice and an error. The concrete API will take // care of retry logic. // // If the service returns no messages for some other reason, this // method should return the empty slice of messages and not attempt to // retry. // // ReceiveBatch is only called sequentially for individual // Subscriptions. ReceiveBatch(ctx context.Context) ([]*Message, error) // SendAcks acknowledges the messages with the given ackIDs on the // server so that they // will not be received again for this subscription. This method // returns only after all the ackIDs are sent. SendAcks(ctx context.Context, ackIDs []interface{}) error // Close disconnects the Subscription. Close() error } ``` ## Detailed design The developer experience of using Go CDK's pubsub involves sending, receiving and acknowledging one message at a time, all in terms of synchronous calls. Behind the scenes, the driver implementations deal with batches of messages and acks. The concrete API, to be written by the Go CDK team, takes care of creating the batches in the case of Send or Ack, and dealing out messages one at a time in the case of Receive. The concrete API will be located at `github.com/google/go-cloud/pubsub` and will look something like this: ```go package pubsub import ( "context" "github.com/google/go-cloud/pubsub/driver" ) // Message contains data to be published. type Message struct { // Body contains the content of the message. Body []byte // Attributes contains key/value pairs with metadata about the message. Attributes map[string]string // ackID is an ID for the message on the server, used for acking. ackID AckID // sub is the Subscription this message was received from. sub *Subscription // isAcked is true if Ack has been called on this message. isAcked bool } type AckID interface{} // Ack acknowledges the message, telling the server that it does not need to // be sent again to the associated Subscription. This method returns // immediately. If Ack has already been called on the message, Ack panics. func (m *Message) Ack() { // Send the ack ID back to the subscriber for batching. // The ack is sent to the server in a separate goroutine // managed by the Subscription from which this message was // received. // ... } // Topic publishes messages to all its subscribers. type Topic struct { driver driver.Topic mcChan chan msgCtx doneChan chan struct{} } // msgCtx pairs a Message with the Context of its Send call. type msgCtx struct { msg *Message ctx context.Context } // Send publishes a message. It only returns after the message has been // sent, or failed to be sent. The call will fail if ctx is canceled. // Send can be called from multiple goroutines at once. func (t *Topic) Send(ctx context.Context, m *Message) error { // Send this message over t.mcChan and then wait for the batch including // this message to be sent to the server. // ... } // Close disconnects the Topic. func (t *Topic) Close() error { close(t.doneChan) return t.driver.Close() } // NewTopic makes a pubsub.Topic from a driver.Topic. func NewTopic(d driver.Topic) *Topic { t := &Topic{ driver: d, mcChan: make(chan msgCtx), doneChan: make(chan struct{}), } go func() { // Pull messages from t.mcChan and put them in batches. Send the current // batch whenever it is large enough or enough time has elapsed since // the last send. // ... }() return t } // Subscription receives published messages. type Subscription struct { driver driver.Subscription // ackChan conveys ackIDs from Message.Ack to the ack batcher goroutine. ackChan chan AckID // ackErrChan reports errors back to Message.Ack. ackErrChan chan error // doneChan tells the goroutine from startAckBatcher to finish. doneChan chan struct{} // q is the local queue of messages downloaded from the server. q []*Message } // Receive receives and returns the next message from the Subscription's queue, // blocking if none are available. This method can be called concurrently from // multiple goroutines. On systems that support acks, the Ack() method of the // returned Message has to be called once the message has been processed, to // prevent it from being received again. func (s *Subscription) Receive(ctx context.Context) (*Message, error) { if len(s.q) == 0 { // Get the next batch of messages from the server. // ... } m := s.q[0] s.q = s.q[1:] return m, nil } // Close disconnects the Subscription. func (s *Subscription) Close() error { close(s.doneChan) return s.driver.Close() } // NewSubscription creates a Subscription from a driver.Subscription and opts to // tune sending and receiving of acks and messages. Behind the scenes, // NewSubscription spins up a goroutine to gather acks into batches and // periodically send them to the server. func NewSubscription(s driver.Subscription) *Subscription { // Details similar to the body of NewTopic should go here. } ``` Topics will gather messages into batches for sending. The batch size will be dynamically tuned according to how many messages are being sent concurrently. Subscriptions will gather message acks into batches the same way, also dynamically tuning the batch size. If sending acks back to the server fails transiently then it will be retried, most likely within a loop in the concrete API. If an unrecoverable error occurs while sending acks then a flag will be set on the `pubsub.Subscription` saying that the whole `Subscription` is no longer usable. Calls to `Receive` will fail from then on. ## Alternative designs considered ### Batch oriented concrete API In this alternative, the application code sends, receives and acknowledges messages in batches. Here is an example of how it would look from the developer's perspective, in a situation where not too many signups are happening per second. ```go package main import ( "context" "log" "net/http" rawacmepubsub "github.com/acme/pubsub" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/acmepubsub" ) func main() { log.Fatal(serve()) } func serve() error { ctx := context.Background() client, err := rawacmepubsub.NewClient(ctx, "unicornvideohub") if err != nil { return err } t, err := acmepubsub.OpenTopic(ctx, client, "user-signup", nil) if err != nil { return err } defer t.Close() http.HandleFunc("/signup", func(w http.ResponseWriter, r *http.Request) { err := t.Send(r.Context(), []pubsub.Message{{Body: []byte("Someone signed up")}}) if err != nil { log.Println(err) } }) return http.ListenAndServe(":8080", nil) } ``` For a company experiencing explosive growth or enthusiastic spammers creating more signups than this simple-minded implementation can handle, the app would have to be adapted to create non-singleton batches, like this: ```go package main import ( "context" "log" "net/http" rawacmepubsub "github.com/acme/pubsub" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/acmepubsub" ) const batchSize = 1000 func main() { log.Fatal(serve()) } func serve() error { ctx := context.Background() client, err := rawacmepubsub.NewClient(ctx, "unicornvideohub") if err != nil { return err } t, err := acmepubsub.OpenTopic(ctx, client, "user-signup", nil) if err != nil { return err } defer t.Close() c := make(chan *pubsub.Message) go sendBatches(ctx, t, c) http.HandleFunc("/signup", func(w http.ResponseWriter, r *http.Request) { c <- &pubsub.Message{Body: []byte("Someone signed up")} }) return http.ListenAndServe(":8080", nil) } func sendBatches(ctx context.Context, t *pubsub.Topic, c chan *pubsub.Message) { batch := make([]*pubsub.Message, batchSize) for { for i := 0; i < batchSize; i++ { batch[i] = <-c } if err := t.Send(ctx, batch); err != nil { log.Println(err) } } } ``` This shows how the complexity of batching has been pushed onto the application code. Removing messages from the batch when HTTP/2 requests are canceled would require the application code to be even more complex, adding more risk of bugs. In this API, the application code has to either request batches of size 1, meaning more network traffic, or it has to explicitly manage the batches of messages it receives. Here is an example of how this API would be used for serial message processing: ```go package main import ( "context" "log" "os" "os/signal" rawacmepubsub "github.com/acme/pubsub" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/acmepubsub" ) const batchSize = 10 func main() { if err := receive(); err != nil { log.Fatal(err) } } func receive() error { ctx := context.Background() client, err := rawacmepubsub.NewClient(ctx, "unicornvideohub") if err != nil { return err } s, err := acmepubsub.OpenSubscription(ctx, client, "signup-minder", nil) if err != nil { return err } defer s.Close() // Process messages. for { msgs, err := s.Receive(ctx, batchSize) if err { return err } acks := make([]pubsub.AckID, 0, batchSize) for _, msg := range msgs { // Do something with msg. fmt.Printf("Got message: %q\n", msg.Body) acks = append(acks, msg.AckID) } err := s.SendAcks(ctx, acks) if err != nil { return err } } } ``` Here’s what it might look like to use this batch-only API with the inverted worker pool pattern: ```go package main import ( "context" "log" "os" "os/signal" rawacmepubsub "github.com/acme/pubsub" "github.com/google/go-cloud/pubsub" "github.com/google/go-cloud/pubsub/acmepubsub" ) const batchSize = 100 const poolSize = 10 func main() { if err := receive(); err != nil { log.Fatal(err) } } func receive() error { ctx := context.Background() client, err := rawacmepubsub.NewClient(ctx, "unicornvideohub") if err != nil { return err } s, err := acmepubsub.OpenSubscription(ctx, client, "user-signup-minder", nil) if err != nil { return err } defer s.Close() // Receive the messages and forward them to a chan. msgsChan := make(chan *pubsub.Message) go func() { for { msgs, err := s.Receive(ctx, batchSize) if err { log.Fatal(err) } for _, m := range msgs { msgsChan <- m } } } // Get the acks from a chan and send them back to the // server in batches. acksChan := make(chan pubsub.AckID) go func() { for { batch := make([]pubsub.AckID, batchSize) for i := 0; i < len(batch); i++ { batch[i] = <-acksChan } if err := s.SendAcks(ctx, batch); err != nil { /* handle err */ } } } // Use a buffered channel as a semaphore. sem := make(chan struct{}, poolSize) for msg := range msgsChan { sem <- struct{}{} go func(msg *pubsub.Message) { log.Printf("Got message: %s", msg.Body) acksChan <- msg.AckID <-sem }(msg) } for n := poolSize; n > 0; n-- { sem <- struct{}{} } } ``` Here are some trade-offs of this design: Pro: * The semantics are simple, making it * straightforward to implement the concrete API and the drivers for most pubsub services * easy for developers to reason about how it will behave * less risky that bugs will be present in the concrete API * Fairly efficient sending and receiving of messages is possible by tuning batch size and the number of goroutines sending or receiving messages. Con: * This style of API makes the inverted worker pool pattern verbose. * Apps needing to send or receive a large volume of messages must have their own logic to create batches of size greater than 1. ### go-micro Here is an example of what application code could look like for a pubsub API inspired by [`go-micro`](https://github.com/micro/go-micro)'s `broker` package: ```go b := somepubsub.NewBroker(...) if err := b.Connect(); err != nil { /* handle err */ } topic := "user-signups" subID := "user-signups-subscription-1" s, err := b.Subscription(ctx, topic, subID, func(pub broker.Publication) error { fmt.Printf("%s\n", pub.Message.Body) return nil }) if err := b.Publish(ctx, topic, &broker.Message{ Body: []byte("alice signed up") }); err != nil { /* handle err */ } // Sometime later: if err := s.Unsubscribe(ctx); err != nil { /* handle err */ } ``` Pro: * The callback to the subscription returning an error to decide whether to acknowledge the message means the developer cannot forget to ack. Con: * Go micro has code to auto-create [topics](https://github.com/micro/go-plugins/blob/f3fcfcdf77392b4e053c8d5b361abfabc0c623d3/broker/googlepubsub/googlepubsub.go#L152) and [subscriptions](https://github.com/micro/go-plugins/blob/f3fcfcdf77392b4e053c8d5b361abfabc0c623d3/broker/googlepubsub/googlepubsub.go#L185) as needed, but this is not consistent with the Go CDK’s design principle to not get involved in operations. * The subscription callback idea does not appear to be compatible with inverted worker pools. ## Acknowledgements In pubsub systems with acknowledgement, messages are kept in a queue associated with the subscription on the server. When a client receives one of these messages, its counterpart on the server is marked as being processed. Once the client finishes processing the message, it sends an acknowledgement (or "ack") to the server and the server removes the message from the subscription queue. There may be a deadline for the acknowledgement, past which the server unmarks the message so that it can be received again for another try at processing. Redis Pub/Sub and ZeroMQ don’t support acking, but many others do including GCP PubSub, Azure Service Bus, RabbitMQ, and [Redis Streams](https://redis.io/topics/streams-intro). Given the wide support and usefulness, it makes sense to support message acking in the Go CDK. As of this writing, it is an open question as to what should be done about pubsub systems that do not support acks. Some possibilities have been discussed, but no clear best option has emerged yet: 1. simulating acknowledgement by constructing queues on the server. Con: the magically created queues would probably be a less than pleasant surprise for some users. 2. making ack a no-op for systems that don't support it. With this, do we return a sentinel error from `Ack`, and if so then doesn't that unduly complicate the code for apps that never use non-acking systems? This option is also potentially misleading for developers who would naturally assume that un-acked messages would be redelivered. ### Rejected acknowledgement API: `Receive` method returns an `ack` func In this alternative, the application code would look something like this: ```go msg, ack, err := s.Receive(ctx) log.Printf("Received message: %q", msg.Body) ack(msg) ``` Pro: * The compiler will complain if the returned `ack` function is not used. Con: * Receive has one more return value. * Passing `ack` around along with `msg` is inconvenient. ## Tests ### Unit tests for the concrete API (`github.com/go-cloud/pubsub`) We can test that the batched sending, receiving and acking work as intended by making mock implementations of the driver interfaces. At least the following things should be tested: * Calling `pubsub.Message.Ack` causes `driver.Subscription.SendAcks` to be called. * Calling `pubsub.Topic.Send` causes `driver.Topic.SendBatch` to be called. * Calling `pubsub.Subscription.Receive` causes `driver.Subscription.ReceiveBatch` to be called. ### Conformance tests for specific implementations (*e.g.*, `github.com/go-cloud/pubsub/acmepubsub`) * Sent messages with random contents are received with the same contents. * Sent messages with random attributes are received with the same attributes. * Error occurs when making a local topic with an ID that doesn’t exist on the server. * Error occurs when making a subscription with an ID that doesn’t exist on the server. * Message gets sent again after ack deadline if a message is never acknowledged. * ~~Acked messages don't get received again after waiting twice the ack deadline.~~ :point_left: This test would probably be too flakey. ## Benchmarks What is the throughput and latency of the Go CDK's `pubsub` package, relative to directly using the APIs for various services? * send, for 1, 10, 100 topics, and for 1, 10, 100 goroutines sending messages to those topics * receive, for 1, 10, 100 subscriptions, and for 1, 10, 100 goroutines receiving from each subscription ## References * https://github.com/google/go-cloud/issues/312 * http://queues.io/ go-cloud-0.20.0/internal/docs/release.md000066400000000000000000000073721367004507500200300ustar00rootroot00000000000000# Releases To do a release: - Announce to the team that a release is in progress - avoid merging PRs during the release window (likely 1-2 hours). TODO(eliben): find a way to enforce this on GitHub. - Make sure all tests pass locally with `runchecks.sh` and Travis is green. - Run the prerelease checks until everything is passing. - Create a new branch (`git checkout -B prerelease`). Running the script will modify hundreds of golden files, so you want to do it in a branch. You can delete the branch and abandon all the changes when you are done. - Run `./internal/testing/prerelease.sh init` until it finishes with `SUCCESS`. Note that there are some known failures that are logged but don't prevent overall `SUCCESS`. - Run `./internal/testing/prerelease.sh run`. Again, there are some known failures. You can re-run any unexpected failures independently to investigate; see the `prerelease.sh` script to see the exact command line to use. - Run `./internal/testing/prerelease.sh cleanup` when you are done. - Delete the branch (`-D` to force deleting with uncommitted changes). - Create a new branch for the release (`git checkout -B release`). - Run the release helper tool to remove `replace` lines from the `go.mod` files of submodules: ```bash $ go run internal/releasehelper/releasehelper.go dropreplace ``` Check that everything looks in order (with `git diff`) and commit. - Pick the new release name; it's probably `v0.x.0` where `x` is whatever the [last release](https://github.com/google/go-cloud/releases/latest) was plus one, but follow [semantic versioning](https://semver.org/). - Run the release helper tool to set the version in `require` directives of submodules to the new (yet unreleased) version: ```bash $ go run internal/releasehelper/releasehelper.go setversion v0.x.0 ``` Check that everything looks in order (with `git diff`) and commit. - Create a PR. Travis will fail for this PR because submodules depend on a version of the main module that wasn't tagged yet. Enable force merging in GitHub settings and force-merge the PR. Note that this does not affect users, since a new version hasn't been tagged yet. - Tag new versions for all released modules (i.e., `yes` in the `released` column in `./allmodules`) (TODO(eliben): script this?): ```bash $ git tag v0.x.0 $ git tag secrets/hashivault/v0.x.0 $ git tag runtimevar/etcdvar/v0.x.0 ... ``` - Push tags to upstream with `git push upstream --tags` - Compile release notes by reviewing the commits since the last release (use the [Compare](https://github.com/google/go-cloud/compare/v0.1.1...v0.2.0) page for this). - Put breaking changes in a separate section. They should be marked with a `BREAKING_CHANGE` in the PR title; however, that's not enforced so do your best to look for them. - List highlights in the form: `****: `. For example, `**blob**: Added feature foo.`. - Go to [Releases](https://github.com/google/go-cloud/releases). Click `Draft a new release`, enter your release name, select your tag from the dropdown, and enter your release notes. - Send an email to [go-cloud@googlegroups.com](https://groups.google.com/forum/#!forum/go-cloud) announcing the release, and including the release notes. - Disable force pushing on GitHub. - Add back `replace` lines: ```bash $ go run internal/releasehelper/releasehelper.go addreplace ``` Run tests and send out a PR as usual. - Update dependencies by running `internal/testing/update_deps.sh`, run tests and send out a PR. go-cloud-0.20.0/internal/escape/000077500000000000000000000000001367004507500163655ustar00rootroot00000000000000go-cloud-0.20.0/internal/escape/escape.go000066400000000000000000000141241367004507500201560ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package escape includes helpers for escaping and unescaping strings. package escape import ( "fmt" "net/url" "strconv" "strings" ) // NonUTF8String is a string for which utf8.ValidString returns false. const NonUTF8String = "\xbd\xb2" // IsASCIIAlphanumeric returns true iff r is alphanumeric: a-z, A-Z, 0-9. func IsASCIIAlphanumeric(r rune) bool { switch { case 'A' <= r && r <= 'Z': return true case 'a' <= r && r <= 'z': return true case '0' <= r && r <= '9': return true } return false } // HexEscape returns s, with all runes for which shouldEscape returns true // escaped to "__0xXXX__", where XXX is the hex representation of the rune // value. For example, " " would escape to "__0x20__". // // Non-UTF-8 strings will have their non-UTF-8 characters escaped to // unicode.ReplacementChar; the original value is lost. Please file an // issue if you need non-UTF8 support. // // Note: shouldEscape takes the whole string as a slice of runes and an // index. Passing it a single byte or a single rune doesn't provide // enough context for some escape decisions; for example, the caller might // want to escape the second "/" in "//" but not the first one. // We pass a slice of runes instead of the string or a slice of bytes // because some decisions will be made on a rune basis (e.g., encode // all non-ASCII runes). func HexEscape(s string, shouldEscape func(s []rune, i int) bool) string { // Do a first pass to see which runes (if any) need escaping. runes := []rune(s) var toEscape []int for i := range runes { if shouldEscape(runes, i) { toEscape = append(toEscape, i) } } if len(toEscape) == 0 { return s } // Each escaped rune turns into at most 14 runes ("__0x7fffffff__"), // so allocate an extra 13 for each. We'll reslice at the end // if we didn't end up using them. escaped := make([]rune, len(runes)+13*len(toEscape)) n := 0 // current index into toEscape j := 0 // current index into escaped for i, r := range runes { if n < len(toEscape) && i == toEscape[n] { // We were asked to escape this rune. for _, x := range fmt.Sprintf("__%#x__", r) { escaped[j] = x j++ } n++ } else { escaped[j] = r j++ } } return string(escaped[0:j]) } // unescape tries to unescape starting at r[i]. // It returns a boolean indicating whether the unescaping was successful, // and (if true) the unescaped rune and the last index of r that was used // during unescaping. func unescape(r []rune, i int) (bool, rune, int) { // Look for "__0x". if r[i] != '_' { return false, 0, 0 } i++ if i >= len(r) || r[i] != '_' { return false, 0, 0 } i++ if i >= len(r) || r[i] != '0' { return false, 0, 0 } i++ if i >= len(r) || r[i] != 'x' { return false, 0, 0 } i++ // Capture the digits until the next "_" (if any). var hexdigits []rune for ; i < len(r) && r[i] != '_'; i++ { hexdigits = append(hexdigits, r[i]) } // Look for the trailing "__". if i >= len(r) || r[i] != '_' { return false, 0, 0 } i++ if i >= len(r) || r[i] != '_' { return false, 0, 0 } // Parse the hex digits into an int32. retval, err := strconv.ParseInt(string(hexdigits), 16, 32) if err != nil { return false, 0, 0 } return true, rune(retval), i } // HexUnescape reverses HexEscape. func HexUnescape(s string) string { var unescaped []rune runes := []rune(s) for i := 0; i < len(runes); i++ { if ok, newR, newI := unescape(runes, i); ok { // We unescaped some runes starting at i, resulting in the // unescaped rune newR. The last rune used was newI. if unescaped == nil { // This is the first rune we've encountered that // needed unescaping. Allocate a buffer and copy any // previous runes. unescaped = make([]rune, i) copy(unescaped, runes) } unescaped = append(unescaped, newR) i = newI } else if unescaped != nil { unescaped = append(unescaped, runes[i]) } } if unescaped == nil { return s } return string(unescaped) } // URLEscape uses url.PathEscape to escape s. func URLEscape(s string) string { return url.PathEscape(s) } // URLUnescape reverses URLEscape using url.PathUnescape. If the unescape // returns an error, it returns s. func URLUnescape(s string) string { if u, err := url.PathUnescape(s); err == nil { return u } return s } func makeASCIIString(start, end int) string { var s []byte for i := start; i < end; i++ { if i >= 'a' && i <= 'z' { continue } if i >= 'A' && i <= 'Z' { continue } if i >= '0' && i <= '9' { continue } s = append(s, byte(i)) } return string(s) } // WeirdStrings are unusual/weird strings for use in testing escaping. // The keys are descriptive strings, the values are the weird strings. var WeirdStrings = map[string]string{ "fwdslashes": "foo/bar/baz", "repeatedfwdslashes": "foo//bar///baz", "dotdotslash": "../foo/../bar/../../baz../", "backslashes": "foo\\bar\\baz", "repeatedbackslashes": "..\\foo\\\\bar\\\\\\baz", "dotdotbackslash": "..\\foo\\..\\bar\\..\\..\\baz..\\", "quote": "foo\"bar\"baz", "spaces": "foo bar baz", "startwithdigit": "12345", "unicode": strings.Repeat("☺", 3), // The ASCII characters 0-128, split up to avoid the possibly-escaped // versions from getting too long. "ascii-1": makeASCIIString(0, 16), "ascii-2": makeASCIIString(16, 32), "ascii-3": makeASCIIString(32, 48), "ascii-4": makeASCIIString(48, 64), "ascii-5": makeASCIIString(64, 80), "ascii-6": makeASCIIString(80, 96), "ascii-7": makeASCIIString(96, 112), "ascii-8": makeASCIIString(112, 128), } go-cloud-0.20.0/internal/escape/escape_test.go000066400000000000000000000051751367004507500212230ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package escape import ( "testing" ) func TestHexEscape(t *testing.T) { always := func([]rune, int) bool { return true } for _, tc := range []struct { description, s, want string should func([]rune, int) bool }{ { description: "empty string", s: "", want: "", should: always, }, { description: "first rune", s: "hello world", want: "__0x68__ello world", should: func(_ []rune, i int) bool { return i == 0 }, }, { description: "last rune", s: "hello world", want: "hello worl__0x64__", should: func(r []rune, i int) bool { return i == len(r)-1 }, }, { description: "runes in middle", s: "hello world", want: "hello__0x20____0x20__world", should: func(r []rune, i int) bool { return r[i] == ' ' }, }, { description: "unicode", s: "☺☺", should: always, want: "__0x263a____0x263a__", }, } { got := HexEscape(tc.s, tc.should) if got != tc.want { t.Errorf("%s: got escaped %q want %q", tc.description, got, tc.want) } got = HexUnescape(got) if got != tc.s { t.Errorf("%s: got unescaped %q want %q", tc.description, got, tc.s) } } } func TestHexEscapeUnescapeWeirdStrings(t *testing.T) { for name, s := range WeirdStrings { escaped := HexEscape(s, func(r []rune, i int) bool { return !IsASCIIAlphanumeric(r[i]) }) unescaped := HexUnescape(escaped) if unescaped != s { t.Errorf("%s: got unescaped %q want %q", name, unescaped, s) } } } func TestHexUnescapeOnInvalid(t *testing.T) { // Unescaping of valid escape sequences is tested in TestEscape. // This only tests invalid escape sequences, so Unescape is expected // to do nothing. for _, s := range []string{ "0x68", "_0x68_", "__0x68_", "_0x68__", "__1x68__", "__0y68__", "__0xag__", // invalid hex digit "__0x8fffffff__", // out of int32 range } { got := HexUnescape(s) if got != s { t.Errorf("%s: got %q want %q", s, got, s) } } } go-cloud-0.20.0/internal/gcerr/000077500000000000000000000000001367004507500162275ustar00rootroot00000000000000go-cloud-0.20.0/internal/gcerr/errorcode_string.go000066400000000000000000000011031367004507500221230ustar00rootroot00000000000000// Code generated by "stringer -type=ErrorCode"; DO NOT EDIT. package gcerr import "strconv" const _ErrorCode_name = "OKUnknownNotFoundAlreadyExistsInvalidArgumentInternalUnimplementedFailedPreconditionPermissionDeniedResourceExhaustedCanceledDeadlineExceeded" var _ErrorCode_index = [...]uint8{0, 2, 9, 17, 30, 45, 53, 66, 84, 100, 117, 125, 141} func (i ErrorCode) String() string { if i < 0 || i >= ErrorCode(len(_ErrorCode_index)-1) { return "ErrorCode(" + strconv.FormatInt(int64(i), 10) + ")" } return _ErrorCode_name[_ErrorCode_index[i]:_ErrorCode_index[i+1]] } go-cloud-0.20.0/internal/gcerr/gcerr.go000066400000000000000000000126301367004507500176620ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcerr provides an error type for Go CDK APIs. package gcerr import ( "context" "fmt" "io" "reflect" "gocloud.dev/internal/retry" "golang.org/x/xerrors" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) // An ErrorCode describes the error's category. type ErrorCode int const ( // Returned by the Code function on a nil error. It is not a valid // code for an error. OK ErrorCode = 0 // The error could not be categorized. Unknown ErrorCode = 1 // The resource was not found. NotFound ErrorCode = 2 // The resource exists, but it should not. AlreadyExists ErrorCode = 3 // A value given to a Go CDK API is incorrect. InvalidArgument ErrorCode = 4 // Something unexpected happened. Internal errors always indicate // bugs in the Go CDK (or possibly the underlying service). Internal ErrorCode = 5 // The feature is not implemented. Unimplemented ErrorCode = 6 // The system was in the wrong state. FailedPrecondition ErrorCode = 7 // The caller does not have permission to execute the specified operation. PermissionDenied ErrorCode = 8 // Some resource has been exhausted, typically because a service resource limit // has been reached. ResourceExhausted ErrorCode = 9 // The operation was canceled. Canceled ErrorCode = 10 // The operation timed out. DeadlineExceeded ErrorCode = 11 ) // When adding a new error code, try to use the names defined in google.golang.org/grpc/codes. // Do not change the numbers assigned to codes: past values may be stored in metric databases. // Call "go generate" whenever you change the above list of error codes. // To get stringer: // go get golang.org/x/tools/cmd/stringer // Make sure $GOPATH/bin or $GOBIN in on your path. //go:generate stringer -type=ErrorCode // An Error describes a Go CDK error. type Error struct { Code ErrorCode msg string frame xerrors.Frame err error } func (e *Error) Error() string { return fmt.Sprint(e) } func (e *Error) Format(s fmt.State, c rune) { xerrors.FormatError(e, s, c) } func (e *Error) FormatError(p xerrors.Printer) (next error) { if e.msg == "" { p.Printf("code=%v", e.Code) } else { p.Printf("%s (code=%v)", e.msg, e.Code) } e.frame.Format(p) return e.err } // Unwrap returns the error underlying the receiver, which may be nil. func (e *Error) Unwrap() error { return e.err } // New returns a new error with the given code, underlying error and message. Pass 1 // for the call depth if New is called from the function raising the error; pass 2 if // it is called from a helper function that was invoked by the original function; and // so on. func New(c ErrorCode, err error, callDepth int, msg string) *Error { return &Error{ Code: c, msg: msg, frame: xerrors.Caller(callDepth), err: err, } } // Newf uses format and args to format a message, then calls New. func Newf(c ErrorCode, err error, format string, args ...interface{}) *Error { return New(c, err, 2, fmt.Sprintf(format, args...)) } // DoNotWrap reports whether an error should not be wrapped in the Error // type from this package. // It returns true if err is a retry error, a context error, io.EOF, or if it wraps // one of those. func DoNotWrap(err error) bool { if xerrors.Is(err, io.EOF) { return true } if xerrors.Is(err, context.Canceled) { return true } if xerrors.Is(err, context.DeadlineExceeded) { return true } var r *retry.ContextError if xerrors.As(err, &r) { return true } return false } // GRPCCode extracts the gRPC status code and converts it into an ErrorCode. // It returns Unknown if the error isn't from gRPC. func GRPCCode(err error) ErrorCode { switch status.Code(err) { case codes.NotFound: return NotFound case codes.AlreadyExists: return AlreadyExists case codes.InvalidArgument: return InvalidArgument case codes.Internal: return Internal case codes.Unimplemented: return Unimplemented case codes.FailedPrecondition: return FailedPrecondition case codes.PermissionDenied: return PermissionDenied case codes.ResourceExhausted: return ResourceExhausted case codes.Canceled: return Canceled case codes.DeadlineExceeded: return DeadlineExceeded default: return Unknown } } // ErrorAs is a helper for the ErrorAs method of an API's portable type. // It performs some initial nil checks, and does a single level of unwrapping // when err is a *gcerr.Error. Then it calls its errorAs argument, which should // be a driver implementation of ErrorAs. func ErrorAs(err error, target interface{}, errorAs func(error, interface{}) bool) bool { if err == nil { return false } if target == nil { panic("ErrorAs target cannot be nil") } val := reflect.ValueOf(target) if val.Type().Kind() != reflect.Ptr || val.IsNil() { panic("ErrorAs target must be a non-nil pointer") } if e, ok := err.(*Error); ok { err = e.Unwrap() } return errorAs(err, target) } go-cloud-0.20.0/internal/gcerr/gcerr_test.go000066400000000000000000000057231367004507500207260ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcerr import ( "errors" "fmt" "regexp" "strconv" "strings" "testing" ) func TestNewf(t *testing.T) { e := Newf(Internal, nil, "a %d b", 3) got := e.Error() want := "a 3 b (code=Internal)" if got != want { t.Errorf("got %q, want %q", got, want) } } func TestFormatting(t *testing.T) { for i, test := range []struct { err *Error verb string want []string // regexps, one per line }{ { New(NotFound, nil, 1, "message"), "%v", []string{`^message \(code=NotFound\)$`}, }, { New(NotFound, nil, 1, "message"), "%+v", []string{ `^message \(code=NotFound\):$`, `\s+gocloud.dev/internal/gcerr.TestFormatting$`, `\s+.*/internal/gcerr/gcerr_test.go:\d+$`, }, }, { New(AlreadyExists, errors.New("wrapped"), 1, "message"), "%v", []string{`^message \(code=AlreadyExists\): wrapped$`}, }, { New(AlreadyExists, errors.New("wrapped"), 1, "message"), "%+v", []string{ `^message \(code=AlreadyExists\):`, `^\s+gocloud.dev/internal/gcerr.TestFormatting$`, `^\s+.*/internal/gcerr/gcerr_test.go:\d+$`, `^\s+- wrapped$`, }, }, { New(AlreadyExists, errors.New("wrapped"), 1, ""), "%v", []string{`^code=AlreadyExists: wrapped`}, }, { New(AlreadyExists, errors.New("wrapped"), 1, ""), "%+v", []string{ `^code=AlreadyExists:`, `^\s+gocloud.dev/internal/gcerr.TestFormatting$`, `^\s+.*/internal/gcerr/gcerr_test.go:\d+$`, `^\s+- wrapped$`, }, }, } { t.Run(strconv.Itoa(i), func(t *testing.T) { gotString := fmt.Sprintf(test.verb, test.err) gotLines := strings.Split(gotString, "\n") if got, want := len(gotLines), len(test.want); got != want { t.Fatalf("got %d lines, want %d. got:\n%s", got, want, gotString) } for j, gl := range gotLines { matched, err := regexp.MatchString(test.want[j], gl) if err != nil { t.Fatal(err) } if !matched { t.Fatalf("line #%d: got %q, which doesn't match %q", j, gl, test.want[j]) } } }) } } func TestError(t *testing.T) { // Check that err.Error() == fmt.Sprintf("%s", err) for _, err := range []*Error{ New(NotFound, nil, 1, "message"), New(AlreadyExists, errors.New("wrapped"), 1, "message"), New(AlreadyExists, errors.New("wrapped"), 1, ""), } { got := err.Error() want := fmt.Sprint(err) if got != want { t.Errorf("%v: got %q, want %q", err, got, want) } } } go-cloud-0.20.0/internal/oc/000077500000000000000000000000001367004507500155265ustar00rootroot00000000000000go-cloud-0.20.0/internal/oc/metrics.go000066400000000000000000000036241367004507500175300ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package oc supports OpenCensus tracing and metrics for the Go Cloud Development Kit. package oc import ( "go.opencensus.io/plugin/ocgrpc" "go.opencensus.io/stats" "go.opencensus.io/stats/view" "go.opencensus.io/tag" ) // LatencyMeasure returns the measure for method call latency used // by Go CDK APIs. func LatencyMeasure(pkg string) *stats.Float64Measure { return stats.Float64( pkg+"/latency", "Latency of method call", stats.UnitMilliseconds) } // Tag keys used for the standard Go CDK views. var ( MethodKey = tag.MustNewKey("gocdk_method") StatusKey = tag.MustNewKey("gocdk_status") ProviderKey = tag.MustNewKey("gocdk_provider") ) // Views returns the views supported by Go CDK APIs. func Views(pkg string, latencyMeasure *stats.Float64Measure) []*view.View { return []*view.View{ { Name: pkg + "/completed_calls", Measure: latencyMeasure, Description: "Count of method calls by provider, method and status.", TagKeys: []tag.Key{ProviderKey, MethodKey, StatusKey}, Aggregation: view.Count(), }, { Name: pkg + "/latency", Measure: latencyMeasure, Description: "Distribution of method latency, by provider and method.", TagKeys: []tag.Key{ProviderKey, MethodKey}, Aggregation: ocgrpc.DefaultMillisecondsDistribution, }, } } go-cloud-0.20.0/internal/oc/trace.go000066400000000000000000000051271367004507500171600ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package oc import ( "context" "fmt" "reflect" "time" "go.opencensus.io/stats" "go.opencensus.io/tag" "go.opencensus.io/trace" "gocloud.dev/gcerrors" ) // A Tracer supports OpenCensus tracing and latency metrics. type Tracer struct { Package string Provider string LatencyMeasure *stats.Float64Measure } // ProviderName returns the name of the provider associated with the driver value. // It is intended to be used to set Tracer.Provider. // It actually returns the package path of the driver's type. func ProviderName(driver interface{}) string { // Return the last component of the package path. if driver == nil { return "" } t := reflect.TypeOf(driver) if t.Kind() == reflect.Ptr { t = t.Elem() } return t.PkgPath() } // Context key for starting time of a method call. type startTimeKey struct{} // Start adds a span to the trace, and prepares for recording a latency measurement. func (t *Tracer) Start(ctx context.Context, methodName string) context.Context { fullName := t.Package + "." + methodName ctx, _ = trace.StartSpan(ctx, fullName) ctx, err := tag.New(ctx, tag.Upsert(MethodKey, fullName), tag.Upsert(ProviderKey, t.Provider)) if err != nil { // The only possible errors are from invalid key or value names, and those are programming // errors that will be found during testing. panic(fmt.Sprintf("fullName=%q, provider=%q: %v", fullName, t.Provider, err)) } return context.WithValue(ctx, startTimeKey{}, time.Now()) } // End ends a span with the given error, and records a latency measurement. func (t *Tracer) End(ctx context.Context, err error) { startTime := ctx.Value(startTimeKey{}).(time.Time) elapsed := time.Since(startTime) code := gcerrors.Code(err) span := trace.FromContext(ctx) if err != nil { span.SetStatus(trace.Status{Code: int32(code), Message: err.Error()}) } span.End() stats.RecordWithTags(ctx, []tag.Mutator{tag.Upsert(StatusKey, fmt.Sprint(code))}, t.LatencyMeasure.M(float64(elapsed.Nanoseconds())/1e6)) // milliseconds } go-cloud-0.20.0/internal/oc/trace_test.go000066400000000000000000000020421367004507500202100ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package oc import ( "regexp" "testing" ) type testDriver struct{} func TestProviderName(t *testing.T) { for _, test := range []struct { in interface{} want string }{ {nil, ""}, {testDriver{}, "gocloud.dev/internal/oc"}, {&testDriver{}, "gocloud.dev/internal/oc"}, {regexp.Regexp{}, "regexp"}, } { got := ProviderName(test.in) if got != test.want { t.Errorf("%v: got %q, want %q", test.in, got, test.want) } } } go-cloud-0.20.0/internal/openurl/000077500000000000000000000000001367004507500166115ustar00rootroot00000000000000go-cloud-0.20.0/internal/openurl/openurl.go000066400000000000000000000062231367004507500206270ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package openurl provides helpers for URLMux and URLOpeners in portable APIs. package openurl // import "gocloud.dev/internal/openurl" import ( "fmt" "net/url" "sort" "strings" ) // SchemeMap maps URL schemes to values. The zero value is an empty map, ready for use. type SchemeMap struct { api string m map[string]interface{} } // Register registers scheme for value; subsequent calls to FromString or // FromURL with scheme will return value. // api is the portable API name (e.g., "blob"); the same value should always // be passed. It should be in all lowercase. // typ is the portable type (e.g., "Bucket"). // Register panics if scheme has already been registered. func (m *SchemeMap) Register(api, typ, scheme string, value interface{}) { if m.m == nil { m.m = map[string]interface{}{} } if api != strings.ToLower(api) { panic(fmt.Errorf("api should be lowercase: %q", api)) } if m.api == "" { m.api = api } else if m.api != api { panic(fmt.Errorf("previously registered using api %q (now %q)", m.api, api)) } if _, exists := m.m[scheme]; exists { panic(fmt.Errorf("scheme %q already registered for %s.%s", scheme, api, typ)) } m.m[scheme] = value } // FromString parses urlstr as an URL and looks up the value for the URL's scheme. func (m *SchemeMap) FromString(typ, urlstr string) (interface{}, *url.URL, error) { u, err := url.Parse(urlstr) if err != nil { return nil, nil, fmt.Errorf("open %s.%s: %v", m.api, typ, err) } val, err := m.FromURL(typ, u) if err != nil { return nil, nil, err } return val, u, nil } // FromURL looks up the value for u's scheme. func (m *SchemeMap) FromURL(typ string, u *url.URL) (interface{}, error) { scheme := u.Scheme if scheme == "" { return nil, fmt.Errorf("open %s.%s: no scheme in URL %q", m.api, typ, u) } for _, prefix := range []string{ fmt.Sprintf("%s+%s+", m.api, strings.ToLower(typ)), fmt.Sprintf("%s+", m.api), } { scheme = strings.TrimPrefix(scheme, prefix) } v, ok := m.m[scheme] if !ok { return nil, fmt.Errorf("open %s.%s: no driver registered for %q for URL %q; available schemes: %v", m.api, typ, scheme, u, strings.Join(m.Schemes(), ", ")) } return v, nil } // Schemes returns a sorted slice of the registered schemes. func (m *SchemeMap) Schemes() []string { var schemes []string for s := range m.m { schemes = append(schemes, s) } sort.Strings(schemes) return schemes } // ValidScheme returns true iff scheme has been registered. func (m *SchemeMap) ValidScheme(scheme string) bool { for s := range m.m { if scheme == s { return true } } return false } go-cloud-0.20.0/internal/openurl/openurl_test.go000066400000000000000000000043771367004507500216760ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package openurl_test import ( "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/internal/openurl" ) func TestSchemeMap(t *testing.T) { const foo, bar = "foo value", "bar value" tests := []struct { url string wantErr bool want interface{} }{ {"invalid url", true, nil}, {"foo://a/b/c", false, foo}, {"api+foo://a/b/c", false, foo}, {"api+type+foo://a/b/c", false, foo}, {"bar://a?p=v", false, bar}, {"api+bar://a", false, bar}, {"api+type+bar://a", false, bar}, {"typ+bar://a", true, nil}, {"api+typ+bar://a", true, nil}, } var emptyM, m openurl.SchemeMap m.Register("api", "Type", "foo", foo) m.Register("api", "Type", "bar", bar) if diff := cmp.Diff(m.Schemes(), []string{"bar", "foo"}); diff != "" { t.Errorf("Schemes: %s", diff) } if !m.ValidScheme("foo") || !m.ValidScheme("bar") { t.Errorf("ValidScheme didn't return true for valid scheme") } if m.ValidScheme("foo2") || m.ValidScheme("http") { t.Errorf("ValidScheme didn't return false for invalid scheme") } for _, test := range tests { // Empty SchemeMap should always return an error. if _, _, err := emptyM.FromString("type", test.url); err == nil { t.Errorf("%s: empty SchemeMap got nil error, wanted non-nil error", test.url) } got, gotURL, gotErr := m.FromString("type", test.url) if (gotErr != nil) != test.wantErr { t.Errorf("%s: got error %v, want error: %v", test.url, gotErr, test.wantErr) } if gotErr != nil { continue } if got := gotURL.String(); got != test.url { t.Errorf("%s: got URL %q want %v", test.url, got, test.url) } if got != test.want { t.Errorf("%s: got %v want %v", test.url, got, test.want) } } } go-cloud-0.20.0/internal/releasehelper/000077500000000000000000000000001367004507500177455ustar00rootroot00000000000000go-cloud-0.20.0/internal/releasehelper/releasehelper.go000066400000000000000000000146741367004507500231300ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Helper tool for creating new releases of the Go CDK. Run without arguments // or with 'help' for details. package main import ( "bufio" "encoding/json" "fmt" "log" "os" "os/exec" "path/filepath" "regexp" "strings" ) var helpText string = ` Helper tool for creating new releases of the Go CDK. Automates the modifications required in the project's go.mod files to create an test new releases. The tool processes all modules listed in the 'allmodules' file. For each module it handles all dependencies on other gocloud.dev modules. Run it from the root directory of the repository, as follows: $ %s Where command is one of the following: addreplace adds 'replace' directives to point to local versions for testing. dropreplace removes these directives. setversion sets 'required' version of modules to a given version formatted as vX.Y.Z tag runs 'git tag /' for all CDK modules help prints this usage message ` func printHelp() { _, binName := filepath.Split(os.Args[0]) fmt.Fprintf(os.Stderr, helpText, binName) fmt.Fprintln(os.Stderr) } // cmdCheck invokes the command given in s, echoing the invocation to stdout. // It checks that the command was successful and returns its standard output. // If the command returned a non-0 status, log.Fatal is invoked. func cmdCheck(s string) []byte { fmt.Printf(" -> %s\n", s) fields := strings.Fields(s) if len(fields) < 1 { log.Fatal(`Expected "command "`) } b, err := exec.Command(fields[0], fields[1:]...).Output() if exiterr, ok := err.(*exec.ExitError); ok { log.Fatalf("%s; stderr: %s\n", err, string(exiterr.Stderr)) } else if err != nil { log.Fatal("exec.Command", err) } return b } // These types are taken from "go mod help edit", in order to parse the JSON // output of `go mod edit -json`. type GoMod struct { Module Module Go string Require []Require Exclude []Module Replace []Replace } type Module struct { Path string Version string } type Require struct { Path string Version string Indirect bool } type Replace struct { Old Module New Module } // parseModuleInfo parses module information from a go.mod file at path. func parseModuleInfo(path string) GoMod { rawJson := cmdCheck("go mod edit -json " + path) var modInfo GoMod err := json.Unmarshal(rawJson, &modInfo) if err != nil { log.Fatal(err) } return modInfo } // runOnGomod processes a single go.mod file (located in directory 'path'). // Each require in the go.mod file is processed with reqHandler, a callback // function. It's called with these arguments: // // gomodPath - path to the go.mod file where this 'require' was found // mod - name of the module being 'require'd // modPath - mod's location in the filesystem relative to // the go.mod 'require'ing it func runOnGomod(path string, reqHandler func(gomodPath, mod, modPath string)) { gomodPath := filepath.Join(path, "go.mod") fmt.Println("Processing", gomodPath) modInfo := parseModuleInfo(gomodPath) base := "gocloud.dev" for _, r := range modInfo.Require { // Find requirements on modules within the gocloud.dev tree. if strings.HasPrefix(r.Path, base) { // Find the relative path from 'path' and the module required here. var reqPath string if r.Path == base { reqPath = "." } else { reqPath = strings.TrimPrefix(r.Path, base+"/") } rel, err := filepath.Rel(path, reqPath) if err != nil { log.Fatal(err) } // When path is '.', filepath.Rel will append a /. to the result and we // may get paths like ../../. if strings.HasSuffix(rel, "/.") { rel, _ = filepath.Split(rel) } reqHandler(gomodPath, r.Path, rel) } } } func gomodAddReplace(path string) { runOnGomod(path, func(gomodPath, mod, modPath string) { cmdCheck(fmt.Sprintf("go mod edit -replace=%s=%s %s", mod, modPath, gomodPath)) }) } func gomodDropReplace(path string) { runOnGomod(path, func(gomodPath, mod, modPath string) { cmdCheck(fmt.Sprintf("go mod edit -dropreplace=%s %s", mod, gomodPath)) }) } func gomodSetVersion(path string, v string) { runOnGomod(path, func(gomodPath, mod, modPath string) { cmdCheck(fmt.Sprintf("go mod edit -require=%s@%s %s", mod, v, gomodPath)) }) } func gomodTag(path string, v string) { var tagName string if path == "." { tagName = v } else { tagName = filepath.Join(path, v) } cmdCheck(fmt.Sprintf("git tag %s", tagName)) } func validSemanticVersion(v string) bool { match, err := regexp.MatchString(`v\d+\.\d+\.\d+`, v) if err != nil { return false } return match } func main() { if len(os.Args) < 2 { printHelp() os.Exit(0) } var gomodHandler func(path string) switch os.Args[1] { case "help": printHelp() os.Exit(0) case "addreplace": gomodHandler = gomodAddReplace case "dropreplace": gomodHandler = gomodDropReplace case "setversion": if len(os.Args) < 3 || !validSemanticVersion(os.Args[2]) { printHelp() os.Exit(1) } gomodHandler = func(path string) { gomodSetVersion(path, os.Args[2]) } case "tag": if len(os.Args) < 3 || !validSemanticVersion(os.Args[2]) { printHelp() os.Exit(1) } gomodHandler = func(path string) { gomodTag(path, os.Args[2]) } default: printHelp() os.Exit(1) } f, err := os.Open("allmodules") if err != nil { log.Fatal(err) } input := bufio.NewScanner(f) input.Split(bufio.ScanLines) for input.Scan() { if len(input.Text()) > 0 && !strings.HasPrefix(input.Text(), "#") { fields := strings.Fields(input.Text()) if len(fields) != 2 { log.Fatalf("want 2 fields, got '%s'\n", input.Text()) } // "tag" only runs if the released field is "yes". Other commands run // for every line. if os.Args[1] != "tag" || fields[1] == "yes" { gomodHandler(fields[0]) } } } if input.Err() != nil { log.Fatal(input.Err()) } } go-cloud-0.20.0/internal/releasehelper/releasehelper_test.go000066400000000000000000000064711367004507500241630ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "fmt" "io/ioutil" "os" "path/filepath" "strings" "testing" ) // The following directory/file structure is created. ROOT is the root temp // directory created by the test. // // ROOT/go.mod <-- main go.mod for gocloud.dev // ROOT/submod/go.mod <-- go.mod for a submodule of gocloud.dev // ROOT/samples/go.mod <-- go.mod for "samples" that include both of the // other modules var mainGomod = []byte("module gocloud.dev\n") var submodGomod = []byte(`module gocloud.dev/submod require ( gocloud.dev v0.15.0 ) `) var samplesGomod = []byte(`module gocloud.dev/samples require ( gocloud.dev v0.15.0 gocloud.dev/submod v0.15.0 ) `) func createFilesForTest(root string) error { if err := ioutil.WriteFile(filepath.Join(root, "go.mod"), mainGomod, 0666); err != nil { return err } if err := os.MkdirAll(filepath.Join(root, "submod"), 0766); err != nil { return err } if err := ioutil.WriteFile(filepath.Join(root, "submod", "go.mod"), submodGomod, 0666); err != nil { return err } if err := os.MkdirAll(filepath.Join(root, "samples"), 0766); err != nil { return err } if err := ioutil.WriteFile(filepath.Join(root, "samples", "go.mod"), samplesGomod, 0666); err != nil { return err } return nil } func Test(t *testing.T) { tempDir, err := ioutil.TempDir("", "releasehelper_test") if err != nil { t.Fatal(err) } fmt.Println("temp dir:", tempDir) if err := createFilesForTest(tempDir); err != nil { t.Fatal(err) } defer os.RemoveAll(tempDir) if err := os.Chdir(tempDir); err != nil { t.Fatal(err) } // Add replace lines and expect to find them. gomodAddReplace("samples") samplesGomod := filepath.Join("samples", "go.mod") c, err := ioutil.ReadFile(samplesGomod) if err != nil { t.Fatal(err) } replaceLines := []string{ "replace gocloud.dev => " + filepath.Clean("../"), "replace gocloud.dev/submod => " + filepath.Clean("../submod")} for _, line := range replaceLines { if !strings.Contains(string(c), line) { t.Errorf("Expected to find '%s' in samples/go.mod", line) } } // Drop replace lines and expect not to find them. gomodDropReplace("samples") c, err = ioutil.ReadFile(samplesGomod) if err != nil { t.Fatal(err) } for _, line := range replaceLines { if strings.Contains(string(c), line) { t.Errorf("Expected to not find '%s' in samples/go.mod", line) } } // Set new version and check it was set as expected. gomodSetVersion("samples", "v1.8.99") c, err = ioutil.ReadFile(samplesGomod) if err != nil { t.Fatal(err) } if !strings.Contains(string(c), "gocloud.dev v1.8.99") || !strings.Contains(string(c), "gocloud.dev/submod v1.8.99") { t.Error("New versions for require not found in samples/go.mod") } } go-cloud-0.20.0/internal/retry/000077500000000000000000000000001367004507500162725ustar00rootroot00000000000000go-cloud-0.20.0/internal/retry/retry.go000066400000000000000000000050721367004507500177720ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package retry provides retry logic. package retry // import "gocloud.dev/internal/retry" import ( "context" "fmt" "time" gax "github.com/googleapis/gax-go" ) // Call calls the supplied function f repeatedly, using the isRetryable function and // the provided backoff parameters to control the repetition. // // When f returns nil, Call immediately returns nil. // // When f returns an error for which isRetryable returns false, Call immediately // returns that error. // // When f returns an error for which isRetryable returns true, Call sleeps for the // provided backoff value and invokes f again. // // When the provided context is done, Retry returns a ContextError that includes both // ctx.Error() and the last error returned by f, or nil if there isn't one. func Call(ctx context.Context, bo gax.Backoff, isRetryable func(error) bool, f func() error) error { return call(ctx, bo, isRetryable, f, gax.Sleep) } // Split out for testing. func call(ctx context.Context, bo gax.Backoff, isRetryable func(error) bool, f func() error, sleep func(context.Context, time.Duration) error) error { // Do nothing if context is done on entry. if err := ctx.Err(); err != nil { return &ContextError{CtxErr: err} } for { err := f() if err == nil { return nil } if !isRetryable(err) { return err } if cerr := sleep(ctx, bo.Pause()); cerr != nil { return &ContextError{CtxErr: cerr, FuncErr: err} } } } // A ContextError contains both a context error (either context.Canceled or // context.DeadlineExceeded), and the last error from the function being retried, // or nil if the function was never called. type ContextError struct { CtxErr error // The error obtained from ctx.Err() FuncErr error // The error obtained from the function being retried, or nil } func (e *ContextError) Error() string { return fmt.Sprintf("%v; last error: %v", e.CtxErr, e.FuncErr) } func (e *ContextError) Is(target error) bool { return e.CtxErr == target || e.FuncErr == target } go-cloud-0.20.0/internal/retry/retry_test.go000066400000000000000000000101061367004507500210230ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package retry import ( "context" "errors" "os" "testing" "time" gax "github.com/googleapis/gax-go" "golang.org/x/xerrors" ) // Errors to distinguish retryable and non-retryable cases. var ( errRetry = errors.New("retry") errNoRetry = errors.New("no retry") ) func retryable(err error) bool { return err == errRetry } func TestCall(t *testing.T) { for _, test := range []struct { desc string isRetryable func(error) bool f func(int) error // passed the number of calls so far wantErr error // the return value of call wantCount int // number of times f is called }{ { desc: "f returns nil", isRetryable: retryable, f: func(int) error { return nil }, wantCount: 1, wantErr: nil, }, { desc: "f returns non-retryable error", isRetryable: retryable, f: func(int) error { return errNoRetry }, wantCount: 1, wantErr: errNoRetry, }, { desc: "f returns retryable error", isRetryable: retryable, f: func(n int) error { if n < 2 { return errRetry } return errNoRetry }, wantCount: 3, wantErr: errNoRetry, }, { desc: "f returns context error", // same as non-retryable isRetryable: retryable, f: func(int) error { return context.Canceled }, wantCount: 1, wantErr: context.Canceled, }, } { t.Run(test.desc, func(t *testing.T) { sleep := func(context.Context, time.Duration) error { return nil } gotCount := 0 f := func() error { gotCount++; return test.f(gotCount - 1) } gotErr := call(context.Background(), gax.Backoff{}, test.isRetryable, f, sleep) if gotErr != test.wantErr { t.Errorf("error: got %v, want %v", gotErr, test.wantErr) } if gotCount != test.wantCount { t.Errorf("retry count: got %d, want %d", gotCount, test.wantCount) } }) } } func TestCallCancel(t *testing.T) { t.Run("done on entry", func(t *testing.T) { // If the context is done on entry, f is never called. ctx, cancel := context.WithCancel(context.Background()) cancel() gotCount := 0 f := func() error { gotCount++; return nil } gotErr := call(ctx, gax.Backoff{}, retryable, f, nil) if gotCount != 0 { t.Errorf("retry count: got %d, want 0", gotCount) } wantErr := &ContextError{CtxErr: context.Canceled} if !equalContextError(gotErr, wantErr) { t.Errorf("error: got %v, want %v", gotErr, wantErr) } }) t.Run("done in sleep", func(t *testing.T) { // If the context is done during sleep, we get a ContextError. gotCount := 0 f := func() error { gotCount++; return errRetry } sleep := func(context.Context, time.Duration) error { return context.Canceled } gotErr := call(context.Background(), gax.Backoff{}, retryable, f, sleep) if gotCount != 1 { t.Errorf("retry count: got %d, want 1", gotCount) } wantErr := &ContextError{CtxErr: context.Canceled, FuncErr: errRetry} if !equalContextError(gotErr, wantErr) { t.Errorf("error: got %v, want %v", gotErr, wantErr) } }) } func equalContextError(got error, want *ContextError) bool { cerr, ok := got.(*ContextError) if !ok { return false } return cerr.CtxErr == want.CtxErr && cerr.FuncErr == want.FuncErr } func TestErrorsIs(t *testing.T) { err := &ContextError{ CtxErr: context.Canceled, FuncErr: os.ErrExist, } for _, target := range []error{err, context.Canceled, os.ErrExist} { if !xerrors.Is(err, target) { t.Errorf("xerrors.Is(%v) == false, want true", target) } } } go-cloud-0.20.0/internal/testing/000077500000000000000000000000001367004507500166025ustar00rootroot00000000000000go-cloud-0.20.0/internal/testing/alldeps000066400000000000000000000064251367004507500201600ustar00rootroot00000000000000cloud.google.com/go cloud.google.com/go/firestore cloud.google.com/go/pubsub cloud.google.com/go/storage contrib.go.opencensus.io/exporter/aws contrib.go.opencensus.io/exporter/stackdriver contrib.go.opencensus.io/integrations/ocsql github.com/Azure/azure-amqp-common-go/v3 github.com/Azure/azure-pipeline-go github.com/Azure/azure-sdk-for-go github.com/Azure/azure-service-bus-go github.com/Azure/azure-storage-blob-go github.com/Azure/go-amqp github.com/Azure/go-autorest/autorest github.com/Azure/go-autorest/autorest/adal github.com/Azure/go-autorest/autorest/azure/auth github.com/Azure/go-autorest/autorest/azure/cli github.com/Azure/go-autorest/autorest/date github.com/Azure/go-autorest/autorest/to github.com/Azure/go-autorest/autorest/validation github.com/Azure/go-autorest/logger github.com/Azure/go-autorest/tracing github.com/GoogleCloudPlatform/cloudsql-proxy github.com/Shopify/sarama github.com/aws/aws-sdk-go github.com/census-instrumentation/opencensus-proto github.com/coreos/etcd github.com/davecgh/go-spew github.com/devigned/tab github.com/dgrijalva/jwt-go github.com/dimchansky/utfbom github.com/eapache/go-resiliency github.com/eapache/go-xerial-snappy github.com/eapache/queue github.com/fsnotify/fsnotify github.com/go-sql-driver/mysql github.com/go-stack/stack github.com/gogo/protobuf github.com/golang/groupcache github.com/golang/protobuf github.com/golang/snappy github.com/google/go-cmp github.com/google/go-github github.com/google/go-querystring github.com/google/go-replayers/grpcreplay github.com/google/go-replayers/httpreplay github.com/google/martian github.com/google/subcommands github.com/google/uuid github.com/google/wire github.com/googleapis/gax-go github.com/googleapis/gax-go/v2 github.com/gorilla/mux github.com/hashicorp/errwrap github.com/hashicorp/go-cleanhttp github.com/hashicorp/go-multierror github.com/hashicorp/go-retryablehttp github.com/hashicorp/go-rootcerts github.com/hashicorp/go-sockaddr github.com/hashicorp/go-uuid github.com/hashicorp/hcl github.com/hashicorp/vault/api github.com/hashicorp/vault/sdk github.com/jcmturner/gofork github.com/jmespath/go-jmespath github.com/klauspost/compress github.com/lib/pq github.com/mattn/go-ieproxy github.com/mitchellh/go-homedir github.com/mitchellh/mapstructure github.com/nats-io/jwt github.com/nats-io/nats.go github.com/nats-io/nkeys github.com/nats-io/nuid github.com/pierrec/lz4 github.com/pkg/errors github.com/rcrowley/go-metrics github.com/ryanuber/go-glob github.com/streadway/amqp github.com/xdg/scram github.com/xdg/stringprep go.etcd.io/etcd go.mongodb.org/mongo-driver go.opencensus.io gocloud.dev gocloud.dev/docstore/mongodocstore gocloud.dev/internal/contributebot gocloud.dev/internal/website gocloud.dev/pubsub/kafkapubsub gocloud.dev/pubsub/natspubsub gocloud.dev/pubsub/rabbitpubsub gocloud.dev/runtimevar/etcdvar gocloud.dev/samples gocloud.dev/secrets/hashivault golang.org/x/crypto golang.org/x/net golang.org/x/oauth2 golang.org/x/sync golang.org/x/sys golang.org/x/text golang.org/x/time golang.org/x/tools golang.org/x/xerrors google.golang.org/api google.golang.org/appengine google.golang.org/genproto google.golang.org/grpc google.golang.org/protobuf gopkg.in/jcmturner/aescts.v1 gopkg.in/jcmturner/dnsutils.v1 gopkg.in/jcmturner/gokrb5.v7 gopkg.in/jcmturner/rpc.v1 gopkg.in/pipe.v2 gopkg.in/square/go-jose.v2 go-cloud-0.20.0/internal/testing/check_api_change.sh000077500000000000000000000074401367004507500223610ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script checks to see if there are any incompatible API changes on the # current branch relative to the upstream branch. # It fails if it finds any, unless there is a commit with BREAKING_CHANGE_OK # in the first line of the commit message. # # It checks all modules listed in allmodules, and skips packages with # "internal" or "test" in their name. # # It expects to be run at the root of the repository, and that HEAD is pointing # to a commit that merges between the pull request and the upstream branch # (TRAVIS_BRANCH). This is what Travis does (see # https://docs.travis-ci.com/user/pull-requests/ for details), but if you # are testing this script manually, you may need to manually create a merge # commit. set -euo pipefail UPSTREAM_BRANCH="${TRAVIS_BRANCH:-master}" echo "Checking for incompatible API changes relative to ${UPSTREAM_BRANCH}..." INSTALL_DIR="$(mktemp -d)" MASTER_CLONE_DIR="$(mktemp -d)" PKGINFO_BRANCH=$(mktemp) PKGINFO_MASTER=$(mktemp) function cleanup() { rm -rf "$INSTALL_DIR" "$MASTER_CLONE_DIR" rm -f "$PKGINFO_BRANCH" "$PKGINFO_MASTER" } trap cleanup EXIT # Move to a temporary directory while installing apidiff to avoid changing # the local .mod file. ( cd "$INSTALL_DIR" && exec go mod init unused ) ( cd "$INSTALL_DIR" && exec go install golang.org/x/exp/cmd/apidiff ) git clone -b "$UPSTREAM_BRANCH" . "$MASTER_CLONE_DIR" &> /dev/null # Run the following checks in the master directory ORIG_DIR="$(pwd)" cd "$MASTER_CLONE_DIR" incompatible_change_pkgs=() while read -r path || [[ -n "$path" ]]; do echo " checking packages in module $path" pushd "$path" &> /dev/null PKGS=$(go list ./...) for pkg in $PKGS; do if [[ "$pkg" =~ "test" ]] || [[ "$pkg" =~ "internal" ]] || [[ "$pkg" =~ "samples" ]]; then continue fi echo " checking ${pkg}..." # Compute export data for the current branch. package_deleted=0 (cd "$ORIG_DIR/$path" && apidiff -w "$PKGINFO_BRANCH" "$pkg") || package_deleted=1 if [[ $package_deleted -eq 1 ]]; then echo " package ${pkg} was deleted! Recording as an incompatible change."; incompatible_change_pkgs+=("${pkg}"); continue; fi # Compute export data for master@HEAD. apidiff -w "$PKGINFO_MASTER" "$pkg" # Print all changes for posterity. apidiff "$PKGINFO_MASTER" "$PKGINFO_BRANCH" # Note if there's an incompatible change. ic=$(apidiff -incompatible "$PKGINFO_MASTER" "$PKGINFO_BRANCH") if [ -n "$ic" ]; then incompatible_change_pkgs+=("$pkg"); fi done popd &> /dev/null done < <( sed -e '/^#/d' -e '/^$/d' allmodules | awk '{print $1}' ) if [ ${#incompatible_change_pkgs[@]} -eq 0 ]; then # No incompatible changes, we are good. echo "OK: No incompatible changes found." exit 0; fi echo "Found breaking API change(s) in: ${incompatible_change_pkgs[*]}." # Found incompatible changes; see if they were declared as OK via a commit. cd "$ORIG_DIR" if git cherry -v master | grep -q "BREAKING_CHANGE_OK"; then echo "Allowing them due to a commit message with BREAKING_CHANGE_OK."; exit 0; fi echo "FAIL. If this is expected and OK, you can pass this check by adding a commit with BREAKING_CHANGE_OK in the first line of the message." exit 1 go-cloud-0.20.0/internal/testing/check_mod_tidy.sh000077500000000000000000000031121367004507500221030ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script checks to see if `go mod tidy` has been run on the module # in the current directory. # # It exits with status 1 if "go mod tidy && go list -deps ./..." would # make changes. # # TODO(rvangent): Replace this with `go mod tidy --check` when it exists: # https://github.com/golang/go/issues/27005. # # TODO(rvangent): Drop the "go list" part here and in gomodcleanup.sh once # https://github.com/golang/go/issues/31248 is fixed. set -euo pipefail TMP_GOMOD=$(mktemp) TMP_GOSUM=$(mktemp) function cleanup() { # Restore the original files in case "go mod tidy" made changes. if [[ -f "$TMP_GOMOD" ]]; then mv "$TMP_GOMOD" ./go.mod fi if [[ -f "$TMP_GOSUM" ]]; then mv "$TMP_GOSUM" ./go.sum fi } trap cleanup EXIT # Make copies of the current files. cp ./go.mod "$TMP_GOMOD" cp ./go.sum "$TMP_GOSUM" # Modifies the files in-place. go mod tidy go list -deps ./... &> /dev/null # Check for diffs. diff -u "$TMP_GOMOD" ./go.mod diff -u "$TMP_GOSUM" ./go.sum go-cloud-0.20.0/internal/testing/gomodcleanup.sh000077500000000000000000000021151367004507500216150ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script should be run from the root directory. # It runs "go mod tidy && go list -deps ./..." on all modules in # the repo, to ensure that go.mod and go.sum are in the canonical # form that Travis will verify (see check_mod_tidy.sh). set -euo pipefail sed -e '/^#/d' -e '/^$/d' allmodules | awk '{print $1}' | while read -r path || [[ -n "$path" ]]; do echo "cleaning up $path" ( cd "$path" && go mod tidy && go list -deps ./... &> /dev/null || echo " FAILED!") done go-cloud-0.20.0/internal/testing/listdeps.sh000077500000000000000000000025451367004507500207760ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set -euo pipefail # To run this script manually to update alldeps: # # $ internal/testing/listdeps.sh > internal/testing/alldeps # # Important note: there are changes in module tooling behavior between go 1.11 # and go 1.12; please make sure to use the same version of Go as used by Travis # (see .travis.yml) when updating the alldeps file. tmpfile=$(mktemp) function cleanup() { rm -rf "$tmpfile" } trap cleanup EXIT sed -e '/^#/d' -e '/^$/d' allmodules | awk '{print $1}' | while read -r path || [[ -n "$path" ]]; do ( cd "$path" && go list -mod=readonly -deps -f '{{with .Module}}{{.Path}}{{end}}' ./... >> "$tmpfile") done # Sort using the native byte values to keep results from different environment consistent. LC_ALL=C sort "$tmpfile" | uniq go-cloud-0.20.0/internal/testing/octest/000077500000000000000000000000001367004507500201035ustar00rootroot00000000000000go-cloud-0.20.0/internal/testing/octest/diff.go000066400000000000000000000065561367004507500213560ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package octest import ( "fmt" "strings" "go.opencensus.io/stats/view" "go.opencensus.io/trace" "gocloud.dev/gcerrors" ) // Call holds the expected contents of a measured call. // It is used for both metric and trace comparison. type Call struct { Method string Code gcerrors.ErrorCode } func formatSpanData(s *trace.SpanData) string { if s == nil { return "missing" } return fmt.Sprintf("", s.Name, s.Code) } func formatCall(c *Call) string { if c == nil { return "nothing" } return fmt.Sprintf("", c.Method, c.Code) } // Diff compares the list of spans and metric counts obtained from OpenCensus // instrumentation (using the TestExporter in this package, or similar) with an // expected list of calls. Only the name and code are compared. Order matters for // traces (though not for metrics). func Diff(gotSpans []*trace.SpanData, gotRows []*view.Row, namePrefix, provider string, want []Call) string { ds := diffSpans(gotSpans, namePrefix, want) dc := diffCounts(gotRows, namePrefix, provider, want) if len(ds) > 0 { ds = "trace: " + ds + "\n" } if len(dc) > 0 { dc = "metrics: " + dc } return ds + dc } func diffSpans(got []*trace.SpanData, prefix string, want []Call) string { var diffs []string add := func(i int, g *trace.SpanData, w *Call) { diffs = append(diffs, fmt.Sprintf("#%d: got %s, want %s", i, formatSpanData(g), formatCall(w))) } for i := 0; i < len(got) || i < len(want); i++ { switch { case i >= len(got): add(i, nil, &want[i]) case i >= len(want): add(i, got[i], nil) case got[i].Name != prefix+"."+want[i].Method || got[i].Code != int32(want[i].Code): w := want[i] w.Method = prefix + "." + w.Method add(i, got[i], &w) } } return strings.Join(diffs, "\n") } func diffCounts(got []*view.Row, prefix, provider string, wantCalls []Call) string { // Because OpenCensus keeps global state, running tests with -count N can result // in aggregate counts greater than 1. Also, other tests can contribute measurements. // So all we can do is make sure that each call appears with count at least 1. var diffs []string gotTags := map[string]bool{} // map of canonicalized row tags for _, row := range got { if _, ok := row.Data.(*view.CountData); !ok { diffs = append(diffs, fmt.Sprintf("row.Data is %T, want CountData", row.Data)) continue } var tags []string for _, t := range row.Tags { tags = append(tags, t.Key.Name()+":"+t.Value) } gotTags[strings.Join(tags, ",")] = true } for _, wc := range wantCalls { mapKey := fmt.Sprintf("gocdk_method:%s.%s,gocdk_provider:%s,gocdk_status:%s", prefix, wc.Method, provider, fmt.Sprint(wc.Code)) if !gotTags[mapKey] { diffs = append(diffs, fmt.Sprintf("missing %q", mapKey)) } } return strings.Join(diffs, "\n") } go-cloud-0.20.0/internal/testing/octest/exporter.go000066400000000000000000000061761367004507500223140ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package octest supports testing of OpenCensus integrations. package octest // This code was copied from cloud.google.com/go/internal/testutil/trace.go import ( "log" "sync" "time" "go.opencensus.io/stats/view" "go.opencensus.io/trace" ) // TestExporter is an exporter of OpenCensus traces and metrics, for testing. // It should be created with NewTestExporter. type TestExporter struct { mu sync.Mutex spans []*trace.SpanData Stats chan *view.Data } // NewTestExporter creates a TestExporter and registers it with OpenCensus. func NewTestExporter(views []*view.View) *TestExporter { te := &TestExporter{Stats: make(chan *view.Data)} // Register for metrics. view.RegisterExporter(te) // The reporting period will affect how long it takes to get stats (view.Data). // We want it short so tests don't take too long, but long enough so that all // the actions in a test complete. // If the period is too short, then some actions may not be finished when the first // call to ExportView happens. diffCounts checks for matching counts, so it will // fail in that case. // Tests that use the exporter (search for TestOpenCensus) are designed to avoid // network traffic or computation, so they finish quickly. But we must account for // the race detector, which slows everything down. view.SetReportingPeriod(100 * time.Millisecond) if err := view.Register(views...); err != nil { log.Fatal(err) } // Register for traces. trace.RegisterExporter(te) trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) return te } // ExportSpan "exports" a span by remembering it. func (te *TestExporter) ExportSpan(s *trace.SpanData) { te.mu.Lock() defer te.mu.Unlock() te.spans = append(te.spans, s) } // ExportView exports a view by writing it to the Stats channel. func (te *TestExporter) ExportView(vd *view.Data) { if len(vd.Rows) > 0 { select { case te.Stats <- vd: default: } } } func (te *TestExporter) Spans() []*trace.SpanData { te.mu.Lock() defer te.mu.Unlock() return te.spans } // Counts returns the first exported data that includes aggregated counts. func (te *TestExporter) Counts() []*view.Row { // Wait for counts. Expect all counts to arrive in the same view.Data. for { data := <-te.Stats if _, ok := data.Rows[0].Data.(*view.CountData); !ok { continue } return data.Rows } } // Unregister unregisters the exporter from OpenCensus. func (te *TestExporter) Unregister() { view.UnregisterExporter(te) trace.UnregisterExporter(te) view.SetReportingPeriod(0) // reset to default value } go-cloud-0.20.0/internal/testing/prerelease.sh000077500000000000000000000123631367004507500212750ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script runs expensive checks that we don't normally run on Travis, but # that should run periodically, before each release. # For example, tests that can't use record/replay, so must be performed live # against the backing service. # # It should be run from the root directory. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail # Change to -euxo if debugging. set -euo pipefail function usage() { echo echo "Usage: prerelease.sh " 1>&2 echo " init: creates any needed resources; rerun until it succeeds" echo " run: runs all needed checks" echo " cleanup: cleans up resources created in init" exit 64 } if [[ $# -ne 1 ]] ; then echo "Need at least one argument." usage fi op="$1" case "$op" in init|run|cleanup);; *) echo "Unknown operation '$op'" && usage;; esac # TODO: It would be nice to ensure that none of the tests are skipped. For now, # we assume that if the "init" steps succeeded, the necessary tests will # run. rootdir="$(pwd)" FAILURES="" TESTDIR="mysql/azuremysql" echo "***** $TESTDIR *****" pushd "$TESTDIR" &> /dev/null case "$op" in init) terraform init && terraform apply -var location="centralus" -var resourcegroup="GoCloud" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; run) go test -mod=readonly -race -json | go run "$rootdir"/internal/testing/test-summary/test-summary.go -progress || FAILURES="$FAILURES $TESTDIR" ;; cleanup) terraform destroy -var location="centralus" -var resourcegroup="GoCloud" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; esac popd &> /dev/null TESTDIR="mysql/gcpmysql" echo echo "***** $TESTDIR *****" pushd "$TESTDIR" &> /dev/null case "$op" in init) terraform init && terraform apply -var project="go-cloud-test-216917" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; run) go test -mod=readonly -race -json | go run "$rootdir"/internal/testing/test-summary/test-summary.go -progress || FAILURES="$FAILURES $TESTDIR" ;; cleanup) terraform destroy -var project="go-cloud-test-216917" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; esac popd &> /dev/null TESTDIR="mysql/awsmysql" echo echo "***** $TESTDIR *****" pushd "$TESTDIR" &> /dev/null case "$op" in init) terraform init && terraform apply -var region="us-west-1" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; run) go test -mod=readonly -race -json | go run "$rootdir"/internal/testing/test-summary/test-summary.go -progress || FAILURES="$FAILURES $TESTDIR" ;; cleanup) terraform destroy -var region="us-west-1" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; esac popd &> /dev/null TESTDIR="postgres/gcppostgres" echo echo "***** $TESTDIR *****" pushd "$TESTDIR" &> /dev/null case "$op" in init) terraform init && terraform apply -var project="go-cloud-test-216917" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; run) go test -mod=readonly -race -json | go run "$rootdir"/internal/testing/test-summary/test-summary.go -progress || FAILURES="$FAILURES $TESTDIR" ;; cleanup) terraform destroy -var project="go-cloud-test-216917" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; esac popd &> /dev/null TESTDIR="postgres/awspostgres" echo echo "***** $TESTDIR *****" pushd "$TESTDIR" &> /dev/null case "$op" in init) terraform init && terraform apply -var region="us-west-1" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; run) go test -mod=readonly -race -json | go run "$rootdir"/internal/testing/test-summary/test-summary.go -progress || FAILURES="$FAILURES $TESTDIR" ;; cleanup) terraform destroy -var region="us-west-1" -auto-approve || FAILURES="$FAILURES $TESTDIR" ;; esac popd &> /dev/null # This iterates over all packages that have a "testdata" directory, using that # as a signal for record/replay tests, and runs the tests with a "-record" flag. # This verifies that we can generate a fresh recording against the live service. while read -r TESTDIR; do # Skip some packages that have a testdata/ dir but aren't record/replay. if [ "$TESTDIR" == "./samples/order" ]; then continue; fi echo echo "***** $TESTDIR *****" pushd "$TESTDIR" &> /dev/null case "$op" in init) ;; run) go test -mod=readonly -race -record -json | go run "$rootdir"/internal/testing/test-summary/test-summary.go -progress || FAILURES="$FAILURES $TESTDIR" ;; cleanup) ;; esac popd &> /dev/null done < <( find . -name testdata -printf "%h\\n" ) echo echo if [ ! -z "$FAILURES" ]; then echo "FAILED!" echo "Investigate and re-run -record tests for the following packages: $FAILURES" exit 1 fi echo "SUCCESS!" go-cloud-0.20.0/internal/testing/runchecks.sh000077500000000000000000000173471367004507500211420ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script runs all checks for Go CDK on Travis, including go test suites, # compatibility checks, consistency checks, Wire, etc. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail # Change to -euxo if debugging. set -euo pipefail if [[ $# -gt 0 ]]; then echo "usage: runchecks.sh" 1>&2 exit 64 fi # The following logic lets us skip the (lengthy) installation process and tests # in some cases where the PR carries trivial changes that don't affect the code # (such as documentation-only). if [[ ! -z "${TRAVIS_BRANCH:-}" ]] && [[ ! -z "${TRAVIS_PULL_REQUEST_SHA:-}" ]]; then tmpfile=$(mktemp) function cleanup() { rm -rf "$tmpfile" } trap cleanup EXIT mergebase="$(git merge-base -- "$TRAVIS_BRANCH" "$TRAVIS_PULL_REQUEST_SHA")" if [[ -z $mergebase ]]; then echo "merge-base empty. Please ensure that the PR is mergeable." exit 1 fi git diff --name-only "$mergebase" "$TRAVIS_PULL_REQUEST_SHA" -- > "$tmpfile" # Find out if the diff has any files that are neither: # # * in internal/website, nor # * end with .md # # If there are no such files, grep returns 1 and we don't have to run the # tests. echo "The following files changed:" cat "$tmpfile" if grep -v "^internal/website" "$tmpfile" | grep -v ".md$"; then echo "--> Found some non-trivial changes, running tests" else echo "--> Diff doesn't affect tests; not running them" exit 0 fi fi # start_local_deps.sh requires that Docker is installed, via Travis services, # which are only supported on Linux. # Tests that depend on them should check the Travis environment before running. # Don't do this when running locally, as it's slow; user should do it. if [[ "${TRAVIS_OS_NAME:-}" == "linux" ]]; then echo echo "Starting local dependencies..." ./internal/testing/start_local_deps.sh echo echo "Installing Wire..." go install -mod=readonly github.com/google/wire/cmd/wire fi result=0 rootdir="$(pwd)" # Update the regexp below when upgrading to a # new Go version. Some checks below we only run # for the latest Go version. latest_go_version=0 if [[ $(go version) == *go1\.14* ]]; then latest_go_version=1 fi # Build the test-summary app, which is used inside the loop to summarize results # from Go tests. (cd internal/testing/test-summary && go build) while read -r path || [[ -n "$path" ]]; do echo echo "******************************" echo "* Running Go tests for module: $path" echo "******************************" echo # TODO(rvangent): Special case modules to skip for Windows. Perhaps # this should be data-driven by allmodules? # (https://github.com/google/go-cloud/issues/2111). if [[ "${TRAVIS_OS_NAME:-}" == "windows" ]] && ([[ "$path" == "internal/contributebot" ]] || [[ "$path" == "internal/website" ]]); then echo " Skipping on Windows" continue fi gotestflags=("-json" "-race") testsummaryflags=("-progress") # Only do coverage for the Linux build on Travis because it is slow, and # codecov will only save the last one anyway. if [[ "${TRAVIS_OS_NAME:-}" == "linux" ]]; then gotestflags+=("-coverpkg=./..." "-coverprofile=$rootdir/modcoverage.out") fi # Previous versions of the "go" command may have # different opinions about what go.mod should look # like. if [[ $latest_go_version -eq 1 ]]; then gotestflags+=("-mod=readonly") fi # Run the tests. (cd "$path" && go test "${gotestflags[@]}" ./...) | ./internal/testing/test-summary/test-summary "${testsummaryflags[@]}" || result=1 if [ -f modcoverage.out ] && [ $result -eq 0 ]; then cat modcoverage.out >> coverage.out rm modcoverage.out fi done < <( sed -e '/^#/d' -e '/^$/d' allmodules | awk '{print $1}' ) # The above filters out comments and empty lines from allmodules and only takes # the first (whitespace-separated) field from each line. # Upload cumulative coverage data if we generated it. if [ -f coverage.out ] && [ $result -eq 0 ]; then # Filter out test packages. grep -v test coverage.out > coverage2.out mv coverage2.out coverage.out bash <(curl -s https://codecov.io/bash) rm coverage.out fi # The rest of these checks are not OS-specific, so we only run them for the # Linux build on Travis, or when running locally. if [[ "${TRAVIS_OS_NAME:-linux}" != "linux" ]]; then exit $result fi if [[ ${latest_go_version} -eq 1 ]]; then echo echo "************************" echo "* Checking go mod tidy" echo "************************" echo while read -r path || [[ -n "$path" ]]; do echo "Module: $path" ( cd "$path" && "$rootdir"/internal/testing/check_mod_tidy.sh && echo " OK" ) || { echo "FAIL: please run ./internal/testing/gomodcleanup.sh" && result=1; } done < <( sed -e '/^#/d' -e '/^$/d' allmodules | awk '{print $1}' ) # The above filters out comments and empty lines from allmodules and only takes # the first (whitespace-separated) field from each line. fi echo echo "**********************" echo "* Checking wire diff" echo "**********************" echo while read -r path || [[ -n "$path" ]]; do echo "Module: $path" ( cd "$path" && wire diff ./... && echo " OK" ) || { echo "FAIL: wire diff found diffs!" && result=1; } done < <( sed -e '/^#/d' -e '/^$/d' allmodules | awk '{print $1}' ) # The above filters out comments and empty lines from allmodules and only takes # the first (whitespace-separated) field from each line. echo echo "******************************" echo "* Doing non-module checks" echo "******************************" echo echo "Ensuring .go files are formatted with gofmt -s..." DIFF="$(gofmt -s -d .)" if [ -n "$DIFF" ]; then echo "FAIL: please run 'gofmt -s -w .' and commit the result" echo "$DIFF"; exit 1; else echo " OK" fi; if [[ ${latest_go_version} -eq 1 ]]; then echo echo "Ensuring that there are no dependencies not listed in ./internal/testing/alldeps..." ( ./internal/testing/listdeps.sh | diff -u ./internal/testing/alldeps - && echo " OK" ) || { echo "FAIL: dependencies changed; run: internal/testing/listdeps.sh > internal/testing/alldeps" && result=1 # Module behavior may differ across versions. echo "using the most recent go version." } fi echo echo "Ensuring that any new packages have the corresponding entries in Hugo..." missing_packages="$(internal/website/listnewpkgs.sh)" if ! [[ -z "$missing_packages" ]]; then echo "FAIL: missing package meta tags for:" 1>&2 echo "$missing_packages" 1>&2 result=1 else echo " OK" fi echo echo "Ensuring that all examples used in Hugo match what's in source..." (internal/website/gatherexamples/run.sh | diff -u internal/website/data/examples.json - > /dev/null && echo " OK") || { echo "FAIL: examples changed; run: internal/website/gatherexamples/run.sh > internal/website/data/examples.json" result=1 } # For pull requests, check if there are undeclared incompatible API changes. # Skip this if we're already going to fail since it is expensive. if [[ ${result} -eq 0 ]] && [[ ! -z "${TRAVIS_BRANCH:-}" ]] && [[ ! -z "${TRAVIS_PULL_REQUEST_SHA:-}" ]]; then echo ./internal/testing/check_api_change.sh || result=1; fi echo if [[ ${result} -eq 0 ]]; then echo "SUCCESS!" else echo "FAILED; see above for more info." fi exit $result go-cloud-0.20.0/internal/testing/setup/000077500000000000000000000000001367004507500177425ustar00rootroot00000000000000go-cloud-0.20.0/internal/testing/setup/setup.go000066400000000000000000000273471367004507500214460ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package setup // import "gocloud.dev/internal/testing/setup" import ( "context" "flag" "io/ioutil" "net/http" "os" "path/filepath" "testing" "time" "github.com/aws/aws-sdk-go/aws" awscreds "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "gocloud.dev/gcp" "gocloud.dev/internal/useragent" "github.com/google/go-replayers/grpcreplay" "github.com/google/go-replayers/httpreplay" hrgoog "github.com/google/go-replayers/httpreplay/google" "golang.org/x/oauth2/google" "google.golang.org/api/option" "google.golang.org/grpc" grpccreds "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/oauth" "github.com/Azure/azure-pipeline-go/pipeline" "github.com/Azure/azure-storage-blob-go/azblob" ) // Record is true iff the tests are being run in "record" mode. var Record = flag.Bool("record", false, "whether to run tests against cloud resources and record the interactions") // FakeGCPCredentials gets fake GCP credentials. func FakeGCPCredentials(ctx context.Context) (*google.Credentials, error) { return google.CredentialsFromJSON(ctx, []byte(`{"type": "service_account", "project_id": "my-project-id"}`)) } func awsSession(region string, client *http.Client) (*session.Session, error) { // Provide fake creds if running in replay mode. var creds *awscreds.Credentials if !*Record { creds = awscreds.NewStaticCredentials("FAKE_ID", "FAKE_SECRET", "FAKE_TOKEN") } return session.NewSession(&aws.Config{ HTTPClient: client, Region: aws.String(region), Credentials: creds, MaxRetries: aws.Int(0), }) } // NewRecordReplayClient creates a new http.Client for tests. This client's // activity is being either recorded to files (when *Record is set) or replayed // from files. rf is a modifier function that will be invoked with the address // of the httpreplay.Recorder object used to obtain the client; this function // can mutate the recorder to add service-specific header filters, for example. // An initState is returned for tests that need a state to have deterministic // results, for example, a seed to generate random sequences. func NewRecordReplayClient(ctx context.Context, t *testing.T, rf func(r *httpreplay.Recorder)) (c *http.Client, cleanup func(), initState int64) { httpreplay.DebugHeaders() path := filepath.Join("testdata", t.Name()+".replay") if *Record { t.Logf("Recording into golden file %s", path) if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil { t.Fatal(err) } state := time.Now() b, _ := state.MarshalBinary() rec, err := httpreplay.NewRecorder(path, b) if err != nil { t.Fatal(err) } rf(rec) cleanup = func() { if err := rec.Close(); err != nil { t.Fatal(err) } } return rec.Client(), cleanup, state.UnixNano() } t.Logf("Replaying from golden file %s", path) rep, err := httpreplay.NewReplayer(path) if err != nil { t.Fatal(err) } recState := new(time.Time) if err := recState.UnmarshalBinary(rep.Initial()); err != nil { t.Fatal(err) } return rep.Client(), func() { rep.Close() }, recState.UnixNano() } // NewAWSSession creates a new session for testing against AWS. // If the test is in --record mode, the test will call out to AWS, and the // results are recorded in a replay file. // Otherwise, the session reads a replay file and runs the test as a replay, // which never makes an outgoing HTTP call and uses fake credentials. // An initState is returned for tests that need a state to have deterministic // results, for example, a seed to generate random sequences. func NewAWSSession(ctx context.Context, t *testing.T, region string) (sess *session.Session, rt http.RoundTripper, cleanup func(), initState int64) { client, cleanup, state := NewRecordReplayClient(ctx, t, func(r *httpreplay.Recorder) { r.RemoveQueryParams("X-Amz-Credential", "X-Amz-Signature", "X-Amz-Security-Token") r.RemoveRequestHeaders("Authorization", "Duration", "X-Amz-Security-Token") r.ClearHeaders("X-Amz-Date") r.ClearQueryParams("X-Amz-Date") r.ClearHeaders("User-Agent") // AWS includes the Go version }) sess, err := awsSession(region, client) if err != nil { t.Fatal(err) } return sess, client.Transport, cleanup, state } // NewGCPClient creates a new HTTPClient for testing against GCP. // If the test is in --record mode, the client will call out to GCP, and the // results are recorded in a replay file. // Otherwise, the session reads a replay file and runs the test as a replay, // which never makes an outgoing HTTP call and uses fake credentials. func NewGCPClient(ctx context.Context, t *testing.T) (client *gcp.HTTPClient, rt http.RoundTripper, done func()) { c, cleanup, _ := NewRecordReplayClient(ctx, t, func(r *httpreplay.Recorder) { r.ClearQueryParams("Expires") r.ClearQueryParams("Signature") r.ClearHeaders("Expires") r.ClearHeaders("Signature") }) transport := c.Transport if *Record { creds, err := gcp.DefaultCredentials(ctx) if err != nil { t.Fatalf("failed to get default credentials: %v", err) } c, err = hrgoog.RecordClient(ctx, c, option.WithTokenSource(gcp.CredentialsTokenSource(creds))) if err != nil { t.Fatal(err) } } return &gcp.HTTPClient{Client: *c}, transport, cleanup } // NewGCPgRPCConn creates a new connection for testing against GCP via gRPC. // If the test is in --record mode, the client will call out to GCP, and the // results are recorded in a replay file. // Otherwise, the session reads a replay file and runs the test as a replay, // which never makes an outgoing RPC and uses fake credentials. func NewGCPgRPCConn(ctx context.Context, t *testing.T, endPoint, api string) (*grpc.ClientConn, func()) { filename := t.Name() + ".replay" if *Record { opts, done := newGCPRecordDialOptions(t, filename) opts = append(opts, useragent.GRPCDialOption(api)) // Add credentials for real RPCs. creds, err := gcp.DefaultCredentials(ctx) if err != nil { t.Fatal(err) } opts = append(opts, grpc.WithTransportCredentials(grpccreds.NewClientTLSFromCert(nil, ""))) opts = append(opts, grpc.WithPerRPCCredentials(oauth.TokenSource{TokenSource: gcp.CredentialsTokenSource(creds)})) conn, err := grpc.DialContext(ctx, endPoint, opts...) if err != nil { t.Fatal(err) } return conn, done } rep, done := newGCPReplayer(t, filename) conn, err := rep.Connection() if err != nil { t.Fatal(err) } return conn, done } // contentTypeInjectPolicy and contentTypeInjector are somewhat of a hack to // overcome an impedance mismatch between the Azure pipeline library and // httpreplay - the tool we use to record/replay HTTP traffic for tests. // azure-pipeline-go does not set the Content-Type header in its requests, // setting X-Ms-Blob-Content-Type instead; however, httpreplay expects // Content-Type to be non-empty in some cases. This injector makes sure that // the content type is copied into the right header when that is originally // empty. It's only used for testing. type contentTypeInjectPolicy struct { node pipeline.Policy } func (p *contentTypeInjectPolicy) Do(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { if len(request.Header.Get("Content-Type")) == 0 { cType := request.Header.Get("X-Ms-Blob-Content-Type") request.Header.Set("Content-Type", cType) } response, err := p.node.Do(ctx, request) return response, err } type contentTypeInjector struct { } func (f contentTypeInjector) New(node pipeline.Policy, opts *pipeline.PolicyOptions) pipeline.Policy { return &contentTypeInjectPolicy{node: node} } // NewAzureTestPipeline creates a new connection for testing against Azure Blob. func NewAzureTestPipeline(ctx context.Context, t *testing.T, api string, credential azblob.Credential, accountName string) (pipeline.Pipeline, func(), *http.Client) { client, done, _ := NewRecordReplayClient(ctx, t, func(r *httpreplay.Recorder) { r.RemoveQueryParams("se", "sig") r.RemoveQueryParams("X-Ms-Date") r.ClearHeaders("X-Ms-Date") r.ClearHeaders("User-Agent") // includes the full Go version }) f := []pipeline.Factory{ // Sets User-Agent for recorder. azblob.NewTelemetryPolicyFactory(azblob.TelemetryOptions{ Value: useragent.AzureUserAgentPrefix(api), }), contentTypeInjector{}, credential, pipeline.MethodFactoryMarker(), } // Create a pipeline that uses client to make requests. p := pipeline.NewPipeline(f, pipeline.Options{ HTTPSender: pipeline.FactoryFunc(func(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.PolicyFunc { return func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { r, err := client.Do(request.WithContext(ctx)) if err != nil { err = pipeline.NewError(err, "HTTP request failed") } return pipeline.NewHTTPResponse(r), err } }), }) return p, done, client } // NewAzureKeyVaultTestClient creates a *http.Client for Azure KeyVault test // recordings. func NewAzureKeyVaultTestClient(ctx context.Context, t *testing.T) (*http.Client, func()) { client, cleanup, _ := NewRecordReplayClient(ctx, t, func(r *httpreplay.Recorder) { r.RemoveQueryParams("se", "sig") r.RemoveQueryParams("X-Ms-Date") r.ClearHeaders("X-Ms-Date") r.ClearHeaders("User-Agent") // includes the full Go version }) return client, cleanup } // FakeGCPDefaultCredentials sets up the environment with fake GCP credentials. // It returns a cleanup function. func FakeGCPDefaultCredentials(t *testing.T) func() { const envVar = "GOOGLE_APPLICATION_CREDENTIALS" jsonCred := []byte(`{"client_id": "foo.apps.googleusercontent.com", "client_secret": "bar", "refresh_token": "baz", "type": "authorized_user"}`) f, err := ioutil.TempFile("", "fake-gcp-creds") if err != nil { t.Fatal(err) } if err := ioutil.WriteFile(f.Name(), jsonCred, 0666); err != nil { t.Fatal(err) } oldEnvVal := os.Getenv(envVar) os.Setenv(envVar, f.Name()) return func() { os.Remove(f.Name()) os.Setenv(envVar, oldEnvVal) } } // newGCPRecordDialOptions return grpc.DialOptions that are to be appended to a // GRPC dial request. These options allow a recorder to intercept RPCs and save // RPCs to the file at filename, or read the RPCs from the file and return them. func newGCPRecordDialOptions(t *testing.T, filename string) (opts []grpc.DialOption, done func()) { path := filepath.Join("testdata", filename) t.Logf("Recording into golden file %s", path) r, err := grpcreplay.NewRecorder(path, nil) if err != nil { t.Fatal(err) } opts = r.DialOptions() done = func() { if err := r.Close(); err != nil { t.Errorf("unable to close recorder: %v", err) } } return opts, done } // newGCPReplayer returns a Replayer for GCP gRPC connections, as well as a function // to call when done with the Replayer. func newGCPReplayer(t *testing.T, filename string) (*grpcreplay.Replayer, func()) { path := filepath.Join("testdata", filename) t.Logf("Replaying from golden file %s", path) r, err := grpcreplay.NewReplayer(path, nil) if err != nil { t.Fatal(err) } done := func() { if err := r.Close(); err != nil { t.Errorf("unable to close recorder: %v", err) } } return r, done } // HasDockerTestEnvironment returns true when either: // 1) Not on Travis. // 2) On Travis Linux environment, where Docker is available. func HasDockerTestEnvironment() bool { s := os.Getenv("TRAVIS_OS_NAME") return s == "" || s == "linux" } go-cloud-0.20.0/internal/testing/start_local_deps.sh000077500000000000000000000020741367004507500224660ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Starts all local instances needed for Go CDK tests. # You must have Docker installed. # Run this script from the top level of the tree, e.g.: # ./internal/testing/start_local_deps.sh # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail set -euo pipefail ./pubsub/kafkapubsub/localkafka.sh ./pubsub/rabbitpubsub/localrabbit.sh ./runtimevar/etcdvar/localetcd.sh ./docstore/mongodocstore/localmongo.sh ./secrets/hashivault/localvault.sh go-cloud-0.20.0/internal/testing/terraform/000077500000000000000000000000001367004507500206035ustar00rootroot00000000000000go-cloud-0.20.0/internal/testing/terraform/terraform.go000066400000000000000000000027451367004507500231430ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package terraform provides a function to read Terraform output. package terraform // import "gocloud.dev/internal/testing/terraform" import ( "encoding/json" "fmt" "os/exec" ) // ReadOutput runs `terraform output` on the given directory and returns // the parsed result. func ReadOutput(dir string) (map[string]Output, error) { c := exec.Command("terraform", "output", "-json") c.Dir = dir data, err := c.Output() if err != nil { return nil, fmt.Errorf("read terraform output: %v", err) } var parsed map[string]Output if err := json.Unmarshal(data, &parsed); err != nil { return nil, fmt.Errorf("read terraform output: %v", err) } return parsed, nil } // Output describes a single output value. type Output struct { Type string `json:"type"` // one of "string", "list", or "map" Sensitive bool `json:"sensitive"` Value interface{} `json:"value"` } go-cloud-0.20.0/internal/testing/test-summary/000077500000000000000000000000001367004507500212545ustar00rootroot00000000000000go-cloud-0.20.0/internal/testing/test-summary/test-summary.go000066400000000000000000000076641367004507500242720ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Summarizes the output of go test. // Run like so: // go test -json ./... | test-summary package main import ( "bufio" "encoding/json" "flag" "fmt" "io" "log" "os" "path/filepath" "strings" "time" ) var ( progress = flag.Bool("progress", false, "display test progress") verbose = flag.Bool("verbose", false, "display all test output") ) // TestEvent is copied from "go doc test2json". type TestEvent struct { Time time.Time // encodes as an RFC3339-format string Action string Package string Test string Elapsed float64 // seconds Output string } func main() { flag.Parse() s, fails, err := run(os.Stdin) if err != nil { log.Fatal(err) } fmt.Println(s) if fails { os.Exit(1) } } func run(r io.Reader) (msg string, failures bool, err error) { counts := map[string]int{} scanner := bufio.NewScanner(bufio.NewReader(r)) // Collects tests that failed. var failedTests []string // Stores output produced by each test. testOutputs := map[string][]string{} start := time.Now() for scanner.Scan() { // When the build fails, go test -json doesn't emit a valid JSON value, only // a line of output starting with FAIL. Report a more reasonable error in // this case. if strings.HasPrefix(scanner.Text(), "FAIL") { return "", true, fmt.Errorf("No test output: %q", scanner.Text()) } var event TestEvent if err := json.Unmarshal(scanner.Bytes(), &event); err != nil { return "", false, fmt.Errorf("%q: %v", scanner.Text(), err) } testpath := filepath.Join(event.Package, event.Test) // The Test field, if non-empty, specifies the test, example, or benchmark // function that caused the event. Events for the overall package test do // not set Test. if event.Action == "fail" && event.Test != "" { failedTests = append(failedTests, testpath) } if event.Action == "output" { if *verbose { fmt.Print(event.Output) } testOutputs[testpath] = append(testOutputs[testpath], event.Output) } // We don't want to count package passes/fails because these don't // represent specific tests being run. However, skips of an entire package // are not duplicated with individual test skips. if event.Test != "" || event.Action == "skip" { counts[event.Action]++ } // For failed tests, print all the output we collected for them before // the "fail" event. if event.Action == "fail" { fmt.Println(strings.Join(testOutputs[testpath], "")) } if *progress { // Only print progress for fail events for packages and tests, or // pass events for packages only (not individual tests, since this is // too noisy). if event.Action == "fail" || (event.Test == "" && event.Action == "pass") { fmt.Printf("%s %s (%.2fs)\n", event.Action, testpath, event.Elapsed) } } } if err := scanner.Err(); err != nil { return "", false, err } p := counts["pass"] f := counts["fail"] s := counts["skip"] summary := fmt.Sprintf("ran %d; passed %d; failed %d; skipped %d (in %.1f sec)", p+f+s, p, f, s, time.Since(start).Seconds()) if len(failedTests) > 0 { var sb strings.Builder sb.WriteString("Failures (reporting up to 10):\n") for i := 0; i < len(failedTests) && i < 10; i++ { fmt.Fprintf(&sb, " %s\n", failedTests[i]) } if len(failedTests) > 10 { sb.WriteString(" ...\n") } sb.WriteString(summary) summary = sb.String() } return summary, f > 0, nil } go-cloud-0.20.0/internal/testing/test-summary/test-summary_test.go000066400000000000000000000075031367004507500253210ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "fmt" "path/filepath" "strings" "testing" ) func Test(t *testing.T) { got, fails, err := run(strings.NewReader(testOutput)) if err != nil { t.Fatal(err) } path := filepath.Join("gocloud.dev", "internal", "docstore", "internal", "fields", "TestUnexportedAnonymousNonStruct") want := fmt.Sprintf(`Failures (reporting up to 10): %s ran 6; passed 3; failed 1; skipped 2 (in `, path) if !strings.HasPrefix(got, want) { t.Errorf("\ngot %s\nwant %s", got, want) } if !fails { t.Error("wanted fails true, got false") } } const testOutput = `{"Time":"2019-05-09T16:39:56.83133991-04:00","Action":"run","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestFieldsNoTags"} {"Time":"2019-05-09T16:39:56.831489481-04:00","Action":"output","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestFieldsNoTags","Output":"=== RUN TestFieldsNoTags\n"} {"Time":"2019-05-09T16:39:56.831517464-04:00","Action":"output","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestFieldsNoTags","Output":"--- PASS: TestFieldsNoTags (0.00s)\n"} {"Time":"2019-05-09T16:39:56.831535431-04:00","Action":"pass","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestFieldsNoTags","Elapsed":0} {"Time":"2019-05-09T16:39:56.831551807-04:00","Action":"run","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestAgainstJSONEncodingNoTags"} {"Time":"2019-05-09T16:39:56.831561396-04:00","Action":"output","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestAgainstJSONEncodingNoTags","Output":"=== RUN TestAgainstJSONEncodingNoTags\n"} {"Time":"2019-05-09T16:39:56.831573783-04:00","Action":"output","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestAgainstJSONEncodingNoTags","Output":"--- PASS: TestAgainstJSONEncodingNoTags (0.00s)\n"} {"Time":"2019-05-09T16:39:56.831584528-04:00","Action":"pass","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestAgainstJSONEncodingNoTags","Elapsed":0} {"Time":"2019-05-09T16:39:56.844376487-04:00","Action":"output","Package":"gocloud.dev/internal/docstore/drivertest","Output":"? \tgocloud.dev/internal/docstore/drivertest\t[no test files]\n"} {"Time":"2019-05-09T16:39:56.844397339-04:00","Action":"skip","Package":"gocloud.dev/internal/docstore/drivertest","Elapsed":0} {"Time":"2019-05-09T16:39:56.831666898-04:00","Action":"output","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestFieldsWithTags","Output":"--- PASS: TestFieldsWithTags (0.00s)\n"} {"Time":"2019-05-09T16:39:56.831677054-04:00","Action":"pass","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestFieldsWithTags","Elapsed":0} {"Time":"2019-05-09T16:39:56.831729957-04:00","Action":"output","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestUnexportedAnonymousNonStruct","Output":"=== RUN TestUnexportedAnonymousNonStruct\n"} {"Time":"2019-05-09T16:39:56.831759258-04:00","Action":"fail","Package":"gocloud.dev/internal/docstore/internal/fields","Test":"TestUnexportedAnonymousNonStruct","Elapsed":0} {"Time":"2019-05-09T16:39:56.873905964-04:00","Action":"skip","Package":"gocloud.dev/internal/docstore/memdocstore","Test":"TestConformance/TypeDrivenCodec","Elapsed":0} ` go-cloud-0.20.0/internal/testing/update_deps.sh000077500000000000000000000021121367004507500214320ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script should be run from the root directory. # It runs "go get -u && go mod tidy" on all modules in # the repo, to update dependencies. Run runchecks.sh afterwards. set -euo pipefail sed -e '/^#/d' -e '/^$/d' allmodules | awk '{print $1}' | while read -r path || [[ -n "$path" ]]; do echo "updating $path" ( cd "$path" && go get -u &> /dev/null && go mod tidy &> /dev/null || echo " FAILED! (some modules without code, like samples, are expected to fail)") done go-cloud-0.20.0/internal/trace/000077500000000000000000000000001367004507500162235ustar00rootroot00000000000000go-cloud-0.20.0/internal/trace/trace.go000066400000000000000000000024731367004507500176560ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package trace provides support for OpenCensus tracing. package trace import ( "context" "go.opencensus.io/trace" "gocloud.dev/gcerrors" ) // StartSpan adds a span to the trace with the given name. func StartSpan(ctx context.Context, name string) context.Context { ctx, _ = trace.StartSpan(ctx, name) return ctx } // EndSpan ends a span with the given error. func EndSpan(ctx context.Context, err error) { span := trace.FromContext(ctx) if err != nil { span.SetStatus(toStatus(err)) } span.End() } // toStatus interrogates an error and converts it to an appropriate // OpenCensus status. func toStatus(err error) trace.Status { return trace.Status{Code: int32(gcerrors.Code(err)), Message: err.Error()} } go-cloud-0.20.0/internal/trace/trace_test.go000066400000000000000000000024341367004507500207120ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package trace import ( "errors" "testing" "github.com/google/go-cmp/cmp" octrace "go.opencensus.io/trace" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" ) func TestToStatus(t *testing.T) { for _, testcase := range []struct { input error want octrace.Status }{ { errors.New("some random error"), octrace.Status{Code: int32(gcerrors.Unknown), Message: "some random error"}, }, { gcerr.New(gcerrors.NotFound, nil, 1, "not found"), octrace.Status{Code: int32(gcerrors.NotFound), Message: "not found (code=NotFound)"}, }, } { got := toStatus(testcase.input) if r := cmp.Diff(got, testcase.want); r != "" { t.Errorf("got -, want +:\n%s", r) } } } go-cloud-0.20.0/internal/useragent/000077500000000000000000000000001367004507500171225ustar00rootroot00000000000000go-cloud-0.20.0/internal/useragent/useragent.go000066400000000000000000000045721367004507500214560ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package useragent includes constants and utilitiesfor setting the User-Agent // for Go CDK connections to GCP. package useragent // import "gocloud.dev/internal/useragent" import ( "fmt" "net/http" "google.golang.org/api/option" "google.golang.org/grpc" ) const ( prefix = "go-cloud" version = "0.1.0" ) // ClientOption returns an option.ClientOption that sets a Go CDK User-Agent. func ClientOption(api string) option.ClientOption { return option.WithUserAgent(userAgentString(api)) } // GRPCDialOption returns a grpc.DialOption that sets a Go CDK User-Agent. func GRPCDialOption(api string) grpc.DialOption { return grpc.WithUserAgent(userAgentString(api)) } // AzureUserAgentPrefix returns a prefix that is used to set Azure SDK User-Agent to help with diagnostics. func AzureUserAgentPrefix(api string) string { return userAgentString(api) } func userAgentString(api string) string { return fmt.Sprintf("%s/%s/%s", prefix, api, version) } // userAgentTransport wraps an http.RoundTripper, adding a User-Agent header // to each request. type userAgentTransport struct { base http.RoundTripper api string } func (t *userAgentTransport) RoundTrip(req *http.Request) (*http.Response, error) { // Clone the request to avoid mutating it. newReq := *req newReq.Header = make(http.Header) for k, vv := range req.Header { newReq.Header[k] = vv } // Append to the User-Agent string to preserve other information. newReq.Header.Set("User-Agent", req.UserAgent()+" "+userAgentString(t.api)) return t.base.RoundTrip(&newReq) } // HTTPClient wraps client and appends a Go CDK string to the User-Agent // header for all requests. func HTTPClient(client *http.Client, api string) *http.Client { c := *client c.Transport = &userAgentTransport{base: c.Transport, api: api} return &c } go-cloud-0.20.0/internal/website/000077500000000000000000000000001367004507500165675ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/.vscode/000077500000000000000000000000001367004507500201305ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/.vscode/tasks.json000066400000000000000000000042461367004507500221560ustar00rootroot00000000000000{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "Build", "type": "shell", "command": "hugo", "group": { "kind": "build", "isDefault": true }, "problemMatcher": { "pattern": { "regexp": "(ERROR|Error:) .*\"([^\"]+):(\\d+):(\\d+)\": (.*)$", "file": 2, "line": 3, "column": 4, "message": 5 }, "fileLocation": "absolute" } }, { "label": "Serve", "type": "shell", "command": "hugo serve --disableFastRender --port=8080", "isBackground": true, "problemMatcher": { "pattern": { "regexp": "(ERROR|Error:) .*\"([^\"]+):(\\d+):(\\d+)\": (.*)$", "file": 2, "line": 3, "column": 4, "message": 5 }, "fileLocation": "absolute", "background": { "activeOnStart": true, "beginsPattern": "^Change detected, rebuilding site$", "endsPattern": "^Total in [0-9]+ ms$" } } }, { "label": "Serve with Drafts", "type": "shell", "command": "hugo serve --disableFastRender -D --port=8080", "isBackground": true, "problemMatcher": { "pattern": { "regexp": "(ERROR|Error:) .*\"([^\"]+):(\\d+):(\\d+)\": (.*)$", "file": 2, "line": 3, "column": 4, "message": 5 }, "background": { "activeOnStart": true, "beginsPattern": "^Change detected, rebuilding site$", "endsPattern": "^Total in [0-9]+ ms$" } } }, ] } go-cloud-0.20.0/internal/website/README.md000066400000000000000000000017211367004507500200470ustar00rootroot00000000000000# gocloud.dev source Source for the [gocloud.dev website][]. Powered by [Hugo][]. [gocloud.dev website]: https://gocloud.dev/ [Hugo]: https://gohugo.io/ ## Local Development Use local hugo server for preview. `cd` into this directory and run: ``` $ hugo server -D ``` This will run the Hugo server that auto-updates its output based on the source contents. It will print out the `localhost:` URL to point the browser to. This was tested with Hugo 0.53 but should work with subsequent versions as well. ## Editing Use `hugo new foo/page.md` to create `content/foo/page.md`. This will automatically add the appropriate [Front Matter][] to the site. After modifying an existing page, add the `lastmod` attribute with the current ISO date, which you can obtain with `date -I`. For example: ```yaml --- title: Foo date: "2019-03-17T09:00:00-07:00" lastmod: "2019-03-18T13:30:12-07:00" --- ... ``` [Front Matter]: https://gohugo.io/content-management/front-matter/ go-cloud-0.20.0/internal/website/archetypes/000077500000000000000000000000001367004507500207365ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/archetypes/default.md000066400000000000000000000003111367004507500226770ustar00rootroot00000000000000--- title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} draft: true showInSidenav: false # only for sections (any level) pagesInSidenav: false # only for top-level sections weight: 0 --- go-cloud-0.20.0/internal/website/archetypes/howto.md000066400000000000000000000002241367004507500224160ustar00rootroot00000000000000--- title: "{{ replace .Name "-" " " | title }}" date: {{ .Date }} draft: true showInSidenav: false # only for sections (any level) weight: 0 --- go-cloud-0.20.0/internal/website/config.toml000066400000000000000000000012421367004507500207300ustar00rootroot00000000000000baseURL = "https://gocloud.dev/" languageCode = "en-us" title = "Go CDK" copyright = "Copyright © 2018–2019 The Go Cloud Development Kit Authors" pygmentsUseClasses = true pygmentsCodefences = true [outputs] home = ["HTML", "RSS"] section = ["HTML"] taxonomy = ["HTML"] taxonomyTerm = ["HTML", "RSS"] [[menu.footer]] identifier = "github" name = "GitHub" url = "https://github.com/google/go-cloud/" weight = 1 [[menu.footer]] identifier = "mailing-list" name = "Google Groups" url = "https://groups.google.com/forum/#!forum/go-cloud" weight = 2 [[menu.footer]] identifier = "private-contact" name = "Contact Team" url = "mailto:go-cdk-feedback@google.com" weight = 3 go-cloud-0.20.0/internal/website/content/000077500000000000000000000000001367004507500202415ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/_index.md000066400000000000000000000047041367004507500220360ustar00rootroot00000000000000--- title: "Go CDK" pkgmeta: true --- # The Go Cloud Development Kit The Go Cloud Development Kit (Go CDK) is an open source project building libraries and tools to improve the experience of developing for the cloud with Go. Go CDK provides commonly used, vendor-neutral generic APIs that you can deploy across cloud providers. The idea is to support hybrid cloud deployments while combining on-prem (local) and cloud tools. This project also lays the foundation for other open source projects to write cloud libraries that work across providers. It does this by providing stable, idiomatic interfaces for use cases like storage, events and databases. For more background about the project, check out the [announcement blog post](https://blog.golang.org/go-cloud) and [our talk from Cloud Next 2018](https://www.youtube.com/watch?v=_2ZwhvIkgek). If you're interested in contributing to the Go CDK or are interested in checking out the code, head to [our GitHub project page](https://github.com/google/go-cloud). ## Installing and getting started To start using the Go CDK, install it using `go get`: ```shell go get gocloud.dev ``` Then follow the [Go CDK tutorial][]. Links to additional documentation and samples are available below and in the site navigation bar. [Go CDK tutorial]: {{< ref "/tutorials/cli-uploader.md" >}} ## Portable Cloud APIs in Go At this time, the Go CDK focuses on a set of portable APIs for cloud programming. We strive to implement these APIs for the leading Cloud providers: AWS, GCP and Azure, as well as provide a local (on-prem) implementation. Using the Go CDK you can write your application code once using these idiomatic APIs, test locally using the local versions, and then deploy to a cloud provider with only minimal setup-time changes. ## Project status We're looking for early adopters to help us validate the APIs before releasing a beta version. Please try it and provide feedback! * File a [GitHub issue](https://github.com/google/go-cloud/issues) * Post questions to the [project's mailing list](https://groups.google.com/forum/#!forum/go-cloud) * Send us private feedback at ## Legal disclaimer The Go CDK is open-source and released under an [Apache 2.0 License](https://github.com/google/go-cloud/blob/master/LICENSE). Copyright © 2018–2019 The Go Cloud Development Kit Authors. If you are looking for the website of GoCloud Systems, which is unrelated to the Go CDK, visit https://gocloud.systems. go-cloud-0.20.0/internal/website/content/aws/000077500000000000000000000000001367004507500210335ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/aws/_index.md000066400000000000000000000000511367004507500226170ustar00rootroot00000000000000--- title: gocloud.dev/aws type: pkg --- go-cloud-0.20.0/internal/website/content/aws/awscloud/000077500000000000000000000000001367004507500226545ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/aws/awscloud/_index.md000066400000000000000000000000621367004507500244420ustar00rootroot00000000000000--- title: gocloud.dev/aws/awscloud type: pkg --- go-cloud-0.20.0/internal/website/content/aws/rds/000077500000000000000000000000001367004507500216235ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/aws/rds/_index.md000066400000000000000000000000551367004507500234130ustar00rootroot00000000000000--- title: gocloud.dev/aws/rds type: pkg --- go-cloud-0.20.0/internal/website/content/azure/000077500000000000000000000000001367004507500213675ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/azure/azurecloud/000077500000000000000000000000001367004507500235445ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/azure/azurecloud/_index.md000066400000000000000000000000661367004507500253360ustar00rootroot00000000000000--- title: gocloud.dev/azure/azurecloud type: pkg --- go-cloud-0.20.0/internal/website/content/azure/azuredb/000077500000000000000000000000001367004507500230235ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/azure/azuredb/_index.md000066400000000000000000000000631367004507500246120ustar00rootroot00000000000000--- title: gocloud.dev/azure/azuredb type: pkg --- go-cloud-0.20.0/internal/website/content/blob/000077500000000000000000000000001367004507500211575ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/blob/_index.md000066400000000000000000000000531367004507500227450ustar00rootroot00000000000000--- title: gocloud.dev/blob type: pkg --- go-cloud-0.20.0/internal/website/content/blob/azureblob/000077500000000000000000000000001367004507500231445ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/blob/azureblob/_index.md000066400000000000000000000000641367004507500247340ustar00rootroot00000000000000--- title: gocloud.dev/blob/azureblob type: pkg --- go-cloud-0.20.0/internal/website/content/blob/driver/000077500000000000000000000000001367004507500224525ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/blob/driver/_index.md000066400000000000000000000000611367004507500242370ustar00rootroot00000000000000--- title: gocloud.dev/blob/driver type: pkg --- go-cloud-0.20.0/internal/website/content/blob/drivertest/000077500000000000000000000000001367004507500233525ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/blob/drivertest/_index.md000066400000000000000000000000651367004507500251430ustar00rootroot00000000000000--- title: gocloud.dev/blob/drivertest type: pkg --- go-cloud-0.20.0/internal/website/content/blob/fileblob/000077500000000000000000000000001367004507500227355ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/blob/fileblob/_index.md000066400000000000000000000000631367004507500245240ustar00rootroot00000000000000--- title: gocloud.dev/blob/fileblob type: pkg --- go-cloud-0.20.0/internal/website/content/blob/gcsblob/000077500000000000000000000000001367004507500225725ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/blob/gcsblob/_index.md000066400000000000000000000000621367004507500243600ustar00rootroot00000000000000--- title: gocloud.dev/blob/gcsblob type: pkg --- go-cloud-0.20.0/internal/website/content/blob/memblob/000077500000000000000000000000001367004507500225745ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/blob/memblob/_index.md000066400000000000000000000000621367004507500243620ustar00rootroot00000000000000--- title: gocloud.dev/blob/memblob type: pkg --- go-cloud-0.20.0/internal/website/content/blob/s3blob/000077500000000000000000000000001367004507500223435ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/blob/s3blob/_index.md000066400000000000000000000000611367004507500241300ustar00rootroot00000000000000--- title: gocloud.dev/blob/s3blob type: pkg --- go-cloud-0.20.0/internal/website/content/concepts/000077500000000000000000000000001367004507500220575ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/concepts/_index.md000066400000000000000000000002721367004507500236500ustar00rootroot00000000000000--- title: "Concepts" date: 2019-05-06T09:52:00-07:00 showInSidenav: true pagesInSidenav: true weight: 4 --- The documents in this section describe higher level concepts in the Go CDK. go-cloud-0.20.0/internal/website/content/concepts/as.md000066400000000000000000000030001367004507500227750ustar00rootroot00000000000000--- title: Using provider-specific APIs date: 2019-05-10T11:17:09-07:00 weight: 3 --- It is not feasible or desirable for APIs like `blob.Bucket` to encompass the full functionality of every provider. Rather, we intend to provide a subset of the most commonly used functionality. There will be cases where a developer wants to access provider-specific functionality, such as unexposed APIs or data fields, errors, or options. This can be accomplished using `As` functions. ## `As` {#as} `As` functions in the APIs provide the user a way to escape the Go CDK abstraction to access provider-specific types. They might be used as an interim solution until a feature request to the Go CDK is implemented. Or, the Go CDK may choose not to support specific features, and the use of `As` will be permanent. Using `As` implies that the resulting code is no longer portable; the provider-specific code will need to be ported in order to switch providers. Therefore, it should be avoided if possible. Each API includes examples demonstrating how to use its various `As` functions, and each provider implementation documents what types it supports for each. Usage: 1. Declare a variable of the provider-specific type you want to access. 2. Pass a pointer to it to `As`. 3. If the type is supported, `As` will return `true` and copy the provider-specific type into your variable. Otherwise, it will return `false`. Provider-specific types that are intended to be mutable will be exposed as a pointer to the underlying type. go-cloud-0.20.0/internal/website/content/concepts/structure/000077500000000000000000000000001367004507500241175ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/concepts/structure/index.md000066400000000000000000000117311367004507500255530ustar00rootroot00000000000000--- title: "Structuring Portable Code" date: 2019-06-03T07:34:22-07:00 weight: 1 --- The Go CDK's APIs are intentionally structured to make it easier to separate your application's core logic from the details of the services it is using. ## Motivation Consider the [uploader tutorial][]. Without the Go CDK, we would have had to write a code path for Amazon's Simple Storage Service (S3) and another code path for Google Cloud Storage (GCS). That would work, but it would be tedious. We would have to learn the semantics of uploading files to both blob storage services. Even worse, we would have two code paths that effectively do the same thing, but would have to be maintained separately. It would be much nicer if we could write the upload logic once and reuse it across providers. That's exactly the kind of [separation of concerns][] that the Go CDK makes possible. (More details available in the [Go CDK design doc][Developers and Operators].) [Developers and Operators]: https://github.com/google/go-cloud/blob/master/internal/docs/design.md#developers-and-operators [separation of concerns]: https://en.wikipedia.org/wiki/Separation_of_concerns [uploader tutorial]: {{< ref "/tutorials/cli-uploader.md" >}} ## Portable Types and Drivers The portable APIs that the Go CDK exports (like [`blob.Bucket`][] or [`runtimevar.Variable`][]) are concrete types, not interfaces. To understand why, imagine if we used a plain interface: {{< figure class="FullWidthFigure" src="portable-type-no-driver.png" link="portable-type-no-driver.png" alt="Diagram showing user code depending on blob.Bucket, which is implemented by awsblob.Bucket." >}} Consider the [`Bucket.NewWriter` method][], which infers the content type of the blob based on the first bytes written to it. If `blob.Bucket` was an interface, each implementation of `blob.Bucket` would have to replicate this behavior precisely. This does not scale: conformance tests would be needed to ensure that each interface method actually behaves in the way that the docs describe. This makes the interfaces hard to implement, which runs counter to the goals of the project. Instead, we follow the example of [`database/sql`][] and separate out the implementation-agnostic logic from the interface. The implementation-agnostic logic-containing concrete type is the **portable type**. We call the interface the **driver**. Visually, it looks like this: {{< figure class="FullWidthFigure" src="portable-type.png" link="portable-type.png" alt="Diagram showing user code depending on blob.Bucket, which holds a driver.Bucket implemented by awsblob.Bucket." >}} This has a number of benefits: - The portable type can perform higher level logic without making the interface complex to implement. In the blob example, the portable type's `NewWriter` method can do the content type detection and then pass the final result to the driver type. - Methods can be added to the portable type without breaking compatibility. Contrast with adding methods to an interface, which is a breaking change. - When new operations on the driver are added as new optional interfaces, the portable type can hide the need for type-assertions from the user. (More details available in the [Go CDK design doc][Portable Types and Drivers].) [Portable Types and Drivers]: https://github.com/google/go-cloud/blob/master/internal/docs/design.md#portable-types-and-drivers [`blob.Bucket`]: https://godoc.org/github.com/google/go-cloud/blob#Bucket [`runtimevar.Variable`]: https://godoc.org/github.com/google/go-cloud/runtimevar#Variable [`Bucket.NewWriter` method]: https://godoc.org/github.com/google/go-cloud/blob#Bucket.NewWriter [`database/sql`]: https://godoc.org/database/sql ## Best Practices - **Create portable types as close to program startup as possible.** Since creation of a portable type requires using driver-specific setup, this separates your driver-specific details from the rest of your application. - **Pass portable types around as arguments or struct fields instead of as package variables.** This allows you to easily swap out the portable type for a local implementation in unit tests. It also enables you to use dependency injection tools like [Wire][] to set up your application. - **Avoid using [`As`][] functions when possible.** Using driver-specific options makes it harder to test your code with confidence or migrate to another driver later. If your application needs to use driver-specific options, try to make it so that other drivers fall back gracefully. For example, you may need to use a particular ACL setting for a write to a Google Cloud Storage bucket. When testing for the driver-specific write options, don't return an error if the `As` function doesn't have the right type. That way, when running against an in-memory bucket for tests, the write will still occur and can be observed. Leave provider-specific checks to integration tests. [`As`]: {{< ref "/concepts/as.md#as" >}} [Wire]: https://github.com/google/wire go-cloud-0.20.0/internal/website/content/concepts/structure/portable-type-no-driver.png000066400000000000000000000225401367004507500313220ustar00rootroot00000000000000PNG  IHDR %'IDATxx`@N'! $ oPAbE++X[iCTEJWV/Wlť\VY.Kwq/M-j fs22L朜sNIޯ=̜I;~3@ivhhv=[Gi4(L0`4q@"RQ8%iv[Ό`{;3+ffe17/SAfM'~ 8(ɯ$7̬`ASJnf~j q$N8 h˻{`FFW︫uo~rLiib*H 8ڽ.oֲG=p7=K$'/99WAHqQ њs=gnHvN[AHqJ34Ѽ'$$N GAMCff`^U|/ֵE/mOwH 8C(.-;P,>wɚugO'@ AYYٜW׫wSR^9Z8'@q4ee)< qc1'$N GA`QɠY}0sB41+\8'QGh؅#)6:;nsB@H GA/iF 8A(@@%8y#.YPPT9;Aه/ '@(@RYuuyvn^ ;֝A(@@QKyVfVi0A(@@9*/QPg[ViyA(@@=o-> .>.@Z32A(@@ax~hDUT\q$NQ8ƨc! ش#[ A(@@s3<#vMwq k؈<)wҳ2.l *P|V"ڶҲ{ q QǬ뮿upPkd=ZOYU.=m .XlZY^mo۳9a 1$NQ8jd¤Ϲo~a.<~{_v}kC@#Cd¿MtڹzH k1\n/o+)>hQ-Z+>:oq{ijj"qFnJ@e˖P늟'֓O>#_2n)@&Ϙ; o4G|FNynϳW$)mSb::qD6H:nz/=sLvi$61!ԺoǏӧO'䲆ioݳ njIg|" ]L~mԩ +U=z4HJĩsqwPD`7B$^oa͙3' q&}~+K!V'{E(@mZiׯ%.@bqv;HH+@JJJΉǯ=~.@b%=)QϿmkdegl'>hzE*% _bQV7jbusss(Ii7|3&IZ=4:\BWoϑ#GBE΋/׎;֩uMe2+ *o # HDqH1Og#}>~2T 7LԻ.}W{w#Se)@s=iQQys?sLqi&Nc߸n?wh֩c]9ߋi-񯨤EO((Hl]V^~[gtcW$i ՝ Yjj媫ۭ s9a„N# J" h[SI˛t.\8s~(j9ĸ!:oƿh=z3LFcNo8 R3Xs3τދ{z T{Zo4mbWámiCW?~Ѭ3pސ[_#) ܶ=hOhl^)@T4,[/WttEHY}'܉c=lqBIMbY~ݡ$"| K ]'DDEW|մMsGCu%ҬS:5L!z@ɽM=t)Nq{hQ՝|޹L鳪a ]7}⭘~M&j\i }u|7o @ޘeMϴz;!܉)&{~޳ޓ&nFsqzU|oU:g[]XSW|i9n.ifȘ9n)Q$z=+o8%{_^sD\&̕u5[n7;`$2%{;r>{R`5wBw %*qp_)^AM9 gmwj5'ᬳ 3d۫`_Ϫ.*d^L Q/ m}YSN=(y?-.ƺc@>7W;1E5]RS佀ҙDBўrhTy{ i);y&TBK&S ?B)+]4=/%p'~M 4$J &1'ڞh_3Ü'i#w"L;pa^xO~u\w b f2z5E}uO!Z ӳ)PLZySЛx+2cwWzC)@z:3bz4xfzzDRX\z9 o&CdGUߎ]q˗'pw& ɲw-M9 { wmEL>HMKݮtHwRn%A2Q::L/_|Q9P%+Nhfx(/;M'sO"~',{clƢp Lҙ;}i?P+!^pM# #˯Qt]2YۈψG;•`M}nW-ę%%D۟hwW{@̰+9\ELĭ{o0SwW,mïPt/21o1=cݷ)4DEwޛ7D*@n}\p˺ }6tAOڎ~_3/z_ &M>ȓܸcpC2t ' *L֕|]AAɱIJ 1抛IJZw,$$3S#Ad󖙔dOW3~]mj}?;V\=vmX} ޯ7"HU־%a[N/[#1E}vSoNxoag96'\+>s)z]'Z] ExbIGs'-üCs5s+a&Cņ~"Ӊ7LKR5C ?wl+t\r;Sh5\#_lRb~3aĿ\v} n]1?v V\^>)Yz!)6ux9 JRޠnNWͩPVrҨ34Mńx?\O/oa7K'%tb tu[ }&<L*WԪw6L&R|דϸn)ے;)hڎ9Y1WM3Iy[u(N)z)c]1_:SCлM}mSpͻ0Es@ϪҺbw^ ѱq3Ldʗ>6wb7ͽ=1R,3O5OUA.DIi *JS*D=Wͽٽa/(apOB7 2w~F=ww}?Sq3ׁ|~(>{~O9 HOW4um'wTrS7OC?gb^u("HH9jޘ{9v= ]Qýw?``#) Զo8Jlqqt>yA߸>ii q 2p.ZBq6hpt8 G^G [)~V~$. P8 8Z2ϿEB۷P}>O\qqK~|ۊoS$$S q :^1tx ð}Ӊ q >ffe7kB|?:`@?A(@@.j\ qju'h1juŔ+mJ.;7qPԖV6x '@(@4jϲrzBr+ReX n3?!&(E%> b1Hq_UF0ޏɓg̝od(S<[i k-b'[ q H /p1{.e?Ѫva 2Q1ºaZhU,{S223?gq$NQ8Y?乗~WoZz8_w|ғ 3X?˘o㦯hfH q F.>u[ڹ [vcMumq'GsCC߸5MO0S0A(@@I=q- 4[ó2C^  ҭt/*v Z=WT}ҧo߿& P8 G;Z4t*â4KŁD+VCԻmc^Xtyh UC- |0Hd _t`F ^8 Gy蟑1=79НTTv.bD&0v}_in_Z2xHQG_VV֊ʡ'ыMC2 wA(@@%8EEۯ2b}]V03K" 8A%8iy+[):6MO=$N GA`f4Yy"ť'322o&ւ 8(Q f`'&΂ 8(q pIS|7NLmu{b! '@ &愼c%ë/n/AHq-zD<{5ePYkn '@ v EҐՏl= ZWYGL qQGCuvNs~# =M}VfVvsYY)H 8\ |-w~,<ֲsZ~_%R8'@q4y<yЧ$>l|>! 8(gz^Nu[4Ykd濗 bb'H$N8(_J+NI9"}gp3Cn豓$N8 h ^9txkφT߶ڞ;/=5zԎ q GAdf^~.RT2sq%|ئ kR򊪦q'=vL#@ 8;hUMmݺʡ:bh벆iAYP Ҝ 3i\_97n - ܥ#`fkMGzaD '@nzxݸ/tk.PҘȋ!~TPXY .8կ_3E%kjŗ\_0}GԙMҬnjO-H qQ8 'B hQ)4Ab-4q@zIKl;؂8JGZ~;R NCݎ;[Qۭ7LG=vzʻQ+uNh. HnmOYwr\˔ح1Psv{n{k(U?7KnGvn'=ina1]͟CrD;epY9S4;EHi1EG.+@6:NkLf;_@ZW5@ 9Ņ7gq]tnȓ~mu§xBM9jį9l @7 m=՞@@.&;* :OSYSy<)@txA=v8'Oچcvv}η~O7cOwR^ hx'ow[8w¹<*&`ϺҺP@@!_S䇞ҜMְ* Qc=q[?t׫ZWf gPUh?a3n㫉3|_û z?;E&O:](%NVcuNaq:p{g8ey\SpONZvI}g hG Nh6q pv$x ڻ[T:;UZU{G,hph?d],q-W@W H (@$9Q,L6-=@=PEc~ݱ0F'zLP{v;aqucv[3^C mpU96v[ g;naW^=P6,7)^N8?hU w=SSrv{Up8_)*<[ p z`r*jfz(bZgٚ;mGoQ2Qvb:dGLUV3&jv.cP[@8{㜪j{>}Ω?-& vq$t. ]B҆HV%RVQ1 $T Kt.]v Me\tqǑ )-+4l؅*@e)Ohݍzeu}> Kt.]fC=|xyޗF_ Kt.]fACo_Woݦ=|سdqhx*P%D.G}}ʪ/nyG;dB@BE]L#55CKJ>jC[BXPH]K@!^S;}1&D  .%tI3Ξ;dv,M ! ]Kt 2|i a4RV^aNB*@e9ĹU51c+hx H$Tt .e777Weyǣek- .%LO<_/\8x7KJ* ]KtA#޿a(0nn_I:]$>o\u-NEESH:%@x~Fb{ @.]KtOxW݇0#VUU'PK@]:څgUV`͏f++c{LKB*@e:|Υ QZ+㤉 B-v/ooI:%@gwxoך̻Ļ޿nݸ%Ǯ͞;߻O]q? y%e9NBA.%9q¤ɱҷ[=aq-ڍ@&Z#tj+? z7&(S6q), @.]KtS^Y m s-.XPabxo^c5gwE_>oB $Tt .%s3~ٙ4 zc Uy+_Wǵ2 @.]K!>z2Z|l|uBp˝x7صw=>$oӫ} @.]Ky\52SΘ=o,Nhf=׻oؓJz_ػk2_{I:%豺uԴ6 ^{W>j4C@itUFڧı8ccHBA.%@qc}~aU| O-j0]48\3Tɜ2vp 9/* g6VP(t%Kt tyօߨxmY)Ͽ7iLw>oqpwDej 9e2;Y9=K?H:%q5陞~ @.]K˹\&Nd9+vSf $T t.yġ<|fšY Џp̜HwqoG|}7N%M B'ܴiS۷yo6@[w=ЩJt:z/]jU{t'ރ>->\~/]b@&Ϙ| $I_??P&dmpqǢ#lɉ㧚شLJHaVhؽ{wV?tnRx܏}~,4I"%U99طo_^wڕw=qz2;t^K/:i6Lx6I{V䔖ioܴ,ǜZi`b]dBmG*>bԩ޶mڀ_=Pu?1 5 7BW_ͩ)bĈ/Ϻ9BG)jww.1 x<}[ʚɔQ5kVq&wף0YE7S kB`@:5&DĔD)kOj#'nYɞU|M7W])3:X?vDA $}_|ޏx>iXi豭Z"޿+--[EI1ʄ*sD_IushTh;+E7oޜʕs޹sg{}vo͚5O?ڷ>¾CO}>I{11]ZS^Ee]D"9c@r0nܸCιᰮ 'OHav}LC*v"DO5_|Y;a9s[bÚ}F]C}BGZ6[DŽGb@ts?RwTa}:?GZRMj}*G"b~3h ^U/ vu[_bYwn}sgmJeeelB=NRۛ0pF;Ď(0z.eF`0>0}Jn!bZWLW ]{:k^O~uCZVWCŞk-aPT1SuF(!ۅ]o܁90$Cǂ.tGbkUh֋U<$tLiŰ LoؽFa׌~gw +UPk;W?{i%O.?=3&ֱZ?de1 jhiuN2!v2;Y$uܘc@zuԁ7kd9m*<*l  +<@'1a)$& FnTФr#7PѡDdBQ"`#5 8Kes*FݾE0Oob+ H@d1 Jq&(kҍ}͛Zע{}uo-֫CŌkcIQyHEy~#ޒhDz麽qi<^"J6҆7xӢ'"f6^<[[ yͰ'&#cLF=Cci2 ;b@~Rc>1j:V֮na@}ERɺ]m6,Xn+p@c p d3G)}pSe?P?ґIy(*)yi{CH4m<2 %h5@}>c@dEmB7lUtQnKgb HX tRJQWXkFV[t%6D{If?j{Jڇi-ӟ?)i1ܖ72!FP6ىf dŲ{M&ꌎQVA6d1 KRߡ+8,'EMlB- Hx0]0 VQdM$QA~2&g&%gr[ $V0'v#IfP]*ItL v K<`ި%0! [߻y 4 &GV2b]>nT?kV^>Ԛ{n@F׉d3W/FzJWN6QL`ʵ9(ϢLyn HSca]{[WmHDO<ݷiLAcKO6Y;|'ӵjB:6Ĵl:Ki%<ˈIa]8Q- a)HlSe[ gw HTxݼ웈9 i67O hu G'v1Sz {3FI7k3qLt=+c8aueձSX4HnpC &m;߰iKcHa0l]"ߣ1nqmzw,SūmץSf1L݋V3l i 3&vO:qǀS5 >kS6flk焰s6^yؓ1g&Y ; ރٙ{6eډ<]}h]*zf~L'YեT khAq: ёr6 pNOL- ӯn=ZPS.܉'9(?S*9F͂%e4grp%q.p4K/ 3 u*BSiɢ) mm)ĴjiWu}ff +xdI۰C(t=NԤgѪ^7kݷ L/Ҝ̤efWtMYD{ݭP=DBzI>KX.j,sO}9"s1crYP:7SsT(DO'Okod9N9mc&F)t;d>'%Qw%{.uIJ؜avw}+vs٧PVAvCQr5S)ƬuS[D%Y!%kwnj93 <ߝ 5Ǟ6X]9Vk.eؚ3*ntV1Š&s}sQ1^ YnMI4BAY2Cz﩮(Li[*Bsak G}qu^vԵ-s1æ6ڹ9:0\%wJ{W1x,bm(17}oQfusW!i]1_V7d>f7"2v }TKfsvY{ gч]b@|u}d94& O[ N~榫f$P%%f=>}f͍A XG=53ÍdӂIœF=:oXD+6kvfD+`WKtKי sS h^zw%tK}&>Չakۍd|s1kQ+',$ t.aZֶuU*Q1}]* ^ﶺ5Ǿw;vME]tfҁ5a:6+'[\w^޽´gs>tܨ|=6Is&lrπyէLd9+>̳A9e@r2Kt.]k)Ï)rkt% ]Kt  ۿe.Ab͆׼¾;H:%葺(t%Kt ЃuTQYs+) B]D=Zs/a2}wޣz~ @.]KƜ+?P(t%Kt УuYV]wڐa#膕"ޟw! B]D=^%mYL~#-'*t.Хctwc2cOI:%@^иE 3`0U! B]D2aV7/ztUޛ7knZ}o+;ǶB*t.塌o~?cG{MXqw q'Omک}=Yow϶ @.]Kt0``ӆӭj )p/ݺd.uXgP(t%Kt .i*yyiY{9^tedw+u=8^:޻ֿ}px5*t.eVAO_ti[DݲƎ?kzLQ C-32yLkz֔s B]D21eҾ.}\ZD}۝uxq;V~M1L1.ⶢx$T*@2|Y}iigϝ&Ǜz9O8׶}>;Z:j ;=<*4o @BE]FaiY%6b/ժ  ]Kt 2hohPa?zK_UTVr̈|x *P%D.Qu Z0hH:4ѣO  ]Kt 貛P>d؈ť n=KY5:;/(-+3/ou$T Kt.]vcz̗[US;sq XnZZO{נ Zǝ3veqcc>I:OTԶ 1I?ykLvԙ'}Kǎɱj9 H:]K (%AKtI}ȳhE.%AK_%ym~\. ]K@ga]WS~TOu~ ::a@h lُ H*o`VlߩnY4 q?~F?ʬmj;bq_c~l~m S8Wm@`nE~cwDg;ە~l Ll. 0 c[jBFkW04i LH?9,ԀEXl1 a86)jP;<;|ۆء㖙h }t€ y}\._^`Bǀٮ xV. ̠V.J6E=p[?4(p;@Fa[b4>#uc@~ LLZrv:`Rw:1bZ܍/f2blfZQ D X_;t@ͱ/i$e@n}1XԾbK>;UA5R[#H/e6 3$Q``@ (Ka;`9@zB@;(L"4_3Vy|=-FεV@cW/Kn?9k۝~, %x\1A$3 bՍutov,w!?oc_BwSvS;V׀L ~lo+螌Lǫ ~( ^ ۀh֐dj~)mGێHbb?Rl綀,NPt?E0v C/ ڐm1 [MNl1]/@Dsf* Hkv>`mn螬@ TQEL+ʨ+c[D s 2@7!vpc7buyfż6&yMYu S~Ϧ /ZEjxڮ-m/;|8f;{cLnJSS.vɌBY(6to?ȣIENDB`go-cloud-0.20.0/internal/website/content/concepts/urls.md000066400000000000000000000060331367004507500233700ustar00rootroot00000000000000--- title: "URLs" date: 2019-05-06T09:55:09-07:00 weight: 2 --- In addition to creating portable types via provider-specific constructors (e.g., creating a `*blob.Bucket` using [`s3blob.OpenBucket`][]), many portable types can also be created using a URL. The scheme of the URL specifies the provider, and each provider implementation has code to convert the URL into the data needed to call its constructor. For example, calling `blob.OpenBucket("s3blob://my-bucket")` will return a `*blob.Bucket` created using [`s3blob.OpenBucket`][]. [`s3blob.OpenBucket`]: https://godoc.org/gocloud.dev/blob/s3blob#OpenBucket Each portable API package will document the types that it supports opening by URL. For example, the `blob` package supports `Bucket`s, while the `pubsub` package supports `Topic`s and `Subscription`s. Each provider implementation will document what scheme(s) it registers for, and what format of URL it expects. Each portable type URL opener will accept URL schemes with an `+` prefix (e.g. `blob+file:///dir` instead of `file:///dir`, as well as schemes with an `++` prefix (e.g. `blob+bucket+file:///dir`). Each portable API package should include an example using a URL, and many providers will include provider-specific examples as well. ## Muxes Each portable type that is openable via URL will have a top-level function you can call, like [`blob.OpenBucket`][]. This top-level function uses a default instance of a `URLMux` multiplexer to map schemes to a provider-specific opener for the type. For example, `blob` has a [`BucketURLOpener`][] interface that providers implement and then register using [`RegisterBucket`][] on the result of [`DefaultURLMux`][]. Many applications will work just fine using the default mux through the top-level `Open` functions. However, if you want more control, you can create your own `URLMux` and register the provider `URLOpener`s you need. Most providers will export URLOpeners that give you more fine grained control over the arguments needed by the constructor. In particular, portable types opened via URL will often use default credentials from the environment. For example, the AWS URL openers use the credentials saved by "aws login" (we don't want to include credentials in the URL itself, since they are likely to be sensitive). 1. Instantiate the provider's `URLOpener` with the specific fields you need. For example, `s3blob.URLOpener{ConfigProvider: myAWSProvider}` using a `ConfigProvider` that holds explicit AWS credentials. 2. Create your own instance of the `URLMux`. For example: `mymux := new(blob.URLMux)` 3. Register your custom URLOpener on your mux. For example: `mymux.RegisterBucket(s3blob.Scheme, myS3URLOpener)` 4. Now use your mux to open URLs: `mymux.OpenBucket("s3://my-bucket")` [`blob.OpenBucket`]: https://godoc.org/gocloud.dev/blob#OpenBucket [`BucketURLOpener`]: https://godoc.org/gocloud.dev/blob#BucketURLOpener [`DefaultURLMux`]: https://godoc.org/gocloud.dev/blob#DefaultURLMux [`RegisterBucket`]: https://godoc.org/gocloud.dev/blob#URLMux.RegisterBucket go-cloud-0.20.0/internal/website/content/docstore/000077500000000000000000000000001367004507500220635ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/_index.md000066400000000000000000000000561367004507500236540ustar00rootroot00000000000000--- title: gocloud.dev/docstore type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/awsdynamodb/000077500000000000000000000000001367004507500243735ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/awsdynamodb/_index.md000066400000000000000000000000721367004507500261620ustar00rootroot00000000000000--- title: gocloud.dev/docstore/awsdynamodb type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/driver/000077500000000000000000000000001367004507500233565ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/driver/_index.md000066400000000000000000000000651367004507500251470ustar00rootroot00000000000000--- title: gocloud.dev/docstore/driver type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/drivertest/000077500000000000000000000000001367004507500242565ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/drivertest/_index.md000066400000000000000000000000711367004507500260440ustar00rootroot00000000000000--- title: gocloud.dev/docstore/drivertest type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/dynamodocstore/000077500000000000000000000000001367004507500251155ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/dynamodocstore/_index.md000066400000000000000000000000751367004507500267070ustar00rootroot00000000000000--- title: gocloud.dev/docstore/dynamodocstore type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/firedocstore/000077500000000000000000000000001367004507500245535ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/firedocstore/_index.md000066400000000000000000000000731367004507500263430ustar00rootroot00000000000000--- title: gocloud.dev/docstore/firedocstore type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/gcpfirestore/000077500000000000000000000000001367004507500245575ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/gcpfirestore/_index.md000066400000000000000000000000731367004507500263470ustar00rootroot00000000000000--- title: gocloud.dev/docstore/gcpfirestore type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/internal/000077500000000000000000000000001367004507500236775ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/internal/fields/000077500000000000000000000000001367004507500251455ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/internal/fields/_index.md000066400000000000000000000000761367004507500267400ustar00rootroot00000000000000--- title: gocloud.dev/docstore/internal/fields type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/memdocstore/000077500000000000000000000000001367004507500244045ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/memdocstore/_index.md000066400000000000000000000000721367004507500261730ustar00rootroot00000000000000--- title: gocloud.dev/docstore/memdocstore type: pkg --- go-cloud-0.20.0/internal/website/content/docstore/mongodocstore/000077500000000000000000000000001367004507500247455ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/docstore/mongodocstore/_index.md000066400000000000000000000000741367004507500265360ustar00rootroot00000000000000--- title: gocloud.dev/docstore/mongodocstore type: pkg --- go-cloud-0.20.0/internal/website/content/gcerrors/000077500000000000000000000000001367004507500220675ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/gcerrors/_index.md000066400000000000000000000000561367004507500236600ustar00rootroot00000000000000--- title: gocloud.dev/gcerrors type: pkg --- go-cloud-0.20.0/internal/website/content/gcp/000077500000000000000000000000001367004507500210125ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/gcp/_index.md000066400000000000000000000000511367004507500225760ustar00rootroot00000000000000--- title: gocloud.dev/gcp type: pkg --- go-cloud-0.20.0/internal/website/content/gcp/cloudsql/000077500000000000000000000000001367004507500226405ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/gcp/cloudsql/_index.md000066400000000000000000000000621367004507500244260ustar00rootroot00000000000000--- title: gocloud.dev/gcp/cloudsql type: pkg --- go-cloud-0.20.0/internal/website/content/gcp/gcpcloud/000077500000000000000000000000001367004507500226125ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/gcp/gcpcloud/_index.md000066400000000000000000000000621367004507500244000ustar00rootroot00000000000000--- title: gocloud.dev/gcp/gcpcloud type: pkg --- go-cloud-0.20.0/internal/website/content/health/000077500000000000000000000000001367004507500215065ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/health/_index.md000066400000000000000000000000541367004507500232750ustar00rootroot00000000000000--- title: gocloud.dev/health type: pkg --- go-cloud-0.20.0/internal/website/content/health/sqlhealth/000077500000000000000000000000001367004507500234735ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/health/sqlhealth/_index.md000066400000000000000000000000661367004507500252650ustar00rootroot00000000000000--- title: gocloud.dev/health/sqlhealth type: pkg --- go-cloud-0.20.0/internal/website/content/howto/000077500000000000000000000000001367004507500214015ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/howto/_index.md000066400000000000000000000003411367004507500231670ustar00rootroot00000000000000--- title: "How-To Guides" date: 2019-03-20T14:50:56-07:00 showInSidenav: true pagesInSidenav: true weight: 2 --- The guides in this section are aimed to help you solve common tasks with the Go CDK. They are grouped by API. go-cloud-0.20.0/internal/website/content/howto/blob/000077500000000000000000000000001367004507500223175ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/howto/blob/_index.md000066400000000000000000000273371367004507500241230ustar00rootroot00000000000000--- title: "Blob" date: 2019-07-09T16:46:29-07:00 lastmod: 2019-07-29T12:00:00-07:00 showInSidenav: true toc: true --- Blobs are a common abstraction for storing unstructured data on Cloud storage services and accessing them via HTTP. This guide shows how to work with blobs in the Go CDK. The [`blob` package][] supports operations like reading and writing blobs (using standard [`io` package][] interfaces), deleting blobs, and listing blobs in a bucket. Subpackages contain driver implementations of blob for various services, including Cloud and on-prem solutions. You can develop your application locally using [`fileblob`][], then deploy it to multiple Cloud providers with minimal initialization reconfiguration. [`blob` package]: https://godoc.org/gocloud.dev/blob [`io` package]: https://golang.org/pkg/io/ [`fileblob`]: https://godoc.org/gocloud.dev/blob/fileblob ## Opening a Bucket {#opening} The first step in interacting with unstructured storage is to instantiate a portable [`*blob.Bucket`][] for your storage service. The easiest way to do so is to use [`blob.OpenBucket`][] and a service-specific URL pointing to the bucket, making sure you ["blank import"][] the driver package to link it in. ```go import ( "gocloud.dev/blob" _ "gocloud.dev/blob/" ) ... bucket, err := blob.OpenBucket(context.Background(), "") if err != nil { return fmt.Errorf("could not open bucket: %v", err) } defer bucket.Close() // bucket is a *blob.Bucket; see usage below ... ``` See [Concepts: URLs][] for general background and the [guide below][] for URL usage for each supported service. Alternatively, if you need fine-grained control over the connection settings, you can call the constructor function in the driver package directly. ```go import "gocloud.dev/blob/" ... bucket, err := .OpenBucket(...) ... ``` You may find the [`wire` package][] useful for managing your initialization code when switching between different backing services. See the [guide below][] for constructor usage for each supported service. [`wire` package]: http://github.com/google/wire [`*blob.Bucket`]: https://godoc.org/gocloud.dev/blob#Bucket [`blob.OpenBucket`]: https://godoc.org/gocloud.dev/blob#OpenBucket ["blank import"]: https://golang.org/doc/effective_go.html#blank_import [Concepts: URLs]: {{< ref "/concepts/urls.md" >}} [guide below]: {{< ref "#services" >}} ### Prefixed Buckets {#prefix} You can wrap a `*blob.Bucket` to always operate on a subfolder of the bucket using `blob.PrefixedBucket`: {{< goexample "gocloud.dev/blob.ExamplePrefixedBucket" >}} Alternatively, you can configure the prefix directly in the `blob.OpenBucket` URL: {{< goexample "gocloud.dev/blob.Example_openFromURLWithPrefix" >}} ## Using a Bucket {#using} Once you have opened a bucket for the storage provider you want, you can store and access data from it using the standard Go I/O patterns described below. Other operations like listing and reading metadata are documented in the [`blob` package documentation][]. [`blob` package documentation]: https://godoc.org/gocloud.dev/blob ### Writing Data to a Bucket {#writing} To write data to a bucket, you create a writer, write data to it, and then close the writer. Closing the writer commits the write to the provider, flushing any buffers, and releases any resources used while writing, so you must always check the error of `Close`. The writer implements [`io.Writer`][], so you can use any functions that take an `io.Writer` like `io.Copy` or `fmt.Fprintln`. {{< goexample src="gocloud.dev/blob.ExampleBucket_NewWriter" imports="0" >}} In some cases, you may want to cancel an in-progress write to avoid the blob being created or overwritten. A typical reason for wanting to cancel a write is encountering an error in the stream your program is copying from. To abort a write, you cancel the `Context` you pass to the writer. Again, you must always `Close` the writer to release the resources, but in this case you can ignore the error because the write's failure is expected. {{< goexample src="gocloud.dev/blob.ExampleBucket_NewWriter_cancel" imports="0" >}} [`io.Writer`]: https://golang.org/pkg/io/#Writer ### Reading Data from a Bucket {#reading} Once you have written data to a bucket, you can read it back by creating a reader. The reader implements [`io.Reader`][], so you can use any functions that take an `io.Reader` like `io.Copy` or `io/ioutil.ReadAll`. You must always close a reader after using it to avoid leaking resources. {{< goexample src="gocloud.dev/blob.ExampleBucket_NewReader" imports="0" >}} Many storage providers provide efficient random-access to data in buckets. To start reading from an arbitrary offset in the blob, use `NewRangeReader`. {{< goexample src="gocloud.dev/blob.ExampleBucket_NewRangeReader" imports="0" >}} [`io.Reader`]: https://golang.org/pkg/io/#Reader ### Deleting a Bucket {#deleting} You can delete blobs using the `Bucket.Delete` method. {{< goexample src="gocloud.dev/blob.ExampleBucket_Delete" imports="0" >}} ## Other Usage Samples * [CLI Tutorial]({{< ref "/tutorials/cli-uploader.md" >}}) * [CLI Sample](https://github.com/google/go-cloud/tree/master/samples/gocdk-blob) * [Guestbook sample](https://gocloud.dev/tutorials/guestbook/) * [blob package examples](https://godoc.org/gocloud.dev/blob#pkg-examples) ## Supported Storage Services {#services} ### Google Cloud Storage {#gcs} [Google Cloud Storage][] (GCS) URLs in the Go CDK closely resemble the URLs you would see in the [`gsutil`][] CLI. [Google Cloud Storage]: https://cloud.google.com/storage/ [`gsutil`]: https://cloud.google.com/storage/docs/gsutil `blob.OpenBucket` will use Application Default Credentials; if you have authenticated via [`gcloud auth login`][], it will use those credentials. See [Application Default Credentials][GCP creds] to learn about authentication alternatives, including using environment variables. [GCP creds]: https://cloud.google.com/docs/authentication/production [`gcloud auth login`]: https://cloud.google.com/sdk/gcloud/reference/auth/login {{< goexample "gocloud.dev/blob/gcsblob.Example_openBucketFromURL" >}} Full details about acceptable URLs can be found under the API reference for [`gcsblob.URLOpener`][]. [`gcsblob.URLOpener`]: https://godoc.org/gocloud.dev/blob/gcsblob#URLOpener #### GCS Constructor {#gcs-ctor} The [`gcsblob.OpenBucket`][] constructor opens a GCS bucket. You must first create a `*net/http.Client` that sends requests authorized by [Google Cloud Platform credentials][GCP creds]. (You can reuse the same client for any other API that takes in a `*gcp.HTTPClient`.) You can find functions in the [`gocloud.dev/gcp`][] package to set this up for you. {{< goexample "gocloud.dev/blob/gcsblob.ExampleOpenBucket" >}} [`gcsblob.OpenBucket`]: https://godoc.org/gocloud.dev/blob/gcsblob#OpenBucket [`gocloud.dev/gcp`]: https://godoc.org/gocloud.dev/gcp ### S3 {#s3} S3 URLs in the Go CDK closely resemble the URLs you would see in the [AWS CLI][]. You should specify the `region` query parameter to ensure your application connects to the correct region. `blob.OpenBucket` will create a default AWS Session with the `SharedConfigEnable` option enabled; if you have authenticated with the AWS CLI, it will use those credentials. See [AWS Session][] to learn about authentication alternatives, including using environment variables. [AWS CLI]: https://aws.amazon.com/cli/ [AWS Session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ {{< goexample "gocloud.dev/blob/s3blob.Example_openBucketFromURL" >}} Full details about acceptable URLs can be found under the API reference for [`s3blob.URLOpener`][]. [`s3blob.URLOpener`]: https://godoc.org/gocloud.dev/blob/s3blob#URLOpener #### S3 Constructor {#s3-ctor} The [`s3blob.OpenBucket`][] constructor opens an [S3][] bucket. You must first create an [AWS session][] with the same region as your bucket: {{< goexample "gocloud.dev/blob/s3blob.ExampleOpenBucket" >}} [`s3blob.OpenBucket`]: https://godoc.org/gocloud.dev/blob/s3blob#OpenBucket [AWS session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ [S3]: https://aws.amazon.com/s3/ #### S3-Compatible Servers {#s3-compatible} The Go CDK can also interact with [S3-compatible storage servers][] that recognize the same REST HTTP endpoints as S3, like [Minio][], [Ceph][], or [SeaweedFS][]. You can change the endpoint by changing the [`Endpoint` field][] on the `*aws.Config` you pass to `s3blob.OpenBucket`. If you are using `blob.OpenBucket`, you can switch endpoints by using the S3 URL using query parameters like so: ```go bucket, err := blob.OpenBucket("s3://mybucket?" + "endpoint=my.minio.local:8080&" + "disableSSL=true&" + "s3ForcePathStyle=true") ``` See [`aws.ConfigFromURLParams`][] for more details on supported URL options for S3. [`aws.ConfigFromURLParams`]: https://godoc.org/gocloud.dev/aws#ConfigFromURLParams [`Endpoint` field]: https://godoc.org/github.com/aws/aws-sdk-go/aws#Config.Endpoint [Ceph]: https://ceph.com/ [Minio]: https://www.minio.io/ [SeaweedFS]: https://github.com/chrislusf/seaweedfs [S3-compatible storage servers]: https://en.wikipedia.org/wiki/Amazon_S3#S3_API_and_competing_services ### Azure Blob Storage {#azure} Azure Blob Storage URLs in the Go CDK allow you to identify [Azure Blob Storage][] containers when opening a bucket with `blob.OpenBucket`. Go CDK uses the environment variables `AZURE_STORAGE_ACCOUNT`, `AZURE_STORAGE_KEY`, and `AZURE_STORAGE_SAS_TOKEN` to configure the credentials. `AZURE_STORAGE_ACCOUNT` is required, along with one of the other two. {{< goexample "gocloud.dev/blob/azureblob.Example_openBucketFromURL" >}} Full details about acceptable URLs can be found under the API reference for [`azureblob.URLOpener`][]. [Azure Blob Storage]: https://azure.microsoft.com/en-us/services/storage/blobs/ [`azureblob.URLOpener`]: https://godoc.org/gocloud.dev/blob/azureblob#URLOpener #### Azure Blob Constructor {#azure-ctor} The [`azureblob.OpenBucket`][] constructor opens an Azure Blob Storage container. `azureblob` operates on [Azure Storage Block Blobs][]. You must first create Azure Storage credentials and then create an Azure Storage pipeline before you can open a container. {{< goexample "gocloud.dev/blob/azureblob.ExampleOpenBucket" >}} [Azure Storage Block Blobs]: https://docs.microsoft.com/en-us/rest/api/storageservices/understanding-block-blobs--append-blobs--and-page-blobs#about-block-blobs [`azureblob.OpenBucket`]: https://godoc.org/gocloud.dev/blob/azureblob#OpenBucket ### Local Storage {#local} The Go CDK provides blob drivers for storing data in memory and on the local filesystem. These are primarily intended for testing and local development, but may be useful in production scenarios where an NFS mount is used. Local storage URLs take the form of either `mem://` or `file:///` URLs. Memory URLs are always `mem://` with no other information and always create a new bucket. File URLs convert slashes to the operating system's native file separator, so on Windows, `C:\foo\bar` would be written as `file:///C:/foo/bar`. ```go import ( "gocloud.dev/blob" _ "gocloud.dev/blob/fileblob" _ "gocloud.dev/blob/memblob" ) // ... bucket1, err := blob.OpenBucket(ctx, "mem://") if err != nil { return err } defer bucket1.Close() bucket2, err := blob.OpenBucket(ctx, "file:///path/to/dir") if err != nil { return err } defer bucket2.Close() ``` #### Local Storage Constructors {#local-ctor} You can create an in-memory bucket with [`memblob.OpenBucket`][]: {{< goexample "gocloud.dev/blob/memblob.ExampleOpenBucket" >}} You can use a local filesystem directory with [`fileblob.OpenBucket`][]: {{< goexample "gocloud.dev/blob/fileblob.ExampleOpenBucket" >}} [`fileblob.OpenBucket`]: https://godoc.org/gocloud.dev/blob/fileblob#OpenBucket [`memblob.OpenBucket`]: https://godoc.org/gocloud.dev/blob/memblob#OpenBucket go-cloud-0.20.0/internal/website/content/howto/docstore/000077500000000000000000000000001367004507500232235ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/howto/docstore/_index.md000066400000000000000000000426641367004507500250270ustar00rootroot00000000000000--- title: "Docstore" date: 2019-06-08T15:11:57-04:00 lastmod: 2019-07-29T12:00:00-07:00 showInSidenav: true toc: true --- The [`docstore` package][] provides an abstraction layer over common [document stores](https://en.wikipedia.org/wiki/Document-oriented_database) like Google Cloud Firestore, Amazon DynamoDB and MongoDB. This guide shows how to work with document stores in the Go CDK. A document store is a service that stores data in semi-structured JSON-like documents grouped into collections. Like other NoSQL databases, document stores are schemaless. The [`docstore` package][] supports operations to add, retrieve, modify and delete documents. Subpackages contain driver implementations of docstore for various services, including Cloud and on-prem solutions. You can develop your application locally using [`memdocstore`][], then deploy it to multiple Cloud providers with minimal initialization reconfiguration. [`docstore` package]: https://godoc.org/gocloud.dev/docstore [`memdocstore`]: https://godoc.org/gocloud.dev/docstore/memdocstore ## Opening a Collection {#opening} The first step in interacting with a document store is to instantiate a portable [`*docstore.Collection`][] for your service. While every docstore service has the concept of a primary key that uniquely distinguishes a document in a collection, each one specifies that key in its own way. To be portable, Docstore requires that the key be part of the document's contents. When you open a collection using one of the functions described here, you specify how to find the provider's primary key in the document. The easiest way to open a collection is using [`docstore.OpenCollection`][] and a service-specific URL pointing to it, making sure you ["blank import"][] the driver package to link it in. ```go import ( "gocloud.dev/docstore" _ "gocloud.dev/docstore/" ) ... coll, err := docstore.OpenCollection(context.Background(), "") if err != nil { return fmt.Errorf("could not open collection: %v", err) } defer coll.Close() // coll is a *docstore.Collection; see usage below ... ``` See [Concepts: URLs][] for general background and the [guide below][] for URL usage for each supported service. Alternatively, if you need fine-grained control over the connection settings, you can call the constructor function in the driver package directly (like `mongodocstore.OpenCollection`). ```go import "gocloud.dev/docstore/" ... coll, err := .OpenCollection(...) ... ``` You may find the [`wire` package][] useful for managing your initialization code when switching between different backing services. See the [guide below][] for constructor usage for each supported service [`*docstore.Collection`]: https://godoc.org/gocloud.dev/docstore#Collection [`docstore.OpenCollection`]: https://godoc.org/gocloud.dev/docstore#OpenCollection ["blank import"]: https://golang.org/doc/effective_go.html#blank_import [Concepts: URLs]: {{< ref "/concepts/urls.md" >}} [guide below]: {{< ref "#services" >}} [`wire` package]: http://github.com/google/wire ## Using a Collection {#using} ### Representing Documents {#rep-doc} We'll use a collection with documents represented by this Go struct: ```go type Player struct { Name string Score int DocstoreRevision interface{} } ``` We recommend using structs for documents because they impose some structure on your data, but Docstore also accepts `map[string]interface{}` values. See [the `docstore` package documentation](https://godoc.org/gocloud.dev/docstore#hdr-Documents) for more information. The `DocstoreRevision` field holds information about the latest revision of the document. We discuss it [below]({{< ref "#rev" >}}). ### Actions {#actions} Once you have [opened a collection]( {{< ref "#opening" >}}), you can call action methods on it to read, modify and write documents. You can execute a single action, or run multiple actions together in an [_action list_]({{ ref "act-list" }}). Docstore supports six kinds of actions on documents: - `Get` retrieves a document. - `Create` creates a new document. - `Replace` replaces an existing document. - `Put` puts a document whether or not it already exists. - `Update` applies a set of modifications to a document. - `Delete` deletes a document. You can create a single document with the `Collection.Create` method, we will use `coll` as the variable holding the collection throughout the guide: ```go err := coll.Create(ctx, &Player{Name: "Pat", Score: 10}) if err != nil { return err } ``` #### Action Lists {#act-list} When you use an action list to perform multiple actions at once, drivers can optimize action lists by using bulk RPCs, running the actions concurrently, or employing a provider's special features to improve efficiency and reduce cost. Here we create several documents using an action list. {{< goexample "gocloud.dev/docstore.ExampleCollection_Actions_bulkWrite" >}} `ActionList` has a fluent API, so you can build and execute a sequence of actions in one line of code. Here we `Put` a document and immediately `Get` its new contents. {{< goexample "gocloud.dev/docstore.ExampleCollection_Actions_getAfterWrite" >}} If the underlying provider is eventually consistent, the result of the `Get` might not reflect the `Put`. Docstore only guarantees that it will perform the `Get` after the `Put` completes. See the documentation for [`docstore.ActionList`][] for the semantics of action list execution. [`docstore.ActionList`]: https://godoc.org/gocloud.dev/docstore#ActionList #### Updates {#act-update} Use `Update` to modify individual fields of a document. The `Update` action takes a set of modifications to document fields, and applies them all atomically. You can change the value of a field, increment it, or delete it. {{< goexample "gocloud.dev/docstore.ExampleCollection_Update" >}} ### Queries {#queries} Docstore's `Get` action lets you retrieve a single document by its primary key. Queries let you retrieve all documents that match some conditions. You can also use queries to delete or update all documents that match the conditions. #### Getting Documents {#qr-get} Like [actions]({{< ref "#actions" >}}), queries are built up in a fluent style. Just as a `Get` action returns one document, the `Query.Get` method returns several documents, in the form of an iterator. ```go iter := coll.Query().Where("Score", ">", 20).Get(ctx) defer iter.Stop() // Always call Stop on an iterator. ``` Repeatedly calling `Next` on the iterator will return all the matching documents. Like the `Get` action, `Next` will populate an empty document that you pass to it: ```go doc := &Player{} err := iter.Next(ctx, doc) ``` The iteration is over when `Next` returns `io.EOF`. {{< goexample "gocloud.dev/docstore.ExampleQuery_Get" >}} You can pass a list of fields to `Get` to reduce the amount of data transmitted. Queries support the following methods: - `Where` describes a condition on a document. You can ask whether a field is equal to, greater than, or less than a value. The "not equals" comparison isn't supported, because it isn't portable across providers. - `OrderBy` specifies the order of the resulting documents, by field and direction. For portability, you can specify at most one `OrderBy`, and its field must also be mentioned in a `Where` clause. - `Limit` limits the number of documents in the result. If a query returns an error, the message may help you fix the problem. Some features, like full table scans, have to be enabled via constructor options, because they can be expensive. Other queries may require that you manually create an index on the collection. ### Revisions {#rev} Docstore maintains a revision for every document. Whenever the document is changed, the revision is too. By default, Docstore stores the revision in a field named `DocstoreRevision`, but you can change the field name via an option to a `Collection` constructor. You can use revisions to perform _optimistic locking_, a technique for updating a document atomically: 1. `Get` a document. This reads the current revision. 2. Modify the document contents on the client (but do not change the revision). 3. `Replace` the document. If the document was changed since it was retrieved in step 1, the revision will be different, and Docstore will return an error instead of overwriting the document. 4. If the `Replace` failed, start again from step 1. {{< goexample "gocloud.dev/docstore.Example_optimisticLocking" >}} See [the Revisions section of the package documentation](https://godoc.org/gocloud.dev/docstore#hdr-Revisions) for more on revisions. ## Other Usage Samples * [CLI Sample](https://github.com/google/go-cloud/tree/master/samples/gocdk-docstore) * [Order Processor sample](https://gocloud.dev/tutorials/order/) * [docstore package examples](https://godoc.org/gocloud.dev/docstore#pkg-examples) ## Supported Docstore Services {#services} ### Google Cloud Firestore {#firestore} The [`gcpfirestore`](https://godoc.org/gocloud.dev/docstore/gcpfirestore) package supports [Google Cloud Firestore](https://cloud.google.com/firestore). Firestore documents are uniquely named by paths that are not part of the document content. In Docstore, these unique names are represented as part of the document. You must supply a way to extract a document's name from its contents. This can be done by specifying a document field that holds the name, or by providing a function to extract the name from a document. Firestore URLs provide the project and collection, as well as the field that holds the document name. `docstore.OpenCollection` will use Application Default Credentials; if you have authenticated via [`gcloud auth login`][], it will use those credentials. See [Application Default Credentials][GCP creds] to learn about authentication alternatives, including using environment variables. [GCP creds]: https://cloud.google.com/docs/authentication/production [`gcloud auth login`]: https://cloud.google.com/sdk/gcloud/reference/auth/login {{< goexample "gocloud.dev/docstore/gcpfirestore.Example_openCollectionFromURL" >}} Full details about acceptable URLs can be found under the API reference for [`gcpfirestore.URLOpener`][]. [`gcpfirestore.URLOpener`]: https://godoc.org/gocloud.dev/docstore/gcpfirestore#URLOpener #### Firestore Constructors {#firestore-ctor} The [`gcpfirestore.OpenCollection`][] constructor opens a Cloud Firestore collection as a Docstore collection. You must first connect a Firestore client using [`gcpfirestore.Dial`][] or the [`cloud.google.com/go/firestore/apiv1`](https://godoc.org/cloud.google.com/go/firestore/apiv1) package. In addition to a client, `OpenCollection` requires a Google Cloud project ID, the path to the Firestore collection, and the name of the field that holds the document name. {{< goexample "gocloud.dev/docstore/gcpfirestore.ExampleOpenCollection" >}} Instead of mapping the document name to a field, you can supply a function to construct the name from the document contents with [`gcpfirestore.OpenCollectionWithNameFunc`][]. This can be useful for documents whose name is the combination of two or more fields. {{< goexample "gocloud.dev/docstore/gcpfirestore.ExampleOpenCollectionWithNameFunc" >}} [`gcpfirestore.Dial`]: https://godoc.org/gocloud.dev/docstore/gcpfirestore#Dial [`gcpfirestore.OpenCollection`]: https://godoc.org/gocloud.dev/docstore/gcpfirestore#OpenCollection [`gcpfirestore.OpenCollectionWithNameFunc`]: https://godoc.org/gocloud.dev/docstore/gcpfirestore#OpenCollectionWithNameFunc ### Amazon DynamoDB {#dynamodb} The [`awsdynamodb`](https://godoc.org/gocloud.dev/docstore/awsdynamodb) package supports [Amazon DynamoDB](https://aws.amazon.com/dynamodb). A Docstore collection corresponds to a DynamoDB table. DynamoDB URLs provide the table, partition key field and optionally the sort key field for the collection. `docstore.OpenCollection` will create a default AWS Session with the `SharedConfigEnable` option enabled; if you have authenticated with the AWS CLI, it will use those credentials. See [AWS Session][] to learn about authentication alternatives, including using environment variables. [AWS Session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ {{< goexample "gocloud.dev/docstore/awsdynamodb.Example_openCollectionFromURL" >}} Full details about acceptable URLs can be found under the API reference for [`awsdynamodb.URLOpener`][]. #### DynamoDB Constructor {#dynamodb-ctor} The [`awsdynamodb.OpenCollection`][] constructor opens a DynamoDB table as a Docstore collection. You must first create an [AWS session][] with the same region as your collection: {{< goexample "gocloud.dev/docstore/awsdynamodb.ExampleOpenCollection" >}} [AWS session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ [`awsdynamodb.OpenCollection`]: https://godoc.org/gocloud.dev/docstore/awsdynamodb#OpenCollection [`awsdynamodb.URLOpener`]: https://godoc.org/gocloud.dev/docstore/awsdynamodb#URLOpener ### Azure Cosmos DB {#cosmosdb} [Azure Cosmos DB][] is compatible with the MongoDB API. You can use the [`mongodocstore`][] package to connect to Cosmos DB. You must [create an Azure Cosmos account][] and get the MongoDB [connection string][]. When you use MongoDB URLs to connect to Cosmos DB, specify the Mongo server URL by setting the `MONGO_SERVER_URL` environment variable to the connection string. See the [MongoDB section][] for more details and examples on how to use the package. [Azure Cosmos DB]: https://docs.microsoft.com/en-us/azure/cosmos-db/ [create an Azure Cosmos account]: https://docs.microsoft.com/en-us/azure/cosmos-db/create-mongodb-dotnet [connection string]: https://docs.microsoft.com/en-us/azure/cosmos-db/connect-mongodb-account#QuickstartConnection [MongoDB section]: {{< ref "#mongo" >}} #### Cosmos DB Constructors {#cosmosdb-ctor} The [`mongodocstore.OpenCollection`][] constructor can open a Cosmos DB collection. You must first obtain a standard MongoDB Go client with your Cosmos connections string. See the [MongoDB constructor section][] for more details and examples. [MongoDB constructor section]: {{< ref "#mongo-ctor" >}} ### MongoDB {#mongo} The [`mongodocstore`][] package supports the popular [MongoDB](https://mongodb.org) document store. MongoDB documents are uniquely identified by a field called `_id`. In Docstore, you can choose a different name for this field, or provide a function to extract the document ID from a document. MongoDB URLs provide the database and collection, and optionally the field that holds the document ID. Specify the Mongo server URL by setting the `MONGO_SERVER_URL` environment variable. {{< goexample "gocloud.dev/docstore/mongodocstore.Example_openCollectionFromURL" >}} Full details about acceptable URLs can be found under the API reference for [`mongodocstore.URLOpener`][]. [`mongodocstore.URLOpener`]: https://godoc.org/gocloud.dev/docstore/mongodocstore#URLOpener #### MongoDB Constructors {#mongo-ctor} The [`mongodocstore.OpenCollection`][] constructor opens a MongoDB collection. You must first obtain a standard MongoDB Go client using [`mongodocstore.Dial`][] or the package [`go.mongodb.org/mongo-driver/mongo`](https://godoc.org/go.mongodb.org/mongo-driver/mongo). Obtain a `*mongo.Collection` from the client with `client.Database(dbName).Collection(collName)`. Then pass the result to `mongodocstore.OpenCollection` along with the name of the ID field, or `""` to use `_id`. {{< goexample "gocloud.dev/docstore/mongodocstore.ExampleOpenCollection" >}} Instead of mapping the document ID to a field, you can supply a function to construct the ID from the document contents with [`mongodocstore.OpenCollectionWithIDFunc`][]. This can be useful for documents whose name is the combination of two or more fields. {{< goexample "gocloud.dev/docstore/mongodocstore.ExampleOpenCollectionWithIDFunc" >}} [`mongodocstore`]: https://godoc.org/gocloud.dev/docstore/mongodocstore [`mongodocstore.Dial`]: https://godoc.org/gocloud.dev/docstore/mongodocstore#Dial [`mongodocstore.OpenCollection`]: https://godoc.org/gocloud.dev/docstore/mongodocstore#OpenCollection [`mongodocstore.OpenCollectionWithIDFunc`]: https://godoc.org/gocloud.dev/docstore/mongodocstore#OpenCollectionWithIDFunc ### In-Memory Document Store {#mem} The [`memdocstore`](https://godoc.org/gocloud.dev/docstore/mongodocstore) package implements an in-memory document store suitable for testing and development. URLs for the in-memory store have a `mem:` scheme. The URL host is used as the the collection name, and the URL path is used as the name of the document field to use as a primary key. {{< goexample "gocloud.dev/docstore/memdocstore.Example_openCollectionFromURL" >}} Full details about acceptable URLs can be found under the API reference for [`memdocstore.URLOpener`][]. [`memdocstore.URLOpener`]: https://godoc.org/gocloud.dev/docstore/memdocstore#URLOpener #### Mem Constructors {#mem-ctor} The [`memdocstore.OpenCollection`][] constructor creates and opens a collection, taking the name of the key field. {{< goexample "gocloud.dev/docstore/memdocstore.ExampleOpenCollection" >}} You can instead supply a function to construct the primary key from the document contents with [`memdocstore.OpenCollectionWithKeyFunc`][]. This can be useful for documents whose name is the combination of two or more fields. {{< goexample "gocloud.dev/docstore/memdocstore.ExampleOpenCollectionWithKeyFunc" >}} [`memdocstore.OpenCollection`]: https://godoc.org/gocloud.dev/docstore/memdocstore#OpenCollection [`memdocstore.OpenCollectionWithKeyFunc`]: https://godoc.org/gocloud.dev/docstore/memdocstore#OpenCollectionWithKeyFunc go-cloud-0.20.0/internal/website/content/howto/pubsub/000077500000000000000000000000001367004507500227015ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/howto/pubsub/_index.md000066400000000000000000000021561367004507500244750ustar00rootroot00000000000000--- title: "Pub/Sub" date: 2019-03-26T09:44:06-07:00 showInSidenav: true --- The [`pubsub` package][] provides an easy and portable way to interact with publish/subscribe systems. This guide shows how to work with pubsub in the Go CDK. The [publish/subscribe model][] allows parts of a system to publish messages that other parts of a system may subscribe to. This is commonly used to arrange for work to happen at some point after an interactive frontend request is finished or in other event-driven computing. The [`pubsub` package][] supports operations to publish messages to a topic and to subscribe to receive messages from a topic. Subpackages contain driver implementations of pubsub for various services, including Cloud and on-prem solutions. You can develop your application locally using [`mempubsub`][], then deploy it to multiple Cloud providers with minimal initialization reconfiguration. [publish/subscribe model]: https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern [`pubsub` package]: https://godoc.org/gocloud.dev/pubsub [`mempubsub`]: https://godoc.org/gocloud.dev/pubsub/mempubsub go-cloud-0.20.0/internal/website/content/howto/pubsub/publish.md000066400000000000000000000301531367004507500246730ustar00rootroot00000000000000--- title: "Publish Messages to a Topic" date: 2019-03-26T09:44:15-07:00 lastmod: 2019-07-29T12:00:00-07:00 weight: 1 toc: true --- Publishing a message to a topic with the Go CDK takes two steps: 1. [Open a topic][] with the Pub/Sub provider of your choice (once per topic). 2. [Send messages][] on the topic. [Open a topic]: {{< ref "#opening" >}} [Send messages]: {{< ref "#sending" >}} ## Opening a Topic {#opening} The first step in publishing messages to a topic is to instantiate a portable [`*pubsub.Topic`][] for your service. The easiest way to do so is to use [`pubsub.OpenTopic`][] and a service-specific URL pointing to the topic, making sure you ["blank import"][] the driver package to link it in. ```go import ( "context" "gocloud.dev/pubsub" _ "gocloud.dev/pubsub/" ) ... ctx := context.Background() topic, err := pubsub.OpenTopic(ctx, "") if err != nil { return fmt.Errorf("could not open topic: %v", err) } defer topic.Shutdown(ctx) // topic is a *pubsub.Topic; see usage below ... ``` See [Concepts: URLs][] for general background and the [guide below][] for URL usage for each supported service. Alternatively, if you need fine-grained control over the connection settings, you can call the constructor function in the driver package directly (like `gcppubsub.OpenTopic`). ```go import "gocloud.dev/pubsub/" ... topic, err := .OpenTopic(...) ... ``` You may find the [`wire` package][] useful for managing your initialization code when switching between different backing services. See the [guide below][] for constructor usage for each supported service. [guide below]: {{< ref "#services" >}} [`*pubsub.Topic`]: https://godoc.org/gocloud.dev/pubsub#Topic [`pubsub.OpenTopic`]: https://godoc.org/gocloud.dev/pubsub#OpenTopic ["blank import"]: https://golang.org/doc/effective_go.html#blank_import [Concepts: URLs]: {{< ref "/concepts/urls.md" >}} [`wire` package]: http://github.com/google/wire ## Sending Messages on a Topic {#sending} Sending a message on a [Topic](https://godoc.org/gocloud.dev/pubsub#Topic) looks like this: {{< goexample src="gocloud.dev/pubsub.ExampleTopic_Send" imports="0" >}} Note that the [semantics of message delivery][] can vary by backing service. [semantics of message delivery]: https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery ## Other Usage Samples * [CLI Sample](https://github.com/google/go-cloud/tree/master/samples/gocdk-pubsub) * [Order Processor sample](https://gocloud.dev/tutorials/order/) * [pubsub package examples](https://godoc.org/gocloud.dev/pubsub#pkg-examples) ## Supported Pub/Sub Services {#services} ### Google Cloud Pub/Sub {#gcp} The Go CDK can publish to a Google [Cloud Pub/Sub][] topic. The URLs use the project ID and the topic ID. [Cloud Pub/Sub]: https://cloud.google.com/pubsub/docs/ `pubsub.OpenTopic` will use Application Default Credentials; if you have authenticated via [`gcloud auth login`][], it will use those credentials. See [Application Default Credentials][GCP creds] to learn about authentication alternatives, including using environment variables. [GCP creds]: https://cloud.google.com/docs/authentication/production [`gcloud auth login`]: https://cloud.google.com/sdk/gcloud/reference/auth/login {{< goexample "gocloud.dev/pubsub/gcppubsub.Example_openTopicFromURL" >}} #### Google Cloud Pub/Sub Constructor {#gcp-ctor} The [`gcppubsub.OpenTopic`][] constructor opens a Cloud Pub/Sub topic. You must first obtain [GCP credentials][GCP creds] and then create a gRPC connection to Cloud Pub/Sub. (This gRPC connection can be reused among topics.) {{< goexample "gocloud.dev/pubsub/gcppubsub.ExampleOpenTopic" >}} [`gcppubsub.OpenTopic`]: https://godoc.org/gocloud.dev/pubsub/gcppubsub#OpenTopic ### Amazon Simple Notification Service {#sns} The Go CDK can publish to an Amazon [Simple Notification Service][SNS] (SNS) topic. SNS URLs in the Go CDK use the Amazon Resource Name (ARN) to identify the topic. You should specify the `region` query parameter to ensure your application connects to the correct region. [SNS]: https://aws.amazon.com/sns/ `pubsub.OpenTopic` will create a default AWS Session with the `SharedConfigEnable` option enabled; if you have authenticated with the AWS CLI, it will use those credentials. See [AWS Session][] to learn about authentication alternatives, including using environment variables. [AWS Session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ {{< goexample "gocloud.dev/pubsub/awssnssqs.Example_openSNSTopicFromURL" >}} SNS messages are restricted to UTF-8 clean payloads. If your application sends a message that contains non-UTF-8 bytes, then the Go CDK will automatically [Base64][] encode the message and add a `base64encoded` message attribute. When subscribing to messages on the topic through the Go CDK, these will be [automatically Base64 decoded][SQS Subscribe], but if you are receiving messages from a topic in a program that does not use the Go CDK, you may need to manually Base64 decode the message payload. [Base64]: https://en.wikipedia.org/wiki/Base64 [SQS Subscribe]: {{< relref "./subscribe.md#sqs" >}} #### Amazon SNS Constructor {#sns-ctor} The [`awssnssqs.OpenSNSTopic`][] constructor opens an SNS topic. You must first create an [AWS session][] with the same region as your topic: {{< goexample "gocloud.dev/pubsub/awssnssqs.ExampleOpenSNSTopic" >}} [`awssnssqs.OpenSNSTopic`]: https://godoc.org/gocloud.dev/pubsub/awssnssqs#OpenSNSTopic [AWS session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ ### Amazon Simple Queue Service {#sqs} The Go CDK can publish to an Amazon [Simple Queue Service][SQS] (SQS) topic. SQS URLs closely resemble the the queue URL, except the leading `https://` is replaced with `awssqs://`. You can specify the `region` query parameter to ensure your application connects to the correct region, but otherwise `pubsub.OpenTopic` will use the region found in the environment variables or your AWS CLI configuration. {{< goexample "gocloud.dev/pubsub/awssnssqs.Example_openSQSTopicFromURL" >}} SQS messages are restricted to UTF-8 clean payloads. If your application sends a message that contains non-UTF-8 bytes, then the Go CDK will automatically [Base64][] encode the message and add a `base64encoded` message attribute. When subscribing to messages on the topic through the Go CDK, these will be [automatically Base64 decoded][SQS Subscribe], but if you are receiving messages from a topic in a program that does not use the Go CDK, you may need to manually Base64 decode the message payload. [Base64]: https://en.wikipedia.org/wiki/Base64 [SQS Subscribe]: {{< relref "./subscribe.md#sqs" >}} [SQS]: https://aws.amazon.com/sqs/ #### Amazon SQS Constructor {#sqs-ctor} The [`awssnssqs.OpenSQSTopic`][] constructor opens an SQS topic. You must first create an [AWS session][] with the same region as your topic: {{< goexample "gocloud.dev/pubsub/awssnssqs.ExampleOpenSQSTopic" >}} [`awssnssqs.OpenSQSTopic`]: https://godoc.org/gocloud.dev/pubsub/awssnssqs#OpenSQSTopic [AWS session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ ### Azure Service Bus {#azure} The Go CDK can publish to an [Azure Service Bus][] topic over [AMQP 1.0][]. The URL for publishing is the topic name. `pubsub.OpenTopic` will use the environment variable `SERVICEBUS_CONNECTION_STRING` to obtain the Service Bus connection string. The connection string can be obtained [from the Azure portal][Azure connection string]. {{< goexample "gocloud.dev/pubsub/azuresb.Example_openTopicFromURL" >}} [AMQP 1.0]: https://www.amqp.org/ [Azure connection string]: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-how-to-use-topics-subscriptions#get-the-connection-string [Azure Service Bus]: https://azure.microsoft.com/en-us/services/service-bus/ #### Azure Service Bus Constructor {#azure-ctor} The [`azuresb.OpenTopic`][] constructor opens an Azure Service Bus topic. You must first connect to the topic using the [Azure Service Bus library][] and then pass it to `azuresb.OpenTopic`. There are also helper functions in the `azuresb` package to make this easier. {{< goexample "gocloud.dev/pubsub/azuresb.ExampleOpenTopic" >}} [`azuresb.OpenTopic`]: https://godoc.org/gocloud.dev/pubsub/azuresb#OpenTopic [Azure Service Bus library]: https://github.com/Azure/azure-service-bus-go ### RabbitMQ {#rabbitmq} The Go CDK can publish to an [AMQP 0.9.1][] fanout exchange, the dialect of AMQP spoken by [RabbitMQ][]. A RabbitMQ URL only includes the exchange name. The RabbitMQ's server is discovered from the `RABBIT_SERVER_URL` environment variable (which is something like `amqp://guest:guest@localhost:5672/`). {{< goexample "gocloud.dev/pubsub/rabbitpubsub.Example_openTopicFromURL" >}} [AMQP 0.9.1]: https://www.rabbitmq.com/protocol.html [RabbitMQ]: https://www.rabbitmq.com #### RabbitMQ Constructor {#rabbitmq-ctor} The [`rabbitpubsub.OpenTopic`][] constructor opens a RabbitMQ exchange. You must first create an [`*amqp.Connection`][] to your RabbitMQ instance. {{< goexample "gocloud.dev/pubsub/rabbitpubsub.ExampleOpenTopic" >}} [`*amqp.Connection`]: https://godoc.org/github.com/streadway/amqp#Connection [`rabbitpubsub.OpenTopic`]: https://godoc.org/gocloud.dev/pubsub/rabbitpubsub#OpenTopic ### NATS {#nats} The Go CDK can publish to a [NATS][] subject. A NATS URL only includes the subject name. The NATS server is discovered from the `NATS_SERVER_URL` environment variable (which is something like `nats://nats.example.com`). {{< goexample "gocloud.dev/pubsub/natspubsub.Example_openTopicFromURL" >}} Because NATS does not natively support metadata, messages sent to NATS will be encoded with [gob][]. [gob]: https://golang.org/pkg/encoding/gob/ [NATS]: https://nats.io/ #### NATS Constructor {#nats-ctor} The [`natspubsub.OpenTopic`][] constructor opens a NATS subject as a topic. You must first create an [`*nats.Conn`][] to your NATS instance. {{< goexample "gocloud.dev/pubsub/natspubsub.ExampleOpenTopic" >}} [`*nats.Conn`]: https://godoc.org/github.com/nats-io/go-nats#Conn [`natspubsub.OpenTopic`]: https://godoc.org/gocloud.dev/pubsub/natspubsub#OpenTopic ### Kafka {#kafka} The Go CDK can publish to a [Kafka][] cluster. A Kafka URL only includes the topic name. The brokers in the Kafka cluster are discovered from the `KAFKA_BROKERS` environment variable (which is a comma-delimited list of hosts, something like `1.2.3.4:9092,5.6.7.8:9092`). {{< goexample "gocloud.dev/pubsub/kafkapubsub.Example_openTopicFromURL" >}} [Kafka]: https://kafka.apache.org/ #### Kafka Constructor {#kafka-ctor} The [`kafkapubsub.OpenTopic`][] constructor opens a Kafka topic to publish messages to. Depending on your Kafka cluster configuration (see `auto.create.topics.enable`), you may need to provision the topic beforehand. In addition to the list of brokers, you'll need a [`*sarama.Config`][], which exposes many knobs that can affect performance and semantics; review and set them carefully. [`kafkapubsub.MinimalConfig`][] provides a minimal config to get you started. {{< goexample "gocloud.dev/pubsub/kafkapubsub.ExampleOpenTopic" >}} [`*sarama.Config`]: https://godoc.org/github.com/Shopify/sarama#Config [`kafkapubsub.OpenTopic`]: https://godoc.org/gocloud.dev/pubsub/kafkapubsub#OpenTopic [`kafkapubsub.MinimalConfig`]: https://godoc.org/gocloud.dev/pubsub/kafkapubsub#MinimalConfig ### In-Memory {#mem} The Go CDK includes an in-memory Pub/Sub provider useful for local testing. The names in `mem://` URLs are a process-wide namespace, so subscriptions to the same name will receive messages posted to that topic. This is detailed more in the [subscription guide][subscribe-mem]. {{< goexample "gocloud.dev/pubsub/mempubsub.Example_openTopicFromURL" >}} [subscribe-mem]: {{< ref "./subscribe.md#mem" >}} #### In-Memory Constructor {#mem-ctor} To create an in-memory Pub/Sub topic, use the [`mempubsub.NewTopic` function][]. You can use the returned topic to create in-memory subscriptions, as detailed in the [subscription guide][subscribe-mem-ctor]. {{< goexample "gocloud.dev/pubsub/mempubsub.ExampleNewTopic" >}} [`mempubsub.NewTopic` function]: https://godoc.org/gocloud.dev/pubsub/mempubsub#NewTopic [subscribe-mem-ctor]: {{< ref "./subscribe.md#mem-ctor" >}} go-cloud-0.20.0/internal/website/content/howto/pubsub/subscribe.md000066400000000000000000000302461367004507500252110ustar00rootroot00000000000000--- title: "Subscribe to Messages from a Topic" date: 2019-03-26T09:44:33-07:00 lastmod: 2019-07-29T12:00:00-07:00 weight: 2 toc: true --- Subscribing to receive message from a topic with the Go CDK takes three steps: 1. [Open a subscription][] to a topic with the Pub/Sub service of your choice (once per subscription). 2. [Receive and acknowledge messages][] from the topic. After completing any work related to the message, use the Ack method to prevent it from being redelivered. [Open a subscription]: {{< ref "#opening" >}} [Receive and acknowledge messages]: {{< ref "#receiving" >}} ## Opening a Subscription {#opening} The first step in subscribing to receive messages from a topic is to instantiate a portable [`*pubsub.Subscription`][] for your service. The easiest way to do so is to use [`pubsub.OpenSubscription`][] and a service-specific URL pointing to the topic, making sure you ["blank import"][] the driver package to link it in. ```go import ( "context" "gocloud.dev/pubsub" _ "gocloud.dev/pubsub/" ) ... ctx := context.Background() subs, err := pubsub.OpenSubscription(ctx, "") if err != nil { return fmt.Errorf("could not open topic subscription: %v", err) } defer subs.Shutdown(ctx) // subs is a *pubsub.Subscription; see usage below ... ``` See [Concepts: URLs][] for general background and the [guide below][] for URL usage for each supported service. Alternatively, if you need fine-grained control over the connection settings, you can call the constructor function in the driver package directly (like `gcppubsub.OpenSubscription`). ```go import "gocloud.dev/pubsub/" ... subs, err := .OpenSubscription(...) ... ``` You may find the [`wire` package][] useful for managing your initialization code when switching between different backing services. See the [guide below][] for constructor usage for each supported service. [guide below]: {{< ref "#services" >}} [`pubsub.OpenSubscription`]: https://godoc.org/gocloud.dev/pubsub#OpenTopic ["blank import"]: https://golang.org/doc/effective_go.html#blank_import [Concepts: URLs]: {{< ref "/concepts/urls.md" >}} [`wire` package]: http://github.com/google/wire ## Receiving and Acknowledging Messages {#receiving} A simple subscriber that operates on [messages](https://godoc.org/gocloud.dev/pubsub#Message) serially looks like this: {{< goexample src="gocloud.dev/pubsub.ExampleSubscription_Receive" imports="0" >}} If you want your subscriber to operate on incoming messages concurrently, you can start multiple goroutines: {{< goexample src="gocloud.dev/pubsub.ExampleSubscription_Receive_concurrent" imports="0" >}} Note that the [semantics of message delivery][] can vary by backing service. [`*pubsub.Subscription`]: https://godoc.org/gocloud.dev/pubsub#Subscription [semantics of message delivery]: https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery ## Other Usage Samples * [CLI Sample](https://github.com/google/go-cloud/tree/master/samples/gocdk-pubsub) * [Order Processor sample](https://gocloud.dev/tutorials/order/) * [pubsub package examples](https://godoc.org/gocloud.dev/pubsub#pkg-examples) ## Supported Pub/Sub Services {#services} ### Google Cloud Pub/Sub {#gcp} The Go CDK can receive messages from a Google [Cloud Pub/Sub][] subscription. The URLs use the project ID and the subscription ID. [Cloud Pub/Sub]: https://cloud.google.com/pubsub/docs/ `pubsub.OpenSubscription` will use Application Default Credentials; if you have authenticated via [`gcloud auth login`][], it will use those credentials. See [Application Default Credentials][GCP creds] to learn about authentication alternatives, including using environment variables. [GCP creds]: https://cloud.google.com/docs/authentication/production [`gcloud auth login`]: https://cloud.google.com/sdk/gcloud/reference/auth/login {{< goexample "gocloud.dev/pubsub/gcppubsub.Example_openSubscriptionFromURL" >}} #### Google Cloud Pub/Sub Constructor {#gcp-ctor} The [`gcppubsub.OpenSubscription`][] constructor opens a Cloud Pub/Sub subscription. You must first obtain [GCP credentials][GCP creds] and then create a gRPC connection to Cloud Pub/Sub. (This gRPC connection can be reused among subscriptions.) {{< goexample "gocloud.dev/pubsub/gcppubsub.ExampleOpenSubscription" >}} [`gcppubsub.OpenSubscription`]: https://godoc.org/gocloud.dev/pubsub/gcppubsub#OpenSubscription ### Amazon Simple Queueing Service {#sqs} The Go CDK can subscribe to an Amazon [Simple Queueing Service][SQS] (SQS) topic. SQS URLs closely resemble the the queue URL, except the leading `https://` is replaced with `awssqs://`. You should specify the `region` query parameter to ensure your application connects to the correct region. [SQS]: https://aws.amazon.com/sqs/ `pubsub.OpenSubscription` will create a default AWS Session with the `SharedConfigEnable` option enabled; if you have authenticated with the AWS CLI, it will use those credentials. See [AWS Session][] to learn about authentication alternatives, including using environment variables. [AWS Session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ {{< goexample "gocloud.dev/pubsub/awssnssqs.Example_openSubscriptionFromURL" >}} If your messages are being sent to SQS directly, or if they are being delivered via an SNS topic with `RawMessageDelivery` enabled, set a `raw=true` query parameter in your URL, or set `SubscriberOptions.Raw` to `true` if you're using the constructors. By default, the subscription will use heuristics to identify whether the message bodies are raw or [SNS JSON][]. Messages with a `base64encoded` message attribute will be automatically [Base64][] decoded before being returned. See the [SNS publishing guide][] or the [SQS publshing guide][] for more details. [Base64]: https://en.wikipedia.org/wiki/Base64 [SNS publishing guide]: {{< ref "./publish.md#sns" >}} [SQS publishing guide]: {{< ref "./publish.md#sqs" >}} [SNS JSON]: https://aws.amazon.com/sns/faqs/#Raw_message_delivery #### Amazon SQS Constructor {#sqs-ctor} The [`awssnssqs.OpenSubscription`][] constructor opens an SQS queue. You must first create an [AWS session][] with the same region as your topic: {{< goexample "gocloud.dev/pubsub/awssnssqs.ExampleOpenSubscription" >}} [`awssnssqs.OpenSubscription`]: https://godoc.org/gocloud.dev/pubsub/awssnssqs#OpenSubscription [AWS session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ ### Azure Service Bus {#azure} The Go CDK can recieve messages from an [Azure Service Bus][] subscription over [AMQP 1.0][]. The URL for subscribing is the topic name with the subscription name in the `subscription` query parameter. `pubsub.OpenSubscription` will use the environment variable `SERVICEBUS_CONNECTION_STRING` to obtain the Service Bus Connection String you need to copy [from the Azure portal][Azure connection string]. {{< goexample "gocloud.dev/pubsub/azuresb.Example_openSubscriptionFromURL" >}} [AMQP 1.0]: https://www.amqp.org/ [Azure connection string]: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-how-to-use-topics-subscriptions#get-the-connection-string [Azure Service Bus]: https://azure.microsoft.com/en-us/services/service-bus/ #### Azure Service Bus Constructor {#azure-ctor} The [`azuresb.OpenSubscription`][] constructor opens an Azure Service Bus subscription. You must first connect to the topic and subscription using the [Azure Service Bus library][] and then pass the subscription to `azuresb.OpenSubscription`. There are also helper functions in the `azuresb` package to make this easier. {{< goexample "gocloud.dev/pubsub/azuresb.ExampleOpenSubscription" >}} [`azuresb.OpenSubscription`]: https://godoc.org/gocloud.dev/pubsub/azuresb#OpenSubscription [Azure Service Bus library]: https://github.com/Azure/azure-service-bus-go ### RabbitMQ {#rabbitmq} The Go CDK can receive messages from an [AMQP 0.9.1][] queue, the dialect of AMQP spoken by [RabbitMQ][]. A RabbitMQ URL only includes the queue name. The RabbitMQ's server is discovered from the `RABBIT_SERVER_URL` environment variable (which is something like `amqp://guest:guest@localhost:5672/`). {{< goexample "gocloud.dev/pubsub/rabbitpubsub.Example_openSubscriptionFromURL" >}} [AMQP 0.9.1]: https://www.rabbitmq.com/protocol.html [RabbitMQ]: https://www.rabbitmq.com #### RabbitMQ Constructor {#rabbitmq-ctor} The [`rabbitpubsub.OpenSubscription`][] constructor opens a RabbitMQ queue. You must first create an [`*amqp.Connection`][] to your RabbitMQ instance. {{< goexample "gocloud.dev/pubsub/rabbitpubsub.ExampleOpenSubscription" >}} [`*amqp.Connection`]: https://godoc.org/github.com/streadway/amqp#Connection [`rabbitpubsub.OpenSubscription`]: https://godoc.org/gocloud.dev/pubsub/rabbitpubsub#OpenSubscription ### NATS {#nats} The Go CDK can publish to a [NATS][] subject. A NATS URL only includes the subject name. The NATS server is discovered from the `NATS_SERVER_URL` environment variable (which is something like `nats://nats.example.com`). {{< goexample "gocloud.dev/pubsub/natspubsub.Example_openSubscriptionFromURL" >}} NATS guarantees at-most-once delivery; it will never redeliver a message. Therefore, `Message.Ack` is a no-op. To parse messages [published via the Go CDK][publish#nats], the NATS driver will first attempt to decode the payload using [gob][]. Failing that, it will return the message payload as the `Data` with no metadata to accomodate subscribing to messages coming from a source not using the Go CDK. [gob]: https://golang.org/pkg/encoding/gob/ [NATS]: https://nats.io/ [publish#nats]: {{< ref "./publish.md#nats" >}} #### NATS Constructor {#nats-ctor} The [`natspubsub.OpenSubscription`][] constructor opens a NATS subject as a topic. You must first create an [`*nats.Conn`][] to your NATS instance. {{< goexample "gocloud.dev/pubsub/natspubsub.ExampleOpenSubscription" >}} [`*nats.Conn`]: https://godoc.org/github.com/nats-io/go-nats#Conn [`natspubsub.OpenSubscription`]: https://godoc.org/gocloud.dev/pubsub/natspubsub#OpenSubscription ### Kafka {#kafka} The Go CDK can receive messages from a [Kafka][] cluster. A Kafka URL includes the consumer group name, plus at least one instance of a query parameter specifying the topic to subscribe to. The brokers in the Kafka cluster are discovered from the `KAFKA_BROKERS` environment variable (which is a comma-delimited list of hosts, something like `1.2.3.4:9092,5.6.7.8:9092`). {{< goexample "gocloud.dev/pubsub/kafkapubsub.Example_openSubscriptionFromURL" >}} [Kafka]: https://kafka.apache.org/ #### Kafka Constructor {#kafka-ctor} The [`kafkapubsub.OpenSubscription`][] constructor creates a consumer in a consumer group, subscribed to one or more topics. In addition to the list of brokers, you'll need a [`*sarama.Config`][], which exposes many knobs that can affect performance and semantics; review and set them carefully. [`kafkapubsub.MinimalConfig`][] provides a minimal config to get you started. {{< goexample "gocloud.dev/pubsub/kafkapubsub.ExampleOpenSubscription" >}} [`*sarama.Config`]: https://godoc.org/github.com/Shopify/sarama#Config [`kafkapubsub.OpenSubscription`]: https://godoc.org/gocloud.dev/pubsub/kafkapubsub#OpenSubscription [`kafkapubsub.MinimalConfig`]: https://godoc.org/gocloud.dev/pubsub/kafkapubsub#MinimalConfig ### In-Memory {#mem} The Go CDK includes an in-memory Pub/Sub provider useful for local testing. The names in `mem://` URLs are a process-wide namespace, so subscriptions to the same name will receive messages posted to that topic. For instance, if you open a topic `mem://topicA` and open two subscriptions with `mem://topicA`, you will have two subscriptions to the same topic. {{< goexample "gocloud.dev/pubsub/mempubsub.Example_openSubscriptionFromURL" >}} #### In-Memory Constructor {#mem-ctor} To create a subscription to an in-memory Pub/Sub topic, pass the [topic you created][publish-mem-ctor] into the [`mempubsub.NewSubscription` function][]. You will also need to pass an acknowledgement deadline: once a message is received, if it is not acknowledged after the deadline elapses, then it will be redelivered. {{< goexample "gocloud.dev/pubsub/mempubsub.ExampleNewSubscription" >}} [`mempubsub.NewSubscription` function]: https://godoc.org/gocloud.dev/pubsub/mempubsub#NewSubscription [publish-mem-ctor]: {{< ref "./publish.md#mem-ctor" >}} go-cloud-0.20.0/internal/website/content/howto/runtimevar/000077500000000000000000000000001367004507500235755ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/howto/runtimevar/_index.md000066400000000000000000000210621367004507500253660ustar00rootroot00000000000000--- title: "Runtime Configuration" date: 2019-07-11T12:00:00-07:00 lastmod: 2019-07-29T12:00:00-07:00 showInSidenav: true toc: true --- The [`runtimevar` package][] provides an easy and portable way to watch runtime configuration variables. This guide shows how to work with runtime configuration variables using the Go CDK. Subpackages contain driver implementations of runtimevar for various services, including Cloud and on-prem solutions. You can develop your application locally using [`filevar`][] or [`constantvar`][], then deploy it to multiple Cloud providers with minimal initialization reconfiguration. [`runtimevar` package]: https://godoc.org/gocloud.dev/runtimevar [`filevar`]: https://godoc.org/gocloud.dev/runtimevar/filevar [`constantvar`]: https://godoc.org/gocloud.dev/runtimevar/constantvar ## Opening a Variable {#opening} The first step in watching a variable is to instantiate a portable [`*runtimevar.Variable`][] for your service. The easiest way to do so is to use [`runtimevar.OpenVariable`][] and a service-specific URL pointing to the variable, making sure you ["blank import"][] the driver package to link it in. ```go import ( "gocloud.dev/runtimevar" _ "gocloud.dev/runtimevar/" ) ... v, err := runtimevar.OpenVariable(context.Background(), "") if err != nil { return fmt.Errorf("could not open variable: %v", err) } defer v.Close() // v is a *runtimevar.Variable; see usage below ... ``` See [Concepts: URLs][] for general background and the [guide below][] for URL usage for each supported service. Alternatively, if you need fine-grained control over the connection settings, you can call the constructor function in the driver package directly (like `etcdvar.OpenVariable`). ```go import "gocloud.dev/runtimevar/" ... v, err := .OpenVariable(...) ... ``` You may find the [`wire` package][] useful for managing your initialization code when switching between different backing services. See the [guide below][] for constructor usage for each supported service. When opening the variable, you can provide a [decoder][] parameter (either as a [query parameter][] for URLs, or explicitly to the constructor) to specify whether the raw value stored in the variable is interpreted as a `string`, a `[]byte`, or as JSON. Here's an example of using a JSON encoder: {{< goexample src="gocloud.dev/runtimevar.Example_jsonDecoder" imports="0" >}} [`*runtimevar.Variable`]: https://godoc.org/gocloud.dev/runtimevar#Variable [`runtimevar.OpenVariable`]: https://godoc.org/gocloud.dev/runtimevar#OpenVariable ["blank import"]: https://golang.org/doc/effective_go.html#blank_import [Concepts: URLs]: {{< ref "/concepts/urls.md" >}} [decoder]: https://godoc.org/gocloud.dev/runtimevar#Decoder [guide below]: {{< ref "#services" >}} [query parameter]: https://godoc.org/gocloud.dev/runtimevar#DecoderByName [`wire` package]: http://github.com/google/wire ## Using a Variable {#using} Once you have opened a `runtimevar.Variable` for the provider you want, you can use it portably. ### Latest {#latest} The easiest way to a `Variable` is to use the [`Variable.Latest`][] method. It returns the latest good [`Snapshot`][] of the variable value, blocking if no good value has *ever* been detected. The dynamic type of `Snapshot.Value` depends on the decoder you provided when creating the `Variable`. {{< goexample src="gocloud.dev/runtimevar.ExampleVariable_Latest" imports="0" >}} To avoid blocking, you can pass an already-`Done` context. You can also use [`Variable.CheckHealth`][], which reports as healthy when `Latest` will return a value without blocking. [`Variable.Latest`]: https://godoc.org/gocloud.dev/runtimevar#Variable.Latest [`Variable.CheckHealth`]: https://godoc.org/gocloud.dev/runtimevar#Variable.CheckHealth [`Snapshot`]: https://godoc.org/gocloud.dev/runtimevar#Snapshot ### Watch {#watch} `Variable` also has a [`Watch`][] method for obtaining the value of a variable; it has different semantics than `Latest` and may be useful in some scenarios. We recommend starting with `Latest` as it's conceptually simpler to work with. [`Watch`]: https://godoc.org/gocloud.dev/runtimevar#Variable.Watch ## Other Usage Samples * [CLI Sample](https://github.com/google/go-cloud/tree/master/samples/gocdk-runtimevar) * [Guestbook sample](https://gocloud.dev/tutorials/guestbook/) * [runtimevar package examples](https://godoc.org/gocloud.dev/runtimevar#pkg-examples) ## Supported Services {#services} ### GCP Runtime Configurator {#gcprc} To open a variable stored in [GCP Runtime Configurator][] via a URL, you can use the `runtimevar.OpenVariable` function as shown in the example below. [GCP Runtime Configurator]: https://cloud.google.com/deployment-manager/runtime-configurator/ `runtimevar.OpenVariable` will use Application Default Credentials; if you have authenticated via [`gcloud auth login`][], it will use those credentials. See [Application Default Credentials][GCP creds] to learn about authentication alternatives, including using environment variables. [GCP creds]: https://cloud.google.com/docs/authentication/production [`gcloud auth login`]: https://cloud.google.com/sdk/gcloud/reference/auth/login {{< goexample "gocloud.dev/runtimevar/gcpruntimeconfig.Example_openVariableFromURL" >}} #### GCP Constructor {#gcprc-ctor} The [`gcpruntimeconfig.OpenVariable`][] constructor opens a Runtime Configurator variable. {{< goexample "gocloud.dev/runtimevar/gcpruntimeconfig.ExampleOpenVariable" >}} [`gcpruntimeconfig.OpenVariable`]: https://godoc.org/gocloud.dev/runtimevar/gcpruntimeconfig#OpenVariable ### AWS Parameter Store {#awsps} To open a variable stored in [AWS Parameter Store][] via a URL, you can use the `runtimevar.OpenVariable` function as shown in the example below. [AWS Parameter Store]: https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html `runtimevar.OpenVariable` will create a default AWS Session with the `SharedConfigEnable` option enabled; if you have authenticated with the AWS CLI, it will use those credentials. See [AWS Session][] to learn about authentication alternatives, including using environment variables. [AWS Session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ {{< goexample "gocloud.dev/runtimevar/awsparamstore.Example_openVariableFromURL" >}} #### AWS Constructor {#awsps-ctor} The [`awsparamstore.OpenVariable`][] constructor opens a Parameter Store variable. {{< goexample "gocloud.dev/runtimevar/awsparamstore.ExampleOpenVariable" >}} [`awsparamstore.OpenVariable`]: https://godoc.org/gocloud.dev/runtimevar/awsparamstore#OpenVariable ### etcd {#etcd} To open a variable stored in [etcd][] via URL, you can use the `runtimevar.OpenVariable` function as follows. {{< goexample "gocloud.dev/runtimevar/etcdvar.Example_openVariableFromURL" >}} [etcd]: https://etcd.io/ #### etcd Constructor {#etcd-ctor} The [`etcdvar.OpenVariable`][] constructor opens an `etcd` variable. [`etcdvar.OpenVariable`]: https://godoc.org/gocloud.dev/runtimevar/etcdvar#OpenVariable {{< goexample "gocloud.dev/runtimevar/etcdvar.ExampleOpenVariable" >}} ### HTTP {#http} `httpvar` supports watching a variable via an HTTP request. Use `runtimevar.OpenVariable` with a regular URL starting with `http` or `https`. `httpvar` will periodically make an HTTP `GET` request to that URL, with the `decode` URL parameter removed (if present). {{< goexample "gocloud.dev/runtimevar/httpvar.Example_openVariableFromURL" >}} #### HTTP Constructor {#http-ctor} The [`httpvar.OpenVariable`][] constructor opens a variable with a `http.Client` and a URL. {{< goexample "gocloud.dev/runtimevar/httpvar.ExampleOpenVariable" >}} [`httpvar.OpenVariable`]: https://godoc.org/gocloud.dev/runtimevar/httpvar#OpenVariable ### Blob {#blob} `blobvar` supports watching a variable based on the contents of a [Go CDK blob][]. Set the environment variable `BLOBVAR_BUCKET_URL` to the URL of the bucket, and then use `runtimevar.OpenVariable` as shown below. `blobvar` will periodically re-fetch the contents of the blob. {{< goexample "gocloud.dev/runtimevar/blobvar.Example_openVariableFromURL" >}} [Go CDK blob]: https://gocloud.dev/howto/blob/ You can also use [`blobvar.OpenVariable`][]. [`blobvar.OpenVariable`]: https://godoc.org/gocloud.dev/runtimevar/blobvar#OpenVariable ### Local {#local} You can create an in-memory variable (useful for testing) using `constantvar`: {{< goexample "gocloud.dev/runtimevar/constantvar.Example_openVariableFromURL" >}} Alternatively, you can create a variable based on the contents of a file using `filevar`: {{< goexample "gocloud.dev/runtimevar/filevar.Example_openVariableFromURL" >}} go-cloud-0.20.0/internal/website/content/howto/secrets/000077500000000000000000000000001367004507500230515ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/howto/secrets/_index.md000066400000000000000000000255321367004507500246500ustar00rootroot00000000000000--- title: "Secrets" date: 2019-03-21T17:42:18-07:00 lastmod: 2019-07-29T12:00:00-07:00 showInSidenav: true toc: true --- The [`secrets` package][] provides access to key management services in a portable way. This guide shows how to work with secrets in the Go CDK. Cloud applications frequently need to store sensitive information like web API credentials or encryption keys in a medium that is not fully secure. For example, an application that interacts with GitHub needs to store its OAuth2 client secret and use it when obtaining end-user credentials. If this information was compromised, it could allow someone else to impersonate the application. In order to keep such information secret and secure, you can encrypt the data, but then you need to worry about rotating the encryption keys and distributing them securely to all of your application servers. Most Cloud providers include a key management service to perform these tasks, usually with hardware-level security and audit logging. The [`secrets` package][] supports encryption and decryption operations. Subpackages contain driver implementations of secrets for various services, including Cloud and on-prem solutions. You can develop your application locally using [`localsecrets`][], then deploy it to multiple Cloud providers with minimal initialization reconfiguration. [`secrets` package]: https://godoc.org/gocloud.dev/secrets [`localsecrets`]: https://godoc.org/gocloud.dev/secrets/localsecrets ## Opening a SecretsKeeper {#opening} The first step in working with your secrets is to instantiate a portable [`*secrets.Keeper`][] for your service. The easiest way to do so is to use [`secrets.OpenKeeper`][] and a service-specific URL pointing to the keeper, making sure you ["blank import"][] the driver package to link it in. ```go import ( "gocloud.dev/secrets" _ "gocloud.dev/secrets/" ) ... keeper, err := secrets.OpenKeeper(context.Background(), "") if err != nil { return fmt.Errorf("could not open keeper: %v", err) } defer keeper.Close() // keeper is a *secrets.Keeper; see usage below ... ``` See [Concepts: URLs][] for general background and the [guide below][] for URL usage for each supported service. Alternatively, if you need fine-grained control over the connection settings, you can call the constructor function in the driver package directly (like `awskms.OpenKeeper`). ```go import "gocloud.dev/secrets/" ... keeper, err := .OpenKeeper(...) ... ``` You may find the [`wire` package][] useful for managing your initialization code when switching between different backing services. See the [guide below][] for constructor usage for each supported service. [`*secrets.Keeper`]: https://godoc.org/gocloud.dev/secrets#Keeper [`secrets.OpenKeeper`]: https://godoc.org/gocloud.dev/secrets#OpenKeeper ["blank import"]: https://golang.org/doc/effective_go.html#blank_import [Concepts: URLs]: {{< ref "/concepts/urls.md" >}} [guide below]: {{< ref "#services" >}} [`wire` package]: http://github.com/google/wire ## Using a SecretsKeeper {#using} Once you have [opened a secrets keeper][] for the secrets provider you want, you can encrypt and decrypt small messages using the keeper. [opened a secrets keeper]: {{< ref "#opening" >}} ### Encrypting Data {#encrypt} To encrypt data with a keeper, you call `Encrypt` with the byte slice you want to encrypt. {{< goexample src="gocloud.dev/secrets.ExampleKeeper_Encrypt" imports="0" >}} ### Decrypting Data {#decrypt} To decrypt data with a keeper, you call `Decrypt` with the byte slice you want to decrypt. This should be data that you obtained from a previous call to `Encrypt` with a keeper that uses the same secret material (e.g. two AWS KMS keepers created with the same customer master key ID). The `Decrypt` method will return an error if the input data is corrupted. {{< goexample src="gocloud.dev/secrets.ExampleKeeper_Decrypt" imports="0" >}} ### Large Messages {#large-messages} The secrets keeper API is designed to work with small messages (i.e. <10 KiB in length.) Cloud key management services are high latency; using them for encrypting or decrypting large amounts of data is prohibitively slow (and in some providers not permitted). If you need your application to encrypt or decrypt large amounts of data, you should: 1. Generate a key for the encryption algorithm (16KiB chunks with [`secretbox`][] is a reasonable approach). 2. Encrypt the key with secret keeper. 3. Store the encrypted key somewhere accessible to the application. When your application needs to encrypt or decrypt a large message: 1. Decrypt the key from storage using the secret keeper 2. Use the decrypted key to encrypt or decrypt the message inside your application. [`secretbox`]: https://godoc.org/golang.org/x/crypto/nacl/secretbox ### Keep Secrets in Configuration {#runtimevar} Once you have [opened a secrets keeper][] for the secrets provider you want, you can use a secrets keeper to access sensitive configuration stored in an encrypted `runtimevar`. First, you create a [`*runtimevar.Decoder`][] configured to use your secrets keeper using [`runtimevar.DecryptDecode`][]. In this example, we assume the data is a plain string, but the configuration could be a more structured type. {{< goexample src="gocloud.dev/runtimevar.ExampleDecryptDecode" imports="0" >}} Then you can pass the decoder to the runtime configuration provider of your choice. See the [Runtime Configuration How-To Guide][] for more on how to set up runtime configuration. [opened a secrets keeper]: {{< ref "#opening" >}} [Runtime Configuration How-To Guide]: {{< ref "/howto/runtimevar/_index.md" >}} [`*runtimevar.Decoder`]: https://godoc.org/gocloud.dev/runtimevar#Decoder [`runtimevar.DecryptDecode`]: https://godoc.org/gocloud.dev/runtimevar#DecryptDecode ## Other Usage Samples * [CLI Sample](https://github.com/google/go-cloud/tree/master/samples/gocdk-secrets) * [Secrets package examples](https://godoc.org/gocloud.dev/secrets#example-package) ## Supported Services {#services} ### Google Cloud Key Management Service {#gcp} The Go CDK can use keys from Google Cloud Platform's [Key Management Service][GCP KMS] (GCP KMS) to keep information secret. GCP KMS URLs are similar to [key resource IDs][]. [GCP KMS]: https://cloud.google.com/kms/ [key resource IDs]: https://cloud.google.com/kms/docs/object-hierarchy#key `secrets.OpenKeeper` will use Application Default Credentials; if you have authenticated via [`gcloud auth login`][], it will use those credentials. See [Application Default Credentials][GCP creds] to learn about authentication alternatives, including using environment variables. [GCP creds]: https://cloud.google.com/docs/authentication/production [`gcloud auth login`]: https://cloud.google.com/sdk/gcloud/reference/auth/login {{< goexample "gocloud.dev/secrets/gcpkms.Example_openFromURL" >}} #### GCP Constructor {#gcp-ctor} The [`gcpkms.OpenKeeper`][] constructor opens a GCP KMS key. You must first obtain [GCP credentials][GCP creds] and then create a gRPC connection to GCP KMS. {{< goexample "gocloud.dev/secrets/gcpkms.ExampleOpenKeeper" >}} [`gcpkms.OpenKeeper`]: https://godoc.org/gocloud.dev/secrets/gcpkms#OpenKeeper ### AWS Key Management Service {#aws} The Go CDK can use customer master keys from Amazon Web Service's [Key Management Service][AWS KMS] (AWS KMS) to keep information secret. AWS KMS URLs can use the key's ID, alias, or Amazon Resource Name (ARN) to identify the key. You should specify the `region` query parameter to ensure your application connects to the correct region. [AWS KMS]: https://aws.amazon.com/kms/ `secrets.OpenKeeper` will create a default AWS Session with the `SharedConfigEnable` option enabled; if you have authenticated with the AWS CLI, it will use those credentials. See [AWS Session][] to learn about authentication alternatives, including using environment variables. [AWS Session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ {{< goexample "gocloud.dev/secrets/awskms.Example_openFromURL" >}} #### AWS Constructor {#aws-ctor} The [`awskms.OpenKeeper`][] constructor opens a customer master key. You must first create an [AWS session][] with the same region as your key and then connect to KMS: {{< goexample "gocloud.dev/secrets/awskms.ExampleOpenKeeper" >}} [`awskms.OpenKeeper`]: https://godoc.org/gocloud.dev/secrets/awskms#OpenKeeper [AWS session]: https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ ### Azure KeyVault {#azure} The Go CDK can use keys from [Azure KeyVault][] to keep information secret. `secrets.OpenKeeper` will use [default credentials from the environment][Azure Environment Auth], unless you set the environment variable `AZURE_KEYVAULT_AUTH_VIA_CLI` to `true`, in which case it will use credentials from the `az` command line. Azure KeyVault URLs are based on the [Azure Key object identifer][Azure Key ID]: {{< goexample "gocloud.dev/secrets/azurekeyvault.Example_openFromURL" >}} [Azure KeyVault]: https://azure.microsoft.com/en-us/services/key-vault/ [Azure Environment Auth]: https://docs.microsoft.com/en-us/go/azure/azure-sdk-go-authorization#use-environment-based-authentication [Azure Key ID]: https://docs.microsoft.com/en-us/azure/key-vault/about-keys-secrets-and-certificates #### Azure Constructor {#azure-ctor} The [`azurekeyvault.OpenKeeper`][] constructor opens an Azure KeyVault key. {{< goexample "gocloud.dev/secrets/azurekeyvault.ExampleOpenKeeper" >}} [`azurekeyvault.OpenKeeper`]: https://godoc.org/gocloud.dev/secrets/azurekeyvault#OpenKeeper ### HashiCorp Vault {#vault} The Go CDK can use the [transit secrets engine][] in [Vault][] to keep information secret. Vault URLs only specify the key ID. The Vault server endpoint and authentication token are specified using the environment variables `VAULT_SERVER_URL` and `VAULT_SERVER_TOKEN`, respectively. {{< goexample "gocloud.dev/secrets/hashivault.Example_openFromURL" >}} [Vault]: https://www.vaultproject.io/ [transit secrets engine]: https://www.vaultproject.io/docs/secrets/transit/index.html #### HashiCorp Vault Constructor {#vault-ctor} The [`hashivault.OpenKeeper`][] constructor opens a transit secrets engine key. You must first connect to your Vault instance. {{< goexample "gocloud.dev/secrets/hashivault.ExampleOpenKeeper" >}} [`hashivault.OpenKeeper`]: https://godoc.org/gocloud.dev/secrets/hashivault#OpenKeeper ### Local Secrets {#local} The Go CDK can use local encryption for keeping secrets. Internally, it uses the [NaCl secret box][] algorithm to perform encryption and authentication. {{< goexample "gocloud.dev/secrets/localsecrets.Example_openFromURL" >}} [NaCl secret box]: https://godoc.org/golang.org/x/crypto/nacl/secretbox #### Local Secrets Constructor {#local-ctor} The [`localsecrets.NewKeeper`][] constructor takes in its secret material as a `[]byte`. {{< goexample "gocloud.dev/secrets/localsecrets.ExampleNewKeeper" >}} [`localsecrets.NewKeeper`]: https://godoc.org/gocloud.dev/secrets/localsecrets#NewKeeper go-cloud-0.20.0/internal/website/content/howto/server/000077500000000000000000000000001367004507500227075ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/howto/server/_index.md000066400000000000000000000051671367004507500245100ustar00rootroot00000000000000--- title: "Server" date: 2019-06-21T10:36:43-07:00 showInSidenav: true toc: true --- The Go CDK's `server` package provides a pre-configured HTTP server with diagnostic hooks for request logging, health checks, and trace exporting via OpenCensus. This guide will show you how to start up and shut down the server, as well as how to work with the request logging and health checks. ## Starting up the server The Go CDK Server constructor takes an `http.Handler` and an `Options` struct. The simplest way to start the server is to use `http.DefaultServeMux` and pass `nil` for the options. {{< goexample src="gocloud.dev/server.ExampleServer_New" >}} ### Adding a request logger You can use the `server.Options` struct to specify a request logger. The example is shown with the Go CDK [`requestlog`](https://godoc.org/gocloud.dev/server/requestlog) package's `NCSALogger`. To get logs in the Stackdriver JSON format, use `NewStackdriverLogger` in place of `NewNCSALogger`. {{< goexample src="gocloud.dev/server.ExampleServer_RequestLogger" >}} ### Adding health checks The Go CDK `server` package affords a hook for you to define health checks for your application and see the results at `/healthz/readiness`. The server also runs an endpoint at `/healthz/liveness`, which is a conventional name for a liveness check and is where Kubernetes, if you are using it, will look. Health checks are an important part of application monitoring, and readiness checks are subtly different than liveness checks. The liveness check will return `200 OK` if the server can serve requests. But because each application may have a different definition of what it means to be "healthy" (perhaps your application has a dependency on a back end service), you will need to define a concrete type to implement the `health.Checker` interface and define a `CheckHealth` method specific to your application for readiness checks. ```go // customHealthCheck is an example health check. It implements the // health.Checker interface and reports the server is healthy when the healthy // field is set to true. type customHealthCheck struct { mu sync.RWMutex healthy bool } // customHealthCheck implements the health.Checker interface because it has a // CheckHealth method. func (h *customHealthCheck) CheckHealth() error { h.mu.RLock() defer h.mu.RUnlock() if !h.healthy { return errors.New("not ready yet!") } return nil } ``` {{< goexample src="gocloud.dev/server.ExampleServer_HealthChecks" >}} ## Other Usage Samples * [Minimal server sample](https://github.com/google/go-cloud/tree/master/samples/server) * [Guestbook sample](https://gocloud.dev/tutorials/guestbook/) go-cloud-0.20.0/internal/website/content/howto/sql/000077500000000000000000000000001367004507500222005ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/howto/sql/_index.md000066400000000000000000000047461367004507500240030ustar00rootroot00000000000000--- title: "MySQL/PostgreSQL" date: 2019-06-21T09:26:56-07:00 showInSidenav: true toc: true --- Connecting to Cloud providers' hosted database services requires additional steps to ensure the security of the connection. For example, each of GCP, AWS and Azure require the use of custom certificate authorities to be configured in the client. GCP requires a custom proxy with authentication credentials. The Go CDK makes opening these connections easier while still using the standard [`*sql.DB`][] type. [`*sql.DB`]: https://godoc.org/database/sql#DB ## Local or On-Premise {#local} The Go CDK uses the same [URL opener pattern][] as seen in other Go CDK APIs. It differs from the standard library's `sql.Open` in that it automatically instruments the connection with [OpenCensus metrics][]. The portable function for MySQL is [`mysql.Open`][]: {{< goexample "gocloud.dev/mysql.ExampleOpen" >}} And the portable function for PostgreSQL is [`postgres.Open`][]: {{< goexample "gocloud.dev/postgres.ExampleOpen" >}} [`mysql.Open`]: https://godoc.org/gocloud.dev/mysql#Open [OpenCensus metrics]: https://opencensus.io/integrations/sql/go_sql/ [`postgres.Open`]: https://godoc.org/gocloud.dev/postgres#Open [URL opener pattern]: {{< ref "/concepts/urls.md" >}} ## GCP {#gcp} Users of [GCP Cloud SQL for MySQL][] should import the `gocloud.dev/mysql/gcpmysql` package: {{< goexample "gocloud.dev/mysql/gcpmysql.Example" >}} Users of [GCP Cloud SQL for PostgreSQL][] should import the `gocloud.dev/mysql/gcppostgres` package: {{< goexample "gocloud.dev/postgres/gcppostgres.Example" >}} [GCP Cloud SQL for MySQL]: https://cloud.google.com/sql/docs/mysql/ [GCP Cloud SQL for PostgreSQL]: https://cloud.google.com/sql/docs/postgres/ ## AWS {#aws} Users of [AWS RDS for MySQL][] should import the `gocloud.dev/mysql/awsmysql` package: {{< goexample "gocloud.dev/mysql/awsmysql.Example" >}} Users of [AWS RDS for PostgreSQL][] should import the `gocloud.dev/postgres/awspostgres` package: {{< goexample "gocloud.dev/postgres/awspostgres.Example" >}} [AWS RDS for MySQL]: https://aws.amazon.com/rds/mysql/ [AWS RDS for PostgreSQL]: https://aws.amazon.com/rds/postgresql/ ## Azure {#azure} Users of [Azure Database for MySQL][] should import the `gocloud.dev/mysql/azuremysql` package: {{< goexample "gocloud.dev/mysql/azuremysql.Example" >}} [Azure Database for MySQL]: https://azure.microsoft.com/en-us/services/mysql/ ## Other Usage Samples * [Guestbook sample](https://gocloud.dev/tutorials/guestbook/) go-cloud-0.20.0/internal/website/content/internal/000077500000000000000000000000001367004507500220555ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/batcher/000077500000000000000000000000001367004507500234655ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/batcher/_index.md000066400000000000000000000000661367004507500252570ustar00rootroot00000000000000--- title: gocloud.dev/internal/batcher type: pkg --- go-cloud-0.20.0/internal/website/content/internal/contributebot/000077500000000000000000000000001367004507500247405ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/contributebot/_index.md000066400000000000000000000000741367004507500265310ustar00rootroot00000000000000--- title: gocloud.dev/internal/contributebot type: pkg --- go-cloud-0.20.0/internal/website/content/internal/contributebot/webhook/000077500000000000000000000000001367004507500263765ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/contributebot/webhook/_index.md000066400000000000000000000001041367004507500301610ustar00rootroot00000000000000--- title: gocloud.dev/internal/contributebot/webhook type: pkg --- go-cloud-0.20.0/internal/website/content/internal/escape/000077500000000000000000000000001367004507500233155ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/escape/_index.md000066400000000000000000000000651367004507500251060ustar00rootroot00000000000000--- title: gocloud.dev/internal/escape type: pkg --- go-cloud-0.20.0/internal/website/content/internal/gcerr/000077500000000000000000000000001367004507500231575ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/gcerr/_index.md000066400000000000000000000000641367004507500247470ustar00rootroot00000000000000--- title: gocloud.dev/internal/gcerr type: pkg --- go-cloud-0.20.0/internal/website/content/internal/oc/000077500000000000000000000000001367004507500224565ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/oc/_index.md000066400000000000000000000000611367004507500242430ustar00rootroot00000000000000--- title: gocloud.dev/internal/oc type: pkg --- go-cloud-0.20.0/internal/website/content/internal/openurl/000077500000000000000000000000001367004507500235415ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/openurl/_index.md000066400000000000000000000000661367004507500253330ustar00rootroot00000000000000--- title: gocloud.dev/internal/openurl type: pkg --- go-cloud-0.20.0/internal/website/content/internal/releasehelper/000077500000000000000000000000001367004507500246755ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/releasehelper/_index.md000066400000000000000000000000741367004507500264660ustar00rootroot00000000000000--- title: gocloud.dev/internal/releasehelper type: pkg --- go-cloud-0.20.0/internal/website/content/internal/retry/000077500000000000000000000000001367004507500232225ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/retry/_index.md000066400000000000000000000000641367004507500250120ustar00rootroot00000000000000--- title: gocloud.dev/internal/retry type: pkg --- go-cloud-0.20.0/internal/website/content/internal/testing/000077500000000000000000000000001367004507500235325ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/testing/_index.md000066400000000000000000000000661367004507500253240ustar00rootroot00000000000000--- title: gocloud.dev/internal/testing type: pkg --- go-cloud-0.20.0/internal/website/content/internal/testing/cmdtest/000077500000000000000000000000001367004507500251755ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/testing/cmdtest/_index.md000066400000000000000000000000761367004507500267700ustar00rootroot00000000000000--- title: gocloud.dev/internal/testing/cmdtest type: pkg --- go-cloud-0.20.0/internal/website/content/internal/testing/octest/000077500000000000000000000000001367004507500250335ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/testing/octest/_index.md000066400000000000000000000000751367004507500266250ustar00rootroot00000000000000--- title: gocloud.dev/internal/testing/octest type: pkg --- go-cloud-0.20.0/internal/website/content/internal/testing/setup/000077500000000000000000000000001367004507500246725ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/testing/setup/_index.md000066400000000000000000000000741367004507500264630ustar00rootroot00000000000000--- title: gocloud.dev/internal/testing/setup type: pkg --- go-cloud-0.20.0/internal/website/content/internal/testing/terraform/000077500000000000000000000000001367004507500255335ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/testing/terraform/_index.md000066400000000000000000000001001367004507500273120ustar00rootroot00000000000000--- title: gocloud.dev/internal/testing/terraform type: pkg --- go-cloud-0.20.0/internal/website/content/internal/testing/test-summary/000077500000000000000000000000001367004507500262045ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/testing/test-summary/_index.md000066400000000000000000000001031367004507500277660ustar00rootroot00000000000000--- title: gocloud.dev/internal/testing/test-summary type: pkg --- go-cloud-0.20.0/internal/website/content/internal/trace/000077500000000000000000000000001367004507500231535ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/trace/_index.md000066400000000000000000000000641367004507500247430ustar00rootroot00000000000000--- title: gocloud.dev/internal/trace type: pkg --- go-cloud-0.20.0/internal/website/content/internal/useragent/000077500000000000000000000000001367004507500240525ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/useragent/_index.md000066400000000000000000000000701367004507500256370ustar00rootroot00000000000000--- title: gocloud.dev/internal/useragent type: pkg --- go-cloud-0.20.0/internal/website/content/internal/website/000077500000000000000000000000001367004507500235175ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/website/gatherexamples/000077500000000000000000000000001367004507500265305ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/internal/website/gatherexamples/_index.md000066400000000000000000000001051367004507500303140ustar00rootroot00000000000000--- title: gocloud.dev/internal/website/gatherexamples type: pkg --- go-cloud-0.20.0/internal/website/content/mysql/000077500000000000000000000000001367004507500214065ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/mysql/_index.md000066400000000000000000000000531367004507500231740ustar00rootroot00000000000000--- title: gocloud.dev/mysql type: pkg --- go-cloud-0.20.0/internal/website/content/mysql/awsmysql/000077500000000000000000000000001367004507500232665ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/mysql/awsmysql/_index.md000066400000000000000000000000641367004507500250560ustar00rootroot00000000000000--- title: gocloud.dev/mysql/awsmysql type: pkg --- go-cloud-0.20.0/internal/website/content/mysql/azuremysql/000077500000000000000000000000001367004507500236225ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/mysql/azuremysql/_index.md000066400000000000000000000000661367004507500254140ustar00rootroot00000000000000--- title: gocloud.dev/mysql/azuremysql type: pkg --- go-cloud-0.20.0/internal/website/content/mysql/cloudmysql/000077500000000000000000000000001367004507500236025ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/mysql/cloudmysql/_index.md000066400000000000000000000000661367004507500253740ustar00rootroot00000000000000--- title: gocloud.dev/mysql/cloudmysql type: pkg --- go-cloud-0.20.0/internal/website/content/mysql/gcpmysql/000077500000000000000000000000001367004507500232455ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/mysql/gcpmysql/_index.md000066400000000000000000000000641367004507500250350ustar00rootroot00000000000000--- title: gocloud.dev/mysql/gcpmysql type: pkg --- go-cloud-0.20.0/internal/website/content/mysql/rdsmysql/000077500000000000000000000000001367004507500232645ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/mysql/rdsmysql/_index.md000066400000000000000000000000641367004507500250540ustar00rootroot00000000000000--- title: gocloud.dev/mysql/rdsmysql type: pkg --- go-cloud-0.20.0/internal/website/content/postgres/000077500000000000000000000000001367004507500221075ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/postgres/_index.md000066400000000000000000000000561367004507500237000ustar00rootroot00000000000000--- title: gocloud.dev/postgres type: pkg --- go-cloud-0.20.0/internal/website/content/postgres/awspostgres/000077500000000000000000000000001367004507500244705ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/postgres/awspostgres/_index.md000066400000000000000000000000721367004507500262570ustar00rootroot00000000000000--- title: gocloud.dev/postgres/awspostgres type: pkg --- go-cloud-0.20.0/internal/website/content/postgres/cloudpostgres/000077500000000000000000000000001367004507500250045ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/postgres/cloudpostgres/_index.md000066400000000000000000000000741367004507500265750ustar00rootroot00000000000000--- title: gocloud.dev/postgres/cloudpostgres type: pkg --- go-cloud-0.20.0/internal/website/content/postgres/gcppostgres/000077500000000000000000000000001367004507500244475ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/postgres/gcppostgres/_index.md000066400000000000000000000000721367004507500262360ustar00rootroot00000000000000--- title: gocloud.dev/postgres/gcppostgres type: pkg --- go-cloud-0.20.0/internal/website/content/postgres/rdspostgres/000077500000000000000000000000001367004507500244665ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/postgres/rdspostgres/_index.md000066400000000000000000000000721367004507500262550ustar00rootroot00000000000000--- title: gocloud.dev/postgres/rdspostgres type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/000077500000000000000000000000001367004507500215415ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/_index.md000066400000000000000000000000541367004507500233300ustar00rootroot00000000000000--- title: gocloud.dev/pubsub type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/awssnssqs/000077500000000000000000000000001367004507500236065ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/awssnssqs/_index.md000066400000000000000000000000661367004507500254000ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/awssnssqs type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/azurepubsub/000077500000000000000000000000001367004507500241105ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/azurepubsub/_index.md000066400000000000000000000000701367004507500256750ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/azurepubsub type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/azuresb/000077500000000000000000000000001367004507500232145ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/azuresb/_index.md000066400000000000000000000000641367004507500250040ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/azuresb type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/batcher/000077500000000000000000000000001367004507500231515ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/batcher/_index.md000066400000000000000000000000661367004507500247430ustar00rootroot00000000000000--- title: gocloud.dev/internal/batcher type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/driver/000077500000000000000000000000001367004507500230345ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/driver/_index.md000066400000000000000000000000631367004507500246230ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/driver type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/drivertest/000077500000000000000000000000001367004507500237345ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/drivertest/_index.md000066400000000000000000000000671367004507500255270ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/drivertest type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/gcppubsub/000077500000000000000000000000001367004507500235335ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/gcppubsub/_index.md000066400000000000000000000000661367004507500253250ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/gcppubsub type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/kafkapubsub/000077500000000000000000000000001367004507500240375ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/kafkapubsub/_index.md000066400000000000000000000000701367004507500256240ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/kafkapubsub type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/mempubsub/000077500000000000000000000000001367004507500235405ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/mempubsub/_index.md000066400000000000000000000000661367004507500253320ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/mempubsub type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/natspubsub/000077500000000000000000000000001367004507500237275ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/natspubsub/_index.md000066400000000000000000000000671367004507500255220ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/natspubsub type: pkg --- go-cloud-0.20.0/internal/website/content/pubsub/rabbitpubsub/000077500000000000000000000000001367004507500242255ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/pubsub/rabbitpubsub/_index.md000066400000000000000000000000711367004507500260130ustar00rootroot00000000000000--- title: gocloud.dev/pubsub/rabbitpubsub type: pkg --- go-cloud-0.20.0/internal/website/content/requestlog/000077500000000000000000000000001367004507500224335ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/requestlog/_index.md000066400000000000000000000000601367004507500242170ustar00rootroot00000000000000--- title: gocloud.dev/requestlog type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/000077500000000000000000000000001367004507500224355ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/_index.md000066400000000000000000000000601367004507500242210ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/awsparamstore/000077500000000000000000000000001367004507500253255ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/awsparamstore/_index.md000066400000000000000000000000761367004507500271200ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/awsparamstore type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/blobvar/000077500000000000000000000000001367004507500240645ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/blobvar/_index.md000066400000000000000000000000701367004507500256510ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/blobvar type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/constantvar/000077500000000000000000000000001367004507500247775ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/constantvar/_index.md000066400000000000000000000000741367004507500265700ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/constantvar type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/driver/000077500000000000000000000000001367004507500237305ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/driver/_index.md000066400000000000000000000000671367004507500255230ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/driver type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/drivertest/000077500000000000000000000000001367004507500246305ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/drivertest/_index.md000066400000000000000000000000731367004507500264200ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/drivertest type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/etcdvar/000077500000000000000000000000001367004507500240655ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/etcdvar/_index.md000066400000000000000000000000701367004507500256520ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/etcdvar type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/filevar/000077500000000000000000000000001367004507500240655ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/filevar/_demo/000077500000000000000000000000001367004507500251505ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/filevar/_demo/_index.md000066400000000000000000000000761367004507500267430ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/filevar/_demo type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/filevar/_index.md000066400000000000000000000000701367004507500256520ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/filevar type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/gcpruntimeconfig/000077500000000000000000000000001367004507500260005ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/gcpruntimeconfig/_index.md000066400000000000000000000001011367004507500275600ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/gcpruntimeconfig type: pkg --- go-cloud-0.20.0/internal/website/content/runtimevar/httpvar/000077500000000000000000000000001367004507500241255ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/runtimevar/httpvar/_index.md000066400000000000000000000000701367004507500257120ustar00rootroot00000000000000--- title: gocloud.dev/runtimevar/httpvar type: pkg --- go-cloud-0.20.0/internal/website/content/samples/000077500000000000000000000000001367004507500217055ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/appengine/000077500000000000000000000000001367004507500236535ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/appengine/_index.md000066400000000000000000000000671367004507500254460ustar00rootroot00000000000000--- title: gocloud.dev/samples/appengine type: pkg --- go-cloud-0.20.0/internal/website/content/samples/gocdk-blob/000077500000000000000000000000001367004507500237105ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/gocdk-blob/_index.md000066400000000000000000000000701367004507500254750ustar00rootroot00000000000000--- title: gocloud.dev/samples/gocdk-blob type: pkg --- go-cloud-0.20.0/internal/website/content/samples/gocdk-docstore/000077500000000000000000000000001367004507500246145ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/gocdk-docstore/_index.md000066400000000000000000000002661367004507500264100ustar00rootroot00000000000000--- title: "Gocdk Docstore" date: 2019-06-11T14:33:50-07:00 showInSidenav: false # only for sections (any level) pagesInSidenav: false # only for top-level sections weight: 0 --- go-cloud-0.20.0/internal/website/content/samples/gocdk-pubsub/000077500000000000000000000000001367004507500242725ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/gocdk-pubsub/_index.md000066400000000000000000000000721367004507500260610ustar00rootroot00000000000000--- title: gocloud.dev/samples/gocdk-pubsub type: pkg --- go-cloud-0.20.0/internal/website/content/samples/gocdk-runtimevar/000077500000000000000000000000001367004507500251665ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/gocdk-runtimevar/_index.md000066400000000000000000000000761367004507500267610ustar00rootroot00000000000000--- title: gocloud.dev/samples/gocdk-runtimevar type: pkg --- go-cloud-0.20.0/internal/website/content/samples/gocdk-secrets/000077500000000000000000000000001367004507500244425ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/gocdk-secrets/_index.md000066400000000000000000000000731367004507500262320ustar00rootroot00000000000000--- title: gocloud.dev/samples/gocdk-secrets type: pkg --- go-cloud-0.20.0/internal/website/content/samples/guestbook/000077500000000000000000000000001367004507500237075ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/guestbook/_index.md000066400000000000000000000000671367004507500255020ustar00rootroot00000000000000--- title: gocloud.dev/samples/guestbook type: pkg --- go-cloud-0.20.0/internal/website/content/samples/guestbook/aws/000077500000000000000000000000001367004507500245015ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/guestbook/aws/provision_db/000077500000000000000000000000001367004507500271765ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/guestbook/aws/provision_db/_index.md000066400000000000000000000001101367004507500307560ustar00rootroot00000000000000--- title: gocloud.dev/samples/guestbook/aws/provision_db type: pkg --- go-cloud-0.20.0/internal/website/content/samples/guestbook/gcp/000077500000000000000000000000001367004507500244605ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/guestbook/gcp/deploy/000077500000000000000000000000001367004507500257545ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/guestbook/gcp/deploy/_index.md000066400000000000000000000001021367004507500275350ustar00rootroot00000000000000--- title: gocloud.dev/samples/guestbook/gcp/deploy type: pkg --- go-cloud-0.20.0/internal/website/content/samples/guestbook/gcp/provision_db/000077500000000000000000000000001367004507500271555ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/guestbook/gcp/provision_db/_index.md000066400000000000000000000001101367004507500307350ustar00rootroot00000000000000--- title: gocloud.dev/samples/guestbook/gcp/provision_db type: pkg --- go-cloud-0.20.0/internal/website/content/samples/guestbook/localdb/000077500000000000000000000000001367004507500253075ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/guestbook/localdb/_index.md000066400000000000000000000000771367004507500271030ustar00rootroot00000000000000--- title: gocloud.dev/samples/guestbook/localdb type: pkg --- go-cloud-0.20.0/internal/website/content/samples/order/000077500000000000000000000000001367004507500230205ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/order/_index.md000066400000000000000000000000631367004507500246070ustar00rootroot00000000000000--- title: gocloud.dev/samples/order type: pkg --- go-cloud-0.20.0/internal/website/content/samples/server/000077500000000000000000000000001367004507500232135ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/server/_index.md000066400000000000000000000000641367004507500250030ustar00rootroot00000000000000--- title: gocloud.dev/samples/server type: pkg --- go-cloud-0.20.0/internal/website/content/samples/tutorial/000077500000000000000000000000001367004507500235505ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/samples/tutorial/_index.md000066400000000000000000000000661367004507500253420ustar00rootroot00000000000000--- title: gocloud.dev/samples/tutorial type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/000077500000000000000000000000001367004507500217115ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/_index.md000066400000000000000000000000551367004507500235010ustar00rootroot00000000000000--- title: gocloud.dev/secrets type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/awskms/000077500000000000000000000000001367004507500232165ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/awskms/_index.md000066400000000000000000000000641367004507500250060ustar00rootroot00000000000000--- title: gocloud.dev/secrets/awskms type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/azurekeyvault/000077500000000000000000000000001367004507500246245ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/azurekeyvault/_index.md000066400000000000000000000000731367004507500264140ustar00rootroot00000000000000--- title: gocloud.dev/secrets/azurekeyvault type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/driver/000077500000000000000000000000001367004507500232045ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/driver/_index.md000066400000000000000000000000641367004507500247740ustar00rootroot00000000000000--- title: gocloud.dev/secrets/driver type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/drivertest/000077500000000000000000000000001367004507500241045ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/drivertest/_index.md000066400000000000000000000000701367004507500256710ustar00rootroot00000000000000--- title: gocloud.dev/secrets/drivertest type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/gcpkms/000077500000000000000000000000001367004507500231755ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/gcpkms/_index.md000066400000000000000000000000641367004507500247650ustar00rootroot00000000000000--- title: gocloud.dev/secrets/gcpkms type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/hashivault/000077500000000000000000000000001367004507500240615ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/hashivault/_index.md000066400000000000000000000000701367004507500256460ustar00rootroot00000000000000--- title: gocloud.dev/secrets/hashivault type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/localsecrets/000077500000000000000000000000001367004507500243745ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/localsecrets/_index.md000066400000000000000000000000721367004507500261630ustar00rootroot00000000000000--- title: gocloud.dev/secrets/localsecrets type: pkg --- go-cloud-0.20.0/internal/website/content/secrets/vault/000077500000000000000000000000001367004507500230445ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/secrets/vault/_index.md000066400000000000000000000000631367004507500246330ustar00rootroot00000000000000--- title: gocloud.dev/secrets/vault type: pkg --- go-cloud-0.20.0/internal/website/content/server/000077500000000000000000000000001367004507500215475ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/server/_index.md000066400000000000000000000000541367004507500233360ustar00rootroot00000000000000--- title: gocloud.dev/server type: pkg --- go-cloud-0.20.0/internal/website/content/server/driver/000077500000000000000000000000001367004507500230425ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/server/driver/_index.md000066400000000000000000000000631367004507500246310ustar00rootroot00000000000000--- title: gocloud.dev/server/driver type: pkg --- go-cloud-0.20.0/internal/website/content/server/health/000077500000000000000000000000001367004507500230145ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/server/health/_index.md000066400000000000000000000000631367004507500246030ustar00rootroot00000000000000--- title: gocloud.dev/server/health type: pkg --- go-cloud-0.20.0/internal/website/content/server/health/sqlhealth/000077500000000000000000000000001367004507500250015ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/server/health/sqlhealth/_index.md000066400000000000000000000000751367004507500265730ustar00rootroot00000000000000--- title: gocloud.dev/server/health/sqlhealth type: pkg --- go-cloud-0.20.0/internal/website/content/server/requestlog/000077500000000000000000000000001367004507500237415ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/server/requestlog/_index.md000066400000000000000000000000671367004507500255340ustar00rootroot00000000000000--- title: gocloud.dev/server/requestlog type: pkg --- go-cloud-0.20.0/internal/website/content/server/sdserver/000077500000000000000000000000001367004507500234045ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/server/sdserver/_index.md000066400000000000000000000000651367004507500251750ustar00rootroot00000000000000--- title: gocloud.dev/server/sdserver type: pkg --- go-cloud-0.20.0/internal/website/content/server/xrayserver/000077500000000000000000000000001367004507500237615ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/server/xrayserver/_index.md000066400000000000000000000000671367004507500255540ustar00rootroot00000000000000--- title: gocloud.dev/server/xrayserver type: pkg --- go-cloud-0.20.0/internal/website/content/tests/000077500000000000000000000000001367004507500214035ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/tests/aws/000077500000000000000000000000001367004507500221755ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/tests/aws/app/000077500000000000000000000000001367004507500227555ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/tests/aws/app/_index.md000066400000000000000000000000631367004507500245440ustar00rootroot00000000000000--- title: gocloud.dev/tests/aws/app type: pkg --- go-cloud-0.20.0/internal/website/content/tests/gcp/000077500000000000000000000000001367004507500221545ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/tests/gcp/app/000077500000000000000000000000001367004507500227345ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/tests/gcp/app/_index.md000066400000000000000000000000631367004507500245230ustar00rootroot00000000000000--- title: gocloud.dev/tests/gcp/app type: pkg --- go-cloud-0.20.0/internal/website/content/tests/internal/000077500000000000000000000000001367004507500232175ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/tests/internal/testutil/000077500000000000000000000000001367004507500250745ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/tests/internal/testutil/_index.md000066400000000000000000000000751367004507500266660ustar00rootroot00000000000000--- title: gocloud.dev/tests/internal/testutil type: pkg --- go-cloud-0.20.0/internal/website/content/tutorials/000077500000000000000000000000001367004507500222675ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/content/tutorials/_index.md000066400000000000000000000001571367004507500240620ustar00rootroot00000000000000--- title: "Tutorials" date: 2019-03-19T18:45:15-07:00 showInSidenav: true pagesInSidenav: true weight: 1 --- go-cloud-0.20.0/internal/website/content/tutorials/cli-uploader.md000066400000000000000000000160541367004507500251770ustar00rootroot00000000000000--- title: "Tutorial: Command-Line Uploader" linkTitle: "Command-Line Uploader" date: 2019-03-19T18:45:53-07:00 weight: 1 --- This quickstart will build a command line application called `upload` that uploads files to blob storage on GCP, AWS, and Azure. Blob storage stores binary data under a string key, and is one of the most frequently used cloud services. When we're done, our command line application will work like this: ```shell # uploads gopher.png to GCS $ ./upload gs://go-cloud-bucket gopher.png # uploads gopher.png to S3 $ ./upload s3://go-cloud-bucket gopher.png # uploads gopher.png to Azure $ ./upload azblob://go-cloud-bucket gopher.png ``` (You can download the finished tutorial [from GitHub][samples/tutorial]). [samples/tutorial]: https://github.com/google/go-cloud/tree/master/samples/tutorial/ ## Setup We start with a skeleton for our program to read from command-line arguments to configure the bucket URL. ```go // Command upload saves files to blob storage on GCP, AWS, and Azure. package main import ( "log" "os" ) func main() { // Define our input. if len(os.Args) != 3 { log.Fatal("usage: upload BUCKET_URL FILE") } bucketURL := os.Args[1] file := os.Args[2] _, _ = bucketURL, file } ``` Now that we have a basic skeleton in place, let's start filling in the pieces. ## Connecting to the bucket The easiest way to open a portable bucket API is with `blob.OpenBucket`. ```go package main import ( // previous imports omitted "gocloud.dev/blob" ) func main() { // previous code omitted // Open a connection to the bucket. b, err := blob.OpenBucket(context.Background(), bucketURL) if err != nil { log.Fatalf("Failed to setup bucket: %s", err) } defer b.Close() } ``` This is all we need in the `main` function to connect to the bucket. However, as written, this function call will always fail: the Go CDK does not link in any cloud-specific implementations of `blob.OpenBucket` unless you specifically depend on them. This ensures you're only depending on the code you need. To link in implementations, use blank imports: ```go package main import ( // previous imports omitted // Import the blob packages we want to be able to open. _ "gocloud.dev/blob/azureblob" _ "gocloud.dev/blob/gcsblob" _ "gocloud.dev/blob/s3blob" ) func main() { // ... } ``` With the setup done, we're ready to use the bucket connection. Note, as a design principle of the Go CDK, `blob.Bucket` does not support creating a bucket and instead focuses solely on interacting with it. This separates the concerns of provisioning infrastructure and using infrastructure. ## Reading the file We need to read our file into a slice of bytes before uploading it. The process is the usual one: ```go package main import ( // previous imports omitted "os" "io/ioutil" ) func main() { // ... previous code omitted // Prepare the file for upload. data, err := ioutil.ReadFile(file) if err != nil { log.Fatalf("Failed to read file: %s", err) } } ``` ## Writing the file to the bucket Now, we have `data`, our file in a slice of bytes. Let's get to the fun part and write those bytes to the bucket! ```go package main // No new imports. func main() { // ... w, err := b.NewWriter(ctx, file, nil) if err != nil { log.Fatalf("Failed to obtain writer: %s", err) } _, err = w.Write(data) if err != nil { log.Fatalf("Failed to write to bucket: %s", err) } if err := w.Close(); err != nil { log.Fatalf("Failed to close: %s", err) } } ``` First, we create a writer based on the bucket connection. In addition to a `context.Context` type, the method takes the key under which the data will be stored and the mime type of the data. The call to `NewWriter` creates a `blob.Writer`, which implements `io.Writer`. With the writer, we call `Write` passing in the data. In response, we get the number of bytes written and any error that might have occurred. Finally, we close the writer with `Close` and check the error. Alternatively, we could have used the shortcut `b.WriteAll(ctx, file, data, nil)`. ## Uploading an image That's it! Let's try it out. As setup, we will need to create a [GCS bucket][gcs-bucket], an [S3 bucket][s3-bucket], and an [Azure container][azure-container]. In the code above, I called that bucket `go-cloud-bucket`, but you can change that to match whatever your bucket is called. Of course, you are free to try the code on any subset of Cloud providers. * For GCP, you will need to login with [gcloud](https://cloud.google.com/sdk/install). If you do not want to install `gcloud`, see [here](https://cloud.google.com/docs/authentication/production) for alternatives. * For AWS, you will need an access key ID and a secret access key. See [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey) for details. You then need to set the `AWS_REGION` environment variable to the region your bucket is in. * For Azure, you will need to add your storage account name and key as environment variables (`AZURE_STORAGE_ACCOUNT` and `AZURE_STORAGE_KEY`, respectively). See [here](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal) for details. With our buckets created and our credentials set up, we'll build the program first: ```shell $ go build -o upload ``` Then, we will send `gopher.png` (in the same directory as this README) to GCS: ```shell $ ./upload gs://go-cloud-bucket gopher.png ``` Then, we send that same gopher to S3: ```shell $ ./upload s3://go-cloud-bucket?region=us-west-1 gopher.png ``` Finally, we send that same gopher to Azure: ```shell $ ./upload azblob://go-cloud-bucket gopher.png ``` If we check the buckets, we should see our gopher in each of them! We're done! [s3-bucket]: https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html [gcs-bucket]: https://cloud.google.com/storage/docs/creating-buckets [azure-container]: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction ## Wrapping Up In conclusion, we have a program that can seamlessly switch between multiple Cloud storage providers using just one code path. You can see the finished tutorial [on GitHub][samples/tutorial]. We hope this example demonstrates how having one type for multiple clouds is a huge win for simplicity and maintainability. By writing an application using a generic interface like `*blob.Bucket`, we retain the option of using infrastructure in whichever cloud that best fits our needs all without having to worry about a rewrite. If you want to learn more, you can read about [Structuring Portable Code][]. If you want to see how to deploy a Go CDK application, see [other tutorials][]. If you want to see how to use Go CDK APIs in your application, see the [how-to guides][]. [how-to guides]: {{< ref "/howto/_index.md" >}} [other tutorials]: {{< ref "/tutorials/_index.md" >}} [Structuring Portable Code]: {{< ref "/concepts/structure/index.md" >}} go-cloud-0.20.0/internal/website/content/tutorials/guestbook.md000066400000000000000000000206001367004507500246110ustar00rootroot00000000000000--- title: "Tutorial: Guestbook Application" linkTitle: "Guestbook" date: 2019-07-10T16:58:00-07:00 weight: 2 toc: true --- In this tutorial, we will deploy an existing Go CDK application called Guestbook locally, then on Google Cloud Platform (GCP), Amazon Web Services (AWS), and Azure. Guestbook is a sample application that records visitors' messages and displays a cloud banner with an administrative message. The main business logic is written in a cloud-agnostic manner using MySQL, the generic blob API, and the generic runtimevar API. All platform-specific code is set up by [Wire](https://github.com/google/wire). ## Prerequisites You will need to install the following software for this tutorial: - [Git](https://git-scm.com/) - [Go](https://golang.org/doc/install) - [Wire](https://github.com/google/wire/blob/master/README.md#installing) - [Docker Desktop](https://docs.docker.com/install/) - [Terraform](https://www.terraform.io/intro/getting-started/install.html) ### Cloning the Sample Before you can do anything else, you need to clone the Go CDK repository. The repository contains the Guestbook sample. ```shell git clone https://github.com/google/go-cloud.git cd go-cloud/samples/guestbook ``` ## Building Run the following in the `samples/guestbook` directory: ```shell go generate && go build ``` ## Running Locally You will need to run a local MySQL database server and create a local message of the day. `localdb/main.go` runs the local MySQL database server using Docker: ```shell go get ./localdb/... # Get package dependencies. go run localdb/main.go ``` In another terminal, run the `guestbook` application: ```shell # Set a local Message of the Day. echo 'Hello, World!' > motd.txt # Run the server. # For blob, it uses fileblob, pointing at the local directory ./blobs. # For runtimevar, it uses filevar, pointing at the local file ./motd.txt. # You can update the ./motd.txt while the server is running, refresh # the page, and see it change. ./guestbook -env=local -bucket=blobs -motd_var=motd.txt ``` Your server is now running on http://localhost:8080/. You can stop the MySQL database server with Ctrl-\\. MySQL ignores Ctrl-C (SIGINT). ## Running on Google Cloud Platform (GCP) If you want to run this sample on GCP, you need to create a project, download the [gcloud CLI][], install `kubectl` and log in. [gcloud CLI]: https://cloud.google.com/sdk/downloads ```shell # Install kubectl. gcloud components install kubectl # Opens a browser to log you into GCP. gcloud auth login ``` ### Provision resources You can now use Terraform to set up your project. ```shell gcloud auth application-default login cd gcp terraform init # Terraform will prompt you for your GCP project ID, desired region, # and desired zone. terraform apply ``` ### Deploy the application This sample provides a script for building the Guestbook binary and deploying it to the Kubernetes cluster created by Terraform. ```shell go run deploy/main.go ``` The deploy script will display the URL of your running service. ### Cleanup To clean up the created resources, run `terraform destroy` inside the `gcp` directory using the same variables you entered during `terraform apply`. ## Running on Amazon Web Services (AWS) If you want to run this sample on AWS, you need to set up an account, download the [AWS command line interface][], and log in. There's [help here][AWS Config Help] if you need it. ```shell aws configure ``` [AWS command line interface]: https://docs.aws.amazon.com/cli/latest/userguide/installing.html [AWS Config Help]: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html ### Agree to the Debian Terms and Conditions You have to agree to the [Debian Terms and Conditions][] in order to provision the resources. Click through the "Continue to Subscribe" button at the top, then log in to your AWS account and subscribe to Debian. [Debian Terms and Conditions]: https://aws.amazon.com/marketplace/pp?sku=55q52qvgjfpdj2fpfy9mb1lo4 ### SSH Key You will also need an SSH key to SSH into the EC2 instance. If you don't already have one, you can follow [this guide from GitHub][GitHub SSH]. Follow the instructions for "Adding your key to the ssh-agent" if you want the key to persist across terminal sessions. ```shell ssh-add ``` [GitHub SSH]: https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/ ### Provision resources You can now use Terraform to set up your project. This will create an EC2 instance you can SSH to and run your binary. ```shell # Build for deploying on the AWS Linux VM. GOOS=linux GOARCH=amd64 go build # Enter AWS directory from samples/guestbook. cd aws terraform init # Provisioning can take up to 10 minutes. # Keep track of the output of this command as it is needed later. # You can replace us-west-1 with whatever region you want. terraform apply -var region=us-west-1 -var ssh_public_key="$(cat ~/.ssh/id_rsa.pub)" ``` ### Deploy the application You now need to connect to the new remote server to execute the `guestbook` binary. The final output of `terraform apply` lists the variables `guestbook` requires as arguments. Here's an example, with actual strings replaced with `[redacted]`: ```shell # Output from "terraform apply" command.... Outputs: bucket = [redacted] database_host = [redacted] database_root_password = instance_host = [redacted] paramstore_var = /guestbook/motd region = us-west-1 # Print out the database root password, since we'll need it below # Terraform hides it by default in the Outputs above. localhost$ terraform output database_root_password [redacted] # SSH into the EC2 instance. localhost$ ssh "admin@$( terraform output instance_host )" # Fill in each command-line argument with the values from the # Terraform output above. server$ AWS_REGION= ./guestbook \ -env=aws \ -bucket= \ -db_host= \ -db_user=root \ -db_password= \ -motd_var=/guestbook/motd ``` You can now visit the server at `http://:8080/`. ### Cleanup To clean up the created resources, run `terraform destroy` inside the `aws` directory using the same variables you entered during `terraform apply`. ## Running on Azure The Go CDK doesn't have support for SQL on Azure yet ([#1305][]), so we'll run MySQL and the binary locally. This tutorial will show how to use Azure storage for the MOTD and Gopher logo. You first need to set up an Azure account and install the [Azure CLI][]. Then, use the `az` CLI to log in. [#1305]: https://github.com/google/go-cloud/issues/1305 [Azure CLI]: https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest ```shell az login ``` ### Provision resources We'll use Terraform to set up your project. ```shell # Enter the Azure directory from samples/guestbook. cd azure terraform init # Provisioning can take up to 10 minutes. # Keep track of the output of this command as it is needed later. terraform apply -var location="West US" Outputs: access_key = [redacted] storage_account = [redacated] storage_container = [redacted] ``` ### Deploy the application You will need to run a local MySQL database server, similar to what we did for running locally earlier. Open a new terminal window, and run: ```shell cd .. # back up to samples/guestbook go get ./localdb/... # Get package dependencies. go run localdb/main.go ``` In the original terminal, add your Azure credentials to the environment and run the `guestbook` application: ```shell # You should be in the "samples/guestbook/azure" directory. # Enter the storage_account from the Terraform output earlier. export AZURE_STORAGE_ACCOUNT= # Enter the access_key from the Terraform output earlier. export AZURE_STORAGE_KEY= # Run the binary. # Fill in the -bucket command-line argument with the value from the Terraform # output. # ./guestbook -env=azure -bucket= -motd_var=motd ``` Your server is now running on http://localhost:8080/. You can stop the MySQL database server with Ctrl-\\. MySQL ignores Ctrl-C (SIGINT). ### Cleanup To clean up the created resources, run `terraform destroy` inside the `azure` directory using the same variables you entered during `terraform apply`. ## Gophers The Go gopher was designed by Renee French and used under the [Creative Commons 3.0 Attributions](https://creativecommons.org/licenses/by/3.0/) license. go-cloud-0.20.0/internal/website/content/tutorials/order.md000066400000000000000000000050101367004507500237200ustar00rootroot00000000000000--- title: "Order Processor" date: 2019-07-09T10:22:39-04:00 weight: 5 toc: true --- In this tutorial, we will run a Go CDK application called Order Processor on a local machine. Order Processor is a sample application that lets users place orders to convert images to PNG format, and to view the results. The main business logic is written in a cloud-agnostic manner using the generic APIs for blob, pubsub and docstore. The Order Processor application has two parts: a web frontend, and an image-processing backend called a processor. They communicate over a pubsub topic, store order information in a docstore collection, and store image files in a blob bucket. ## Prerequisites You will need to install the following software for this tutorial: - [Git](https://git-scm.com/) - [Go](https://golang.org/doc/install) Then you need to clone the Go CDK repository. The repository contains the Order Processor sample. ```shell git clone https://github.com/google/go-cloud.git cd go-cloud/samples/order ``` ## Building Run the following in the `samples/order` directory: ```shell go build ``` ## Running Locally If you run `order` with no arguments, both the frontend and the processor will run together in the same process. ```shell ./order ``` The frontend is now running on http://localhost:10538. Visit the home page in your browser and click "Convert an Image". Enter an email address (it need not be real) and select any image file from your computer. Then click Submit. Now visit the order list page by returning to the home page and clicking "List Conversions". It may take a few seconds to process the order (thanks to an artificial delay in the processor), so refresh the page until you see your order in the list. Then click on the output image link to see the converted image in your browser. ## Running on a Cloud Provider To run the Order Processor application on a cloud provider like Google Cloud Platform, Amazon AWS or Microsoft Azure, you will have to provision some resources: - A storage bucket, to hold the image files. (See the [`blob` How-To Guide](https://gocloud.dev/howto/blob/).) - A Pub/Sub topic and subscription, for requests from the frontend to the processor. (See the [`pubsub` How-To Guide](https://gocloud.dev/howto/pubsub/).) - A document store collection to store order metadata. (See the [`docstore` How-To Guide](https://gocloud.dev/howto/docstore/).) Then launch the `order` program with flags that provide the URLs to your resources. Run `order -help` to see the list of flags. go-cloud-0.20.0/internal/website/data/000077500000000000000000000000001367004507500175005ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/data/examples.json000066400000000000000000001611051367004507500222150ustar00rootroot00000000000000{ "gocloud.dev/blob.ExampleBucket_Delete": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/blob\"\n)", "code": "if err := bucket.Delete(ctx, \"foo.txt\"); err != nil {\n\treturn err\n}" }, "gocloud.dev/blob.ExampleBucket_NewRangeReader": { "imports": "import (\n\t\"context\"\n\t\"io\"\n\t\"os\"\n\n\t\"gocloud.dev/blob\"\n)", "code": "// Open the key \"foo.txt\" for reading at offset 1024 and read up to 4096 bytes.\nr, err := bucket.NewRangeReader(ctx, \"foo.txt\", 1024, 4096, nil)\nif err != nil {\n\treturn err\n}\ndefer r.Close()\n// Copy from the read range to stdout.\nif _, err := io.Copy(os.Stdout, r); err != nil {\n\treturn err\n}" }, "gocloud.dev/blob.ExampleBucket_NewReader": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\n\t\"gocloud.dev/blob\"\n)", "code": "// Open the key \"foo.txt\" for reading with the default options.\nr, err := bucket.NewReader(ctx, \"foo.txt\", nil)\nif err != nil {\n\treturn err\n}\ndefer r.Close()\n// Readers also have a limited view of the blob's metadata.\nfmt.Println(\"Content-Type:\", r.ContentType())\nfmt.Println()\n// Copy from the reader to stdout.\nif _, err := io.Copy(os.Stdout, r); err != nil {\n\treturn err\n}" }, "gocloud.dev/blob.ExampleBucket_NewWriter": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\n\t\"gocloud.dev/blob\"\n)", "code": "// Open the key \"foo.txt\" for writing with the default options.\nw, err := bucket.NewWriter(ctx, \"foo.txt\", nil)\nif err != nil {\n\treturn err\n}\n_, writeErr := fmt.Fprintln(w, \"Hello, World!\")\n// Always check the return value of Close when writing.\ncloseErr := w.Close()\nif writeErr != nil {\n\tlog.Fatal(writeErr)\n}\nif closeErr != nil {\n\tlog.Fatal(closeErr)\n}" }, "gocloud.dev/blob.ExampleBucket_NewWriter_cancel": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/blob\"\n)", "code": "// Create a cancelable context from the existing context.\nwriteCtx, cancelWrite := context.WithCancel(ctx)\ndefer cancelWrite()\n\n// Open the key \"foo.txt\" for writing with the default options.\nw, err := bucket.NewWriter(writeCtx, \"foo.txt\", nil)\nif err != nil {\n\treturn err\n}\n\n// Assume some writes happened and we encountered an error.\n// Now we want to abort the write.\n\nif err != nil {\n\t// First cancel the context.\n\tcancelWrite()\n\t// You must still close the writer to avoid leaking resources.\n\tw.Close()\n}" }, "gocloud.dev/blob.ExamplePrefixedBucket": { "imports": "import \"gocloud.dev/blob\"", "code": "// Wrap the bucket using blob.PrefixedBucket.\n// The prefix should end with \"/\", so that the resulting bucket operates\n// in a subfolder.\nbucket = blob.PrefixedBucket(bucket, \"a/subfolder/\")\n\n// The original bucket is no longer usable; it has been closed.\n// The wrapped bucket should be closed when done.\ndefer bucket.Close()\n\n// Bucket operations on \u003ckey\u003e will be translated to \"a/subfolder/\u003ckey\u003e\"." }, "gocloud.dev/blob.Example_openFromURLWithPrefix": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/blob\"\n)", "code": "// Connect to a bucket using a URL, using the \"prefix\" query parameter to\n// target a subfolder in the bucket.\n// The prefix should end with \"/\", so that the resulting bucket operates\n// in a subfolder.\nb, err := blob.OpenBucket(ctx, \"mem://?prefix=a/subfolder/\")\nif err != nil {\n\treturn err\n}\ndefer b.Close()\n\n// Bucket operations on \u003ckey\u003e will be translated to \"a/subfolder/\u003ckey\u003e\"." }, "gocloud.dev/blob/azureblob.ExampleOpenBucket": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/Azure/azure-storage-blob-go/azblob\"\n\t\"gocloud.dev/blob/azureblob\"\n)", "code": "const (\n\t// Fill in with your Azure Storage Account and Access Key.\n\taccountName azureblob.AccountName = \"my-account\"\n\taccountKey azureblob.AccountKey = \"my-account-key\"\n\t// Fill in with the storage container to access.\n\tcontainerName = \"my-container\"\n)\n\n// Create a credentials object.\ncredential, err := azureblob.NewCredential(accountName, accountKey)\nif err != nil {\n\treturn err\n}\n\n// Create a Pipeline, using whatever PipelineOptions you need.\npipeline := azureblob.NewPipeline(credential, azblob.PipelineOptions{})\n\n// Create a *blob.Bucket.\n// The credential Option is required if you're going to use blob.SignedURL.\nbucket, err := azureblob.OpenBucket(ctx, pipeline, accountName, containerName,\n\t\u0026azureblob.Options{Credential: credential})\nif err != nil {\n\treturn err\n}\ndefer bucket.Close()" }, "gocloud.dev/blob/azureblob.Example_openBucketFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/blob\"\n\t_ \"gocloud.dev/blob/azureblob\"\n)", "code": "// blob.OpenBucket creates a *blob.Bucket from a URL.\n// This URL will open the container \"my-container\" using default\n// credentials found in the environment variables\n// AZURE_STORAGE_ACCOUNT plus at least one of AZURE_STORAGE_KEY\n// and AZURE_STORAGE_SAS_TOKEN.\nbucket, err := blob.OpenBucket(ctx, \"azblob://my-container\")\nif err != nil {\n\treturn err\n}\ndefer bucket.Close()" }, "gocloud.dev/blob/fileblob.ExampleOpenBucket": { "imports": "import (\n\t\"os\"\n\n\t\"gocloud.dev/blob/fileblob\"\n)", "code": "// The directory you pass to fileblob.OpenBucket must exist first.\nconst myDir = \"path/to/local/directory\"\nif err := os.MkdirAll(myDir, 0777); err != nil {\n\treturn err\n}\n\n// Create a file-based bucket.\nbucket, err := fileblob.OpenBucket(myDir, nil)\nif err != nil {\n\treturn err\n}\ndefer bucket.Close()" }, "gocloud.dev/blob/gcsblob.ExampleOpenBucket": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/blob/gcsblob\"\n\t\"gocloud.dev/gcp\"\n)", "code": "// Your GCP credentials.\n// See https://cloud.google.com/docs/authentication/production\n// for more info on alternatives.\ncreds, err := gcp.DefaultCredentials(ctx)\nif err != nil {\n\treturn err\n}\n\n// Create an HTTP client.\n// This example uses the default HTTP transport and the credentials\n// created above.\nclient, err := gcp.NewHTTPClient(\n\tgcp.DefaultTransport(),\n\tgcp.CredentialsTokenSource(creds))\nif err != nil {\n\treturn err\n}\n\n// Create a *blob.Bucket.\nbucket, err := gcsblob.OpenBucket(ctx, client, \"my-bucket\", nil)\nif err != nil {\n\treturn err\n}\ndefer bucket.Close()" }, "gocloud.dev/blob/gcsblob.Example_openBucketFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/blob\"\n\t_ \"gocloud.dev/blob/gcsblob\"\n)", "code": "// blob.OpenBucket creates a *blob.Bucket from a URL.\n// This URL will open the bucket \"my-bucket\" using default credentials.\nbucket, err := blob.OpenBucket(ctx, \"gs://my-bucket\")\nif err != nil {\n\treturn err\n}\ndefer bucket.Close()" }, "gocloud.dev/blob/memblob.ExampleOpenBucket": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\n\t\"gocloud.dev/blob/memblob\"\n)", "code": "// Create an in-memory bucket.\nbucket := memblob.OpenBucket(nil)\ndefer bucket.Close()\n\n// Now we can use bucket to read or write files to the bucket.\nerr := bucket.WriteAll(ctx, \"my-key\", []byte(\"hello world\"), nil)\nif err != nil {\n\treturn err\n}\ndata, err := bucket.ReadAll(ctx, \"my-key\")\nif err != nil {\n\treturn err\n}\nfmt.Println(string(data))\n\n// Output:\n// hello world" }, "gocloud.dev/blob/s3blob.ExampleOpenBucket": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"gocloud.dev/blob/s3blob\"\n)", "code": "// Establish an AWS session.\n// See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info.\n// The region must match the region for \"my-bucket\".\nsess, err := session.NewSession(\u0026aws.Config{\n\tRegion: aws.String(\"us-west-1\"),\n})\nif err != nil {\n\treturn err\n}\n\n// Create a *blob.Bucket.\nbucket, err := s3blob.OpenBucket(ctx, sess, \"my-bucket\", nil)\nif err != nil {\n\treturn err\n}\ndefer bucket.Close()" }, "gocloud.dev/blob/s3blob.Example_openBucketFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/blob\"\n\t_ \"gocloud.dev/blob/s3blob\"\n)", "code": "// blob.OpenBucket creates a *blob.Bucket from a URL.\nbucket, err := blob.OpenBucket(ctx, \"s3://my-bucket?region=us-west-1\")\nif err != nil {\n\treturn err\n}\ndefer bucket.Close()" }, "gocloud.dev/docstore.ExampleCollection_Actions_bulkWrite": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore\"\n)", "code": "// Build an ActionList to create several new players, then execute it.\n// The actions may happen in any order.\nnewPlayers := []string{\"Pat\", \"Mel\", \"Fran\"}\nactionList := coll.Actions()\nfor _, p := range newPlayers {\n\tactionList.Create(\u0026Player{Name: p, Score: 0})\n}\nif err := actionList.Do(ctx); err != nil {\n\treturn err\n}" }, "gocloud.dev/docstore.ExampleCollection_Actions_getAfterWrite": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\n\t\"gocloud.dev/docstore\"\n)", "code": "// Add a document to the collection, then retrieve it.\n// Because both the Put and the Get refer to the same document,\n// they happen in order.\ngot := Player{Name: \"Pat\"}\nerr := coll.Actions().Put(\u0026Player{Name: \"Pat\", Score: 88}).Get(\u0026got).Do(ctx)\nif err != nil {\n\treturn err\n}\nfmt.Println(got.Name, got.Score)" }, "gocloud.dev/docstore.ExampleCollection_Update": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore\"\n)", "code": "// Create a player.\npat := \u0026Player{Name: \"Pat\", Score: 0}\nif err := coll.Create(ctx, pat); err != nil {\n\treturn err\n}\n\n// Set the score to a new value.\npat2 := \u0026Player{Name: \"Pat\"}\nerr := coll.Actions().Update(pat, docstore.Mods{\"Score\": 15}).Get(pat2).Do(ctx)\nif err != nil {\n\treturn err\n}\n\n// Increment the score.\nerr = coll.Actions().Update(pat, docstore.Mods{\"Score\": docstore.Increment(5)}).Get(pat2).Do(ctx)\nif err != nil {\n\treturn err\n}" }, "gocloud.dev/docstore.ExampleQuery_Get": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"gocloud.dev/docstore\"\n)", "code": "// Ask for all players with scores at least 20.\niter := coll.Query().Where(\"Score\", \"\u003e=\", 20).OrderBy(\"Score\", docstore.Descending).Get(ctx)\ndefer iter.Stop()\n\n// Query.Get returns an iterator. Call Next on it until io.EOF.\nfor {\n\tvar p Player\n\terr := iter.Next(ctx, \u0026p)\n\tif err == io.EOF {\n\t\tbreak\n\t} else if err != nil {\n\t\treturn err\n\t} else {\n\t\tfmt.Printf(\"%s: %d\\n\", p.Name, p.Score)\n\t}\n}" }, "gocloud.dev/docstore.Example_optimisticLocking": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"gocloud.dev/docstore/memdocstore\"\n\t\"gocloud.dev/gcerrors\"\n)", "code": "coll, err := memdocstore.OpenCollection(\"Name\", nil)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()\n\n// Create a player.\npat := \u0026Player{Name: \"Pat\", Score: 7}\nif err := coll.Create(ctx, pat); err != nil {\n\treturn err\n}\nfmt.Println(pat) // memdocstore revisions are deterministic, so we can check the output.\n\n// Double a player's score. We cannot use Update to multiply, so we use optimistic\n// locking instead.\n\n// We may have to retry a few times; put a time limit on that.\nctx, cancel := context.WithTimeout(ctx, 30*time.Second)\ndefer cancel()\nfor {\n\t// Get the document.\n\tplayer := \u0026Player{Name: \"Pat\"}\n\tif err := coll.Get(ctx, player); err != nil {\n\t\treturn err\n\t}\n\t// player.DocstoreRevision is set to the document's revision.\n\n\t// Modify the document locally.\n\tplayer.Score *= 2\n\n\t// Replace the document. player.DocstoreRevision will be checked against\n\t// the stored document's revision.\n\terr := coll.Replace(ctx, player)\n\tif err != nil {\n\t\tcode := gcerrors.Code(err)\n\t\t// On FailedPrecondition or NotFound, try again.\n\t\tif code == gcerrors.FailedPrecondition || code == gcerrors.NotFound {\n\t\t\tcontinue\n\t\t}\n\t\treturn err\n\t}\n\tfmt.Println(player)\n\tbreak\n}\n\n// Output:\n// \u0026{Pat 7 1}\n// \u0026{Pat 14 2}" }, "gocloud.dev/docstore/awsdynamodb.ExampleOpenCollection": { "imports": "import (\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"github.com/aws/aws-sdk-go/service/dynamodb\"\n\t\"gocloud.dev/docstore/awsdynamodb\"\n)", "code": "sess, err := session.NewSession()\nif err != nil {\n\treturn err\n}\ncoll, err := awsdynamodb.OpenCollection(\n\tdynamodb.New(sess), \"docstore-test\", \"partitionKeyField\", \"\", nil)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/awsdynamodb.Example_openCollectionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore\"\n\t_ \"gocloud.dev/docstore/awsdynamodb\"\n)", "code": "// docstore.OpenCollection creates a *docstore.Collection from a URL.\ncoll, err := docstore.OpenCollection(ctx, \"dynamodb://my-table?partition_key=name\")\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/gcpfirestore.ExampleOpenCollection": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore/gcpfirestore\"\n\t\"gocloud.dev/gcp\"\n)", "code": "creds, err := gcp.DefaultCredentials(ctx)\nif err != nil {\n\treturn err\n}\nclient, _, err := gcpfirestore.Dial(ctx, creds.TokenSource)\nif err != nil {\n\treturn err\n}\nresourceID := gcpfirestore.CollectionResourceID(\"my-project\", \"my-collection\")\ncoll, err := gcpfirestore.OpenCollection(client, resourceID, \"userID\", nil)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/gcpfirestore.ExampleOpenCollectionWithNameFunc": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore\"\n\t\"gocloud.dev/docstore/gcpfirestore\"\n\t\"gocloud.dev/gcp\"\n)", "code": "creds, err := gcp.DefaultCredentials(ctx)\nif err != nil {\n\treturn err\n}\nclient, _, err := gcpfirestore.Dial(ctx, creds.TokenSource)\nif err != nil {\n\treturn err\n}\n\n// The name of a document is constructed from the Game and Player fields.\nnameFromDocument := func(doc docstore.Document) string {\n\ths := doc.(*HighScore)\n\treturn hs.Game + \"|\" + hs.Player\n}\n\nresourceID := gcpfirestore.CollectionResourceID(\"my-project\", \"my-collection\")\ncoll, err := gcpfirestore.OpenCollectionWithNameFunc(client, resourceID, nameFromDocument, nil)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/gcpfirestore.Example_openCollectionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore\"\n\t_ \"gocloud.dev/docstore/gcpfirestore\"\n)", "code": "// docstore.OpenCollection creates a *docstore.Collection from a URL.\nconst url = \"firestore://projects/my-project/databases/(default)/documents/my-collection?name_field=userID\"\ncoll, err := docstore.OpenCollection(ctx, url)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/memdocstore.ExampleOpenCollection": { "imports": "import \"gocloud.dev/docstore/memdocstore\"", "code": "coll, err := memdocstore.OpenCollection(\"keyField\", nil)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/memdocstore.ExampleOpenCollectionWithKeyFunc": { "imports": "import (\n\t\"gocloud.dev/docstore\"\n\t\"gocloud.dev/docstore/memdocstore\"\n)", "code": "// The name of a document is constructed from the Game and Player fields.\nnameFromDocument := func(doc docstore.Document) interface{} {\n\ths := doc.(*HighScore)\n\treturn hs.Game + \"|\" + hs.Player\n}\n\ncoll, err := memdocstore.OpenCollectionWithKeyFunc(nameFromDocument, nil)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/memdocstore.Example_openCollectionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore\"\n\t_ \"gocloud.dev/docstore/memdocstore\"\n)", "code": "// docstore.OpenCollection creates a *docstore.Collection from a URL.\ncoll, err := docstore.OpenCollection(ctx, \"mem://collection/keyField\")\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/mongodocstore.ExampleOpenCollection": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore/mongodocstore\"\n)", "code": "client, err := mongodocstore.Dial(ctx, \"mongodb://my-host\")\nif err != nil {\n\treturn err\n}\nmcoll := client.Database(\"my-db\").Collection(\"my-coll\")\ncoll, err := mongodocstore.OpenCollection(mcoll, \"userID\", nil)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/mongodocstore.ExampleOpenCollectionWithIDFunc": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore\"\n\t\"gocloud.dev/docstore/mongodocstore\"\n)", "code": "client, err := mongodocstore.Dial(ctx, \"mongodb://my-host\")\nif err != nil {\n\treturn err\n}\nmcoll := client.Database(\"my-db\").Collection(\"my-coll\")\n\n// The name of a document is constructed from the Game and Player fields.\nnameFromDocument := func(doc docstore.Document) interface{} {\n\ths := doc.(*HighScore)\n\treturn hs.Game + \"|\" + hs.Player\n}\n\ncoll, err := mongodocstore.OpenCollectionWithIDFunc(mcoll, nameFromDocument, nil)\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/docstore/mongodocstore.Example_openCollectionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/docstore\"\n\t_ \"gocloud.dev/docstore/mongodocstore\"\n)", "code": "// docstore.OpenCollection creates a *docstore.Collection from a URL.\ncoll, err := docstore.OpenCollection(ctx, \"mongo://my-db/my-collection?id_field=userID\")\nif err != nil {\n\treturn err\n}\ndefer coll.Close()" }, "gocloud.dev/mysql.ExampleOpen": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/mysql\"\n)", "code": "// Replace this with your actual settings.\ndb, err := mysql.Open(ctx, \"mysql://user:password@localhost/testdb\")\nif err != nil {\n\treturn err\n}\ndefer db.Close()\n\n// Use database in your program.\ndb.Exec(\"CREATE TABLE foo (bar INT);\")" }, "gocloud.dev/mysql/awsmysql.Example": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/mysql\"\n\t_ \"gocloud.dev/mysql/awsmysql\"\n)", "code": "// Replace these with your actual settings.\ndb, err := mysql.Open(ctx,\n\t\"awsmysql://myrole:swordfish@example01.xyzzy.us-west-1.rds.amazonaws.com/testdb\")\nif err != nil {\n\treturn err\n}\ndefer db.Close()\n\n// Use database in your program.\ndb.ExecContext(ctx, \"CREATE TABLE foo (bar INT);\")" }, "gocloud.dev/mysql/azuremysql.Example": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/mysql\"\n\t_ \"gocloud.dev/mysql/azuremysql\"\n)", "code": "// Replace this with your actual settings.\ndb, err := mysql.Open(ctx,\n\t\"azuremysql://user:password@example00.mysql.database.azure.com/testdb\")\nif err != nil {\n\treturn err\n}\ndefer db.Close()\n\n// Use database in your program.\ndb.Exec(\"CREATE TABLE foo (bar INT);\")" }, "gocloud.dev/mysql/gcpmysql.Example": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/mysql\"\n\t_ \"gocloud.dev/mysql/gcpmysql\"\n)", "code": "// Replace this with your actual settings.\ndb, err := mysql.Open(ctx,\n\t\"gcpmysql://user:password@example-project/region/my-instance01/testdb\")\nif err != nil {\n\treturn err\n}\ndefer db.Close()\n\n// Use database in your program.\ndb.Exec(\"CREATE TABLE foo (bar INT);\")" }, "gocloud.dev/postgres.ExampleOpen": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/postgres\"\n)", "code": "// Replace this with your actual settings.\ndb, err := postgres.Open(ctx, \"postgres://user:password@localhost/testdb\")\nif err != nil {\n\treturn err\n}\ndefer db.Close()\n\n// Use database in your program.\ndb.Exec(\"CREATE TABLE foo (bar INT);\")" }, "gocloud.dev/postgres/awspostgres.Example": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/postgres\"\n\t_ \"gocloud.dev/postgres/awspostgres\"\n)", "code": "// Replace these with your actual settings.\ndb, err := postgres.Open(ctx,\n\t\"awspostgres://myrole:swordfish@example01.xyzzy.us-west-1.rds.amazonaws.com/testdb\")\nif err != nil {\n\treturn err\n}\ndefer db.Close()\n\n// Use database in your program.\ndb.ExecContext(ctx, \"CREATE TABLE foo (bar INT);\")" }, "gocloud.dev/postgres/gcppostgres.Example": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/postgres\"\n\t_ \"gocloud.dev/postgres/gcppostgres\"\n)", "code": "// Replace this with your actual settings.\ndb, err := postgres.Open(ctx,\n\t\"gcppostgres://user:password@example-project/region/my-instance01/testdb\")\nif err != nil {\n\treturn err\n}\ndefer db.Close()\n\n// Use database in your program.\ndb.Exec(\"CREATE TABLE foo (bar INT);\")" }, "gocloud.dev/pubsub.ExampleSubscription_Receive": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\n\t\"gocloud.dev/pubsub\"\n)", "code": "// Loop on received messages.\nfor {\n\tmsg, err := subscription.Receive(ctx)\n\tif err != nil {\n\t\t// Errors from Receive indicate that Receive will no longer succeed.\n\t\tlog.Printf(\"Receiving message: %v\", err)\n\t\tbreak\n\t}\n\t// Do work based on the message, for example:\n\tfmt.Printf(\"Got message: %q\\n\", msg.Body)\n\t// Messages must always be acknowledged with Ack.\n\tmsg.Ack()\n}" }, "gocloud.dev/pubsub.ExampleSubscription_Receive_concurrent": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\n\t\"gocloud.dev/pubsub\"\n)", "code": "// Loop on received messages. We can use a channel as a semaphore to limit how\n// many goroutines we have active at a time as well as wait on the goroutines\n// to finish before exiting.\nconst maxHandlers = 10\nsem := make(chan struct{}, maxHandlers)\nrecvLoop:\nfor {\n\tmsg, err := subscription.Receive(ctx)\n\tif err != nil {\n\t\t// Errors from Receive indicate that Receive will no longer succeed.\n\t\tlog.Printf(\"Receiving message: %v\", err)\n\t\tbreak\n\t}\n\n\t// Wait if there are too many active handle goroutines and acquire the\n\t// semaphore. If the context is canceled, stop waiting and start shutting\n\t// down.\n\tselect {\n\tcase sem \u003c- struct{}{}:\n\tcase \u003c-ctx.Done():\n\t\tbreak recvLoop\n\t}\n\n\t// Handle the message in a new goroutine.\n\tgo func() {\n\t\tdefer func() { \u003c-sem }() // Release the semaphore.\n\t\tdefer msg.Ack() // Messages must always be acknowledged with Ack.\n\n\t\t// Do work based on the message, for example:\n\t\tfmt.Printf(\"Got message: %q\\n\", msg.Body)\n\t}()\n}\n\n// We're no longer receiving messages. Wait to finish handling any\n// unacknowledged messages by totally acquiring the semaphore.\nfor n := 0; n \u003c maxHandlers; n++ {\n\tsem \u003c- struct{}{}\n}" }, "gocloud.dev/pubsub.ExampleTopic_Send": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n)", "code": "err := topic.Send(ctx, \u0026pubsub.Message{\n\tBody: []byte(\"Hello, World!\\n\"),\n\t// Metadata is optional and can be nil.\n\tMetadata: map[string]string{\n\t\t// These are examples of metadata.\n\t\t// There is nothing special about the key names.\n\t\t\"language\": \"en\",\n\t\t\"importance\": \"high\",\n\t},\n})\nif err != nil {\n\treturn err\n}" }, "gocloud.dev/pubsub/awssnssqs.ExampleOpenSNSTopic": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"gocloud.dev/pubsub/awssnssqs\"\n)", "code": "// Establish an AWS session.\n// See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info.\n// The region must match the region for the SNS topic \"mytopic\".\nsess, err := session.NewSession(\u0026aws.Config{\n\tRegion: aws.String(\"us-east-2\"),\n})\nif err != nil {\n\treturn err\n}\n\n// Create a *pubsub.Topic.\nconst topicARN = \"arn:aws:sns:us-east-2:123456789012:mytopic\"\ntopic := awssnssqs.OpenSNSTopic(ctx, sess, topicARN, nil)\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/awssnssqs.ExampleOpenSQSTopic": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"gocloud.dev/pubsub/awssnssqs\"\n)", "code": "// Establish an AWS session.\n// See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info.\n// The region must match the region for the SQS queue \"myqueue\".\nsess, err := session.NewSession(\u0026aws.Config{\n\tRegion: aws.String(\"us-east-2\"),\n})\nif err != nil {\n\treturn err\n}\n\n// Create a *pubsub.Topic.\nconst queueURL = \"https://sqs.us-east-2.amazonaws.com/123456789012/myqueue\"\ntopic := awssnssqs.OpenSQSTopic(ctx, sess, queueURL, nil)\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/awssnssqs.ExampleOpenSubscription": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"gocloud.dev/pubsub/awssnssqs\"\n)", "code": "// Establish an AWS session.\n// See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info.\n// The region must match the region for \"MyQueue\".\nsess, err := session.NewSession(\u0026aws.Config{\n\tRegion: aws.String(\"us-east-2\"),\n})\nif err != nil {\n\treturn err\n}\n\n// Construct a *pubsub.Subscription.\n// https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/QueueURL.html\nconst queueURL = \"https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue\"\nsubscription := awssnssqs.OpenSubscription(ctx, sess, queueURL, nil)\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/awssnssqs.Example_openSNSTopicFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/awssnssqs\"\n)", "code": "const topicARN = \"arn:aws:sns:us-east-2:123456789012:mytopic\"\n// Note the 3 slashes; ARNs have multiple colons and therefore aren't valid\n// as hostnames in the URL.\ntopic, err := pubsub.OpenTopic(ctx, \"awssns:///\"+topicARN+\"?region=us-east-2\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/awssnssqs.Example_openSQSTopicFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/awssnssqs\"\n)", "code": "// https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/QueueURL.html\nconst queueURL = \"sqs.us-east-2.amazonaws.com/123456789012/myqueue\"\ntopic, err := pubsub.OpenTopic(ctx, \"awssqs://\"+queueURL+\"?region=us-east-2\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/awssnssqs.Example_openSubscriptionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/awssnssqs\"\n)", "code": "// pubsub.OpenSubscription creates a *pubsub.Subscription from a URL.\n// This URL will open the subscription with the URL\n// \"https://sqs.us-east-2.amazonaws.com/123456789012/myqueue\".\nsubscription, err := pubsub.OpenSubscription(ctx,\n\t\"awssqs://sqs.us-east-2.amazonaws.com/123456789012/\"+\n\t\t\"myqueue?region=us-east-2\")\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/azuresb.ExampleOpenSubscription": { "imports": "import (\n\t\"context\"\n\t\"os\"\n\n\t\"gocloud.dev/pubsub/azuresb\"\n)", "code": "// Change these as needed for your application.\nserviceBusConnString := os.Getenv(\"SERVICEBUS_CONNECTION_STRING\")\nconst topicName = \"test-topic\"\nconst subscriptionName = \"test-subscription\"\n\n// Connect to Azure Service Bus for the given subscription.\nbusNamespace, err := azuresb.NewNamespaceFromConnectionString(serviceBusConnString)\nif err != nil {\n\treturn err\n}\nbusTopic, err := azuresb.NewTopic(busNamespace, topicName, nil)\nif err != nil {\n\treturn err\n}\ndefer busTopic.Close(ctx)\nbusSub, err := azuresb.NewSubscription(busTopic, subscriptionName, nil)\nif err != nil {\n\treturn err\n}\ndefer busSub.Close(ctx)\n\n// Construct a *pubsub.Subscription.\nsubscription, err := azuresb.OpenSubscription(ctx,\n\tbusNamespace, busTopic, busSub, nil)\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/azuresb.ExampleOpenTopic": { "imports": "import (\n\t\"context\"\n\t\"os\"\n\n\t\"gocloud.dev/pubsub/azuresb\"\n)", "code": "// Change these as needed for your application.\nconnString := os.Getenv(\"SERVICEBUS_CONNECTION_STRING\")\ntopicName := \"test-topic\"\n\nif connString == \"\" {\n\tlog.Fatal(\"Service Bus ConnectionString is not set\")\n}\n\n// Connect to Azure Service Bus for the given topic.\nbusNamespace, err := azuresb.NewNamespaceFromConnectionString(connString)\nif err != nil {\n\treturn err\n}\nbusTopic, err := azuresb.NewTopic(busNamespace, topicName, nil)\nif err != nil {\n\treturn err\n}\ndefer busTopic.Close(ctx)\n\n// Construct a *pubsub.Topic.\ntopic, err := azuresb.OpenTopic(ctx, busTopic, nil)\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/azuresb.Example_openSubscriptionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/azuresb\"\n)", "code": "// pubsub.OpenSubscription creates a *pubsub.Subscription from a URL.\n// This URL will open the subscription \"mysubscription\" for the topic\n// \"mytopic\" using a connection string from the environment variable\n// SERVICEBUS_CONNECTION_STRING.\nsubscription, err := pubsub.OpenSubscription(ctx,\n\t\"azuresb://mytopic?subscription=mysubscription\")\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/azuresb.Example_openTopicFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/azuresb\"\n)", "code": "// pubsub.OpenTopic creates a *pubsub.Topic from a URL.\n// This URL will open the topic \"mytopic\" using a connection string\n// from the environment variable SERVICEBUS_CONNECTION_STRING.\ntopic, err := pubsub.OpenTopic(ctx, \"azuresb://mytopic\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/gcppubsub.ExampleOpenSubscription": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/gcp\"\n\t\"gocloud.dev/pubsub/gcppubsub\"\n)", "code": "// Your GCP credentials.\n// See https://cloud.google.com/docs/authentication/production\n// for more info on alternatives.\ncreds, err := gcp.DefaultCredentials(ctx)\nif err != nil {\n\treturn err\n}\n\n// Open a gRPC connection to the GCP Pub/Sub API.\nconn, cleanup, err := gcppubsub.Dial(ctx, creds.TokenSource)\nif err != nil {\n\treturn err\n}\ndefer cleanup()\n\n// Construct a SubscriberClient using the connection.\nsubClient, err := gcppubsub.SubscriberClient(ctx, conn)\nif err != nil {\n\treturn err\n}\ndefer subClient.Close()\n\n// Construct a *pubsub.Subscription.\nsubscription, err := gcppubsub.OpenSubscriptionByPath(\n\tsubClient, \"projects/myprojectID/subscriptions/example-subscription\", nil)\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/gcppubsub.ExampleOpenTopic": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/gcp\"\n\t\"gocloud.dev/pubsub/gcppubsub\"\n)", "code": "// Your GCP credentials.\n// See https://cloud.google.com/docs/authentication/production\n// for more info on alternatives.\ncreds, err := gcp.DefaultCredentials(ctx)\nif err != nil {\n\treturn err\n}\n// Open a gRPC connection to the GCP Pub/Sub API.\nconn, cleanup, err := gcppubsub.Dial(ctx, creds.TokenSource)\nif err != nil {\n\treturn err\n}\ndefer cleanup()\n\n// Construct a PublisherClient using the connection.\npubClient, err := gcppubsub.PublisherClient(ctx, conn)\nif err != nil {\n\treturn err\n}\ndefer pubClient.Close()\n\n// Construct a *pubsub.Topic.\ntopic, err := gcppubsub.OpenTopicByPath(pubClient, \"projects/myprojectID/topics/example-topic\", nil)\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/gcppubsub.Example_openSubscriptionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/gcppubsub\"\n)", "code": "subscription, err := pubsub.OpenSubscription(ctx,\n\t\"gcppubsub://projects/my-project/subscriptions/my-subscription\")\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/gcppubsub.Example_openTopicFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/gcppubsub\"\n)", "code": "topic, err := pubsub.OpenTopic(ctx, \"gcppubsub://projects/myproject/topics/mytopic\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/kafkapubsub.ExampleOpenSubscription": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub/kafkapubsub\"\n)", "code": "// The set of brokers in the Kafka cluster.\naddrs := []string{\"1.2.3.4:9092\"}\n// The Kafka client configuration to use.\nconfig := kafkapubsub.MinimalConfig()\n\n// Construct a *pubsub.Subscription, joining the consumer group \"my-group\"\n// and receiving messages from \"my-topic\".\nsubscription, err := kafkapubsub.OpenSubscription(\n\taddrs, config, \"my-group\", []string{\"my-topic\"}, nil)\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/kafkapubsub.ExampleOpenTopic": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub/kafkapubsub\"\n)", "code": "// The set of brokers in the Kafka cluster.\naddrs := []string{\"1.2.3.4:9092\"}\n// The Kafka client configuration to use.\nconfig := kafkapubsub.MinimalConfig()\n\n// Construct a *pubsub.Topic.\ntopic, err := kafkapubsub.OpenTopic(addrs, config, \"my-topic\", nil)\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/kafkapubsub.Example_openSubscriptionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/kafkapubsub\"\n)", "code": "// pubsub.OpenSubscription creates a *pubsub.Subscription from a URL.\n// The host + path are used as the consumer group name.\n// The \"topic\" query parameter sets one or more topics to subscribe to.\n// The set of brokers must be in an environment variable KAFKA_BROKERS.\nsubscription, err := pubsub.OpenSubscription(ctx,\n\t\"kafka://my-group?topic=my-topic\")\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/kafkapubsub.Example_openTopicFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/kafkapubsub\"\n)", "code": "// pubsub.OpenTopic creates a *pubsub.Topic from a URL.\n// The host + path are the topic name to send to.\n// The set of brokers must be in an environment variable KAFKA_BROKERS.\ntopic, err := pubsub.OpenTopic(ctx, \"kafka://my-topic\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/mempubsub.ExampleNewSubscription": { "imports": "import (\n\t\"context\"\n\t\"time\"\n\n\t\"gocloud.dev/pubsub/mempubsub\"\n)", "code": "// Construct a *pubsub.Topic.\ntopic := mempubsub.NewTopic()\ndefer topic.Shutdown(ctx)\n\n// Construct a *pubsub.Subscription for the topic.\nsubscription := mempubsub.NewSubscription(topic, 1*time.Minute /* ack deadline */)\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/mempubsub.ExampleNewTopic": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub/mempubsub\"\n)", "code": "topic := mempubsub.NewTopic()\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/mempubsub.Example_openSubscriptionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/mempubsub\"\n)", "code": "// Create a topic.\ntopic, err := pubsub.OpenTopic(ctx, \"mem://topicA\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)\n\n// Create a subscription connected to that topic.\nsubscription, err := pubsub.OpenSubscription(ctx, \"mem://topicA\")\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/mempubsub.Example_openTopicFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/mempubsub\"\n)", "code": "topic, err := pubsub.OpenTopic(ctx, \"mem://topicA\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/natspubsub.ExampleOpenQueueSubscription": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/nats-io/nats.go\"\n\t\"gocloud.dev/pubsub/natspubsub\"\n)", "code": "natsConn, err := nats.Connect(\"nats://nats.example.com\")\nif err != nil {\n\treturn err\n}\ndefer natsConn.Close()\n\nsubscription, err := natspubsub.OpenSubscription(\n\tnatsConn,\n\t\"example.mysubject\",\n\t\u0026natspubsub.SubscriptionOptions{Queue: \"queue1\"})\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/natspubsub.ExampleOpenSubscription": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/nats-io/nats.go\"\n\t\"gocloud.dev/pubsub/natspubsub\"\n)", "code": "natsConn, err := nats.Connect(\"nats://nats.example.com\")\nif err != nil {\n\treturn err\n}\ndefer natsConn.Close()\n\nsubscription, err := natspubsub.OpenSubscription(\n\tnatsConn,\n\t\"example.mysubject\",\n\tnil)\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/natspubsub.ExampleOpenTopic": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/nats-io/nats.go\"\n\t\"gocloud.dev/pubsub/natspubsub\"\n)", "code": "natsConn, err := nats.Connect(\"nats://nats.example.com\")\nif err != nil {\n\treturn err\n}\ndefer natsConn.Close()\n\ntopic, err := natspubsub.OpenTopic(natsConn, \"example.mysubject\", nil)\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/natspubsub.Example_openQueueSubscriptionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/natspubsub\"\n)", "code": "// pubsub.OpenSubscription creates a *pubsub.Subscription from a URL.\n// This URL will Dial the NATS server at the URL in the environment variable\n// NATS_SERVER_URL and receive messages with subject \"example.mysubject\"\n// This URL will be parsed and the queue attribute will be used as the Queue parameter when creating the NATS Subscription.\nsubscription, err := pubsub.OpenSubscription(ctx, \"nats://example.mysubject?queue=myqueue\")\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/natspubsub.Example_openSubscriptionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/natspubsub\"\n)", "code": "// pubsub.OpenSubscription creates a *pubsub.Subscription from a URL.\n// This URL will Dial the NATS server at the URL in the environment variable\n// NATS_SERVER_URL and receive messages with subject \"example.mysubject\".\nsubscription, err := pubsub.OpenSubscription(ctx, \"nats://example.mysubject\")\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/natspubsub.Example_openTopicFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/natspubsub\"\n)", "code": "// pubsub.OpenTopic creates a *pubsub.Topic from a URL.\n// This URL will Dial the NATS server at the URL in the environment variable\n// NATS_SERVER_URL and send messages with subject \"example.mysubject\".\ntopic, err := pubsub.OpenTopic(ctx, \"nats://example.mysubject\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/rabbitpubsub.ExampleOpenSubscription": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/streadway/amqp\"\n\t\"gocloud.dev/pubsub/rabbitpubsub\"\n)", "code": "rabbitConn, err := amqp.Dial(\"amqp://guest:guest@localhost:5672/\")\nif err != nil {\n\treturn err\n}\ndefer rabbitConn.Close()\nsubscription := rabbitpubsub.OpenSubscription(rabbitConn, \"myqueue\", nil)\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/rabbitpubsub.ExampleOpenTopic": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/streadway/amqp\"\n\t\"gocloud.dev/pubsub/rabbitpubsub\"\n)", "code": "rabbitConn, err := amqp.Dial(\"amqp://guest:guest@localhost:5672/\")\nif err != nil {\n\treturn err\n}\ndefer rabbitConn.Close()\ntopic := rabbitpubsub.OpenTopic(rabbitConn, \"myexchange\", nil)\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/pubsub/rabbitpubsub.Example_openSubscriptionFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/rabbitpubsub\"\n)", "code": "// pubsub.OpenSubscription creates a *pubsub.Subscription from a URL.\n// This URL will Dial the RabbitMQ server at the URL in the environment\n// variable RABBIT_SERVER_URL and open the queue \"myqueue\".\nsubscription, err := pubsub.OpenSubscription(ctx, \"rabbit://myqueue\")\nif err != nil {\n\treturn err\n}\ndefer subscription.Shutdown(ctx)" }, "gocloud.dev/pubsub/rabbitpubsub.Example_openTopicFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/pubsub\"\n\t_ \"gocloud.dev/pubsub/rabbitpubsub\"\n)", "code": "// pubsub.OpenTopic creates a *pubsub.Topic from a URL.\n// This URL will Dial the RabbitMQ server at the URL in the environment\n// variable RABBIT_SERVER_URL and open the exchange \"myexchange\".\ntopic, err := pubsub.OpenTopic(ctx, \"rabbit://myexchange\")\nif err != nil {\n\treturn err\n}\ndefer topic.Shutdown(ctx)" }, "gocloud.dev/runtimevar.ExampleDecryptDecode": { "imports": "import (\n\t\"gocloud.dev/runtimevar\"\n\t\"gocloud.dev/secrets\"\n)", "code": "decodeFunc := runtimevar.DecryptDecode(keeper, runtimevar.StringDecode)\ndecoder := runtimevar.NewDecoder(\"\", decodeFunc)" }, "gocloud.dev/runtimevar.ExampleVariable_Latest": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/runtimevar\"\n)", "code": "snapshot, err := v.Latest(context.Background())\nif err != nil {\n\tlog.Fatalf(\"Error in retrieving variable: %v\", err)\n}" }, "gocloud.dev/runtimevar.Example_jsonDecoder": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\n\t\"gocloud.dev/runtimevar\"\n\t\"gocloud.dev/runtimevar/constantvar\"\n)", "code": "// Config is the sample config struct we're going to parse our JSON into.\ntype Config struct {\n\tHost string\n\tPort int\n}\n\n// A sample JSON config that will decode into Config.\nconst jsonConfig = `{\"Host\": \"gocloud.dev\", \"Port\": 8080}`\n\n// Construct a Decoder that decodes raw bytes into our config.\ndecoder := runtimevar.NewDecoder(Config{}, runtimevar.JSONDecode)\n\n// Next, a construct a *Variable using a constructor or URL opener.\n// This example uses constantvar.\n// If you're using a URL opener, you can't decode JSON into a struct, but\n// you can use the query parameter \"decoder=jsonmap\" to decode into a map.\nv := constantvar.NewBytes([]byte(jsonConfig), decoder)\ndefer v.Close()\n// snapshot.Value will be of type Config." }, "gocloud.dev/runtimevar/awsparamstore.ExampleOpenVariable": { "imports": "import (\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"gocloud.dev/runtimevar\"\n\t\"gocloud.dev/runtimevar/awsparamstore\"\n)", "code": "// Establish an AWS session.\n// See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info.\nsess, err := session.NewSession(nil)\nif err != nil {\n\treturn err\n}\n\n// Construct a *runtimevar.Variable that watches the variable.\nv, err := awsparamstore.OpenVariable(sess, \"cfg-variable-name\", runtimevar.StringDecoder, nil)\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/awsparamstore.Example_openVariableFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/runtimevar\"\n\t_ \"gocloud.dev/runtimevar/awsparamstore\"\n)", "code": "// runtimevar.OpenVariable creates a *runtimevar.Variable from a URL.\n\nv, err := runtimevar.OpenVariable(ctx, \"awsparamstore://myvar?region=us-west-1\u0026decoder=string\")\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/blobvar.Example_openVariableFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/runtimevar\"\n\t_ \"gocloud.dev/runtimevar/blobvar\"\n)", "code": "// runtimevar.OpenVariable creates a *runtimevar.Variable from a URL.\n// The default opener opens a blob.Bucket via a URL, based on the environment\n// variable BLOBVAR_BUCKET_URL.\n\nv, err := runtimevar.OpenVariable(ctx, \"blob://myvar.txt?decoder=string\")\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/constantvar.Example_openVariableFromURL": { "imports": "import (\n\t\"context\"\n\t\"fmt\"\n\n\t\"gocloud.dev/runtimevar\"\n\t_ \"gocloud.dev/runtimevar/constantvar\"\n)", "code": "// runtimevar.OpenVariable creates a *runtimevar.Variable from a URL.\n\nv, err := runtimevar.OpenVariable(ctx, \"constant://?val=hello+world\u0026decoder=string\")\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/etcdvar.ExampleOpenVariable": { "imports": "import (\n\t\"go.etcd.io/etcd/clientv3\"\n\t\"gocloud.dev/runtimevar\"\n\t\"gocloud.dev/runtimevar/etcdvar\"\n)", "code": "// Connect to the etcd server.\nclient, err := clientv3.NewFromURL(\"http://your.etcd.server:9999\")\nif err != nil {\n\treturn err\n}\n\n// Construct a *runtimevar.Variable that watches the variable.\nv, err := etcdvar.OpenVariable(client, \"cfg-variable-name\", runtimevar.StringDecoder, nil)\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/etcdvar.Example_openVariableFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/runtimevar\"\n\t_ \"gocloud.dev/runtimevar/etcdvar\"\n)", "code": "// runtimevar.OpenVariable creates a *runtimevar.Variable from a URL.\n// The default opener connects to an etcd server based on the environment\n// variable ETCD_SERVER_URL.\n\nv, err := runtimevar.OpenVariable(ctx, \"etcd://myvarname?decoder=string\")\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/filevar.Example_openVariableFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/runtimevar\"\n\t_ \"gocloud.dev/runtimevar/filevar\"\n)", "code": "// runtimevar.OpenVariable creates a *runtimevar.Variable from a URL.\n\nv, err := runtimevar.OpenVariable(ctx, \"file:///path/to/config.txt?decoder=string\")\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/gcpruntimeconfig.ExampleOpenVariable": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/gcp\"\n\t\"gocloud.dev/runtimevar\"\n\t\"gocloud.dev/runtimevar/gcpruntimeconfig\"\n)", "code": "// Your GCP credentials.\n// See https://cloud.google.com/docs/authentication/production\n// for more info on alternatives.\ncreds, err := gcp.DefaultCredentials(ctx)\nif err != nil {\n\treturn err\n}\n\n// Connect to the Runtime Configurator service.\nclient, cleanup, err := gcpruntimeconfig.Dial(ctx, creds.TokenSource)\nif err != nil {\n\treturn err\n}\ndefer cleanup()\n\n// You can use the VariableKey helper to construct a Variable key from\n// your project ID, config ID, and the variable name; alternatively,\n// you can construct the full string yourself (e.g.,\n// \"projects/gcp-project-id/configs/config-id/variables/variable-name\").\n// See https://cloud.google.com/deployment-manager/runtime-configurator/\n// for more details.\n//\n// For this example, the GCP Cloud Runtime Configurator variable being\n// referenced should have a JSON string that decodes into MyConfig.\nvariableKey := gcpruntimeconfig.VariableKey(\"gcp-project-id\", \"config-id\", \"variable-name\")\n\n// Construct a *runtimevar.Variable that watches the variable.\nv, err := gcpruntimeconfig.OpenVariable(client, variableKey, runtimevar.StringDecoder, nil)\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/gcpruntimeconfig.Example_openVariableFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/runtimevar\"\n\t_ \"gocloud.dev/runtimevar/gcpruntimeconfig\"\n)", "code": "// runtimevar.OpenVariable creates a *runtimevar.Variable from a URL.\n// The URL Host+Path are used as the GCP Runtime Configurator Variable key;\n// see https://cloud.google.com/deployment-manager/runtime-configurator/\n// for more details.\n\nv, err := runtimevar.OpenVariable(ctx, \"gcpruntimeconfig://projects/myproject/configs/myconfigid/variables/myvar?decoder=string\")\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/httpvar.ExampleOpenVariable": { "imports": "import (\n\t\"net/http\"\n\n\t\"gocloud.dev/runtimevar\"\n\t\"gocloud.dev/runtimevar/httpvar\"\n)", "code": "// Create an HTTP.Client\nhttpClient := http.DefaultClient\n\n// Construct a *runtimevar.Variable that watches the page.\nv, err := httpvar.OpenVariable(httpClient, \"http://example.com\", runtimevar.StringDecoder, nil)\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/runtimevar/httpvar.Example_openVariableFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/runtimevar\"\n\t_ \"gocloud.dev/runtimevar/httpvar\"\n)", "code": "// runtimevar.OpenVariable creates a *runtimevar.Variable from a URL.\n// The default opener connects to an etcd server based on the environment\n// variable ETCD_SERVER_URL.\n\nv, err := runtimevar.OpenVariable(ctx, \"http://myserver.com/foo.txt?decoder=string\")\nif err != nil {\n\treturn err\n}\ndefer v.Close()" }, "gocloud.dev/secrets.ExampleKeeper_Decrypt": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/secrets\"\n)", "code": "var cipherText []byte // obtained from elsewhere and random-looking\nplainText, err := keeper.Decrypt(ctx, cipherText)\nif err != nil {\n\treturn err\n}" }, "gocloud.dev/secrets.ExampleKeeper_Encrypt": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/secrets\"\n)", "code": "plainText := []byte(\"Secrets secrets...\")\ncipherText, err := keeper.Encrypt(ctx, plainText)\nif err != nil {\n\treturn err\n}" }, "gocloud.dev/secrets/awskms.ExampleOpenKeeper": { "imports": "import (\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"gocloud.dev/secrets/awskms\"\n)", "code": "// Establish an AWS session.\n// See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info.\nsess, err := session.NewSession(nil)\nif err != nil {\n\treturn err\n}\n\n// Get a client to use with the KMS API.\nclient, err := awskms.Dial(sess)\nif err != nil {\n\treturn err\n}\n\n// Construct a *secrets.Keeper.\nkeeper := awskms.OpenKeeper(client, \"alias/test-secrets\", nil)\ndefer keeper.Close()" }, "gocloud.dev/secrets/awskms.Example_openFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/secrets\"\n\t_ \"gocloud.dev/secrets/awskms\"\n)", "code": "// Use one of the following:\n\n// 1. By ID.\nkeeperByID, err := secrets.OpenKeeper(ctx,\n\t\"awskms://1234abcd-12ab-34cd-56ef-1234567890ab?region=us-east-1\")\nif err != nil {\n\treturn err\n}\ndefer keeperByID.Close()\n\n// 2. By alias.\nkeeperByAlias, err := secrets.OpenKeeper(ctx,\n\t\"awskms://alias/ExampleAlias?region=us-east-1\")\nif err != nil {\n\treturn err\n}\ndefer keeperByAlias.Close()\n\n// 3. By ARN.\nconst arn = \"arn:aws:kms:us-east-1:111122223333:key/\" +\n\t\"1234abcd-12ab-34bc-56ef-1234567890ab\"\nkeeperByARN, err := secrets.OpenKeeper(ctx,\n\t\"awskms://\"+arn+\"?region=us-east-1\")\nif err != nil {\n\treturn err\n}\ndefer keeperByARN.Close()" }, "gocloud.dev/secrets/azurekeyvault.ExampleOpenKeeper": { "imports": "import \"gocloud.dev/secrets/azurekeyvault\"", "code": "// Get a client to use with the Azure KeyVault API, using default\n// authorization from the environment.\n//\n// You can alternatively use DialUsingCLIAuth to use auth from the\n// \"az\" CLI.\nclient, err := azurekeyvault.Dial()\nif err != nil {\n\treturn err\n}\n\n// Construct a *secrets.Keeper.\nkeeper, err := azurekeyvault.OpenKeeper(client, \"https://mykeyvaultname.vault.azure.net/keys/mykeyname\", nil)\nif err != nil {\n\treturn err\n}\ndefer keeper.Close()" }, "gocloud.dev/secrets/azurekeyvault.Example_openFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/secrets\"\n\t_ \"gocloud.dev/secrets/azurekeyvault\"\n)", "code": "// The \"azurekeyvault\" URL scheme is replaced with \"https\" to construct an Azure\n// Key Vault keyID, as described in https://docs.microsoft.com/en-us/azure/key-vault/about-keys-secrets-and-certificates.\n// You can add an optional \"/{key-version}\" to the path to use a specific\n// version of the key; it defaults to the latest version.\nkeeper, err := secrets.OpenKeeper(ctx, \"azurekeyvault://mykeyvaultname.vault.azure.net/keys/mykeyname\")\nif err != nil {\n\treturn err\n}\ndefer keeper.Close()" }, "gocloud.dev/secrets/gcpkms.ExampleOpenKeeper": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/secrets/gcpkms\"\n)", "code": "// Get a client to use with the KMS API.\nclient, done, err := gcpkms.Dial(ctx, nil)\nif err != nil {\n\treturn err\n}\n// Close the connection when done.\ndefer done()\n\n// You can also use gcpkms.KeyResourceID to construct this string.\nconst keyID = \"projects/MYPROJECT/\" +\n\t\"locations/MYLOCATION/\" +\n\t\"keyRings/MYKEYRING/\" +\n\t\"cryptoKeys/MYKEY\"\n\n// Construct a *secrets.Keeper.\nkeeper := gcpkms.OpenKeeper(client, keyID, nil)\ndefer keeper.Close()" }, "gocloud.dev/secrets/gcpkms.Example_openFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/secrets\"\n\t_ \"gocloud.dev/secrets/gcpkms\"\n)", "code": "keeper, err := secrets.OpenKeeper(ctx,\n\t\"gcpkms://projects/MYPROJECT/\"+\n\t\t\"locations/MYLOCATION/\"+\n\t\t\"keyRings/MYKEYRING/\"+\n\t\t\"cryptoKeys/MYKEY\")\nif err != nil {\n\treturn err\n}\ndefer keeper.Close()" }, "gocloud.dev/secrets/hashivault.ExampleOpenKeeper": { "imports": "import (\n\t\"context\"\n\n\t\"github.com/hashicorp/vault/api\"\n\t\"gocloud.dev/secrets/hashivault\"\n)", "code": "// Get a client to use with the Vault API.\nclient, err := hashivault.Dial(ctx, \u0026hashivault.Config{\n\tToken: \"CLIENT_TOKEN\",\n\tAPIConfig: api.Config{\n\t\tAddress: \"http://127.0.0.1:8200\",\n\t},\n})\nif err != nil {\n\treturn err\n}\n\n// Construct a *secrets.Keeper.\nkeeper := hashivault.OpenKeeper(client, \"my-key\", nil)\ndefer keeper.Close()" }, "gocloud.dev/secrets/hashivault.Example_openFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/secrets\"\n\t_ \"gocloud.dev/secrets/hashivault\"\n)", "code": "keeper, err := secrets.OpenKeeper(ctx, \"hashivault://mykey\")\nif err != nil {\n\treturn err\n}\ndefer keeper.Close()" }, "gocloud.dev/secrets/localsecrets.ExampleNewKeeper": { "imports": "import \"gocloud.dev/secrets/localsecrets\"", "code": "secretKey, err := localsecrets.NewRandomKey()\nif err != nil {\n\treturn err\n}\nkeeper := localsecrets.NewKeeper(secretKey)\ndefer keeper.Close()" }, "gocloud.dev/secrets/localsecrets.Example_openFromURL": { "imports": "import (\n\t\"context\"\n\n\t\"gocloud.dev/secrets\"\n\t_ \"gocloud.dev/secrets/localsecrets\"\n)", "code": "// Using \"base64key://\", a new random key will be generated.\nrandomKeyKeeper, err := secrets.OpenKeeper(ctx, \"base64key://\")\nif err != nil {\n\treturn err\n}\ndefer randomKeyKeeper.Close()\n\n// Otherwise, the URL hostname must be a base64-encoded key, of length 32 bytes when decoded.\nsavedKeyKeeper, err := secrets.OpenKeeper(ctx, \"base64key://smGbjm71Nxd1Ig5FS0wj9SlbzAIrnolCz9bQQ6uAhl4=\")\nif err != nil {\n\treturn err\n}\ndefer savedKeyKeeper.Close()" }, "gocloud.dev/server.ExampleServer_HealthChecks": { "imports": "import (\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"gocloud.dev/server\"\n\t\"gocloud.dev/server/health\"\n)", "code": "// Create a health.Checker from the type we defined for our application.\n// In this example, healthCheck will report the server is unhealthy for 10 seconds\n// after startup, and as healthy henceforth. Check the /healthz/readiness\n// HTTP path to see readiness.\nhealthCheck := new(customHealthCheck)\ntime.AfterFunc(10*time.Second, func() {\n\thealthCheck.mu.Lock()\n\tdefer healthCheck.mu.Unlock()\n\thealthCheck.healthy = true\n})\n\n// The server.Options struct takes a slice of health checks, because you\n// may need to check several things.\nsrvOptions := \u0026server.Options{\n\tHealthChecks: []health.Checker{healthCheck},\n}\n\n// Pass the options to the Server constructor.\nsrv := server.New(http.DefaultServeMux, srvOptions)\n\n// Register a route.\nhttp.HandleFunc(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\tfmt.Fprintln(w, \"Hello, World!\")\n})\n\n// Start the server. You will see requests logged to STDOUT.\nif err := srv.ListenAndServe(\":8080\"); err != nil {\n\tlog.Fatalf(\"%v\", err)\n}" }, "gocloud.dev/server.ExampleServer_New": { "imports": "import (\n\t\"fmt\"\n\t\"net/http\"\n\n\t\"gocloud.dev/server\"\n)", "code": "// Use the constructor function to create the server.\nsrv := server.New(http.DefaultServeMux, nil)\n\n// Register a route.\nhttp.HandleFunc(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\tfmt.Fprintln(w, \"Hello, World!\")\n})\n\n// Start the server. If ListenAndServe returns an error, print it and exit.\nif err := srv.ListenAndServe(\":8080\"); err != nil {\n\tlog.Fatalf(\"%v\", err)\n}" }, "gocloud.dev/server.ExampleServer_RequestLogger": { "imports": "import (\n\t\"fmt\"\n\t\"net/http\"\n\t\"os\"\n\n\t\"gocloud.dev/server\"\n\t\"gocloud.dev/server/requestlog\"\n)", "code": "// Create a logger, and assign it to the RequestLogger field of a\n// server.Options struct.\nsrvOptions := \u0026server.Options{\n\tRequestLogger: requestlog.NewNCSALogger(os.Stdout, func(error) {}),\n}\n\n// Pass the options to the Server constructor.\nsrv := server.New(http.DefaultServeMux, srvOptions)\n\n// Register a route.\nhttp.HandleFunc(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\tfmt.Fprintln(w, \"Hello, World!\")\n})\n\n// Start the server. You will see requests logged to STDOUT.\nif err := srv.ListenAndServe(\":8080\"); err != nil {\n\tlog.Fatalf(\"%v\", err)\n}" } } go-cloud-0.20.0/internal/website/gatherexamples/000077500000000000000000000000001367004507500216005ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/gatherexamples/gatherexamples.go000066400000000000000000000250121367004507500251400ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Command gatherexamples extracts examples in a Go module into a JSON-formatted // object. This is used as input for building the Go CDK Hugo website. // // Examples must include a comment // "// PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored." // somewhere in the function body in order to be included in this tool's output. // // gatherexamples does some minimal rewriting of the example source code for // presentation: // // - Any imports the example uses will be prepended to the code. // - log.Fatal(err) -> return err // - A comment line "// PRAGMA: On gocloud.dev, hide lines until the next blank line." will // remove any code up to the next blank line. This is intended for // compiler-mandated setup like `ctx := context.Background()`. // - A comment line "// PRAGMA: On gocloud.dev, hide the rest of the function." will // remove any code until the end of the function. This is intended for // compiler-mandated assignments like `_ = bucket`. // - A comment line "// PRAGMA: On gocloud.dev, add a blank import: _ "example.com/foo"" // will add the blank import to the example's imports. // // The key of each JSON object entry will be the import path of the package, // followed by a dot ("."), followed by the name of the example function. The // value of each JSON object entry is an object like // {"imports": "import (\n\t\"fmt\"\n)", "code": "/* ... */"}. These are // separated so that templating can format or show them separately. package main import ( "encoding/json" "flag" "fmt" "go/ast" "go/format" "go/printer" "go/types" "os" "sort" "strconv" "strings" "golang.org/x/tools/go/packages" ) func main() { flag.Usage = func() { out := flag.CommandLine.Output() fmt.Fprintln(out, "usage: gatherexamples [options] DIR [...]") fmt.Fprintln(out) fmt.Fprintln(out, "Options:") flag.PrintDefaults() } pattern := flag.String("pattern", "./...", "Go package pattern to use at each directory argument") flag.Parse() if flag.NArg() == 0 { flag.Usage() os.Exit(2) // matches with flag package } // Load packages in each module named on the command line and find // all examples. allExamples := make(map[string]example) for _, dir := range flag.Args() { cfg := &packages.Config{ Mode: gatherLoadMode, Dir: dir, Tests: true, } pkgs, err := packages.Load(cfg, *pattern) if err != nil { fmt.Fprintf(os.Stderr, "gatherexamples: load %s: %v\n", dir, err) os.Exit(1) } examples, err := gather(pkgs) if err != nil { fmt.Fprintf(os.Stderr, "gatherexamples: gather: %v", err) os.Exit(1) } for exampleName, ex := range examples { allExamples[exampleName] = ex } } // Write all examples as a JSON object. data, err := json.MarshalIndent(allExamples, "", "\t") if err != nil { fmt.Fprintf(os.Stderr, "gatherexamples: generate JSON: %v\n", err) os.Exit(1) } data = append(data, '\n') if _, err := os.Stdout.Write(data); err != nil { fmt.Fprintf(os.Stderr, "gatherexamples: write output: %v\n", err) os.Exit(1) } } const gatherLoadMode packages.LoadMode = packages.NeedName | packages.NeedFiles | packages.NeedTypes | packages.NeedSyntax | packages.NeedTypesInfo | packages.NeedImports | // TODO(light): We really only need name from deps, but there's no way to // specify that in the current go/packages API. This sadly makes this program // 10x slower. Reported as https://github.com/golang/go/issues/31699. packages.NeedDeps // pragmaPrefix is the prefix for all comments in examples that are used as // directives for formatting. const pragmaPrefix = "// PRAGMA: " // inclusionComment is the comment used to signify whether the example should be // included in the output. const inclusionComment = pragmaPrefix + "This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored." type example struct { Imports string `json:"imports"` Code string `json:"code"` } // gather extracts the code from the example functions in the given packages // and returns a map like the one described in the package documentation. func gather(pkgs []*packages.Package) (map[string]example, error) { examples := make(map[string]example) for _, pkg := range pkgs { for _, file := range pkg.Syntax { for _, decl := range file.Decls { // Determine whether this declaration is an example function. fn, ok := decl.(*ast.FuncDecl) if !ok || !strings.HasPrefix(fn.Name.Name, "Example") || len(fn.Type.Params.List) > 0 || len(fn.Type.Params.List) > 0 { continue } // Format example into string. sb := new(strings.Builder) err := format.Node(sb, pkg.Fset, &printer.CommentedNode{ Node: fn.Body, Comments: file.Comments, }) if err != nil { return nil, err // will only occur for bad invocations of Fprint } original := sb.String() if !strings.Contains(original, inclusionComment) { // Does not contain the inclusion comment. Skip it, but first verify // that it doesn't contain any PRAGMA comments; only examples with // the inclusion comment should include pragmas. if strings.Contains(original, pragmaPrefix) { return nil, fmt.Errorf("%s in package %s has PRAGMA(s) for gatherexamples, but is not marked for inclusion with %q", fn.Name.Name, pkg.PkgPath, inclusionComment) } continue } exampleCode, blankImports := rewriteBlock(original) // Gather map of imported packages to overridden identifier. usedPackages := make(map[string]string) for _, path := range blankImports { usedPackages[path] = "_" } ast.Inspect(fn.Body, func(node ast.Node) bool { id, ok := node.(*ast.Ident) if !ok { return true } refPkg, ok := pkg.TypesInfo.ObjectOf(id).(*types.PkgName) if !ok { return true } overrideName := "" if id.Name != refPkg.Imported().Name() { overrideName = id.Name } usedPackages[refPkg.Imported().Path()] = overrideName return true }) // Remove "log" import since it's almost always used for log.Fatal(err). delete(usedPackages, "log") pkgPath := strings.TrimSuffix(pkg.PkgPath, "_test") exampleName := pkgPath + "." + fn.Name.Name examples[exampleName] = example{ Imports: formatImports(usedPackages), Code: exampleCode, } } } } return examples, nil } // rewriteBlock reformats a Go block statement for display as an example. // It also extracts any blank imports found func rewriteBlock(block string) (_ string, blankImports []string) { // Trim block. block = strings.TrimPrefix(block, "{") block = strings.TrimSuffix(block, "}") // Rewrite line-by-line. sb := new(strings.Builder) rewrite: for len(block) > 0 { var line string line, block = nextLine(block) // Dedent line. // TODO(light): In the case of a multi-line raw string literal, // this can produce incorrect rewrites. line = strings.TrimPrefix(line, "\t") // Write the line to sb, performing textual substitutions as needed. start := strings.IndexFunc(line, func(r rune) bool { return r != ' ' && r != '\t' }) if start == -1 { // Blank. sb.WriteString(line) sb.WriteByte('\n') continue } const importBlankPrefix = pragmaPrefix + "On gocloud.dev, add a blank import: _ " indent, lineContent := line[:start], line[start:] switch { case lineContent == pragmaPrefix+"On gocloud.dev, hide lines until the next blank line.": // Skip lines until we hit a blank line. for len(block) > 0 { var next string next, block = nextLine(block) if strings.TrimSpace(next) == "" { break } } case lineContent == pragmaPrefix+"On gocloud.dev, hide the rest of the function.": // Ignore remaining lines. break rewrite case lineContent == "log.Fatal(err)": sb.WriteString(indent) sb.WriteString("return err") sb.WriteByte('\n') case strings.HasPrefix(lineContent, importBlankPrefix): // Blank import. path, err := strconv.Unquote(lineContent[len(importBlankPrefix):]) if err == nil { blankImports = append(blankImports, path) } case strings.Contains(lineContent, inclusionComment): // inclusion comment. Skip it. default: // Ordinary line, write as-is. sb.WriteString(line) sb.WriteByte('\n') } } return strings.TrimSpace(sb.String()), blankImports } // nextLine splits the string at the next linefeed. func nextLine(s string) (line, tail string) { i := strings.IndexByte(s, '\n') if i == -1 { return s, "" } return s[:i], s[i+1:] } // formatImports formats a map of imports to their package identifiers into a // Go import declaration. func formatImports(usedPackages map[string]string) string { if len(usedPackages) == 0 { return "" } if len(usedPackages) == 1 { // Special case: one-line import. for path, id := range usedPackages { if id != "" { return fmt.Sprintf("import %s %q", id, path) } return fmt.Sprintf("import %q", path) } } // Typical case: multiple imports in factored declaration form. // Group into standard library imports then third-party imports. sortedStdlib := make([]string, 0, len(usedPackages)) sortedThirdParty := make([]string, 0, len(usedPackages)) for path := range usedPackages { if strings.ContainsRune(path, '.') { // Third-party imports almost always contain a dot for a domain name, // especially in GOPATH/Go modules workspaces. sortedThirdParty = append(sortedThirdParty, path) } else { sortedStdlib = append(sortedStdlib, path) } } sort.Strings(sortedStdlib) sort.Strings(sortedThirdParty) sb := new(strings.Builder) sb.WriteString("import (\n") printImports := func(paths []string) { for _, path := range paths { id := usedPackages[path] if id == "" { fmt.Fprintf(sb, "\t%q\n", path) } else { fmt.Fprintf(sb, "\t%s %q\n", id, path) } } } printImports(sortedStdlib) if len(sortedStdlib) > 0 && len(sortedThirdParty) > 0 { // Insert blank line to separate. sb.WriteByte('\n') } printImports(sortedThirdParty) sb.WriteString(")") return sb.String() } go-cloud-0.20.0/internal/website/gatherexamples/gatherexamples_test.go000066400000000000000000000205201367004507500261760ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "testing" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "golang.org/x/tools/go/packages" "golang.org/x/tools/go/packages/packagestest" ) func TestGather(t *testing.T) { tests := []struct { name string module packagestest.Module want map[string]example wantErr bool }{ { name: "NoExamples", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\nfunc main() {}\n", }, }, want: map[string]example{}, }, { name: "EmptyExample", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test func Example() {}`, }, }, want: map[string]example{}, }, { name: "EmptyExampleFoo", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test func ExampleFoo() { }`, }, }, want: map[string]example{}, }, { name: "NonSignifiedExampleWithPragma", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test func ExampleFoo() { // PRAGMA: Do something. }`, }, }, want: map[string]example{}, wantErr: true, }, { name: "EmptyExampleWithComment", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. }`, }, }, want: map[string]example{ "example.com/foo.Example": {Code: ""}, }, }, { name: "EmptyExampleFooWithComment", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test func ExampleFoo() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. }`, }, }, want: map[string]example{ "example.com/foo.ExampleFoo": {Code: ""}, }, }, { name: "NoImportsExample", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Unattached comment. // Outside inner block comment. panic("ohai") if false { // something } return }`, }, }, want: map[string]example{ "example.com/foo.Example": {Code: "// Unattached comment.\n\n" + "// Outside inner block comment.\n" + "panic(\"ohai\")\n" + "if false {\n\t// something\n}\n" + "return"}, }, }, { name: "OneImportExample", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test import "fmt" func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. fmt.Println(42) }`, }, }, want: map[string]example{ "example.com/foo.Example": { Imports: "import \"fmt\"", Code: "fmt.Println(42)", }, }, }, { name: "TwoImportsExample", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test import "fmt" import "math" func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. fmt.Println(math.Pi) }`, }, }, want: map[string]example{ "example.com/foo.Example": { Imports: "import (\n\t\"fmt\"\n\t\"math\"\n)", Code: "fmt.Println(math.Pi)", }, }, }, { name: "LogFatalToReturnErr", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test import "log" func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. var err error if err != nil { log.Fatal(err) } }`, }, }, want: map[string]example{ "example.com/foo.Example": {Code: "var err error\n" + "if err != nil {\n\treturn err\n}"}, }, }, { name: "IgnoreSections", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test import "context" func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // do something // PRAGMA: On gocloud.dev, hide the rest of the function. _ = ctx }`, }, }, want: map[string]example{ "example.com/foo.Example": { Imports: "import \"context\"", Code: "// do something", }, }, }, { name: "BlankImports", module: packagestest.Module{ Name: "example.com/foo", Files: map[string]interface{}{ "foo.go": "package foo\n", "example_test.go": `package foo_test func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "example.com/bar" _ = 42 }`, }, }, want: map[string]example{ "example.com/foo.Example": { Imports: "import _ \"example.com/bar\"", Code: "_ = 42", }, }, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { exported := packagestest.Export(t, packagestest.Modules, []packagestest.Module{test.module}) defer exported.Cleanup() exported.Config.Mode = gatherLoadMode pkgs, err := packages.Load(exported.Config, "./...") if err != nil { t.Fatal(err) } got, err := gather(pkgs) if (err != nil) != test.wantErr { t.Errorf("gather(pkgs) got err %v want err? %v", err, test.wantErr) } if diff := cmp.Diff(test.want, got, cmpopts.EquateEmpty()); diff != "" { t.Errorf("gather(pkgs) diff (-want +got):\n%s", diff) } }) } } func TestFormatImports(t *testing.T) { tests := []struct { name string usedPackages map[string]string want string }{ { name: "Empty", usedPackages: nil, want: "", }, { name: "One", usedPackages: map[string]string{"fmt": ""}, want: "import \"fmt\"", }, { name: "Two", usedPackages: map[string]string{ "fmt": "", "log": "", }, want: "import (\n\t\"fmt\"\n\t\"log\"\n)", }, { name: "Renamed", usedPackages: map[string]string{ "fmt": "zzz", "log": "aaa", }, want: "import (\n\tzzz \"fmt\"\n\taaa \"log\"\n)", }, { name: "StdlibSeparateFromThirdParty", usedPackages: map[string]string{ "context": "", "fmt": "", "log": "", "github.com/google/go-cmp/cmp": "", "gocloud.dev/blob": "", }, want: "import (\n" + "\t\"context\"\n" + "\t\"fmt\"\n" + "\t\"log\"\n" + "\n" + "\t\"github.com/google/go-cmp/cmp\"\n" + "\t\"gocloud.dev/blob\"\n" + ")", }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { got := formatImports(test.usedPackages) if got != test.want { t.Errorf("formatImports(%+v) =\n%s\n// want:\n%s", test.usedPackages, got, test.want) } }) } } go-cloud-0.20.0/internal/website/gatherexamples/run.sh000077500000000000000000000017021367004507500227430ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Run gatherexamples for the project. # The output of this script should be piped into # internal/website/data/examples.json, where it's picked up by Hugo. set -eo pipefail cd "$(dirname "${BASH_SOURCE[0]}")/../../.." sed -e '/^#/d' -e '/^$/d' allmodules | awk '{print $1}' | xargs go run internal/website/gatherexamples/gatherexamples.go go-cloud-0.20.0/internal/website/go.mod000066400000000000000000000002221367004507500176710ustar00rootroot00000000000000module gocloud.dev/internal/website go 1.12 require ( github.com/google/go-cmp v0.4.0 golang.org/x/tools v0.0.0-20190606174628-0139d5756a7d ) go-cloud-0.20.0/internal/website/go.sum000066400000000000000000000021211367004507500177160ustar00rootroot00000000000000github.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= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190606174628-0139d5756a7d h1:CoaGYJ9a8IXms8Q/NUeypLWbStIszTH0IIwqBUkEB9g= golang.org/x/tools v0.0.0-20190606174628-0139d5756a7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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= go-cloud-0.20.0/internal/website/layouts/000077500000000000000000000000001367004507500202675ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/layouts/404.html000066400000000000000000000003441367004507500214650ustar00rootroot00000000000000{{ define "main" }}

404: Page not found

Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. Head back home to try finding it again.

{{ end }} go-cloud-0.20.0/internal/website/layouts/_default/000077500000000000000000000000001367004507500220525ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/layouts/_default/baseof.html000066400000000000000000000073571367004507500242130ustar00rootroot00000000000000 {{ .Hugo.Generator }} {{ if .IsHome -}} {{ .Site.Title }} {{- else -}} {{ .Title }} · {{ .Site.Title }} {{- end }} {{- range .AlternativeOutputFormats }} {{- end }} {{- if .Page.Params.pkgmeta }} {{- end }} {{ template "_internal/google_analytics_async.html" . }}
{{- block "main" .}}{{end -}}
go-cloud-0.20.0/internal/website/layouts/_default/li.html000066400000000000000000000004161367004507500233450ustar00rootroot00000000000000 go-cloud-0.20.0/internal/website/layouts/_default/list.html000066400000000000000000000004401367004507500237110ustar00rootroot00000000000000{{ define "main" -}}

{{ .Title }}

{{ partial "page-toc.html" . }} {{ partial "header-link.html" .Content }} {{ with .Data.Pages.GroupBy "Weight" }}
{{- range .}} {{- range .Pages.ByTitle}} {{.Render "li"}} {{- end }} {{- end }}
{{end}} {{- end }} go-cloud-0.20.0/internal/website/layouts/_default/single.html000066400000000000000000000002001367004507500242110ustar00rootroot00000000000000{{ define "main" -}}

{{ .Title }}

{{ partial "page-toc.html" . }} {{ partial "header-link.html" .Content }} {{- end }} go-cloud-0.20.0/internal/website/layouts/_default/sitemap.xml000066400000000000000000000017161367004507500242430ustar00rootroot00000000000000{{ printf "" | safeHTML }} {{ range sort .Data.Pages "Permalink" }} {{ .Permalink }}{{ if not .Lastmod.IsZero }} {{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}{{ end }}{{ with .Sitemap.ChangeFreq }} {{ . }}{{ end }}{{ if ge .Sitemap.Priority 0.0 }} {{ .Sitemap.Priority }}{{ end }}{{ if .IsTranslated }}{{ range .Translations }} {{ end }} {{ end }} {{ end }} go-cloud-0.20.0/internal/website/layouts/howto/000077500000000000000000000000001367004507500214275ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/layouts/howto/li.html000066400000000000000000000001251367004507500227170ustar00rootroot00000000000000
  • {{ .LinkTitle }}
  • go-cloud-0.20.0/internal/website/layouts/howto/list.html000066400000000000000000000006321367004507500232710ustar00rootroot00000000000000{{ define "main" -}}

    {{ .Title }}

    {{ partial "page-toc.html" . }} {{ partial "header-link.html" .Content }} {{ if or .Data.Pages .Sections }}
      {{- range .Sections.GroupBy "Weight" }} {{- range .ByTitle }} {{.Render "li"}} {{- end }} {{- end }} {{- range .Data.Pages.GroupBy "Weight" }} {{- range .ByTitle }} {{.Render "li"}} {{- end }} {{- end }}
    {{- end }} {{- end }} go-cloud-0.20.0/internal/website/layouts/index.html000066400000000000000000000001121367004507500222560ustar00rootroot00000000000000{{ define "main" -}} {{ partial "header-link.html" .Content }} {{- end }} go-cloud-0.20.0/internal/website/layouts/partials/000077500000000000000000000000001367004507500221065ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/layouts/partials/header-link.html000066400000000000000000000003521367004507500251570ustar00rootroot00000000000000{{- /* https://zwbetz.com/create-header-links-hugo-vs-javascript/ */ -}} {{ . | replaceRE "()(.+)()" `${1} ${3}🔗${4}` | safeHTML -}} go-cloud-0.20.0/internal/website/layouts/partials/hook_head_end.html000066400000000000000000000005131367004507500255420ustar00rootroot00000000000000{{if .Page.Params.pkgmeta}} {{end}} go-cloud-0.20.0/internal/website/layouts/partials/page-toc.html000066400000000000000000000002221367004507500244670ustar00rootroot00000000000000{{if .Page.Params.toc}} {{end -}} go-cloud-0.20.0/internal/website/layouts/pkg/000077500000000000000000000000001367004507500210505ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/layouts/pkg/list.html000066400000000000000000000011461367004507500227130ustar00rootroot00000000000000 Nothing to see here; see the package on godoc. go-cloud-0.20.0/internal/website/layouts/pkg/single.html000066400000000000000000000011461367004507500232210ustar00rootroot00000000000000 Nothing to see here; see the package on godoc. go-cloud-0.20.0/internal/website/layouts/shortcodes/000077500000000000000000000000001367004507500224445ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/layouts/shortcodes/goexample.html000066400000000000000000000016051367004507500253150ustar00rootroot00000000000000{{/* Usage: goexample "gocloud.dev/foo.ExampleBar" goexample src="gocloud.dev/foo.ExampleBar" goexample src="gocloud.dev/foo.ExampleBar" imports="0" */ -}} {{ if .IsNamedParams -}} {{ with index .Site.Data.examples (.Get "src") -}} {{ if and .imports (ne ($.Get "imports") "0") -}} {{ highlight (printf "%s\n\n%s\n" .imports .code) "go" "" -}} {{ else -}} {{ highlight (printf "%s\n" .code) "go" "" -}} {{ end -}} {{ else -}} {{ errorf "%s: Example %q does not exist" ($.Page.File.Path) (.Get "src") -}} {{end -}} {{ else -}} {{ with index .Site.Data.examples (.Get 0) -}} {{ if .imports -}} {{ highlight (printf "%s\n\n%s\n" .imports .code) "go" "" -}} {{ else -}} {{ highlight (printf "%s\n" .code) "go" "" -}} {{ end -}} {{ else -}} {{ errorf "%s: Example %q does not exist" ($.Page.File.Path) (.Get 0) -}} {{end -}} {{ end -}} go-cloud-0.20.0/internal/website/layouts/shortcodes/snippet.html000066400000000000000000000000771367004507500250200ustar00rootroot00000000000000{{ readFile (.Get 0 | printf "/snippets/%s") | markdownify -}} go-cloud-0.20.0/internal/website/listnewpkgs.sh000077500000000000000000000030021367004507500214730ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script lists the package names that makeimports.sh would create # _index.md files for, one per line. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail # except x is too verbose set -euo pipefail # Change into repository root. cd "$(dirname "$0")/../.." OUTDIR=internal/website/content shopt -s nullglob # glob patterns that don't match turn into the empty string, instead of themselves function files_exist() { # assumes nullglob [[ ${1:-""} != "" ]] } # Find all directories that do not begin with '.' or '_' or contain 'testdata'. Use the %P printf # directive to remove the initial './'. for pkg in $(find . -type d \( -name '[._]?*' -prune -o -name testdata -prune -o -printf '%P ' \)); do # Only consider directories that contain Go source files. outfile="$OUTDIR/$pkg/_index.md" if files_exist $pkg/*.go && [[ ! -e "$outfile" ]]; then echo "$pkg" fi done go-cloud-0.20.0/internal/website/makeimports.sh000077500000000000000000000025561367004507500214710ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script generates Markdown files that will include suitable for # "go get"'s import path redirection feature (see # https://golang.org/cmd/go/#hdr-Remote_import_paths) in the final Hugo output. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail # except x is too verbose set -euo pipefail # Change into repository root. cd "$(dirname "$0")/../.." OUTDIR=internal/website/content for pkg in $(internal/website/listnewpkgs.sh); do # Only consider directories that contain Go source files. outfile="$OUTDIR/$pkg/_index.md" mkdir -p "$OUTDIR/$pkg" echo "Generating gocloud.dev/$pkg" echo "---" >> "$outfile" echo "title: gocloud.dev/$pkg" >> "$outfile" echo "type: pkg" >> "$outfile" echo "---" >> "$outfile" done go-cloud-0.20.0/internal/website/static/000077500000000000000000000000001367004507500200565ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/static/css/000077500000000000000000000000001367004507500206465ustar00rootroot00000000000000go-cloud-0.20.0/internal/website/static/css/style.css000066400000000000000000000161201367004507500225200ustar00rootroot00000000000000/* Copyright 2019 The Go Cloud Development Kit Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ /* Basic layout {{{1 */ html { font: 14px/1.5 'Roboto', sans-serif; margin: 0; padding: 0; } @media (min-width: 768px) { html { font-size: 16px; } } body { background: #fff; color: #000; margin: 0; padding: 0; } .PageLayout { display: grid; grid-template-columns: 15rem 1fr; grid-template-rows: minmax(4rem, auto) 1fr minmax(4rem, auto); grid-template-areas: 'hd hd' 'sd main' 'ft ft'; margin: 0; min-height: 100vh; padding: 0; width: 100vw; } @media (max-width: 768px) { .PageLayout { grid-template-columns: 100%; grid-template-areas: 'hd' 'main' 'sd' 'ft'; } } .PageHeader { background: #00add8; grid-area: hd; margin: 0; padding: 0; } .PageLogo { box-sizing: border-box; margin: 0 auto; padding: 1.25rem 0; text-align: center; width: 20rem; } .PageLogo-image { height: 80px; } @media (max-width: 768px) { .PageLogo-image { height: 72px; } } .MainContent { box-sizing: border-box; grid-area: main; margin: 0; overflow-x: hidden; /* creates a new block formatting context for children overflows */ padding: 2rem 2rem 3rem; } .MainContent-bounds { box-sizing: border-box; margin: 0; padding: 0; max-width: 50rem; } .Sidenav { background: #dbd9d6; box-sizing: border-box; font-family: 'Work Sans', 'Roboto', sans-serif; font-size: 0.8rem; grid-area: sd; margin: 0; padding: 1rem 2rem 2rem 1rem; } .Sidenav-list { margin: 0; padding: 0; list-style: none; } .Sidenav-pageList { margin: 0 0 0 2rem; padding: 0; list-style: none; } .Sidenav-section { margin: 0.5rem 0 0; padding: 0; } .Sidenav-sectionLink { color: #000; font-weight: bold; text-decoration: none; } .Sidenav-page { margin: 0.3rem 0 0; padding: 0; } .Sidenav-pageLink { color: #000; font-weight: normal; text-decoration: none; } .Sidenav-sectionLink:hover, .Sidenav-sectionLink:active, .Sidenav-pageLink:hover, .Sidenav-pageLink:active { text-decoration: underline; } .PageTOC { border-left: 2px solid #dbd9d6; float: right; margin: 0.25rem 0 1rem 2rem; max-width: 25%; min-width: 15%; padding: 0.5rem 0 0.5rem 1rem; } @media (max-width: 1024px) { .PageTOC { border: none; float: none; margin: 1.5rem 0 0.5rem; max-width: none; min-width: none; padding: 0; } } .PageTOC { font-size: 0.85rem; } .PageTOC-heading { font: 700 1rem/1.25 'Work Sans', 'Roboto', sans-serif; margin: 0 0 0.5rem; text-rendering: optimizeLegibility; } .PageTOC>nav>ul>li>ul { /* Don't indent top-level list. */ margin: 0; } .PageTOC ul { list-style: none; margin: 0 0 0 1rem; padding: 0; } .PageTOC li { margin: 0.3rem 0; padding: 0; } .PageTOC>nav>ul { /* CSS trick to remove h1 level from TOC. * https://github.com/gohugoio/hugo/issues/1778 */ display: block; margin: 0; padding: 0; } .PageTOC>nav>ul>li { /* CSS trick to remove h1 level from TOC. * https://github.com/gohugoio/hugo/issues/1778 */ display: block; margin: 0; padding: 0; } .PageFooter { background: #555759; box-sizing: border-box; color: #ffffff; font-size: 0.95rem; grid-area: ft; line-height: 1; margin: 0; padding: 2rem 2rem 1rem; } .PageFooter-paragraph { margin: 1em auto; max-width: 40rem; text-align: justify; } .PageFooter-link { color: #ffffff; text-decoration: underline; } .FooterLinks { box-sizing: border-box; font-size: 1rem; line-height: 1.5; list-style: none; margin: 0 auto 2rem; padding: 0; max-width: 40rem; } .FooterLinks-item { margin: 0; padding: 0; text-align: justify; } .FooterLinks-link { color: #9eecff; text-decoration: none; } .FooterLinks-link:hover, .FooterLinks-link:active { text-decoration: underline; } .PageList { box-sizing: border-box; display: grid; grid-auto-rows: fit-content(5rem); grid-template-columns: repeat(2, minmax(15rem, 1fr)); margin: 0; padding: 0; } @media (max-width: 768px) { .PageList { grid-template-columns: minmax(15rem, 1fr); } } .PageList-item { box-sizing: border-box; display: flex; flex-direction: column; margin: 0 0.5rem; padding: 0 1rem; place-content: start; } .PageList-itemTitle { color: #000; } .PageList-summary { flex: 1; margin: 0; padding: 0; } .PageList-readMore { margin: 1rem 0 0; padding: 0; } .HowtoList { font: 300 1.5rem/1.25 'Roboto', sans-serif; margin: 1rem 0 0; padding: 0; } .HowtoList-item { margin: 0.5rem 0 0.5rem 2rem; padding: 0; } /* Content styling {{{1 */ /* Headings */ .MainContent h1 { font: 700 2rem/1.25 'Work Sans', 'Roboto', sans-serif; margin: 0 0 0.5rem; text-rendering: optimizeLegibility; } .MainContent h2 { font: 700 1.5rem/1.25 'Work Sans', 'Roboto', sans-serif; margin: 2rem 0 0.5rem; text-rendering: optimizeLegibility; } .MainContent h3 { font: 700 1.25rem/1.25 'Work Sans', 'Roboto', sans-serif; margin: 3rem 0 0.5rem; text-rendering: optimizeLegibility; } .MainContent h4, .MainContent h5, .MainContent h6 { font: 700 1rem/1.25 'Work Sans', 'Roboto', sans-serif; margin: 2rem 0 0.5rem; text-rendering: optimizeLegibility; } .MainContent h1 .anchor, .MainContent h2 .anchor, .MainContent h3 .anchor, .MainContent h4 .anchor, .MainContent h5 .anchor, .MainContent h6 .anchor { display: none; font-size: 1rem; margin: 0 0.2rem; } .MainContent h1 :link:hover, .MainContent h2 :link:hover, .MainContent h3 :link:hover, .MainContent h4 :link:hover, .MainContent h5 :link:hover, .MainContent h6 :link:hover { text-decoration: none; } .MainContent h1:hover .anchor, .MainContent h2:hover .anchor, .MainContent h3:hover .anchor, .MainContent h4:hover .anchor, .MainContent h5:hover .anchor, .MainContent h6:hover .anchor { display: inline; } /* Code */ .MainContent code { font-size: 85%; font-family: 'Source Code Pro', monospace; } .MainContent pre { box-sizing: border-box; background: #f9f9f9; border-radius: 4px; display: block; font: 0.8rem/1.4 'Source Code Pro', monospace; margin: 0 0 1rem; overflow-x: auto; padding: 1rem; white-space: pre; width: 100%; } .MainContent pre code { font-size: 100%; } .highlight { box-sizing: border-box; margin: 0; padding: 0; width: 100%; } /* Figures */ .FullWidthFigure { border: thin solid #dbd9d6; border-radius: 4px; margin: 1rem 0; padding: 0.5rem 0; } .FullWidthFigure img { width: 100%; } /* Links */ .MainContent :link { color: #00758d; text-decoration: none; } .MainContent :visited { color: #00758d; text-decoration: none; } .MainContent :link:hover, .MainContent :link:focus, .MainContent :visited:hover, .MainContent :visited:focus { text-decoration: underline; } go-cloud-0.20.0/internal/website/static/css/syntax.css000066400000000000000000000052641367004507500227150ustar00rootroot00000000000000/* Keyword */ .chroma .k { color: #00758d; font-weight: bold } /* KeywordConstant */ .chroma .kc { color: #00758d; font-weight: bold } /* KeywordDeclaration */ .chroma .kd { color: #00758d; font-weight: bold } /* KeywordNamespace */ .chroma .kn { color: #00758d; font-weight: bold } /* KeywordPseudo */ .chroma .kp { color: #00758d } /* KeywordReserved */ .chroma .kr { color: #00758d; font-weight: bold } /* KeywordType */ .chroma .kt { color: #00758d } /* NameBuiltin */ .chroma .nb { color: #00758d } /* LiteralString */ .chroma .s { color: #ce3262 } /* LiteralStringAffix */ .chroma .sa { color: #ce3262 } /* LiteralStringBacktick */ .chroma .sb { color: #ce3262 } /* LiteralStringChar */ .chroma .sc { color: #ce3262 } /* LiteralStringDelimiter */ .chroma .dl { color: #ce3262 } /* LiteralStringDoc */ .chroma .sd { color: #ce3262; font-style: italic } /* LiteralStringDouble */ .chroma .s2 { color: #ce3262 } /* LiteralStringEscape */ .chroma .se { color: #ce3262; font-weight: bold } /* LiteralStringHeredoc */ .chroma .sh { color: #ce3262 } /* LiteralStringInterpol */ .chroma .si { color: #ce3262; font-style: italic } /* LiteralStringOther */ .chroma .sx { color: #ce3262 } /* LiteralStringRegex */ .chroma .sr { color: #ce3262 } /* LiteralStringSingle */ .chroma .s1 { color: #ce3262 } /* LiteralStringSymbol */ .chroma .ss { color: #ce3262 } /* LiteralNumber */ .chroma .m { color: #ce3262 } /* LiteralNumberBin */ .chroma .mb { color: #ce3262 } /* LiteralNumberFloat */ .chroma .mf { color: #ce3262 } /* LiteralNumberHex */ .chroma .mh { color: #ce3262 } /* LiteralNumberInteger */ .chroma .mi { color: #ce3262 } /* LiteralNumberIntegerLong */ .chroma .il { color: #ce3262 } /* LiteralNumberOct */ .chroma .mo { color: #ce3262 } /* Comment */ .chroma .c { color: #555759; font-style: italic } /* CommentHashbang */ .chroma .ch { color: #555759; font-style: italic } /* CommentMultiline */ .chroma .cm { color: #555759; font-style: italic } /* CommentSingle */ .chroma .c1 { color: #555759; font-style: italic } /* CommentSpecial */ .chroma .cs { color: #555759; font-style: italic } /* CommentPreproc */ .chroma .cp { color: #555759; font-style: italic } /* CommentPreprocFile */ .chroma .cpf { color: #555759; font-style: italic } /* GenericDeleted */ .chroma .gd { color: #a00000 } /* GenericEmph */ .chroma .ge { font-style: italic } /* GenericError */ .chroma .gr { color: #ff0000 } /* GenericHeading */ .chroma .gh { font-weight: bold } /* GenericInserted */ .chroma .gi { color: #00a000 } /* GenericPrompt */ .chroma .gp { font-weight: bold } /* GenericStrong */ .chroma .gs { font-weight: bold } /* GenericSubheading */ .chroma .gu { font-weight: bold } /* GenericUnderline */ .chroma .gl { text-decoration: underline } go-cloud-0.20.0/internal/website/static/favicon-32x32.png000066400000000000000000000022621367004507500227720ustar00rootroot00000000000000PNG  IHDR DgAMA a cHRMz&u0`:pQ<PLTEY&8E)"4q `$l%ג !bD?x(ݭ rAXv!7ڪ؍ I<ث#V},ޯo{3+݇ ~d u۩ڳ\9}VSbKGDHtIME$rIDAT8c`F&fV( U_@PHFSPTRVSSyZZZ:lzFr&fVr6 vvN.n^>~A B!!varQ1q G'1$dț0dfe邝#/r KKլ a~H7HחחVˋ7%7f˛IZ[75˵E]ZC@O^[^W\^?N}P0ad9y [o r`NfX=kFY*WDz#4ZE*tRCLk3%tEXtdate:create2018-06-20T18:06:36+02:00Z%tEXtdate:modify2018-06-20T18:06:36+02:00vWzTXtRaw profile type iptcx qV((OIR# .c #K D4d#T ˀHJ.tB5IENDB`go-cloud-0.20.0/internal/website/static/gh.png000066400000000000000000000030431367004507500211620ustar00rootroot00000000000000PNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<$iTXtXML:com.adobe.xmp JIDATxڴkQwRhHx<4xZ桞z[B*"J%zɡĶ`ϙf2d7/{GQ%` L` r'2X/^$ )hDɭ9s hF5r ȝUِAk QsSĸ&Y EJQ!n[OP64:( ̾Ls5l[\R~Ř3΁@X;?Ԧ^91g}{69=I@R]7,xT~ٝ"E%@xĊ>m|8ocr`_w4BŽŻ#I8[C 8)9I@]g.gTh$`K ΂% XSt[p `kIFE9VB)Ռzf[#p 5|SOhW]9qhǧq|SH |+ /+ ɼ52,՘iH(`^Ao؟L x)V1p4 ^V$j@MUchy7D7xY1=3c?GFo/u+ʾf!3bk8iSOІ|f_~KSLu[ϫقW)gtEԃ/ W]V26eq|(p)UiV~lHbhխ؉ݛ^ MtNJ؎Dn{,b Q갾JъDW,s5`V $Z]Pf伯ց nƮ-HϪ~֠Ņ"G˛+ݤ2ޏ D" }#Bx2S8xuEj?Ԣg O @ *S] \Xʫ*ݤ <,b?@wٵXx{څ*LCeW 35#1m -RG~6þ WGaNxCNGS7VI9-3@kw!iDA78_c> v~i5+ $XWODl_1ס/Ռ&t@N|!`z8A`4j<@+ BT$Yd!@QS[QoPk=Q1!|(`"D I6&tB;fXLh w4--:aٗg98Y^z g#`<5M±-P! E7U?! HҼ\ O"?]]#WTcmq_3"RNF' M.CO~/@m4 COf䟹 Yڷ~-Q L)Wp4#n9f$훑X5s"rހb,c0D Q%HF? ]3(l&\?N,>1g(T M?HPĚH+2]|43 Yבg ,aTP:ЏS Y$JvrtG kA[v9z 3нJ.G#QlMgpCo{?NaN܉|X|n8#wtc#!J 0-aG!% S*ކY |Yb' KH$nCH(Ӛ`dqoASstqg_sЂ{QE~ǐ!kEV_=e:kX\qhA7 6"\TG~j%5hKaD$uiBVo:lk~ Ek!R|ON^M?+"քǾӱ[>󘒶Qd9b;'#|֫]#{YDl$vKKqEZ4 UUM㶢XqZil ߯ ۴‚XVtFQ cK}VݝC,Ƒ Zd'&&&tQw"AIQir~f~pՠLGY!U8{^h{ =jH̶ :$pNGBAwFcB~(<8ˍB :-\ :& Yb#qj[M~2#NߟӲ?Gk& Q[Aa(8xn8C[@"{(䒰62,&UNtBj|c?(q&+ +(L?Wo;6U:?hұMF&$Nk8bQ栩bڧ"c&zdŌ ߏ|5NC(\Y? N4nOƹ6?9yGB7,ߢ)>^m^?p8eWw Ѿ=s6/=rԻ>2"QUHOR&(?h2*9Hr4+7/xg=i[@/H#)t6 [IaC\jl=痠i(gK%P i@̟\L*ބG֢? ;!)0?uÐnEG!E1ht]p@ɾ ۟:KTv<(*;=6Xn F*;<dV(crhg'Я_8r͞aELӢ_\$[g &{j7hl&.|2Y]#a::~2 ۂ,Y@2Y]I!dd!F !ӈ|J; 9(n%*im@xM9 jS-pHglje#A-cl*V ]LZacb/,3Þ/(EZP*xY_)@n@Z!:X=;Hx] _BӶtŒ~'ڜXҥF<wcCO&NWWiєrR8Oؾ.|6 UXDiZ|Rq5隉S%HCIwU4Yͯ9˿2"?=Io q0K,Jna0`l )*XLn8/E4DT$4y6 $D mDE}lBSnB;#_Cg"Wih\DR$0/BC{v"qYىFb)0&.B" O!`jj mMݍsv 3pאcJ[b=Ͷ`DJ{!вX} CG,OFȧu>SЀZc8p߈D hD$ ~,kB3fm#Z(a^գ ۼ@- r9YS9یVTl2M,9HXPlQ6%ScQ(IA(϶~7#4]GalA.ݝ.b[R:f7\/2=oqos=&"y dU!kaUHLұR#kb4xd2xZCA6p\D-r;8k- XV"kr#r=YX"Ter@Sڰ ).9sVt|HL Jp搣E@],l@s?wPtMMΡ6O<|*kzv}܊2#nڌaה4II5z ۯpuq/*DV[S =\C-%Z| uH,6(CUDuX B: Y-h4%$BS¶ RC_"z|]fT7HщN;-hzq#߁<4ס,@o^KN>Zc2g6v~iC-]].ÑEQT!(nN_!?OtӱS j8@$71h9:UZ%]5]DuPFT /ACw^P\yE&q{HLw;Y{xsz/3ص:EwK ?T{$=[xF֗G> YhB \2bgPћ}D/p:2[4ȇihMd]<*L)VP{l]^W3`%Dke**s.CjFoAz=(C? 2jb3 4OG><6K[`}~B9DÖX{I '`Sz6Do`MnJ \щSQ UWV_^0{?zrSXgW-3$h{"?Sb"ڈ,Px# T}K hF~w)Gi:-P:*M!k*j : 08lC"%K_QU6YCQ &dIn[1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1cLIIb%tEXtdate:create2019-03-05T09:53:11-08:00i؛%tEXtdate:modify2019-03-05T09:53:11-08:00#}IENDB`go-cloud-0.20.0/internal/website/static/go-cdk-logo-gopherblue.png000066400000000000000000000630531367004507500250270ustar00rootroot00000000000000PNG  IHDR>; pHYs.#.#x?v IDATxuٵ7l.%G y©o v"";#h*#jo)ԟsg--^KdP(z=+(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #0}(p #͗׳uzqr7o^vFe\y;^?z:zl6zq 8p̗oMpUh߶l-B?'D.>Y*6gv]T d#ӭgg5*ʳ*lhcu>Nm;{S $`1v;ohM}t7*ax[m^?sLP߇` +P>x柪o&菰_U?td\=m96nڄDTV!07UUu8h`{އEߴSКlch-׭_E?#7#6a0 >G@<}X>Gv3m-@_~c} W0'71z8c^ E?:#tJшg}]GknS?i\]k{8}aYUٙ*pXt v*E8p?D`vTNl"Oo hœzHN0BB}zU7N8l7烶 F$*@aŵ|*~#~D܃5>@!9 Ua㢧>`\E_}-x(ҳWXdǟ~.(y p cQ[=Oר"@"}û)c 0}L *\;]/N͗+~e܋U+H*2Z Ӈ?#т3s}Ȱ]"|:`_o}> 2_^ƌ'y@ $HiU;s/>'ZP>lv#LH>|jMut(ouzș}Du~?'QUUt@~&ATUAj(v`FEdI[͗h!؇4Ñ7>4R݋:r#P8Nhrzh/u?{}:q?N׋ߝ^re_V5ĹsU-nc %hV>Ej|@\~ hIj:B9Л*࿳h|fr.z^? U!{ѝ8|Ck"ؿ `0}#D/Pߤm 5#`4U)+Pa^L2୿>A0zr `iղ1[yyc7}R@YZJl28`7B>@M}VU~3GEx3{԰Zyz7_.C @״8J(ʏ؞ ?dp(@ɨp`rz6 /؇^u<#z(u4!`F*v@; E{?_.J}j6>[@kOa.V0:/FEQl{u ؇y3_<EW}w/W_ Ѝՙs @ډq6]/N"*TZk:|?}bϻl9w#dD ؇^d]) zqֹn&fƟ .cf禭X; oNJ< )8ru1ĵ{ޑ}ge`"Em0`)OErq8I '-B޳zj5أf̗>sz߹fW(ϗj᷄:gN'~g >0i[d\E0>L/\GuAߢuYU?s\}τɢ;~;]]k6B[~yͷfݤF:VOex`@;vsk2BGLVj[4J߹}#؇IemO.>Hw>T'Bb1KsZJ9]6av\5KG 0 HLV,0D"̻/tUy`.>@J'WO k,֎?U]׿%~Γ&6 0w|&8}`r"TV- tɃ >xZ "j?XbÐxwJ렫őg^g; )dlW\ɷJ UX\yɡO1; aj]oyԠMӾc%s^F&ȃpzh@^k_s |d7O[rf_5xnt=SS490ݔcinO*%&# Qf7p@6sA纫J*\}hЃ0Pyހ)O\^lW\'V `~6}{@^[ bn8zV?zqR0`, Հ^UazqWk7PCl8:v$oQ|b]^)Ah'E[*`puȝױPWFtS6^Z4ܼ-ЖC/cև!@]MzvUzqrZ*>zqR?U*?Qi?hey,U? u9v2wٞ'a|k-]}6l.Q/WWxu}>ꆟŊJ㦋PQvT%N?  muV9Q~~`N&W;!g0OtS6~MQ]cE]:l@hUgϞa`h_0 \uuϒ]5U@ϢrS?kPjۘ*~xbC<?5/M>Sss $MC TEtR*AK0cm0~l+mL6H k峚|\-jY;!>6)mĵd@/.p+PWZV ?Gؤs; 7"௪GJhǢt{̗x[/N.ymn{K\M_, 0>0:ѧJVEV Oz?ڕB*߈jԀxCUO=f7V mU<I|œ:y՗P Ҿ,1Mm_S?uUBJ cmCӍ"Z/W_oNy5LE/W׉TB?al+Ԃct]YVkk|a62ؼ/evۻjq𘁇q2{1{ۭ{/:s}CM='UbPtۗPDEے _ iU׮}UHm\gQ:?obr6.KIUzu(Y/?!.)Ba-GUMm@[>L<ЉEl=!vcܮ'ʈ-߷rk&췰T*@h?B+u:xmk}iG?$P Ӎv].D<ang*Đ?]xlGE'~4_诇ltHכ!]L{h3z|O=_:|ozR{jqԠxs0]H ܟb]|P×􋜛}Ay,v9 7A%כ'2bk/ۀsa fk۱; 0h}*(rmJ%_2*U*Ju4*[JvE 絓L]$t]CM ι2L7mϊ#NƭB:erSUXU'c Я's^G?\APZF׋ImOZ>lݗ>9 RR[:rnRۻQ )* v_.# V1꺼h=\_BT Od7n tCj[!4>Ft;SQ/WAХq3FqЏ멇i*q?uz^N^کPҗ|g]C gf\Oot;`DP#=UKEjR+|JO w~9zԎHi87gl] ܃waHL\0݇.Z<-]]euZaK:=#^CQ~nUkaWbF엢~:ːtgQ^ws`&cnw]:"/WtRKeTfyKA}U{runUt) Y\u_2)/`ӑϦgt%|u? SZt9S!aQt G(*tivܗ0yOZ1_ M\t"q=p,~aN:?JpmݗnBUmKne6[`a^"I׳R>+#?A*uwޡ|n,Ty0*!YʞE17]=V|9d=h qΫ kӮ*oUUxCүbnK|a/W ~cw6Z])X#z~g;qʣ-PHL֏M6_j IDATV4^V; mTOAë^U40ZD^uQT],6DzH.tT_wў"C=r輍?#uӶVw.2 ͗sxΞW}d?n?o~C棺> 1?:J s>BVĂȷ5۬&zmG9Ke Sw,<0ݸSUA"r$1V݁Wl6['|Y_ CU!~*xO̗hHl#|">a`]3^տ$rC% ymPDkއngr $5_.UfY[A[.=DȰiS]+- ˁAygorTBZ ձamgVC/S*ЫJ;例0Lw[ Mj3>Mۧ8Z]kz-Ɍ 2_M6jÓT6r7GeP;ޫ[hZm'bvW$[{a,D(y=ڼ5<~ù{6&wɪ{dT$ ^H 3,On2R-`rt`/msl67ap, c"KsB 0=k.>4\3 FBdE-CpF%鐭L?ѿ` ZUbq9?h2tX<Ȗ/,6y_9ܯ,Y`\@nTC_"~Ei_}c_7Q! uGŅ賿+ή%Sy^ytb/ ߗr,x gF@] QM;HD뀳7ӭc͗;{^8π`v`nH[-]u?|7}ηe:Ls<'> p|p !dLQ`b}/Qz7_.bUKs\>s=w1V^.<uOG=rUa5">UCȴn܃&"M<`1!j6}W=cq?G]mb7eNjU뚫Ň:^Qc\]},\[4>*]Ag0* ~OvKP>0 zqr>l_׋)CsEMASX'ge׋zyme1yY?50h![!GDL.܏3u`nY<C&}LĤ.e. [%'XW0`/n=NXҚ]Ldx Y%'XV ;zq^>ITo.<9Y\V5C>Mh.1p\U_4ep(-y]=[A45O4L0UE r1duܩ3 r:* gLU ǨgqQ1@MZUQ1i _>oq[9i0~cܿ-baz=v㫪?[ L}u  Ϙ@]ɐ_UwgUZ^/N~w9F\C@QW'gQ-,_qS}.ZJNv_t^ЕUfDZ쿌c&;g.=mɣj>-*Xf/W)▯[=5I-<}9嘿;^c6'춃*\Ηo@Ӛwk7q&&a\7(s|j<߷}oRBVha}33ܺE> OKmC "jc`N~4($l|?r̽PC ڃ5XoѲ%E;w:q 4he[줨ky(˂v<5.}`HZ%[)6 ?GwT9"4;uNJp,Ŕ]RioVz zk0Z )}w/7B_R+=P}]EC%5S.lMtInL N>AKBkb#]yIC"(ELRZIbHJXxcX;粏aƛjx 2{~Jsw=?gC%,j{} k]R߾)P٘=T?ED)=Szzx|uؿX̤k@ہidl{nwZж\?/~h.3zf;{9-LC5;;~>Gw[un狛c!TJpi&ڇ{IܟO *KtRavSP\5hݕ07p?yKu0Lwۋ61Lp1OЍȖn+ת!ʼn}:UUh͗+'x%}^H GjD[,2i=A[[Z͗Tuce?Lw+m3׭k7skEg=1{o9ECڸNSs׽Ͻ-͋Z¦ۄk5 t՗sҦ-M>dE  ‘*~yjMWYNyj/+'"G[ESJ~C/R7(j͑xxG3_.׋;=R^WIR{,7,@:k&"oGo4X`#U|?`rNW萶<@Wbvj%k,eH G*^/N\ST6qQ̦zM Ս7e'APCL5*(?b'Fu^ g1s8Ym$mk9PPY>8]tXp芶<cJ/V[}`$T9D6 f S>n)~p70h~i~?l7lis[W-ضayE&tQB k__Hz@ e|kй5 9MbPj] Z]Xx`!Zt FhQ-E&^c1<YO9ǥ-ZC##u6=]9#M-XS?bh7-)H+^Zm;;T۠gt.R`ۨTM  710(IVNN;u {a@[ڸڬ?;vi{wGlkx{0'}uMQ>dLJs3D; i-@I/8LmU}5弾8s~织T ʛ`F@jLW1C={[j;fXMvw0fg1y}Q1ruomLa翪ޔu-vLjvE[voС||O OTW3z~J#pygAyi8[аpEgϗ@фvyϽ s޳Nw1Lw~r\$|7L?gPzY [|KN_;_ִupN_ ԝ9AطTbYciM V/-G[W5dZ%Pw-u7>>)HpN|_{דּ@5a^% &ғ& E}>GO_TOG)E!;%I"tM|W[S=IKXNH 9TUqw]]=}j[wg)vsyc:ϝal3Yiѭ!cb޾Ik!%1t鑝[-(Zn r<1k*5(>I@&yީpr)裡ځy&+՗VUlՒG*]½jh׎1m{}S1 (Rla ]qhcLy^.TmCb;[F5]7?IۡE6tp!1aWJ}9oVڇ< iQߎPooa"KYx*Ƨ%elj5hw!Ɛ U5Mooj.N|J8[tr0-)wE]:&Piun:}g &ewwվC MUc12LMb_zw6 V #kIH=0NY=&T?5{32L0Pvʇ`1H`TyYxdطĠyuӥ[Q_SctpoM ws\2_'cYJ/W5|;Zl?h.,_hC_.Tcc$hu oڼ-yړk6%3mKE}"ϾlJԪ}tӔ~\w~&t%νdhAs*qo_\܄ "DA oIJyRg]BrtT&hEN{\/{{ΩxSe2E6OiS/6a-}0( {MNCRU=V. Cp &|l905d{؆5r~vU"8\/MZ̛/W5AgU=ym5LsKTAb\].}_ C0`bKu0`Ϯ*V5>E~vW NCd`n9;(OmyL5y_>'uWAM 8v\e8s[|&5mD\5c\>{dH>atLKtVؒ,F{bcC[Đ·!`U$p> ?&N'U m.7r"{ߪokú1KjzTN| |HotE a 㠆at)rebssЖa,?WV&[;ږC; z7v4dcT׾C >bǧ}a,vZln Mԁ'Ǡ/ d.{ VoaD]sJcCtnݠ_%!6ܙhUwƮkl²*o|FP[wip?a)7jԪglQu>ol]t0'nZcV:mؚ&;fLINp^5` K?td'W{3iCax3 >xQL.3l17_׋VGƒZ5%.y u0qY@8ؾ<x10Y]oϗjj8aM>/)_oLUiQXp P:wTtZ|Lo0ݣ5 >#r*n3(CUH9v<3tk;x/b˱}Op Ň*4hc ʥ N lCHj׋[ŀZ)>Գ=X~/Wm|S2y6V?zz[\1ԪF1I3Z |/W~cuV̗3O:;-B[2AP.>>vrkTUxڬLn+9z!I;2m;f^DfwL(PR 2LG-sߙ+p /d5ruo7-`"Ymp8 ,{bJזZz>1?{׋Q`a%܏6R߃=LOu;Dy|ď0Lw(zP: oc=D>iߘ 9&i\ijk!o`m-m*lczNSN[htw8fa>@9N TVJ ; v=1}+=E}j:~n, R GY ΠMc ]N`n{~Ƿ;iۧar;A}U1IFɕ(ߩZpL5e:0 MVYf3ʷ >~k9;sPwae89/Ww1$w_c-5|7LwXLHc^TUGSϙa-@9dGQyAX/N.§0Lwi`t;}75%*h U֋ӆUV_SXV~=8,g *a@ۄK~7U=Bjh 9rvq4M=r 6ϽwJ*hCv~zn [siPm_gaףa%v`Z`(U} QߙT l6zqrV-)1ja1"v1L7]k!^+Uc57u!6 ۟6헸0:0ݧR # ӝ(=.%j|iسi\U(a]3epe[],?6ZB;L3Ct)k<\;<+>Е/l瞩ޯVH>Lc@z!+>~?kx|ku QW1 䓫ѹH]PKugRޯ^U\>9{bG J:ڱPk}{%N82+G,Z]t6+5/ rvW% .ݸ9/*yՈT;2xn>x|[u葪}#5O;J*b8iBuonJ+]Қ_oQMOx')`Sסg6ppg^ٟ_RzZ) gDtASlyǾ/jqy ZS/ >'X+_ ̓m:_t,^ppxBDxvmx.l:_4aMEPFz1/0=dr|: "#Nٿdr$,u _{tQ~:nMqwtJIVOQI˚#qb%Ç:uUPo-B.:Cu'ՙez <c ϟ] 6m_vhmEvX-my=NdXT@@o)kbmxpc{hp_%)^/Ӵk6oSZ6vSy밝ZlcM޶mm𘻞a\|O1Lpg0 7phw{>5hŝa~[kjo·l#tj9;x@J#DJ<"9=Aj0;iy@g]O$ڟ}l٩ >06Jk?|Z]~á҄՟S75ԆUJǵow5Lw`9;ضMN'"4iQ&}v9;0S FJ[`b ־ć*5~`XgP)˘ r]hsҬ` yQEZ ']1(Z詟ö̙5uErt8׸qϚ*#e[?y+bM˥[ " :>Z-go1O"72Z)XF*֢b=:t4>Mf:_6/3ŗSCϚ6ZDߗ8A0Dm %t&X&|k͇Re4='a|og150>뛎]ML֢CjigRBt mi>N CJG[6`9>l~:"4{_³ڧ2֠Kk=[UO]C2Z\\Kq1vQ-ynr=`0]}`hj<7b}U]|]Շտ"{joa 6'}ڦesh6f;p↞aFQս5kEAN5hm1 Gh2MkO;jqtm*@@)|6UHc 9rEmij}ށa@)@TkET-giۆx;/^  tED,[X6F=0]}G"? .3q;iCCy*!Jz_T p ۺsFlɳ}t"b}e_W#zdkl^ R?0!6 AUR p '-m1Lw p}8XZ[/}p\ 6ݭ=Lw]EZNUBloAU7f˴6?#sǓn~  >P2PwTkPPҪ`c[%Ocڄz0](}h1\W,t=uط`gmNuzY_0p(Y2@q;cSz/}&TFdr&#,".-y U_0]2} 0Zbxv6^ZuepݦsXO2LTFW<˓MƢxi*6.]W Gdrơi0AEGA`=VSg.P>J|p;r M[-iv%`=VT?/6yO2L(pH'sp mb)"hH;ziiG&s #RZN[< #|I-'a..*Q-mvTa@@fG*g!+( [{ $Ҋo~l)_We|7> ;wzEEe;wuc ؅f-}t" ; Y"D& z?KЍ[ڄ6 $F! "_ ~HG߽!ZڴVo.P2>0&GZc@ Wj9 {3d{63 UES gn, ` EOE|CC^ͦgY~6m?}\n<ƁfҥFe:_ &?99s,05բ V  >0J~mfth}-&)F}`"݅^/ƠNW)F>0j1MkM3Z`80lQ'6$k]<Ňw4`sZ@0f*j֨ݑ ~m r0f*jݓ ~E 0z*L狣d҄}]T~v7/& rvpP >P|j2\ a#7rG0hG$%4sO\nDf]M&cHTm:_گ~l4δjUJh;m  Zu~>SEdu=Du6q2Z@.}f*a6/{?׮ p0gQ/A'}LiqQ۬CkT>BK/p 3bZ\$}uMׂx_L狓dgׁ*d~AhqMiq6=TrvpFf[M{׌hs]#s_X؜p`K0g!-.Fh:_i"Y`}rIZ\uĚag'؏p`g)T30D:XHF0hp`Oz`S-.*e"m:@K-^MsהGhv-֡ukA1nb}-(gO&+= L MXa(B}pETv}DZ(gWQtfmzf.X =!?;[[  Cw`H%?.^3"gW_XP>ApF QC2s'\}BD ӳ"f-zU"Nl  m2UЎ*}RaȆF/}- >@ūח?۵3҉=Mպt$H ZatR1:Q}XZ%>@2keQ8Ytl-*M&Y`| ׊pٵZYrZqZvuOn#46~kQ|Yq' F)ZFvh^ 94U7kk>@akkI0U둰VQ0XTh-`{_5θۗvЯSF~=ȏu,A}UbD!_}Ab-zaS%֥/kABƄ<*eU[B*DpW+`֢tX鿾&6l,mmA۫׏_kʷ^pL_ל'-Vįk*& ?lH;C@0E >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dphIDAT@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@2}HF >$#dp@&_,l͐jIENDB`go-cloud-0.20.0/internal/website/static/go-cdk-logo-white.png000066400000000000000000000507431367004507500240150ustar00rootroot00000000000000PNG  IHDR{8bKGD pHYs.#.#x?vtIME >b IDATxqV6Ss;D :#0ZU߹܊t"*7#2!#dޤe4Y@_W , g}M! `B0!}>L`&D" `B0!}>L`&D" `B0!}>L`&D" `B0!}>L`&䟚pZWI{ׯZ[>$o X$7Bo"Z0ۑI>Uq<.S<eDw}ЍI؎/$OMon4 iO%y7b76>C[ ?o5I+ש¸`hۑ< [L?{\ѿ $oGIN"} x#ra?A@yi}Ir*vs͏`۾1 o4 K@?Mt[H(-0۠`}چ'I~ŻMr*WFC + ֯/yo4tO@yA2"uJh`]lbV0$s# x"iUvTaYa:$%s xl;4Ct*Se|΍Hяi.~BSmd佦 ~rA*Ct[.=4>aZ M`r)"am" e FS"9?%Чo"`O2:}8x}3z_'D|d``>KYyI>4-R&TFΪ:}ʢ<M0)GFO$wPGcom?S=\0;FLIM}:+M1 ۉL7>@QvyXLi<`d `e[ ҄hzM2&f`e:NuR7xxcy=s$g?3_R?2Q7ss~2bFs/2pX~Ir#ʰQ?"P+QFa4Sa>QjRݕfICv]CW0TP]1;(G~h)(``gG?$7I~D0&@)a-RUKwj;MыTz)E(ٖ˶0qݶB}x-cM@iPzw4"鋄EЯ m .)71.Qc?ǩ´~J1ɹf`lF$>avV!;z5~3gHtȔyz%1 mNS`~:׏mC}w`xF08#s*B}om'B} Έ}q'YzvI~+@`0}vPx;u?y=4}@s({x3QCB}(ׇ$>)UP2GJc'}ݬ"ԇݧ3u4P)x^PM9b_u#tJU0%g>B}7i VT͡P2R3#P<!+ԇyyL3>GS6-#ԇy9؛R<u*P{)`VGv$ϕ`}B}ؾ^Esw*ܿ%%PSQ< (ӅE۟*u(7&ݿɵvqXm:};?lǗoWkeX|(}]|m̓`@ 8%)Y'&sjxQTo9a;?m5[d˺ ??ێ-s E61vyhG},{P՛t3Z|ΎR7u_k-r2?aq7\7? o>(̂`8d(}䬰e}څɇ$U@kM*.C߮ r_mю]M]]vtC?0}Pb,7)g㨭 T}CpTN?#_.ՎlI]c biڎ//w񜽫ܼ/>ĺ&qCsж<^]e ]&d]]9K`M!3о;ZŽS= L`847qF*u!?0| ۶me#؟z}l߬L`8$FI5Bm9wDŽJdH1)^.M'|I^G7M4 *s4`?L`8fSk4&&Q4e.13_)nCүsӬ^ e,C]ʙSB<>U&xɇT@ַoؤ8=iZc^.ųlw=cW7˺۾YOb`զ}tW]N%?8t}Gׯ_0w$jfܢ9W e+6}G_ <XKK^"O%K4=8\MvZ=vg6d^zt? >4ػ6̂R0ggiV80W'i7 8<}L;N<~ݥ oSM.n]8d\w6޾x~lS '訧`'kn o2ϒ놿~Kb.,|sD*KM]}݈eU^S)P<>0GM;4 𜹍_WvSZ|ǘ~25l?4Co2 1qKB PjHb7gҪQW7T .7GȣkxHt(%VjBRioxhth3YUFcc̉s >yd羴m)u?0uT$ ҡ/q_mpY$_!'Fza_qGDRͣ>0r_  0vZ-w3X^1K4=Oe7i6Ĺ{yIor]w&H{{*8I )ׇT!R<G㐞~i~2ja9>X6/FdwBp~F0/jmNGzvSMjCnr+To0}m::0u<F͞2!Gfg5uh:b&ehx%?iz&-cP89~\gd4In0ۺ֓z׃iZ胨ݧ1Sc| }R0QIBktf ۰Ĺ,aYDŽ~gͣTT˿M;9MG6qT.fO ަӉ/^cN;ju4q.M8NbRQ)"X[(Su_;Jmf~zU m> }ɼ\/Mһ4\ RYZLp?1q.H1fI[F)T^Eie46>\7T&Ν@NFS H柔o[AZS_4Mm.C.rF`*#rmMmMGbAYË#hs+SrȁS7J=~k nRM*zv>hR~8&*/[syWв/?hzr&q;S%UuOȞRs 4lmɥ>hR>gsytnRLG/X綹^C{,s 羶 %9iL`*皿xv]oI~2]#Me}P3VQfv}LXMcyOmܫ?km ӑ1=&[wCi~~fn/qEGJmE J``2.Sj#}2&.um4E/7su/St!U qRcc*>A? c Y)ԂMfYVĹMσoҼEٝ!VqS M_pL>O=ʟ {m5}$}[25Nwps}hqS^7aGuoL?5,m43P D_3< 3}"A~70Kr[AKۇٖJٌM79OFNo?:-zlO؎' mw/;\4 ow8ƞ8w&E)t&-uYM1m?oj& XT_ZNly<-ݏf>MT`[mriýt0mGq9p_c9KGÿҚ#Jw#eK{}82z>CRF61iw)~#}P9Zu˿#ae+%ؿI7!݅i_&tβ< 4#>MivYԟs]9L`(Q-Gۢz[6U؏ f}v>՛FI?i>:xL7iJ'UvA"U<_"Ĺr'@)_,%;Pml+MQUbǾ.2Ϛ7t:Uv)׶,%zu*آY5˟Ys:GmG6i.!$wsT:L<7>fsz.Jj俚aTPLe4 qޗ( 05G(_52{y}Y6}ݞ봽Vo:s= viO-Kbuv8B Rh1ПTlXnbȸ5̅MlyRΣϷ2|i:>Dy6G"Z`JP߅>Xۺ o|mWxveb9K5R)xV~)O<<9/\̄`(ZsvU;i o }x>E(<d8 .su?oM'J6h:J x&q*~ <͎קcO{oR=W}oznz/E/U31ݷ?M=xn ,"ԇML9$<;۟ei,3ĹI]q ۖڷ-x>MݷzlzX%0*QK.=Tj..;Rc( +)B}xl}PpݤM}@mV2\&1ӘHOǚ04 SM07A .əf`@1E S{ȶu៚/1ʅqGlA|J ɗ_ݥgM9 w_~=68JUՍ觌$yk3:XSIzw_8?9S 5{Vp}$z>8`,{l3w4>*Ơ9Xh;`$FsخSQ} ҟT/Lۯx+mZh;`8FǀP(/,=0g{cwbեMQ ưi `wsjθ#1z/3'Ppq˼1.fl#OS ;ɣ4(ӟCs5^ W&B)u_w."ԇ1)FW6QgvM `X coҝ+MCXj^ܧ~bN۹&C73ǚ`9쑲Qtt t8&8$`Tj䟚"[йC/ó .4=)j~5Y*۞iVM)մ/Wu]^;dbەt?W.fq\}(좟e?^Z]Fugq*؆}^K>mPikOfP: ~GS#m7UI9T\? qp[oz{}iؾAYWB_$s~߾_['I~1zR<@L1/wbOޤ N}ٲZΛWnEGWfuX 4*b&U 9з}Z>EKo&<$Cs?q[-[O~sA}[jrEև(Ã74F󦾦3Uhѿo \ukQ_MF{ަ oR]+W.ҼI}d}{ek]XJmo׆ ^X]Ǩj[ˑ} ,.S"n}s*rIn9mkmw(Bo+!ܤ͡Xb rx/D|ʻ,N,̦/{Ze X?O/7#C[{,8|E}Yy?~<]lo&˱jo@ݻ˯h}1n\/MByZ{&*U)739K/l\챏8ﺬl>S(}O M0Ŝmz(@J s 纃k>kf#O't]_zjR+1Sb`yʺ/9bg8ߐ)Nq2>Ч `/ۛ49wy}RJ ~3 綷Juj|&}ʛ/;>8ɯ=AS8{^.&l_Ĺ \\WS=Qg&`)$\3~!2Upq>U6-@v7/\W6 Nh>}O}m_r=q<,m ϸOMQӏm瓎Վۚ]%ˋU}>mn;;.X?.@HbsщEv@cp{7z{'“o }6ro,p=ZɺNoc_K0qa6{-{/CM?9M[u]Y m8|sN`9߹hcoYSRt_E;JP!E}mK˿F닎wC~w@_Cb>e ؍u^ۻp~HةM|*ֿ%{s9JOoq :>tgc:>lSqQ6۶yS8w2S9qXOև0ƾ^:*ɧ|H3>MeSH{9qnA3_MPԺܓ]J w~٭RMXEqaΐ7ζN:FoO^Ɉ&ɯ ڞ˗yȘ!y{ޱνm\P=e찍KzP2Gw=w^p{m51nN->%\П:yk.F~qH'Ƶ ڐPBu?:? >纠:i|:gJ|A3:ɟ ~M^woq$ {v$]Ș8~j횜wL;SJ0stmKh]Wi6j`,4%m:mGSi}{ok y6ʐ|s474~I]/ã=~h[ܓf6^6X)N>~Cb3('.faklז\ݥyP>:` ֿZpmv̋4 ]8o?ۧtMf8o;*?4r,7~v>p'νv0 x#ܔFCy6o9mgIssMkD 7in[y j4ug7+=C~Xs,y 6Xoq칮{\4Rf#lE" 9O0Z]a+LFʡ65:9arQN<ؿj7 dx}+]Mw.ϛ=gﺽwyyɔ;jER.lmO1 kܦm5=׳Ĺ'X}x}wdo"&iU.tP&2ӘmHFX2G}r'{.x:)|)gddex+fV ADSS&8k.;.+mCTWߜowOO|Xiׇ/R vawa\`!/O5d.aH`~wL̾#3l<-|i&8_G#|gcn6~f>}&n*p׷%xXC:̳gk?YĹR#KMЙoK8=Ѷt;~}c4qn9XS^_ 2q.GP&֘,4? /v=` :s7mC3:Mk]G_M;{}z]voƋ m& 7q˟y*to,EL#}JxeĮ+&Νڱ^yӆL]s>C;sc[k O%+eEOy;N=˔&-i~P_-mRaݧzC8ݗuy6*/u7˻.o7iVj.=(}ư 0Gߝo ~ωsʟYmM}}5i񠫄s7 5(2|f9q6_4ܯN]͗>'.Ĺ<mW /=-s`15LƱ&KY\M`{.i ^15ۻenomg-ޏz5 .}oߦz2_b_oȘ8@S00_KMP|_sӬARƽyz팶n#sHWhҞ%Ԧ4ئ[R}y=mq^>M|pqU-ok\U^82L\"ݼa\{B#a9uY5ƿ> te{4o9'h>Ӟsۻhyt.^wƗ}Eoou{t7u_;ˎOiw]sL[8>C;0)ʤЗEƭ<7/X!-vG.|4i6`>w1q~-Mppzk})xj9.G'߬not'mݥW&=}i'-4=𠷼>-n-RVMHbc}M}xg8w?77&ɟٯҪ[+nQv{y1\̻Ms8[g͋ϡM)fA0 sRӴ|+Zm8p*:Os.wf&?SX񷿦 WmXIGڗ>=:.?үMu4d"#c</ĹO-ús#LjmFcM@VSĹo3΃Tk% ttyn oC &|޼zz|gI oyLu4q!c;n4cn\0D]uTw#Qڍ&"TJ.t-4O?jNiX.[t3hᛎ>g5gS2_rM~_p7m)N{1nW5qP_6As`(ZLxOҾ&0>eV)|/=O i>wtoPj{_/mz/15O;q۞盼^2ϏLiǘ8e9~oM{`1F-5NH6aZMC?l*u} Vni>=ěb{7;,2x5ɜ'}6>qo&|,o:X}&}jy>|0qDc9e_|0yӅxkQnަ5tU睥Q%n^O`_ѯG^/rlz'>q:w<&w]̈́aߌG>8w"1PM&`OGQ lIUmBn ٷķMȮ^O#,mR"8,i4bߛ%?`?Lzec?KɎM{ &e^R`/̣ `~?}> 1 xW鮾R۩>w;*x/:ؗ6y|Y4}E}q-i]>}2_MX訿k}h}rbׯZY5C}y&6&æW߽M`5KzR}7CGI}X'U3Ls&&х9!,I>h^|s2b4 ,#}Ka z5`^\&}w zc f\y*X &Q{I~ RW&yz#8`j}8J򿚡W_bԬ*VS0T%V92an?J)ww?HCw>y>/;POF8>ЗkMл&8X'1% u8xl6FEJrx84?2bFm=DS&TyF z0֚භ7a(ɇ9̃$4 }0jp'U3P& U]}s:_5%_0vxJ JC`;d$jA|rGĈ}?wI5 ڟ)Z>{m `r<9K5YEy >U)v\z"0&y$L:0$u >)3<"3=?&9 w^okw_~ @b~LygS=t)Ot6B3@ߌoQg1moRqF;/_m4(c)Z+]94Px '?i;J^?Te /W3cQm>tdy|ߤzX8"}`>з$ךa4Dҭ"gޤ brS=h}%B3i>L׼ӱo5h/ChQ ʴP>wxEjCPg שFa wjbQQҹ,&-J efPm| >wIoRO py(՛*M˱u5zToiC9Mf(PmGJ"y5OTC<}~^GRh$i?RGk&48CNk^_ jChbu=xke, (/4Eбaod|մ/t7i_zror l+&G yCp!TIڍ (CKM1JtGMQۺ:DMG;M?zmSW{X@ake,ɿc4X ɾhIgշ(}R8hr-oȼL~O @}`H皠8oRմ]iN-5Ũkb~J4FelZz4ir"GXIDATC(S?"Ti+3a`l->lK_Ѧדm띦uS+s2 %T"³ow.[DkMTw!&=~kھq>К`ڹ&(Pu}+<+e~<\_cʃ}M9sS=to8`@9 v_ E m4E&>iRNrCĹic:zW˟Lo)韚yЁmCIHݢ7 ey><&6Smro2&L-E0sM0ICu_z{//e2yEw%oRM*Пxnˉs_'݅#|'Px1~Sw*L=эQMi?lSB4/bFtij}[tSf7ӯl=V2|A-Ҭ. 2bIMoO3:0"hةY]I }м|Hz_8K%9?"ԟO?E}Bۣ7`ƴ ,:U()rQП$&v>TSv퓼I:]LJ m:lRĹ91>0]>w&U1@8o1".-i:̾hqG}2k3o[e26M~2֡/MM蟚yjs&ՈǣS7?s_ǩBT#\uQb:ؾ>G][ m$?<:_26 M ʈ}^ypč跡7ey}ݦ 6/bEOK{gI~n}]^_Ĺ@ NRMxKZ,YEy#mnڔ9O~Or7y` \! u-/IUsk]r6el.%݇Ma2P&vpn&}eP4?KP{Z&%ܺ|l %Jqݧ:՛t2iؾ|0XU>P}$noI }Ѕۘ,5˿;0s}$Qx&gM I]׽N1jݏ0(`(ͩ&q=`߰>Ho:>8`(&\T^49ۇxrxLȨ}`k*lY +^7Vը}E%:@5rbkn,5ΎG.F8(`(iCvqݟGY0ura&]W~nqŨ}EI,Pfغ1jx*FG7hu۟ۏZ%;ssѯWI~Ig|8¦`o_Ĺ>P&;KNc*E36KQĹ@o@錘1d/_}R]mSڌ۲o7q.P >01 s9Ϋ@:ĹυIQm9S8WBL0o):0*YjڌֿO}^/{4Ԩ'νS0G—F8lJ4ؿ||QOk>>0%1 sr$ 6ZFm${Ծs)K&):MW $hq~{Ծs0nqBR 1Q&"h}!& 5T@}ESe,LӧL;ߺ aM_M EL]} L^x Nc$̍PCi;jOL @LU_4L̳|I[fAߟG.1q.P>0ugC\s jd`0}B~ =Z&#Û([sb2]2~ یG8(`m}#f,o]Di06FaWM G̅prH`0-שSh(c_w&S3-oM:PkPT흦Įb6]' nͲ4)u:,~SpVf8P(UERSB}&K)`Σ5A_ٖ37OD R%+>s!l> ceOC~LS0j<&|1w&MO̊!X}}"߅0$!>p(VCW#`7bgWÐ>ǜIr%>pHVþm}v\>%*}hKݗp-f\fOU54{ ܇m&h `8TI>jx}}jN%97 ǓjCSnSWO?TaϚ MׯZ8tǩ^)\F!!#`GJTQ>$C;O5罦}ƈ}G^)8PFn4hS4u[.@Yr.," KM W%97} ~1v*2ϡ^RES0ZLM7~}}UK^a>a~OS!y/8h xJLuSfBiۤ*ES0۷N" KUT%dZ̷:IQ? EV@Jgb]JaX{M( {$U5%MVFS臠08@GEԼf|Z1e:)#L5j`@EY $4#LUrg)[Ftkj짘Ԓ}NUTopv2B}Y5kr]9U)xQ)0>@Qnhk7lJ|OSSW=-~车@%i`퍦JЗesj3}G0Ti}@Sk'QS9ЌiY?6o0}a;19_R1ụ/ZdoSV4#SѿU;ukS&76mr>)yݣJpB@O71a-㇏CF>ѿoyoM@)0!ߎ0"`D#bF>}0"`D#bF>}0"`D#bF>}0"`D#bF>} ϯ<1oIENDB`go-cloud-0.20.0/internal/website/static/placeholder-logo.png000066400000000000000000000063121367004507500240060ustar00rootroot00000000000000PNG  IHDRVsù* IDATx/p$008``[R * ,8 <;> @`tO4;^ٕ|_֕˫~w[<{-prZ}䜖dvgo0at`@Xa@Xa@Xa@X   cwUv?L{?/O7(7SfUK;&ٻλv6?{Q?{Π|o8*{|g7/u&[[w:SR7~L~tb5ߚZ>J-sOUuyu?gjV;縮<m'xNmvim帯jǎ<=+WWfU- '|:{3{PVWxʜWĈvjԓxx7`_FTf8;Cu0$>3yc&mhTK]:MXTmjQӮf,ECڹQqa,;ܤ1FbYhPreZ[A'mT"I#¡dZ-+y4bt;,?]AV'8/^nQKSFZci\w+ SzEau8ub\Z>v5)7Pg?C٧]Ws]lnv/{[.EdIšY,^9 kF/k awa~+bD~oʝOzO."cXaw;˯u,*SETw{6S sc~@9|gC:WٮӔ(<:~Ǩ疅ۚO߯ ^ɝrHmZ?wYgJn:ݤo{aK}[7u3mI0koI][hb/Bv$~=(vB/zj3'k 2b7֨RNVk4n]`k,ƥ<Eaum&dߌ& (IӒY|LzE(=tPӲl'滫t<Ez[cUΤsojƀN.>n+oZH( qD iĎ]͍aS7eذWkR [y_lggi07QȚ@4K*I.c.mR1sMg6)_-_pǹp P,Pߞƣ %1@ǧ0Uڛs_1juhie.RXnk PDs*["m&:E'Vmj/"bc`r6ߣ[VMl"[}Pӷ1E҅&&Z&W4-hesrR-(k_]lOL*m?MɉRi=.ם<2O5X:HZy#nIU(\7Į;tg/l\IqΩM 룝v9pz nMXSnn1q kLT6!} c-~|߉ܴ-LHi+,f.=;aFfB ݦuZGO#8Ls}V "]ԩL0q}s]VWҘ;fnYX(g۠'&kX[[7`pW'Uf F@u-Eˆ`, r`mIKV>wz갸mDX _nRM`!Sgڝ!p Օ9pw*%/[qUmbNLm/}&q۶ԯiNkjH[mu(g)F +!uxŜGb@mrTw/pX˴6&Z=*_wvt}Õ f;>onda4s7ՓLdHj^༈tzS^ydw/4Y ksZM&y@KMӪ8߶N(۪?˓y}+Њ8)a-@]ysW@= gxw16}')^&FF?3# Y> lF(nvԹQ:XL{rZ4!%St׼s"e7Ι!5ckҕvi~I6Åtk)IoSX;k&SכLv?޷ ]uekmn\unSǩ>dwe'v͖1nƗt_m?#pʨ&?#cqAEyuq۴.-k^ZA_maDcIGĝ'tQ>q>cf&3ơ~\FsO/!4%h;Z_gf*nP֭Atnrus֫s__^Η:n-e?Bufl-c͹Y楂K籹vAYM;+{p[{Bt}7onՖ:X7%e,F ?N*iDڒL8Ӷ2Yoiu~F4n -븑8N}@ȢtBY7CRsys܉)y .ҬQ'{]OEmnOGiu+_pzXgOxy̖䲚w$6޳/tt~IENDB`go-cloud-0.20.0/mysql/000077500000000000000000000000001367004507500144565ustar00rootroot00000000000000go-cloud-0.20.0/mysql/awsmysql/000077500000000000000000000000001367004507500163365ustar00rootroot00000000000000go-cloud-0.20.0/mysql/awsmysql/awsmysql.go000066400000000000000000000120031367004507500205410ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package awsmysql provides connections to AWS RDS MySQL instances. // // URLs // // For mysql.Open, awsmysql registers for the scheme "awsmysql". // The default URL opener will create a connection using the default // credentials from the environment, as described in // https://docs.aws.amazon.com/sdk-for-go/api/aws/session/. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // // See https://gocloud.dev/concepts/urls/ for background information. package awsmysql // import "gocloud.dev/mysql/awsmysql" import ( "context" "crypto/tls" "database/sql" "database/sql/driver" "fmt" "net/url" "strings" "sync" "contrib.go.opencensus.io/integrations/ocsql" "github.com/go-sql-driver/mysql" "github.com/google/wire" "gocloud.dev/aws/rds" gcmysql "gocloud.dev/mysql" ) // Set is a Wire provider set that provides a *sql.DB given // *Params and an HTTP client. var Set = wire.NewSet( wire.Struct(new(URLOpener), "CertSource"), rds.CertFetcherSet, ) // URLOpener opens RDS MySQL URLs // like "awsmysql://user:password@myinstance.borkxyzzy.us-west-1.rds.amazonaws.com:3306/mydb". type URLOpener struct { // CertSource specifies how the opener will obtain the RDS Certificate // Authority. If nil, it will use the default *rds.CertFetcher. CertSource rds.CertPoolProvider // TraceOpts contains options for OpenCensus. TraceOpts []ocsql.TraceOption } // Scheme is the URL scheme awsmysql registers its URLOpener under on // mysql.DefaultMux. const Scheme = "awsmysql" func init() { gcmysql.DefaultURLMux().RegisterMySQL(Scheme, &URLOpener{}) } // OpenMySQLURL opens a new RDS database connection wrapped with OpenCensus instrumentation. func (uo *URLOpener) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, error) { source := uo.CertSource if source == nil { source = new(rds.CertFetcher) } if u.Host == "" { return nil, fmt.Errorf("open RDS: empty endpoint") } password, _ := u.User.Password() c := &connector{ addr: u.Host, user: u.User.Username(), password: password, dbName: strings.TrimPrefix(u.Path, "/"), // Make a copy of TraceOpts to avoid caller modifying. traceOpts: append([]ocsql.TraceOption(nil), uo.TraceOpts...), provider: source, sem: make(chan struct{}, 1), ready: make(chan struct{}), } c.sem <- struct{}{} return sql.OpenDB(c), nil } type connector struct { addr string user string password string dbName string traceOpts []ocsql.TraceOption sem chan struct{} // receive to acquire, send to release provider CertPoolProvider ready chan struct{} // closed after writing dsn dsn string } func (c *connector) Connect(ctx context.Context) (driver.Conn, error) { select { case <-c.sem: certPool, err := c.provider.RDSCertPool(ctx) if err != nil { c.sem <- struct{}{} // release return nil, fmt.Errorf("connect RDS: %v", err) } // TODO(light): Avoid global registry once https://github.com/go-sql-driver/mysql/issues/771 is fixed. tlsConfigCounter.mu.Lock() tlsConfigNum := tlsConfigCounter.n tlsConfigCounter.n++ tlsConfigCounter.mu.Unlock() tlsConfigName := fmt.Sprintf("gocloud.dev/mysql/awsmysql/%d", tlsConfigNum) err = mysql.RegisterTLSConfig(tlsConfigName, &tls.Config{ RootCAs: certPool, }) if err != nil { c.sem <- struct{}{} // release return nil, fmt.Errorf("connect RDS: register TLS: %v", err) } cfg := &mysql.Config{ Net: "tcp", Addr: c.addr, User: c.user, Passwd: c.password, TLSConfig: tlsConfigName, AllowCleartextPasswords: true, AllowNativePasswords: true, DBName: c.dbName, } c.dsn = cfg.FormatDSN() close(c.ready) // Don't release sem: make it block forever, so this case won't be run again. case <-c.ready: // Already succeeded. case <-ctx.Done(): return nil, fmt.Errorf("connect RDS: waiting for certificates: %v", ctx.Err()) } return c.Driver().Open(c.dsn) } func (c *connector) Driver() driver.Driver { return ocsql.Wrap(mysql.MySQLDriver{}, c.traceOpts...) } var tlsConfigCounter struct { mu sync.Mutex n int } // A CertPoolProvider obtains a certificate pool that contains the RDS CA certificate. type CertPoolProvider = rds.CertPoolProvider // CertFetcher pulls the RDS CA certificates from Amazon's servers. The zero // value will fetch certificates using the default HTTP client. type CertFetcher = rds.CertFetcher go-cloud-0.20.0/mysql/awsmysql/awsmysql_test.go000066400000000000000000000034411367004507500216060ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsmysql import ( "context" "fmt" "testing" "gocloud.dev/internal/testing/terraform" "gocloud.dev/mysql" ) func TestOpen(t *testing.T) { // This test will be skipped unless the project is set up with Terraform. // Before running go test, run in this directory: // // terraform init // terraform apply tfOut, err := terraform.ReadOutput(".") if err != nil || len(tfOut) == 0 { t.Skipf("Could not obtain harness info: %v", err) } endpoint, _ := tfOut["endpoint"].Value.(string) username, _ := tfOut["username"].Value.(string) password, _ := tfOut["password"].Value.(string) databaseName, _ := tfOut["database"].Value.(string) if endpoint == "" || username == "" || databaseName == "" { t.Fatalf("Missing one or more required Terraform outputs; got endpoint=%q username=%q database=%q", endpoint, username, databaseName) } ctx := context.Background() urlstr := fmt.Sprintf("awsmysql://%s:%s@%s/%s", username, password, endpoint, databaseName) t.Log("Connecting to:", urlstr) db, err := mysql.Open(ctx, urlstr) if err != nil { t.Fatal(err) } if err := db.Ping(); err != nil { t.Error("Ping:", err) } if err := db.Close(); err != nil { t.Error("Close:", err) } } go-cloud-0.20.0/mysql/awsmysql/example_test.go000066400000000000000000000024531367004507500213630ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsmysql_test import ( "context" "log" "gocloud.dev/mysql" _ "gocloud.dev/mysql/awsmysql" ) func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/mysql/awsmysql" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Replace these with your actual settings. db, err := mysql.Open(ctx, "awsmysql://myrole:swordfish@example01.xyzzy.us-west-1.rds.amazonaws.com/testdb") if err != nil { log.Fatal(err) } defer db.Close() // Use database in your program. db.ExecContext(ctx, "CREATE TABLE foo (bar INT);") } go-cloud-0.20.0/mysql/awsmysql/main.tf000066400000000000000000000047421367004507500176240ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Harness for MySQL tests. terraform { required_version = "~>0.12" } provider "aws" { version = "~> 2.7" region = var.region } provider "random" { version = "~> 2.1" } variable "region" { type = string description = "Region to create resources in. See https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html for valid values." } resource "aws_security_group" "main" { name_prefix = "testdb" description = "Security group for the Go CDK MySQL test database." ingress { from_port = 3306 to_port = 3306 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] description = "Public MySQL access" } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] description = "All outgoing traffic allowed" } } resource "random_string" "db_password" { keepers = { region = var.region } special = false length = 20 } resource "aws_db_instance" "main" { identifier_prefix = "go-cloud-test" engine = "mysql" engine_version = "5.6.39" instance_class = "db.t2.micro" allocated_storage = 20 username = "root" password = random_string.db_password.result name = "testdb" publicly_accessible = true vpc_security_group_ids = [aws_security_group.main.id] skip_final_snapshot = true } output "endpoint" { value = aws_db_instance.main.endpoint description = "The RDS instance's host/port." } output "username" { value = "root" description = "The MySQL username to connect with." } output "password" { value = random_string.db_password.result sensitive = true description = "The RDS instance password for the user." } output "database" { value = "testdb" description = "The name of the database inside the RDS instance." } go-cloud-0.20.0/mysql/azuremysql/000077500000000000000000000000001367004507500166725ustar00rootroot00000000000000go-cloud-0.20.0/mysql/azuremysql/azuremysql.go000066400000000000000000000113731367004507500214420ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package azuremysql provides connections to Azure Database for MySQL. // See https://docs.microsoft.com/en-us/azure/mysql. // // URLs // // For mysql.Open, azuremysql registers for the scheme "azuremysql". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // // See https://gocloud.dev/concepts/urls/ for background information. package azuremysql // import "gocloud.dev/mysql/azuremysql" import ( "context" "crypto/tls" "database/sql" "database/sql/driver" "fmt" "net/url" "strings" "sync" "contrib.go.opencensus.io/integrations/ocsql" "github.com/go-sql-driver/mysql" "gocloud.dev/azure/azuredb" cdkmysql "gocloud.dev/mysql" ) // URLOpener opens Azure MySQL URLs // like "azuremysql://user:password@myinstance.mysql.database.azure.com/mydb". type URLOpener struct { // CertSource specifies how the opener will obtain the Azure Certificate // Authority. If nil, it will use the default *azuredb.CertFetcher. CertSource azuredb.CertPoolProvider // TraceOpts contains options for OpenCensus. TraceOpts []ocsql.TraceOption } // Scheme is the URL scheme azuremysql registers its URLOpener under on // mysql.DefaultMux. const Scheme = "azuremysql" func init() { cdkmysql.DefaultURLMux().RegisterMySQL(Scheme, &URLOpener{}) } // OpenMySQLURL opens an encrypted connection to an Azure MySQL database. func (uo *URLOpener) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, error) { source := uo.CertSource if source == nil { source = new(azuredb.CertFetcher) } if u.Host == "" { return nil, fmt.Errorf("open Azure database: empty endpoint") } password, _ := u.User.Password() c := &connector{ addr: u.Host, user: u.User.Username(), password: password, dbName: strings.TrimPrefix(u.Path, "/"), // Make a copy of TraceOpts to avoid caller modifying. traceOpts: append([]ocsql.TraceOption(nil), uo.TraceOpts...), provider: source, sem: make(chan struct{}, 1), ready: make(chan struct{}), } c.sem <- struct{}{} return sql.OpenDB(c), nil } type connector struct { addr string user string password string dbName string traceOpts []ocsql.TraceOption sem chan struct{} // receive to acquire, send to release provider CertPoolProvider // provides the CA certificate pool ready chan struct{} // closed after writing dsn dsn string } func (c *connector) Connect(ctx context.Context) (driver.Conn, error) { select { case <-c.sem: certPool, err := c.provider.AzureCertPool(ctx) if err != nil { c.sem <- struct{}{} // release return nil, fmt.Errorf("connect Azure MySql: %v", err) } // TODO(light): Avoid global registry once https://github.com/go-sql-driver/mysql/issues/771 is fixed. tlsConfigCounter.mu.Lock() tlsConfigNum := tlsConfigCounter.n tlsConfigCounter.n++ tlsConfigCounter.mu.Unlock() tlsConfigName := fmt.Sprintf("gocloud.dev/mysql/azuremysql/%d", tlsConfigNum) err = mysql.RegisterTLSConfig(tlsConfigName, &tls.Config{ RootCAs: certPool, }) if err != nil { c.sem <- struct{}{} // release return nil, fmt.Errorf("connect Azure MySql: register TLS: %v", err) } cfg := &mysql.Config{ Net: "tcp", Addr: c.addr, User: c.user, Passwd: c.password, TLSConfig: tlsConfigName, AllowCleartextPasswords: true, AllowNativePasswords: true, DBName: c.dbName, } c.dsn = cfg.FormatDSN() close(c.ready) // Don't release sem: make it block forever, so this case won't be run again. case <-c.ready: // Already succeeded. case <-ctx.Done(): return nil, fmt.Errorf("connect Azure MySql: waiting for certificates: %v", ctx.Err()) } return c.Driver().Open(c.dsn) } func (c *connector) Driver() driver.Driver { return ocsql.Wrap(mysql.MySQLDriver{}, c.traceOpts...) } var tlsConfigCounter struct { mu sync.Mutex n int } // A CertPoolProvider obtains a certificate pool that contains the Azure CA certificate. type CertPoolProvider = azuredb.CertPoolProvider // CertFetcher is a default CertPoolProvider that can fetch CA certificates from // any publicly accessible URI or File. type CertFetcher = azuredb.CertFetcher go-cloud-0.20.0/mysql/azuremysql/azuremysql_test.go000066400000000000000000000045331367004507500225010ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Read the documentation on Azure Database for MySql for more information. // See https://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl. // To run this test, create a MySQL instance using Azure Portal or Terraform. // For Azure Portal, see https://docs.microsoft.com/en-us/azure/mysql/quickstart-create-mysql-server-database-using-azure-portal. // For Terraform, see https://www.terraform.io/docs/providers/azurerm/r/mysql_database.html. package azuremysql import ( "context" "fmt" "testing" "gocloud.dev/internal/testing/terraform" "gocloud.dev/mysql" ) func TestURLOpener(t *testing.T) { // This test will be skipped unless the project is set up with Terraform. // Before running go test: // // 1. Install Azure CLI (az) (https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-linux) // 2. Run "az login" // 3. terraform init // 4. terraform apply tfOut, err := terraform.ReadOutput(".") if err != nil || len(tfOut) == 0 { t.Skipf("Could not obtain harness info: %v", err) } serverName, _ := tfOut["servername"].Value.(string) username, _ := tfOut["username"].Value.(string) password, _ := tfOut["password"].Value.(string) databaseName, _ := tfOut["database"].Value.(string) ctx := context.Background() db, err := mysql.Open(ctx, fmt.Sprintf("azuremysql://%s:%s@%s/%s", username, password, serverName, databaseName)) if err != nil { t.Fatal(err) } if err := db.Ping(); err != nil { t.Error("Ping: ", err) } if _, err = db.ExecContext(ctx, "CREATE TABLE tblTester (id INT NOT NULL, PRIMARY KEY(id))"); err != nil { t.Error("ExecContext: ", err) } if _, err = db.ExecContext(ctx, "DROP TABLE tblTester"); err != nil { t.Error("ExecContext: ", err) } if err := db.Close(); err != nil { t.Error("Close: ", err) } } go-cloud-0.20.0/mysql/azuremysql/example_test.go000066400000000000000000000024321367004507500217140ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package azuremysql_test import ( "context" "log" "gocloud.dev/mysql" _ "gocloud.dev/mysql/azuremysql" ) func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/mysql/azuremysql" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Replace this with your actual settings. db, err := mysql.Open(ctx, "azuremysql://user:password@example00.mysql.database.azure.com/testdb") if err != nil { log.Fatal(err) } defer db.Close() // Use database in your program. db.Exec("CREATE TABLE foo (bar INT);") } go-cloud-0.20.0/mysql/azuremysql/main.tf000066400000000000000000000056751367004507500201660ustar00rootroot00000000000000terraform { required_version = "~>0.12" } # See documentation for more info: https://www.terraform.io/docs/providers/azurerm/auth/azure_cli.html provider "azurerm" { version = "~> 1.22" } provider "random" { version = "~> 2.1" } # Run Azure CLI command "az account list-locations" to see list of all locations. variable "location" { description = "The Azure Region in which all resources in this example should be created." } # See documentation for more info: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview variable "resourcegroup" { description = "The Azure Resource Group Name within your Subscription in which this resource will be created." } resource "random_string" "db_password" { keepers = { region = var.location } special = false length = 20 } resource "random_id" "serverid" { keepers = { region = var.location } byte_length = 2 } resource "azurerm_resource_group" "mysqlrg" { name = var.resourcegroup location = var.location } resource "azurerm_mysql_server" "mysqlserver" { name = format("go-cdk-test-%v", random_id.serverid.dec) location = azurerm_resource_group.mysqlrg.location resource_group_name = azurerm_resource_group.mysqlrg.name sku { name = "B_Gen5_2" capacity = 2 tier = "Basic" family = "Gen5" } storage_profile { storage_mb = 5120 backup_retention_days = 7 geo_redundant_backup = "Disabled" } administrator_login = "gocloudadmin" administrator_login_password = random_string.db_password.result version = "5.7" ssl_enforcement = "Enabled" } # See documentation for more info: https://www.terraform.io/docs/providers/azurerm/r/sql_firewall_rule.html resource "azurerm_mysql_firewall_rule" "addrule" { name = "ClientIPAddress" resource_group_name = azurerm_resource_group.mysqlrg.name server_name = azurerm_mysql_server.mysqlserver.name start_ip_address = "0.0.0.0" end_ip_address = "255.255.255.255" } resource "azurerm_mysql_database" "mysqldb" { name = "testdb" resource_group_name = azurerm_resource_group.mysqlrg.name server_name = azurerm_mysql_server.mysqlserver.name charset = "utf8" collation = "utf8_unicode_ci" } output "username" { value = "${azurerm_mysql_server.mysqlserver.administrator_login}@${azurerm_mysql_server.mysqlserver.name}" description = "The MySQL username to connect with." } output "password" { value = random_string.db_password.result sensitive = true description = "The MySQL instance password for the user." } output "servername" { value = azurerm_mysql_server.mysqlserver.fqdn description = "The host name of the Azure Database for MySQL instance." } output "database" { value = "testdb" description = "The databasename of the Azure Database for MySQL instance." } go-cloud-0.20.0/mysql/example_test.go000066400000000000000000000022061367004507500174770ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mysql_test import ( "context" "log" "gocloud.dev/mysql" ) func ExampleOpen() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Replace this with your actual settings. db, err := mysql.Open(ctx, "mysql://user:password@localhost/testdb") if err != nil { log.Fatal(err) } defer db.Close() // Use database in your program. db.Exec("CREATE TABLE foo (bar INT);") } go-cloud-0.20.0/mysql/gcpmysql/000077500000000000000000000000001367004507500163155ustar00rootroot00000000000000go-cloud-0.20.0/mysql/gcpmysql/example_test.go000066400000000000000000000024241367004507500213400ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpmysql_test import ( "context" "log" "gocloud.dev/mysql" _ "gocloud.dev/mysql/gcpmysql" ) func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/mysql/gcpmysql" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Replace this with your actual settings. db, err := mysql.Open(ctx, "gcpmysql://user:password@example-project/region/my-instance01/testdb") if err != nil { log.Fatal(err) } defer db.Close() // Use database in your program. db.Exec("CREATE TABLE foo (bar INT);") } go-cloud-0.20.0/mysql/gcpmysql/gcpmysql.go000066400000000000000000000120241367004507500205020ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcpmysql provides connections to managed MySQL Cloud SQL instances. // See https://cloud.google.com/sql/docs/mysql/ for more information. // // URLs // // For mysql.Open, gcpmysql registers for the scheme "gcpmysql". // The default URL opener will create a connection using the default // credentials from the environment, as described in // https://cloud.google.com/docs/authentication/production. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // // See https://gocloud.dev/concepts/urls/ for background information. package gcpmysql // import "gocloud.dev/mysql/gcpmysql" import ( "context" "database/sql" "database/sql/driver" "fmt" "net/url" "strings" "sync" "contrib.go.opencensus.io/integrations/ocsql" "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/proxy" "github.com/go-sql-driver/mysql" "gocloud.dev/gcp" "gocloud.dev/gcp/cloudsql" cdkmysql "gocloud.dev/mysql" ) // Scheme is the URL scheme gcpmysql registers its URLOpener under on // mysql.DefaultMux. const Scheme = "gcpmysql" func init() { cdkmysql.DefaultURLMux().RegisterMySQL(Scheme, new(lazyCredsOpener)) } // lazyCredsOpener obtains Application Default Credentials on the first call // to OpenMySQLURL. type lazyCredsOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyCredsOpener) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, error) { o.init.Do(func() { creds, err := gcp.DefaultCredentials(ctx) if err != nil { o.err = err return } client, err := gcp.NewHTTPClient(gcp.DefaultTransport(), creds.TokenSource) if err != nil { o.err = err return } certSource := cloudsql.NewCertSource(client) o.opener = &URLOpener{CertSource: certSource} }) if o.err != nil { return nil, fmt.Errorf("gcpmysql open %v: %v", u, o.err) } return o.opener.OpenMySQLURL(ctx, u) } // URLOpener opens Cloud MySQL URLs like // "gcpmysql://user:password@project/region/instance/dbname". type URLOpener struct { // CertSource specifies how the opener will obtain authentication information. // CertSource must not be nil. CertSource proxy.CertSource // TraceOpts contains options for OpenCensus. TraceOpts []ocsql.TraceOption } // OpenMySQLURL opens a new GCP database connection wrapped with OpenCensus instrumentation. func (uo *URLOpener) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, error) { if uo.CertSource == nil { return nil, fmt.Errorf("gcpmysql: URLOpener CertSource is nil") } // TODO(light): Avoid global registry once https://github.com/go-sql-driver/mysql/issues/771 is fixed. dialerCounter.mu.Lock() dialerNum := dialerCounter.n dialerCounter.mu.Unlock() dialerName := fmt.Sprintf("gocloud.dev/mysql/gcpmysql/%d", dialerNum) cfg, err := configFromURL(u, dialerName) if err != nil { return nil, fmt.Errorf("gcpmysql: open config %v", err) } client := &proxy.Client{ Port: 3307, Certs: uo.CertSource, } mysql.RegisterDial(dialerName, client.Dial) db := sql.OpenDB(connector{cfg.FormatDSN(), uo.TraceOpts}) return db, nil } func configFromURL(u *url.URL, dialerName string) (*mysql.Config, error) { instance, dbName, err := instanceFromURL(u) if err != nil { return nil, err } var cfg *mysql.Config switch { case len(u.RawQuery) > 0: optDsn := fmt.Sprintf("/%s?%s", dbName, u.RawQuery) if cfg, err = mysql.ParseDSN(optDsn); err != nil { return nil, err } default: cfg = mysql.NewConfig() } password, _ := u.User.Password() cfg.AllowNativePasswords = true cfg.Net = dialerName cfg.Addr = instance cfg.User = u.User.Username() cfg.Passwd = password cfg.DBName = dbName return cfg, nil } func instanceFromURL(u *url.URL) (instance, db string, _ error) { path := u.Host + u.Path // everything after scheme but before query or fragment parts := strings.SplitN(path, "/", 4) if len(parts) < 4 { return "", "", fmt.Errorf("%s is not in the form project/region/instance/dbname", path) } for _, part := range parts { if part == "" { return "", "", fmt.Errorf("%s is not in the form project/region/instance/dbname", path) } } return parts[0] + ":" + parts[1] + ":" + parts[2], parts[3], nil } var dialerCounter struct { mu sync.Mutex n int } type connector struct { dsn string traceOpts []ocsql.TraceOption } func (c connector) Connect(ctx context.Context) (driver.Conn, error) { return c.Driver().Open(c.dsn) } func (c connector) Driver() driver.Driver { return ocsql.Wrap(mysql.MySQLDriver{}, c.traceOpts...) } go-cloud-0.20.0/mysql/gcpmysql/gcpmysql_test.go000066400000000000000000000156071367004507500215530ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpmysql import ( "context" "fmt" "net/url" "reflect" "testing" drvr "github.com/go-sql-driver/mysql" "gocloud.dev/internal/testing/terraform" "gocloud.dev/mysql" ) func TestOpen(t *testing.T) { // This test will be skipped unless the project is set up with Terraform. // Before running go test, run in this directory: // // terraform init // terraform apply tfOut, err := terraform.ReadOutput(".") if err != nil || len(tfOut) == 0 { t.Skipf("Could not obtain harness info: %v", err) } project, _ := tfOut["project"].Value.(string) region, _ := tfOut["region"].Value.(string) instance, _ := tfOut["instance"].Value.(string) username, _ := tfOut["username"].Value.(string) password, _ := tfOut["password"].Value.(string) databaseName, _ := tfOut["database"].Value.(string) if project == "" || region == "" || instance == "" || username == "" || databaseName == "" { t.Fatalf("Missing one or more required Terraform outputs; got project=%q region=%q instance=%q username=%q database=%q", project, region, instance, username, databaseName) } ctx := context.Background() urlstr := fmt.Sprintf("gcpmysql://%s:%s@%s/%s/%s/%s", username, password, project, region, instance, databaseName) t.Log("Connecting to", urlstr) db, err := mysql.Open(ctx, urlstr) if err != nil { t.Fatal(err) } if err := db.Ping(); err != nil { t.Error("Ping:", err) } if err := db.Close(); err != nil { t.Error("Close:", err) } } func TestInstanceFromURL(t *testing.T) { tests := []struct { name string urlString string wantInstance string wantDatabase string wantErr bool }{ { name: "AllValuesSpecified", urlString: "gcpmysql://username:password@my-project-id/us-central1/my-instance-id/my-db?foo=bar&baz=quux", wantInstance: "my-project-id:us-central1:my-instance-id", wantDatabase: "my-db", }, { name: "OptionalValuesOmitted", urlString: "gcpmysql://my-project-id/us-central1/my-instance-id/my-db", wantInstance: "my-project-id:us-central1:my-instance-id", wantDatabase: "my-db", }, { name: "DatabaseNameEmpty", urlString: "gcpmysql://my-project-id/us-central1/my-instance-id/", wantErr: true, }, { name: "InstanceEmpty", urlString: "gcpmysql://my-project-id/us-central1//my-db", wantErr: true, }, { name: "RegionEmpty", urlString: "gcpmysql://my-project-id//my-instance-id/my-db", wantErr: true, }, { name: "ProjectEmpty", urlString: "gcpmysql:///us-central1/my-instance-id/my-db", wantErr: true, }, { name: "DatabaseNameWithSlashes", urlString: "gcpmysql://my-project-id/us-central1/my-instance-id/foo/bar/baz", wantInstance: "my-project-id:us-central1:my-instance-id", wantDatabase: "foo/bar/baz", }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { u, err := url.Parse(test.urlString) if err != nil { t.Fatalf("failed to parse URL %q: %v", test.urlString, err) } instance, database, err := instanceFromURL(u) if err != nil { t.Logf("instanceFromURL(url.Parse(%q)): %v", u, err) if !test.wantErr { t.Fail() } return } if test.wantErr { t.Fatalf("instanceFromURL(url.Parse(%q)) = %q, %q, ; want error", test.urlString, instance, database) } if instance != test.wantInstance || database != test.wantDatabase { t.Errorf("instanceFromURL(url.Parse(%q)) = %q, %q, ; want %q, %q, ", test.urlString, instance, database, test.wantInstance, test.wantDatabase) } }) } } func Test_configFromURL(t *testing.T) { type args struct { urlStr string dialerName string } tests := []struct { name string args args want *drvr.Config wantErr bool }{ { name: "ConfigWithNoOptions", args: args{ urlStr: "gcpmysql://user:password@my-project-id/us-central1/my-instance-id/my-db", dialerName: "gocloud.dev/mysql/gcpmysql/1", }, want: func() *drvr.Config { cfg := drvr.NewConfig() cfg.AllowNativePasswords = true cfg.Net = "gocloud.dev/mysql/gcpmysql/1" cfg.Addr = "my-project-id:us-central1:my-instance-id" cfg.User = "user" cfg.Passwd = "password" cfg.DBName = "my-db" return cfg }(), wantErr: false, }, { name: "ConfigWithSignalOptions", args: args{ urlStr: "gcpmysql://user:password@my-project-id/us-central1/my-instance-id/my-db?parseTime=true", dialerName: "gocloud.dev/mysql/gcpmysql/1", }, want: func() *drvr.Config { cfg := drvr.NewConfig() cfg.AllowNativePasswords = true cfg.ParseTime = true cfg.Net = "gocloud.dev/mysql/gcpmysql/1" cfg.Addr = "my-project-id:us-central1:my-instance-id" cfg.User = "user" cfg.Passwd = "password" cfg.DBName = "my-db" return cfg }(), wantErr: false, }, { name: "ConfigWithMultipleOptions", args: args{ urlStr: "gcpmysql://user:password@my-project-id/us-central1/my-instance-id/my-db?columnsWithAlias=true&parseTime=true", dialerName: "gocloud.dev/mysql/gcpmysql/1", }, want: func() *drvr.Config { cfg := drvr.NewConfig() cfg.AllowNativePasswords = true cfg.ColumnsWithAlias = true cfg.ParseTime = true cfg.Net = "gocloud.dev/mysql/gcpmysql/1" cfg.Addr = "my-project-id:us-central1:my-instance-id" cfg.User = "user" cfg.Passwd = "password" cfg.DBName = "my-db" return cfg }(), wantErr: false, }, { name: "InstanceFromURLError", args: args{ urlStr: "gcpmysql://user:password@my-project-id/us-central1/my-db", dialerName: "gocloud.dev/mysql/gcpmysql/1", }, want: nil, wantErr: true, }, { name: "DNSParseError", args: args{ urlStr: "gcpmysql://user:password@my-project-id/us-central1/my-instance-id/my-db?parseTime=nope", dialerName: "gocloud.dev/mysql/gcpmysql/1", }, want: nil, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { u, err := url.Parse(tt.args.urlStr) if err != nil { t.Fatalf("failed to parse URL %q: %v", tt.args.urlStr, err) } got, err := configFromURL(u, tt.args.dialerName) if (err != nil) != tt.wantErr { t.Errorf("configFromURL() error = %v, wantErr %v", err, tt.wantErr) return } if !reflect.DeepEqual(got, tt.want) { t.Errorf("configFromURL() = %v, want %v", got, tt.want) } }) } } go-cloud-0.20.0/mysql/gcpmysql/main.tf000066400000000000000000000057321367004507500176030ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Harness for MySQL tests. terraform { required_version = "~>0.12" } provider "google" { version = "~> 2.5" project = var.project } provider "random" { version = "~> 2.1" } variable "project" { type = string description = "Project to set up." } variable "region" { default = "us-central1" description = "GCP region to create database and storage in, for example 'us-central1'. See https://cloud.google.com/compute/docs/regions-zones/ for valid values." } locals { sql_instance = "go-cloud-test-${random_id.sql_instance.hex}" } resource "google_project_service" "sql" { service = "sql-component.googleapis.com" disable_on_destroy = false } resource "google_project_service" "sqladmin" { service = "sqladmin.googleapis.com" disable_on_destroy = false } resource "random_id" "sql_instance" { keepers = { project = var.project region = var.region } byte_length = 12 } resource "google_sql_database_instance" "main" { name = local.sql_instance database_version = "MYSQL_5_6" region = var.region project = var.project settings { tier = "db-f1-micro" disk_size = 10 # GiB } depends_on = [ google_project_service.sql, google_project_service.sqladmin, ] } resource "google_sql_database" "main" { name = "testdb" instance = google_sql_database_instance.main.name } resource "random_string" "db_password" { keepers = { project = var.project db_name = local.sql_instance region = var.region } special = false length = 20 } resource "google_sql_user" "root" { name = "root" instance = google_sql_database_instance.main.name password = random_string.db_password.result } output "project" { value = var.project description = "The GCP project ID." } output "region" { value = var.region description = "The Cloud SQL instance region." } output "instance" { value = local.sql_instance description = "The Cloud SQL instance region." } output "username" { value = "root" description = "The Cloud SQL username to connect with." } output "password" { value = random_string.db_password.result sensitive = true description = "The Cloud SQL instance password for the user." } output "database" { value = "testdb" description = "The name of the database inside the Cloud SQL instance." } go-cloud-0.20.0/mysql/mysql.go000066400000000000000000000100701367004507500161500ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package mysql provides functions to open MySQL databases with OpenCensus instrumentation. package mysql import ( "context" "database/sql" "database/sql/driver" "net/url" "strings" "github.com/go-sql-driver/mysql" "gocloud.dev/internal/openurl" "contrib.go.opencensus.io/integrations/ocsql" ) // Scheme is the URL scheme this package registers its URLOpener under on // DefaultMux. const Scheme = "mysql" func init() { DefaultURLMux().RegisterMySQL(Scheme, &URLOpener{}) } // URLOpener opens URLs like "mysql://" by using the underlying MySQL driver. // See https://godoc.org/github.com/lib/pq#hdr-Connection_String_Parameters for details. type URLOpener struct{} // OpenMySQLURL opens a new database connection wrapped with OpenCensus instrumentation. func (*URLOpener) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, error) { db, err := openWithURL(u) return db, err } func openWithURL(url *url.URL) (*sql.DB, error) { return sql.OpenDB(connector{dsn: strings.TrimPrefix(url.String(), Scheme+"://")}), nil } type connector struct { dsn string } func (c connector) Connect(ctx context.Context) (driver.Conn, error) { return c.Driver().Open(c.dsn) } func (c connector) Driver() driver.Driver { return ocsql.Wrap(mysql.MySQLDriver{}) } // A type that implements MySQLURLOpener can open connection based on a URL. // The opener must not modify the URL argument. OpenMySQLURL must be safe to // call from multiple goroutines. // // This interface is generally implemented by types in driver packages. type MySQLURLOpener interface { OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, error) } // URLMux is a URL opener multiplexer. It matches the scheme of the URLs // against a set of registered schemes and calls the opener that matches the // URL's scheme. // // The zero value is a multiplexer with no registered schemes. type URLMux struct { schemes openurl.SchemeMap } // RegisterMySQL registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterMySQL panics. func (mux *URLMux) RegisterMySQL(scheme string, opener MySQLURLOpener) { mux.schemes.Register("mysql", "DB", scheme, opener) } // OpenMySQL calls OpenMySQLURL with the URL parsed from urlstr. // OpenMySQL is safe to call from multiple goroutines. func (mux *URLMux) OpenMySQL(ctx context.Context, urlstr string) (*sql.DB, error) { opener, u, err := mux.schemes.FromString("DB", urlstr) if err != nil { return nil, err } return opener.(MySQLURLOpener).OpenMySQLURL(ctx, u) } // OpenMySQLURL dispatches the URL to the opener that is registered with the // URL's scheme. OpenMySQLURL is safe to call from multiple goroutines. func (mux *URLMux) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, error) { opener, err := mux.schemes.FromURL("DB", u) if err != nil { return nil, err } return opener.(MySQLURLOpener).OpenMySQLURL(ctx, u) } var defaultURLMux = new(URLMux) // DefaultURLMux returns the URLMux used by OpenMySql. // // Driver packages can use this to register their MySQLURLOpener on the mux. func DefaultURLMux() *URLMux { return defaultURLMux } // Open opens the bucket identified by the URL given. URL openers must be // registered in the DefaultURLMux, which is typically done in driver // packages' initialization. // // See the URLOpener documentation in driver subpackages for more // details on supported scheme(s) and URL parameter(s). func Open(ctx context.Context, urlstr string) (*sql.DB, error) { return defaultURLMux.OpenMySQL(ctx, urlstr) } go-cloud-0.20.0/mysql/mysql_test.go000066400000000000000000000017351367004507500172170ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mysql import ( "context" "testing" ) func TestOpen(t *testing.T) { t.Skip("Test not hermetic yet") ctx := context.Background() dbByURL, err := Open(ctx, "mysql://root@localhost/mysql") if err != nil { t.Fatal(err) } if err := dbByURL.Ping(); err != nil { t.Error("Ping:", err) } if err := dbByURL.Close(); err != nil { t.Error("Close:", err) } } go-cloud-0.20.0/postgres/000077500000000000000000000000001367004507500151575ustar00rootroot00000000000000go-cloud-0.20.0/postgres/awspostgres/000077500000000000000000000000001367004507500175405ustar00rootroot00000000000000go-cloud-0.20.0/postgres/awspostgres/awspostgres.go000066400000000000000000000124651367004507500224600ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package awspostgres provides connections to AWS RDS PostgreSQL instances. // // URLs // // For postgres.Open, awspostgres registers for the scheme "awspostgres". // The default URL opener will create a connection using the default // credentials from the environment, as described in // https://docs.aws.amazon.com/sdk-for-go/api/aws/session/. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // // See https://gocloud.dev/concepts/urls/ for background information. package awspostgres // import "gocloud.dev/postgres/awspostgres" import ( "context" "crypto/tls" "database/sql" "database/sql/driver" "fmt" "io" "net" "net/url" "time" "contrib.go.opencensus.io/integrations/ocsql" "github.com/lib/pq" "gocloud.dev/aws/rds" "gocloud.dev/postgres" ) // URLOpener opens RDS PostgreSQL URLs // like "awspostgres://user:password@myinstance.borkxyzzy.us-west-1.rds.amazonaws.com:5432/mydb". type URLOpener struct { // CertSource specifies how the opener will obtain the RDS Certificate // Authority. If nil, it will use the default *rds.CertFetcher. CertSource rds.CertPoolProvider // TraceOpts contains options for OpenCensus. TraceOpts []ocsql.TraceOption } // Scheme is the URL scheme awspostgres registers its URLOpener under on // postgres.DefaultMux. const Scheme = "awspostgres" func init() { postgres.DefaultURLMux().RegisterPostgres(Scheme, &URLOpener{}) } // OpenPostgresURL opens a new RDS database connection wrapped with OpenCensus instrumentation. func (uo *URLOpener) OpenPostgresURL(ctx context.Context, u *url.URL) (*sql.DB, error) { source := uo.CertSource if source == nil { source = new(rds.CertFetcher) } query := u.Query() for k := range query { // Forbid SSL-related parameters. if k == "sslmode" || k == "sslcert" || k == "sslkey" || k == "sslrootcert" { return nil, fmt.Errorf("awspostgres: open: parameter %q not allowed; sslmode must be disabled because the underlying dialer is already providing TLS", k) } } // sslmode must be disabled because the underlying dialer is already providing TLS. query.Set("sslmode", "disable") u2 := new(url.URL) *u2 = *u u2.Scheme = "postgres" u2.RawQuery = query.Encode() db := sql.OpenDB(connector{ provider: source, pqConn: u2.String(), traceOpts: append([]ocsql.TraceOption(nil), uo.TraceOpts...), }) return db, nil } type pqDriver struct { provider rds.CertPoolProvider traceOpts []ocsql.TraceOption } func (d pqDriver) Open(name string) (driver.Conn, error) { c, _ := d.OpenConnector(name) return c.Connect(context.Background()) } func (d pqDriver) OpenConnector(name string) (driver.Connector, error) { return connector{d.provider, name + " sslmode=disable", d.traceOpts}, nil } type connector struct { provider rds.CertPoolProvider pqConn string traceOpts []ocsql.TraceOption } func (c connector) Connect(context.Context) (driver.Conn, error) { conn, err := pq.DialOpen(dialer{c.provider}, c.pqConn) if err != nil { return nil, err } return ocsql.WrapConn(conn, c.traceOpts...), nil } func (c connector) Driver() driver.Driver { return pqDriver{c.provider, c.traceOpts} } type dialer struct { provider rds.CertPoolProvider } func (d dialer) dial(ctx context.Context, network, address string) (net.Conn, error) { host, _, err := net.SplitHostPort(address) if err != nil { return nil, fmt.Errorf("awspostgres: parse address: %v", err) } certPool, err := d.provider.RDSCertPool(ctx) if err != nil { return nil, err } conn, err := new(net.Dialer).DialContext(ctx, network, address) if err != nil { return nil, err } // Write the PostgreSQL SSLRequest message described in // https://www.postgresql.org/docs/11/protocol-message-formats.html // to upgrade to a TLS connection. _, err = conn.Write([]byte{ // Message length (Int32), including message length. 0x00, 0x00, 0x00, 0x08, // Magic number: 80877103. 0x04, 0xd2, 0x16, 0x2f, }) if err != nil { return nil, err } // Server must respond back with 'S'. var readBuf [1]byte if _, err := io.ReadFull(conn, readBuf[:]); err != nil { return nil, err } if readBuf[0] != 'S' { return nil, pq.ErrSSLNotSupported } // Begin TLS communication. crypt := tls.Client(conn, &tls.Config{ ServerName: host, RootCAs: certPool, Renegotiation: tls.RenegotiateFreelyAsClient, }) if err := crypt.Handshake(); err != nil { return nil, err } return crypt, nil } func (d dialer) Dial(network, address string) (net.Conn, error) { return d.dial(context.Background(), network, address) } func (d dialer) DialTimeout(network, address string, timeout time.Duration) (net.Conn, error) { ctx, cancel := context.WithTimeout(context.Background(), timeout) conn, err := d.dial(ctx, network, address) cancel() return conn, err } go-cloud-0.20.0/postgres/awspostgres/awspostgres_test.go000066400000000000000000000063451367004507500235170ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awspostgres import ( "context" "fmt" "testing" "gocloud.dev/internal/testing/terraform" "gocloud.dev/postgres" ) func TestURLOpener(t *testing.T) { // This test will be skipped unless the project is set up with Terraform. // Before running go test, run in this directory: // // terraform init // terraform apply tfOut, err := terraform.ReadOutput(".") if err != nil || len(tfOut) == 0 { t.Skipf("Could not obtain harness info: %v", err) } endpoint, _ := tfOut["endpoint"].Value.(string) username, _ := tfOut["username"].Value.(string) password, _ := tfOut["password"].Value.(string) databaseName, _ := tfOut["database"].Value.(string) if endpoint == "" || username == "" || databaseName == "" { t.Fatalf("Missing one or more required Terraform outputs; got endpoint=%q username=%q database=%q", endpoint, username, databaseName) } tests := []struct { urlstr string wantErr bool wantPingErr bool }{ // OK. {fmt.Sprintf("awspostgres://%s:%s@%s/%s", username, password, endpoint, databaseName), false, false}, // Invalid URL parameters: db creation fails. {fmt.Sprintf("awspostgres://%s:%s@%s/%s?sslcert=foo", username, password, endpoint, databaseName), true, false}, {fmt.Sprintf("awspostgres://%s:%s@%s/%s?sslkey=foo", username, password, endpoint, databaseName), true, false}, {fmt.Sprintf("awspostgres://%s:%s@%s/%s?sslrootcert=foo", username, password, endpoint, databaseName), true, false}, {fmt.Sprintf("awspostgres://%s:%s@%s/%s?sslmode=require", username, password, endpoint, databaseName), true, false}, // Invalid connection info: db is created, but Ping fails. {fmt.Sprintf("awspostgres://%s:badpwd@%s/%s", username, endpoint, databaseName), false, true}, {fmt.Sprintf("awspostgres://badusername:%s@%s/%s", password, endpoint, databaseName), false, true}, {fmt.Sprintf("awspostgres://%s:%s@localhost:9999/%s", username, password, databaseName), false, true}, {fmt.Sprintf("awspostgres://%s:%s@%s/wrongdbname", username, password, endpoint), false, true}, {fmt.Sprintf("awspostgres://%s:%s@%s/%s?foo=bar", username, password, endpoint, databaseName), false, true}, } ctx := context.Background() for _, test := range tests { t.Run(test.urlstr, func(t *testing.T) { db, err := postgres.Open(ctx, test.urlstr) if err != nil != test.wantErr { t.Fatalf("got err %v, wanted error? %v", err, test.wantErr) } if err != nil { return } defer func() { if err := db.Close(); err != nil { t.Error("Close:", err) } }() err = db.Ping() if err != nil != test.wantPingErr { t.Errorf("ping got err %v, wanted error? %v", err, test.wantPingErr) } }) } } go-cloud-0.20.0/postgres/awspostgres/example_test.go000066400000000000000000000025031367004507500225610ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awspostgres_test import ( "context" "log" "gocloud.dev/postgres" _ "gocloud.dev/postgres/awspostgres" ) func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/postgres/awspostgres" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Replace these with your actual settings. db, err := postgres.Open(ctx, "awspostgres://myrole:swordfish@example01.xyzzy.us-west-1.rds.amazonaws.com/testdb") if err != nil { log.Fatal(err) } defer db.Close() // Use database in your program. db.ExecContext(ctx, "CREATE TABLE foo (bar INT);") } go-cloud-0.20.0/postgres/awspostgres/main.tf000066400000000000000000000053351367004507500210250ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Harness for RDS PostgreSQL tests. terraform { required_version = "~>0.12" } provider "aws" { version = "~> 2.7" region = var.region } provider "random" { version = "~> 2.1" } variable "region" { type = string description = "Region to create resources in. See https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html for valid values." } resource "aws_security_group" "main" { name_prefix = "testdb" description = "Security group for the Go CDK Postgres test database." ingress { from_port = 5432 to_port = 5432 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] description = "Public Postgres access" } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] description = "All outgoing traffic allowed" } } resource "random_string" "db_password" { keepers = { region = var.region } special = false length = 20 } resource "aws_db_instance" "main" { identifier_prefix = "go-cloud-test" engine = "postgres" engine_version = "10.5" instance_class = "db.t2.micro" allocated_storage = 20 username = "root" password = random_string.db_password.result name = "testdb" publicly_accessible = true vpc_security_group_ids = [aws_security_group.main.id] skip_final_snapshot = true parameter_group_name = aws_db_parameter_group.main.name } resource "aws_db_parameter_group" "main" { name_prefix = "go-cloud-test" family = "postgres10" parameter { name = "rds.force_ssl" value = "1" } } output "endpoint" { value = aws_db_instance.main.endpoint description = "The RDS instance's host/port." } output "username" { value = "root" description = "The PostgreSQL username to connect with." } output "password" { value = random_string.db_password.result sensitive = true description = "The RDS instance password for the user." } output "database" { value = "testdb" description = "The name of the database inside the RDS instance." } go-cloud-0.20.0/postgres/example_test.go000066400000000000000000000022221367004507500201760ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package postgres_test import ( "context" "log" "gocloud.dev/postgres" ) func ExampleOpen() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Replace this with your actual settings. db, err := postgres.Open(ctx, "postgres://user:password@localhost/testdb") if err != nil { log.Fatal(err) } defer db.Close() // Use database in your program. db.Exec("CREATE TABLE foo (bar INT);") } go-cloud-0.20.0/postgres/gcppostgres/000077500000000000000000000000001367004507500175175ustar00rootroot00000000000000go-cloud-0.20.0/postgres/gcppostgres/example_test.go000066400000000000000000000024541367004507500225450ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcppostgres_test import ( "context" "log" "gocloud.dev/postgres" _ "gocloud.dev/postgres/gcppostgres" ) func Example() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/postgres/gcppostgres" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Replace this with your actual settings. db, err := postgres.Open(ctx, "gcppostgres://user:password@example-project/region/my-instance01/testdb") if err != nil { log.Fatal(err) } defer db.Close() // Use database in your program. db.Exec("CREATE TABLE foo (bar INT);") } go-cloud-0.20.0/postgres/gcppostgres/gcppostgres.go000066400000000000000000000130521367004507500224070ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcppostgres provides connections to managed PostgreSQL Cloud SQL instances. // See https://cloud.google.com/sql/docs/postgres/ for more information. // // URLs // // For postgres.Open, gcppostgres registers for the scheme "gcppostgres". // The default URL opener will create a connection using the default // credentials from the environment, as described in // https://cloud.google.com/docs/authentication/production. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // // See https://gocloud.dev/concepts/urls/ for background information. package gcppostgres // import "gocloud.dev/postgres/gcppostgres" import ( "context" "database/sql" "database/sql/driver" "errors" "fmt" "net" "net/url" "strings" "sync" "time" "contrib.go.opencensus.io/integrations/ocsql" "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/proxy" "github.com/lib/pq" "gocloud.dev/gcp" "gocloud.dev/gcp/cloudsql" "gocloud.dev/postgres" ) // Scheme is the URL scheme gcppostgres registers its URLOpener under on // postgres.DefaultMux. const Scheme = "gcppostgres" func init() { postgres.DefaultURLMux().RegisterPostgres(Scheme, new(lazyCredsOpener)) } // lazyCredsOpener obtains Application Default Credentials on the first call // to OpenPostgresURL. type lazyCredsOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyCredsOpener) OpenPostgresURL(ctx context.Context, u *url.URL) (*sql.DB, error) { o.init.Do(func() { creds, err := gcp.DefaultCredentials(ctx) if err != nil { o.err = err return } client, err := gcp.NewHTTPClient(gcp.DefaultTransport(), creds.TokenSource) if err != nil { o.err = err return } certSource := cloudsql.NewCertSource(client) o.opener = &URLOpener{CertSource: certSource} }) if o.err != nil { return nil, fmt.Errorf("gcppostgres open %v: %v", u, o.err) } return o.opener.OpenPostgresURL(ctx, u) } // URLOpener opens GCP PostgreSQL URLs // like "gcppostgres://user:password@myproject/us-central1/instanceId/mydb". type URLOpener struct { // CertSource specifies how the opener will obtain authentication information. // CertSource must not be nil. CertSource proxy.CertSource // TraceOpts contains options for OpenCensus. TraceOpts []ocsql.TraceOption } // OpenPostgresURL opens a new GCP database connection wrapped with OpenCensus instrumentation. func (uo *URLOpener) OpenPostgresURL(ctx context.Context, u *url.URL) (*sql.DB, error) { if uo.CertSource == nil { return nil, fmt.Errorf("gcppostgres: URLOpener CertSource is nil") } instance, dbName, err := instanceFromURL(u) if err != nil { return nil, fmt.Errorf("gcppostgres: open %v: %v", u, err) } query := u.Query() for k := range query { // Only permit parameters that do not conflict with other behavior. if k == "sslmode" || k == "sslcert" || k == "sslkey" || k == "sslrootcert" { return nil, fmt.Errorf("gcppostgres: open: extra parameter %s not allowed", k) } } query.Set("sslmode", "disable") u2 := new(url.URL) *u2 = *u u2.Scheme = "postgres" u2.Host = "cloudsql" u2.Path = "/" + dbName u2.RawQuery = query.Encode() db := sql.OpenDB(connector{ client: &proxy.Client{ Port: 3307, Certs: uo.CertSource, }, instance: instance, pqConn: u2.String(), traceOpts: append([]ocsql.TraceOption(nil), uo.TraceOpts...), }) return db, nil } func instanceFromURL(u *url.URL) (instance, db string, _ error) { path := u.Host + u.Path // everything after scheme but before query or fragment parts := strings.SplitN(path, "/", 4) if len(parts) < 4 { return "", "", fmt.Errorf("%s is not in the form project/region/instance/dbname", path) } for _, part := range parts { if part == "" { return "", "", fmt.Errorf("%s is not in the form project/region/instance/dbname", path) } } return parts[0] + ":" + parts[1] + ":" + parts[2], parts[3], nil } type pqDriver struct { client *proxy.Client instance string traceOpts []ocsql.TraceOption } func (d pqDriver) Open(name string) (driver.Conn, error) { c, _ := d.OpenConnector(name) return c.Connect(context.Background()) } func (d pqDriver) OpenConnector(name string) (driver.Connector, error) { return connector{d.client, d.instance, name, d.traceOpts}, nil } type connector struct { client *proxy.Client instance string pqConn string traceOpts []ocsql.TraceOption } func (c connector) Connect(context.Context) (driver.Conn, error) { conn, err := pq.DialOpen(dialer{c.client, c.instance}, c.pqConn) if err != nil { return nil, err } return ocsql.WrapConn(conn, c.traceOpts...), nil } func (c connector) Driver() driver.Driver { return pqDriver{c.client, c.instance, c.traceOpts} } type dialer struct { client *proxy.Client instance string } func (d dialer) Dial(network, address string) (net.Conn, error) { return d.client.Dial(d.instance) } func (d dialer) DialTimeout(network, address string, timeout time.Duration) (net.Conn, error) { return nil, errors.New("gcppostgres: DialTimeout not supported") } go-cloud-0.20.0/postgres/gcppostgres/gcppostgres_test.go000066400000000000000000000111351367004507500234460ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcppostgres import ( "context" "fmt" "net/url" "testing" "gocloud.dev/internal/testing/terraform" "gocloud.dev/postgres" ) func TestURLOpener(t *testing.T) { // This test will be skipped unless the project is set up with Terraform. // Before running go test, run in this directory: // // terraform init // terraform apply tfOut, err := terraform.ReadOutput(".") if err != nil || len(tfOut) == 0 { t.Skipf("Could not obtain harness info: %v", err) } project, _ := tfOut["project"].Value.(string) region, _ := tfOut["region"].Value.(string) instance, _ := tfOut["instance"].Value.(string) username, _ := tfOut["username"].Value.(string) password, _ := tfOut["password"].Value.(string) databaseName, _ := tfOut["database"].Value.(string) if project == "" || region == "" || instance == "" || username == "" || databaseName == "" { t.Fatalf("Missing one or more required Terraform outputs; got project=%q region=%q instance=%q username=%q database=%q", project, region, instance, username, databaseName) } tests := []struct { name string urlstr string wantErr bool }{ { name: "Success", urlstr: fmt.Sprintf("gcppostgres://%s:%s@%s/%s/%s/%s", username, password, project, region, instance, databaseName), }, { name: "SSLModeForbidden", urlstr: fmt.Sprintf("gcppostgres://%s:%s@%s/%s/%s/%s?sslmode=require", username, password, project, region, instance, databaseName), wantErr: true, }, } ctx := context.Background() for _, test := range tests { t.Run(test.name, func(t *testing.T) { db, err := postgres.Open(ctx, test.urlstr) if err != nil { t.Log(err) if !test.wantErr { t.Fail() } return } if test.wantErr { db.Close() t.Fatal("Open succeeded; want error") } if err := db.Ping(); err != nil { t.Error("Ping:", err) } if err := db.Close(); err != nil { t.Error("Close:", err) } }) } } func TestInstanceFromURL(t *testing.T) { tests := []struct { name string urlString string wantInstance string wantDatabase string wantErr bool }{ { name: "AllValuesSpecified", urlString: "gcppostgres://username:password@my-project-id/us-central1/my-instance-id/my-db?foo=bar&baz=quux", wantInstance: "my-project-id:us-central1:my-instance-id", wantDatabase: "my-db", }, { name: "OptionalValuesOmitted", urlString: "gcppostgres://my-project-id/us-central1/my-instance-id/my-db", wantInstance: "my-project-id:us-central1:my-instance-id", wantDatabase: "my-db", }, { name: "DatabaseNameEmpty", urlString: "gcppostgres://my-project-id/us-central1/my-instance-id/", wantErr: true, }, { name: "InstanceEmpty", urlString: "gcppostgres://my-project-id/us-central1//my-db", wantErr: true, }, { name: "RegionEmpty", urlString: "gcppostgres://my-project-id//my-instance-id/my-db", wantErr: true, }, { name: "ProjectEmpty", urlString: "gcppostgres:///us-central1/my-instance-id/my-db", wantErr: true, }, { name: "DatabaseNameWithSlashes", urlString: "gcppostgres://my-project-id/us-central1/my-instance-id/foo/bar/baz", wantInstance: "my-project-id:us-central1:my-instance-id", wantDatabase: "foo/bar/baz", }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { u, err := url.Parse(test.urlString) if err != nil { t.Fatalf("failed to parse URL %q: %v", test.urlString, err) } instance, database, err := instanceFromURL(u) if err != nil { t.Logf("instanceFromURL(url.Parse(%q)): %v", u, err) if !test.wantErr { t.Fail() } return } if test.wantErr { t.Fatalf("instanceFromURL(url.Parse(%q)) = %q, %q, ; want error", test.urlString, instance, database) } if instance != test.wantInstance || database != test.wantDatabase { t.Errorf("instanceFromURL(url.Parse(%q)) = %q, %q, ; want %q, %q, ", test.urlString, instance, database, test.wantInstance, test.wantDatabase) } }) } } go-cloud-0.20.0/postgres/gcppostgres/main.tf000066400000000000000000000057521367004507500210070ustar00rootroot00000000000000# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Harness for Cloud SQL Postgres tests. terraform { required_version = "~>0.12" } provider "google" { version = "~> 2.5" project = var.project } provider "random" { version = "~> 2.1" } variable "project" { type = string description = "Project to set up." } variable "region" { default = "us-central1" description = "GCP region to create database and storage in, for example 'us-central1'. See https://cloud.google.com/compute/docs/regions-zones/ for valid values." } locals { sql_instance = "go-cloud-test-${random_id.sql_instance.hex}" } resource "google_project_service" "sql" { service = "sql-component.googleapis.com" disable_on_destroy = false } resource "google_project_service" "sqladmin" { service = "sqladmin.googleapis.com" disable_on_destroy = false } resource "random_id" "sql_instance" { keepers = { project = var.project region = var.region } byte_length = 12 } resource "google_sql_database_instance" "main" { name = local.sql_instance database_version = "POSTGRES_9_6" region = var.region project = var.project settings { tier = "db-f1-micro" disk_size = 10 # GiB } depends_on = [ google_project_service.sql, google_project_service.sqladmin, ] } resource "google_sql_database" "main" { name = "testdb" instance = google_sql_database_instance.main.name } resource "random_string" "db_password" { keepers = { project = var.project db_name = local.sql_instance region = var.region } special = false length = 20 } resource "google_sql_user" "root" { name = "root" instance = google_sql_database_instance.main.name password = random_string.db_password.result } output "project" { value = var.project description = "The GCP project ID." } output "region" { value = var.region description = "The Cloud SQL instance region." } output "instance" { value = local.sql_instance description = "The Cloud SQL instance region." } output "username" { value = "root" description = "The Cloud SQL username to connect with." } output "password" { value = random_string.db_password.result sensitive = true description = "The Cloud SQL instance password for the user." } output "database" { value = "testdb" description = "The name of the database inside the Cloud SQL instance." } go-cloud-0.20.0/postgres/postgres.go000066400000000000000000000100601367004507500173510ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package postgres provides functions to open PostgreSQL databases with OpenCensus instrumentation. package postgres import ( "context" "database/sql" "database/sql/driver" "net/url" "github.com/lib/pq" "gocloud.dev/internal/openurl" "contrib.go.opencensus.io/integrations/ocsql" ) // Scheme is the URL scheme this package registers its URLOpener under on // DefaultMux. const Scheme = "postgres" func init() { DefaultURLMux().RegisterPostgres(Scheme, &URLOpener{}) } // URLOpener opens URLs like "postgres://" by using the underlying PostgreSQL driver. // See https://godoc.org/github.com/lib/pq#hdr-Connection_String_Parameters for details. type URLOpener struct{} // OpenPostgresURL opens a new database connection wrapped with OpenCensus instrumentation. func (*URLOpener) OpenPostgresURL(ctx context.Context, u *url.URL) (*sql.DB, error) { u2 := new(url.URL) *u2 = *u u2.Scheme = "postgres" return sql.OpenDB(connector{dsn: u2.String()}), nil } type connector struct { dsn string } func (c connector) Connect(ctx context.Context) (driver.Conn, error) { return c.Driver().Open(c.dsn) } func (c connector) Driver() driver.Driver { return ocsql.Wrap(&pq.Driver{}) } // A type that implements PostgresURLOpener can open connection based on a URL. // The opener must not modify the URL argument. OpenPostgresURL must be safe to // call from multiple goroutines. // // This interface is generally implemented by types in driver packages. type PostgresURLOpener interface { OpenPostgresURL(ctx context.Context, u *url.URL) (*sql.DB, error) } // URLMux is a URL opener multiplexer. It matches the scheme of the URLs // against a set of registered schemes and calls the opener that matches the // URL's scheme. // // The zero value is a multiplexer with no registered schemes. type URLMux struct { schemes openurl.SchemeMap } // RegisterPostgres registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterPostgres panics. func (mux *URLMux) RegisterPostgres(scheme string, opener PostgresURLOpener) { mux.schemes.Register("postgres", "DB", scheme, opener) } // OpenPostgres calls OpenPostgresURL with the URL parsed from urlstr. // OpenPostgres is safe to call from multiple goroutines. func (mux *URLMux) OpenPostgres(ctx context.Context, urlstr string) (*sql.DB, error) { opener, u, err := mux.schemes.FromString("DB", urlstr) if err != nil { return nil, err } return opener.(PostgresURLOpener).OpenPostgresURL(ctx, u) } // OpenPostgresURL dispatches the URL to the opener that is registered with the // URL's scheme. OpenPostgresURL is safe to call from multiple goroutines. func (mux *URLMux) OpenPostgresURL(ctx context.Context, u *url.URL) (*sql.DB, error) { opener, err := mux.schemes.FromURL("DB", u) if err != nil { return nil, err } return opener.(PostgresURLOpener).OpenPostgresURL(ctx, u) } var defaultURLMux = new(URLMux) // DefaultURLMux returns the URLMux used by OpenPostgres. // // Driver packages can use this to register their PostgresURLOpener on the mux. func DefaultURLMux() *URLMux { return defaultURLMux } // Open opens the bucket identified by the URL given. URL openers must be // registered in the DefaultURLMux, which is typically done in driver // packages' initialization. // // See the URLOpener documentation in driver subpackages for more // details on supported scheme(s) and URL parameter(s). func Open(ctx context.Context, urlstr string) (*sql.DB, error) { return defaultURLMux.OpenPostgres(ctx, urlstr) } go-cloud-0.20.0/postgres/postgres_test.go000066400000000000000000000074521367004507500204230ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package postgres import ( "bytes" "context" "fmt" "io/ioutil" "net/url" "os" "os/exec" "os/user" "path/filepath" "runtime" "testing" "time" ) func TestOpen(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("Can't use Unix sockets on Windows") } postgresPath, err := exec.LookPath("postgres") if err != nil { t.Skip("Can't find postgres:", err) } initdbPath, err := exec.LookPath("initdb") if err != nil { t.Skip("Can't find initdb:", err) } // Create a temporary database data directory. currUser, err := user.Current() if err != nil { t.Fatal(err) } dir, err := ioutil.TempDir("", "gocloud_postgres_test") if err != nil { t.Fatal(err) } defer func() { if err := os.RemoveAll(dir); err != nil { t.Errorf("Cleaning up: %v", err) } }() dataDir := filepath.Join(dir, "data") initdbCmd := exec.Command(initdbPath, "-U", currUser.Username, "-D", dataDir) initdbOutput := new(bytes.Buffer) initdbCmd.Stdout = initdbOutput initdbCmd.Stderr = initdbOutput err = initdbCmd.Run() if err != nil { t.Log(initdbOutput) t.Fatal(err) } // Configure the database server to listen on a Unix socket located in the temporary directory. socketDir, err := filepath.Abs(filepath.Join(dir, "socket")) if err != nil { t.Fatal(err) } if err := os.Mkdir(socketDir, 0777); err != nil { t.Fatal(err) } confData := new(bytes.Buffer) fmt.Fprintf(confData, "unix_socket_directories = '%s'\n", socketDir) err = ioutil.WriteFile(filepath.Join(dataDir, "postgresql.conf"), confData.Bytes(), 0666) if err != nil { t.Fatal(err) } // Start the database server (and arrange for it to be stopped at test end). server := exec.Command(postgresPath, "-D", dataDir) serverOutput := new(bytes.Buffer) server.Stdout = serverOutput server.Stderr = serverOutput if err := server.Start(); err != nil { t.Fatal(err) } serverSignaled := false defer func() { if !serverSignaled { if err := server.Process.Kill(); err != nil { t.Error("Stopping server:", err) } } // Wait for server to exit, but ignore the expected failure error code. server.Wait() if t.Failed() { t.Log(serverOutput) } }() // Now the actual test: can we connect to the database via URL opener? ctx := context.Background() dbURL := &url.URL{ Scheme: "blablabla", // Intentionally not "postgres" to ensure any scheme works. User: url.User(currUser.Username), Path: "/postgres", // Use the query parameter to avoid https://github.com/lib/pq/issues/796 RawQuery: url.Values{"host": {socketDir}}.Encode(), } t.Logf("PostgreSQL URL: %s", dbURL) db, err := new(URLOpener).OpenPostgresURL(ctx, dbURL) if err != nil { t.Fatal(err) } // Developing a realistic query would be hard, so instead we trust that the // PostgreSQL library reports healthy correctly. Since there's no way to // synchronize the server start and the ping, we might have to ping a few // times before it is healthy. (The overall test runner timeout will interrupt // if this takes too long.) for { err := db.Ping() if err == nil { break } t.Log("Ping:", err) time.Sleep(100 * time.Millisecond) } if err := db.Close(); err != nil { t.Error("Close:", err) } server.Process.Signal(os.Interrupt) serverSignaled = true } go-cloud-0.20.0/pubsub/000077500000000000000000000000001367004507500146115ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/acks_test.go000066400000000000000000000267651367004507500171400ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pubsub_test import ( "context" "errors" "math/rand" "sync" "testing" "time" "golang.org/x/xerrors" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" ) type ackingDriverSub struct { driver.Subscription q []*driver.Message sendAcks func(context.Context, []driver.AckID) error } func (s *ackingDriverSub) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { if len(s.q) <= maxMessages { ms := s.q s.q = nil return ms, nil } ms := s.q[:maxMessages] s.q = s.q[maxMessages:] return ms, nil } func (s *ackingDriverSub) SendAcks(ctx context.Context, ackIDs []driver.AckID) error { return s.sendAcks(ctx, ackIDs) } func (*ackingDriverSub) IsRetryable(error) bool { return false } func (*ackingDriverSub) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.Internal } func (*ackingDriverSub) CanNack() bool { return false } func (*ackingDriverSub) Close() error { return nil } func TestAckTriggersDriverSendAcksForOneMessage(t *testing.T) { ctx := context.Background() var mu sync.Mutex var sentAcks []driver.AckID id := rand.Int() m := &driver.Message{AckID: id} ackChan := make(chan struct{}) ds := &ackingDriverSub{ q: []*driver.Message{m}, sendAcks: func(_ context.Context, ackIDs []driver.AckID) error { mu.Lock() defer mu.Unlock() sentAcks = ackIDs ackChan <- struct{}{} return nil }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) m2, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } m2.Ack() <-ackChan if len(sentAcks) != 1 { t.Fatalf("len(sentAcks) = %d, want exactly 1", len(sentAcks)) } if sentAcks[0] != id { t.Errorf("sentAcks[0] = %d, want %d", sentAcks[0], id) } } func TestMultipleAcksCanGoIntoASingleBatch(t *testing.T) { ctx := context.Background() var wg sync.WaitGroup var mu sync.Mutex sentAcks := make(map[driver.AckID]int) ids := []int{1, 2} ds := &ackingDriverSub{ q: []*driver.Message{{AckID: ids[0]}, {AckID: ids[1]}}, sendAcks: func(_ context.Context, ackIDs []driver.AckID) error { mu.Lock() defer mu.Unlock() for _, id := range ackIDs { sentAcks[id]++ wg.Done() } return nil }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) // Receive and ack the messages concurrently. for i := 0; i < 2; i++ { wg.Add(1) go func() { mr, err := sub.Receive(ctx) if err != nil { t.Error(err) return } mr.Ack() }() } wg.Wait() if len(sentAcks) != 2 { t.Errorf("len(sentAcks) = %d, want exactly 2", len(sentAcks)) } for _, id := range ids { if sentAcks[id] != 1 { t.Errorf("sentAcks[%v] = %d, want 1", id, sentAcks[id]) } } } func TestTooManyAcksForASingleBatchGoIntoMultipleBatches(t *testing.T) { ctx := context.Background() var mu sync.Mutex var wg sync.WaitGroup var sentAckBatches [][]driver.AckID // This value of n is chosen large enough that it should create more // than one batch. Admittedly, there is currently no explicit guarantee // of this. n := 1000 var ms []*driver.Message for i := 0; i < n; i++ { ms = append(ms, &driver.Message{AckID: i}) } ds := &ackingDriverSub{ q: ms, sendAcks: func(_ context.Context, ackIDs []driver.AckID) error { mu.Lock() defer mu.Unlock() sentAckBatches = append(sentAckBatches, ackIDs) for i := 0; i < len(ackIDs); i++ { wg.Done() } return nil }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) // Receive and ack the messages concurrently. recv := func() { mr, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } mr.Ack() } wg.Add(n) for i := 0; i < n; i++ { go recv() } wg.Wait() if len(sentAckBatches) < 2 { t.Errorf("got %d batches, want at least 2", len(sentAckBatches)) } } func TestAckDoesNotBlock(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) m := &driver.Message{AckID: 0} // the batcher doesn't like nil interfaces ds := &ackingDriverSub{ q: []*driver.Message{m}, sendAcks: func(_ context.Context, ackIDs []driver.AckID) error { <-ctx.Done() return nil }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) defer cancel() mr, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } // If Ack blocks here, waiting for sendAcks to finish, then the // deferred cancel() will never run, so sendAcks can never finish. That // would cause the test to hang. Thus hanging is how this test signals // failure. mr.Ack() } func TestDoubleAckCausesPanic(t *testing.T) { ctx := context.Background() m := &driver.Message{AckID: 0} // the batcher doesn't like nil interfaces ds := &ackingDriverSub{ q: []*driver.Message{m}, sendAcks: func(_ context.Context, ackIDs []driver.AckID) error { return nil }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) mr, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } mr.Ack() defer func() { if r := recover(); r != nil { // ok, panic was expected. return } t.Errorf("second ack failed to panic") }() mr.Ack() } // For best results, run this test with -race. func TestConcurrentDoubleAckCausesPanic(t *testing.T) { ctx := context.Background() m := &driver.Message{AckID: 0} // the batcher doesn't like nil interfaces ds := &ackingDriverSub{ q: []*driver.Message{m}, sendAcks: func(_ context.Context, ackIDs []driver.AckID) error { return nil }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) mr, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } // Spin up some goroutines to ack the message. var mu sync.Mutex panics := 0 var wg sync.WaitGroup for i := 0; i < 2; i++ { wg.Add(1) go func() { defer wg.Done() defer func() { if r := recover(); r != nil { mu.Lock() defer mu.Unlock() panics++ } }() mr.Ack() }() } wg.Wait() // Check that one of the goroutines panicked. if panics != 1 { t.Errorf("panics = %d, want %d", panics, 1) } } func TestSubShutdownCanBeCanceledEvenWithHangingSendAcks(t *testing.T) { ctx := context.Background() m := &driver.Message{AckID: 0} // the batcher doesn't like nil interfaces ds := &ackingDriverSub{ q: []*driver.Message{m}, sendAcks: func(ctx context.Context, ackIDs []driver.AckID) error { <-ctx.Done() return ctx.Err() }, } sub := pubsub.NewSubscription(ds, nil, nil) mr, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } mr.Ack() done := make(chan struct{}) go func() { ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) defer cancel() sub.Shutdown(ctx) close(done) }() tooLong := 5 * time.Second select { case <-done: case <-time.After(tooLong): t.Fatalf("waited too long (%v) for Shutdown to run", tooLong) } } func TestReceiveReturnsErrorFromSendAcks(t *testing.T) { // If SendAcks fails, the error is returned via receive. ctx := context.Background() serr := errors.New("SendAcks failed") ackChan := make(chan struct{}) ds := &ackingDriverSub{ q: []*driver.Message{ {AckID: 0}, {AckID: 1}, {AckID: 2}, {AckID: 3}, }, sendAcks: func(context.Context, []driver.AckID) error { close(ackChan) return serr }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) m, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } m.Ack() // Wait for the ack to be sent. <-ackChan // It might take a bit longer for the logic after SendAcks returns to happen, so // keep calling Receive. ctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() for { _, err = sub.Receive(ctx) if gcerrors.Code(err) == gcerrors.Internal && err.(*gcerr.Error).Unwrap() == serr { break // success } if err != nil { t.Fatalf("got %v, want %v", err, serr) } } } // callbackDriverSub implements driver.Subscription and allows something like // monkey patching of both its ReceiveBatch and SendAcks methods. type callbackDriverSub struct { driver.Subscription mu sync.Mutex receiveBatch func(context.Context) ([]*driver.Message, error) sendAcks func(context.Context, []driver.AckID) error } func (s *callbackDriverSub) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { return s.receiveBatch(ctx) } func (s *callbackDriverSub) SendAcks(ctx context.Context, acks []driver.AckID) error { return s.sendAcks(ctx, acks) } func (*callbackDriverSub) IsRetryable(error) bool { return false } func (*callbackDriverSub) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.Internal } func (*callbackDriverSub) CanNack() bool { return false } func (*callbackDriverSub) Close() error { return nil } // This test detects the root cause of // https://github.com/google/go-cloud/issues/1238. // If the issue is present, this test times out. The problem was that when // there were no messages available from the driver, // pubsub.Subscription.Receive would spin trying to get more messages without // checking to see if an unrecoverable error had occurred while sending a batch // of acks to the driver. func TestReceiveReturnsAckErrorOnNoMoreMessages(t *testing.T) { // If SendAcks fails, the error is returned via receive. ctx := context.Background() serr := errors.New("unrecoverable error") receiveHappened := make(chan struct{}) ackHappened := make(chan struct{}) var ds = &callbackDriverSub{ // First call to receiveBatch will return a single message. receiveBatch: func(context.Context) ([]*driver.Message, error) { ms := []*driver.Message{{AckID: 1}} return ms, nil }, sendAcks: func(context.Context, []driver.AckID) error { ackHappened <- struct{}{} return serr }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) m, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } m.Ack() // Second call to receiveBatch will wait for the pull from the // receiveHappened channel below, and return a nil slice of messages. ds.mu.Lock() ds.receiveBatch = func(context.Context) ([]*driver.Message, error) { ds.mu.Lock() // Subsequent calls to receiveBatch won't wait on receiveHappened, // and will also return nil slices of messages. ds.receiveBatch = func(context.Context) ([]*driver.Message, error) { return nil, nil } ds.mu.Unlock() receiveHappened <- struct{}{} return nil, nil } ds.mu.Unlock() errc := make(chan error) go func() { _, err := sub.Receive(ctx) errc <- err }() // sub.Receive has to start running first and then we need to trigger the unrecoverable error. <-receiveHappened // Trigger the unrecoverable error. <-ackHappened // Wait for sub.Receive to return so we can check the error it returns against serr. err = <-errc // Check the error returned from sub.Receive. if got := gcerrors.Code(err); got != gcerrors.Internal { t.Fatalf("error code = %v; want %v", got, gcerrors.Internal) } if got := xerrors.Unwrap(err); got != serr { t.Errorf("error = %v; want %v", got, serr) } } go-cloud-0.20.0/pubsub/awssnssqs/000077500000000000000000000000001367004507500166565ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/awssnssqs.go000066400000000000000000000715001367004507500212550ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package awssnssqs provides two implementations of pubsub.Topic, one that // sends messages to AWS SNS (Simple Notification Service), and one that sends // messages to SQS (Simple Queuing Service). It also provides an implementation // of pubsub.Subscription that receives messages from SQS. // // URLs // // For pubsub.OpenTopic, awssnssqs registers for the scheme "awssns" for // an SNS topic, and "awssqs" for an SQS topic. For pubsub.OpenSubscription, // it registers for the scheme "awssqs". // // The default URL opener will use an AWS session with the default credentials // and configuration; see https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ // for more details. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Message Delivery Semantics // // AWS SQS supports at-least-once semantics; applications must call Message.Ack // after processing a message, or it will be redelivered. // See https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // for more background. // // Escaping // // Go CDK supports all UTF-8 strings; to make this work with services lacking // full UTF-8 support, strings must be escaped (during writes) and unescaped // (during reads). The following escapes are required for awssnssqs: // - Metadata keys: Characters other than "a-zA-z0-9_-.", and additionally "." // when it's at the start of the key or the previous character was ".", // are escaped using "__0x__". These characters were determined by // experimentation. // - Metadata values: Escaped using URL encoding. // - Message body: AWS SNS/SQS only supports UTF-8 strings. See the // BodyBase64Encoding enum in TopicOptions for strategies on how to send // non-UTF-8 message bodies. By default, non-UTF-8 message bodies are base64 // encoded. // // As // // awssnssqs exposes the following types for As: // - Topic: *sns.SNS for OpenSNSTopic; *sqs.SQS for OpenSQSTopic // - Subscription: *sqs.SQS // - Message: *sqs.Message // - Message.BeforeSend: *sns.PublishInput for OpenSNSTopic; *sqs.SendMessageBatchRequestEntry or *sqs.SendMessageInput(deprecated) for OpenSQSTopic // - Error: awserror.Error package awssnssqs // import "gocloud.dev/pubsub/awssnssqs" import ( "context" "encoding/base64" "encoding/json" "fmt" "net/url" "path" "strconv" "strings" "sync" "time" "unicode/utf8" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/service/sns" "github.com/aws/aws-sdk-go/service/sqs" "github.com/google/wire" gcaws "gocloud.dev/aws" "gocloud.dev/gcerrors" "gocloud.dev/internal/escape" "gocloud.dev/pubsub" "gocloud.dev/pubsub/batcher" "gocloud.dev/pubsub/driver" ) const ( // base64EncodedKey is the Message Attribute key used to flag that the // message body is base64 encoded. base64EncodedKey = "base64encoded" // How long ReceiveBatch should wait if no messages are available; controls // the poll interval of requests to SQS. noMessagesPollDuration = 250 * time.Millisecond ) var sendBatcherOptsSNS = &batcher.Options{ MaxBatchSize: 1, // SNS SendBatch only supports one message at a time MaxHandlers: 100, // max concurrency for sends } var sendBatcherOptsSQS = &batcher.Options{ MaxBatchSize: 10, // SQS SendBatch supports 10 messages at a time MaxHandlers: 100, // max concurrency for sends } var recvBatcherOpts = &batcher.Options{ // SQS supports receiving at most 10 messages at a time: // https://godoc.org/github.com/aws/aws-sdk-go/service/sqs#SQS.ReceiveMessage MaxBatchSize: 10, MaxHandlers: 100, // max concurrency for receives } var ackBatcherOpts = &batcher.Options{ // SQS supports deleting/updating at most 10 messages at a time: // https://godoc.org/github.com/aws/aws-sdk-go/service/sqs#SQS.DeleteMessageBatch // https://godoc.org/github.com/aws/aws-sdk-go/service/sqs#SQS.ChangeMessageVisibilityBatch MaxBatchSize: 10, MaxHandlers: 100, // max concurrency for acks } func init() { lazy := new(lazySessionOpener) pubsub.DefaultURLMux().RegisterTopic(SNSScheme, lazy) pubsub.DefaultURLMux().RegisterTopic(SQSScheme, lazy) pubsub.DefaultURLMux().RegisterSubscription(SQSScheme, lazy) } // Set holds Wire providers for this package. var Set = wire.NewSet( wire.Struct(new(URLOpener), "ConfigProvider"), ) // lazySessionOpener obtains the AWS session from the environment on the first // call to OpenXXXURL. type lazySessionOpener struct { init sync.Once opener *URLOpener err error } func (o *lazySessionOpener) defaultOpener() (*URLOpener, error) { o.init.Do(func() { sess, err := gcaws.NewDefaultSession() if err != nil { o.err = err return } o.opener = &URLOpener{ ConfigProvider: sess, } }) return o.opener, o.err } func (o *lazySessionOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { opener, err := o.defaultOpener() if err != nil { return nil, fmt.Errorf("open topic %v: failed to open default session: %v", u, err) } return opener.OpenTopicURL(ctx, u) } func (o *lazySessionOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { opener, err := o.defaultOpener() if err != nil { return nil, fmt.Errorf("open subscription %v: failed to open default session: %v", u, err) } return opener.OpenSubscriptionURL(ctx, u) } // SNSScheme is the URL scheme for pubsub.OpenTopic (for an SNS topic) that // awssnssqs registers its URLOpeners under on pubsub.DefaultMux. const SNSScheme = "awssns" // SQSScheme is the URL scheme for pubsub.OpenTopic (for an SQS topic) and for // pubsub.OpenSubscription that awssnssqs registers its URLOpeners under on // pubsub.DefaultMux. const SQSScheme = "awssqs" // URLOpener opens AWS SNS/SQS URLs like "awssns:///sns-topic-arn" for // SNS topics or "awssqs://sqs-queue-url" for SQS topics and subscriptions. // // For SNS topics, the URL's host+path is used as the topic Amazon Resource Name // (ARN). Since ARNs have ":" in them, and ":" precedes a port in URL // hostnames, leave the host blank and put the ARN in the path // (e.g., "awssns:///arn:aws:service:region:accountid:resourceType/resourcePath"). // // For SQS topics and subscriptions, the URL's host+path is prefixed with // "https://" to create the queue URL. // // The following query parameters are supported: // // - raw (for "awssqs" Subscriptions only): sets SubscriberOptions.Raw. The // value must be parseable by `strconv.ParseBool`. // // See gocloud.dev/aws/ConfigFromURLParams for other query parameters // that affect the default AWS session. type URLOpener struct { // ConfigProvider configures the connection to AWS. ConfigProvider client.ConfigProvider // TopicOptions specifies the options to pass to OpenTopic. TopicOptions TopicOptions // SubscriptionOptions specifies the options to pass to OpenSubscription. SubscriptionOptions SubscriptionOptions } // OpenTopicURL opens a pubsub.Topic based on u. func (o *URLOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { configProvider := &gcaws.ConfigOverrider{ Base: o.ConfigProvider, } overrideCfg, err := gcaws.ConfigFromURLParams(u.Query()) if err != nil { return nil, fmt.Errorf("open topic %v: %v", u, err) } configProvider.Configs = append(configProvider.Configs, overrideCfg) switch u.Scheme { case SNSScheme: // Trim leading "/" if host is empty, so that // awssns:///arn:aws:service:region:accountid:resourceType/resourcePath // gives "arn:..." instead of "/arn:...". topicARN := strings.TrimPrefix(path.Join(u.Host, u.Path), "/") return OpenSNSTopic(ctx, configProvider, topicARN, &o.TopicOptions), nil case SQSScheme: qURL := "https://" + path.Join(u.Host, u.Path) return OpenSQSTopic(ctx, configProvider, qURL, &o.TopicOptions), nil default: return nil, fmt.Errorf("open topic %v: unsupported scheme", u) } } // OpenSubscriptionURL opens a pubsub.Subscription based on u. func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { configProvider := &gcaws.ConfigOverrider{ Base: o.ConfigProvider, } // Clone the options since we might override Raw. opts := o.SubscriptionOptions q := u.Query() if rawStr := q.Get("raw"); rawStr != "" { var err error opts.Raw, err = strconv.ParseBool(rawStr) if err != nil { return nil, fmt.Errorf("invalid value %q for raw: %v", rawStr, err) } q.Del("raw") } overrideCfg, err := gcaws.ConfigFromURLParams(q) if err != nil { return nil, fmt.Errorf("open subscription %v: %v", u, err) } configProvider.Configs = append(configProvider.Configs, overrideCfg) qURL := "https://" + path.Join(u.Host, u.Path) return OpenSubscription(ctx, configProvider, qURL, &opts), nil } type snsTopic struct { client *sns.SNS arn string opts *TopicOptions } // BodyBase64Encoding is an enum of strategies for when to base64 message // bodies. type BodyBase64Encoding int const ( // NonUTF8Only means that message bodies that are valid UTF-8 encodings are // sent as-is. Invalid UTF-8 message bodies are base64 encoded, and a // MessageAttribute with key "base64encoded" is added to the message. // When receiving messages, the "base64encoded" attribute is used to determine // whether to base64 decode, and is then filtered out. NonUTF8Only BodyBase64Encoding = 0 // Always means that all message bodies are base64 encoded. // A MessageAttribute with key "base64encoded" is added to the message. // When receiving messages, the "base64encoded" attribute is used to determine // whether to base64 decode, and is then filtered out. Always BodyBase64Encoding = 1 // Never means that message bodies are never base64 encoded. Non-UTF-8 // bytes in message bodies may be modified by SNS/SQS. Never BodyBase64Encoding = 2 ) func (e BodyBase64Encoding) wantEncode(b []byte) bool { switch e { case Always: return true case Never: return false case NonUTF8Only: return !utf8.Valid(b) } panic("unreachable") } // TopicOptions contains configuration options for topics. type TopicOptions struct { // BodyBase64Encoding determines when message bodies are base64 encoded. // The default is NonUTF8Only. BodyBase64Encoding BodyBase64Encoding } // OpenTopic is a shortcut for OpenSNSTopic, provided for backwards compatibility. func OpenTopic(ctx context.Context, sess client.ConfigProvider, topicARN string, opts *TopicOptions) *pubsub.Topic { return OpenSNSTopic(ctx, sess, topicARN, opts) } // OpenSNSTopic opens a topic that sends to the SNS topic with the given Amazon // Resource Name (ARN). func OpenSNSTopic(ctx context.Context, sess client.ConfigProvider, topicARN string, opts *TopicOptions) *pubsub.Topic { return pubsub.NewTopic(openSNSTopic(ctx, sess, topicARN, opts), sendBatcherOptsSNS) } // openSNSTopic returns the driver for OpenSNSTopic. This function exists so the test // harness can get the driver interface implementation if it needs to. func openSNSTopic(ctx context.Context, sess client.ConfigProvider, topicARN string, opts *TopicOptions) driver.Topic { if opts == nil { opts = &TopicOptions{} } return &snsTopic{ client: sns.New(sess), arn: topicARN, opts: opts, } } var stringDataType = aws.String("String") // encodeMetadata encodes the keys and values of md as needed. func encodeMetadata(md map[string]string) map[string]string { retval := map[string]string{} for k, v := range md { // See the package comments for more details on escaping of metadata // keys & values. k = escape.HexEscape(k, func(runes []rune, i int) bool { c := runes[i] switch { case escape.IsASCIIAlphanumeric(c): return false case c == '_' || c == '-': return false case c == '.' && i != 0 && runes[i-1] != '.': return false } return true }) retval[k] = escape.URLEscape(v) } return retval } // maybeEncodeBody decides whether body should base64-encoded based on opt, and // returns the (possibly encoded) body as a string, along with a boolean // indicating whether encoding occurred. func maybeEncodeBody(body []byte, opt BodyBase64Encoding) (string, bool) { if opt.wantEncode(body) { return base64.StdEncoding.EncodeToString(body), true } return string(body), false } // SendBatch implements driver.Topic.SendBatch. func (t *snsTopic) SendBatch(ctx context.Context, dms []*driver.Message) error { if len(dms) != 1 { panic("snsTopic.SendBatch should only get one message at a time") } dm := dms[0] attrs := map[string]*sns.MessageAttributeValue{} for k, v := range encodeMetadata(dm.Metadata) { attrs[k] = &sns.MessageAttributeValue{ DataType: stringDataType, StringValue: aws.String(v), } } body, didEncode := maybeEncodeBody(dm.Body, t.opts.BodyBase64Encoding) if didEncode { attrs[base64EncodedKey] = &sns.MessageAttributeValue{ DataType: stringDataType, StringValue: aws.String("true"), } } if len(attrs) == 0 { attrs = nil } input := &sns.PublishInput{ Message: aws.String(body), MessageAttributes: attrs, TopicArn: &t.arn, } if dm.BeforeSend != nil { asFunc := func(i interface{}) bool { if p, ok := i.(**sns.PublishInput); ok { *p = input return true } return false } if err := dm.BeforeSend(asFunc); err != nil { return err } } _, err := t.client.PublishWithContext(ctx, input) return err } // IsRetryable implements driver.Topic.IsRetryable. func (t *snsTopic) IsRetryable(error) bool { // The client handles retries. return false } // As implements driver.Topic.As. func (t *snsTopic) As(i interface{}) bool { c, ok := i.(**sns.SNS) if !ok { return false } *c = t.client return true } // ErrorAs implements driver.Topic.ErrorAs. func (t *snsTopic) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } // ErrorCode implements driver.Topic.ErrorCode. func (t *snsTopic) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } // Close implements driver.Topic.Close. func (*snsTopic) Close() error { return nil } type sqsTopic struct { client *sqs.SQS qURL string opts *TopicOptions } // OpenSQSTopic opens a topic that sends to the SQS topic with the given SQS // queue URL. func OpenSQSTopic(ctx context.Context, sess client.ConfigProvider, qURL string, opts *TopicOptions) *pubsub.Topic { return pubsub.NewTopic(openSQSTopic(ctx, sess, qURL, opts), sendBatcherOptsSQS) } // openSQSTopic returns the driver for OpenSQSTopic. This function exists so the test // harness can get the driver interface implementation if it needs to. func openSQSTopic(ctx context.Context, sess client.ConfigProvider, qURL string, opts *TopicOptions) driver.Topic { if opts == nil { opts = &TopicOptions{} } return &sqsTopic{client: sqs.New(sess), qURL: qURL, opts: opts} } // SendBatch implements driver.Topic.SendBatch. func (t *sqsTopic) SendBatch(ctx context.Context, dms []*driver.Message) error { req := &sqs.SendMessageBatchInput{ QueueUrl: aws.String(t.qURL), } for _, dm := range dms { attrs := map[string]*sqs.MessageAttributeValue{} for k, v := range encodeMetadata(dm.Metadata) { attrs[k] = &sqs.MessageAttributeValue{ DataType: stringDataType, StringValue: aws.String(v), } } body, didEncode := maybeEncodeBody(dm.Body, t.opts.BodyBase64Encoding) if didEncode { attrs[base64EncodedKey] = &sqs.MessageAttributeValue{ DataType: stringDataType, StringValue: aws.String("true"), } } if len(attrs) == 0 { attrs = nil } entry := &sqs.SendMessageBatchRequestEntry{ Id: aws.String(strconv.Itoa(len(req.Entries))), MessageAttributes: attrs, MessageBody: aws.String(body), } req.Entries = append(req.Entries, entry) if dm.BeforeSend != nil { // A previous revision used the non-batch API SendMessage, which takes // a *sqs.SendMessageInput. For backwards compatibility for As, continue // to support that type. If it is requested, create a SendMessageInput // with the fields from SendMessageBatchRequestEntry that were set, and // then copy all of the matching fields back after calling dm.BeforeSend. var smi *sqs.SendMessageInput asFunc := func(i interface{}) bool { if p, ok := i.(**sqs.SendMessageInput); ok { smi = &sqs.SendMessageInput{ // Id does not exist on SendMessageInput. MessageAttributes: entry.MessageAttributes, MessageBody: entry.MessageBody, } *p = smi return true } if p, ok := i.(**sqs.SendMessageBatchRequestEntry); ok { *p = entry return true } return false } if err := dm.BeforeSend(asFunc); err != nil { return err } if smi != nil { // Copy all of the fields that may have been modified back to the entry. entry.DelaySeconds = smi.DelaySeconds entry.MessageAttributes = smi.MessageAttributes entry.MessageBody = smi.MessageBody entry.MessageDeduplicationId = smi.MessageDeduplicationId entry.MessageGroupId = smi.MessageGroupId } } } resp, err := t.client.SendMessageBatchWithContext(ctx, req) if err != nil { return err } if numFailed := len(resp.Failed); numFailed > 0 { first := resp.Failed[0] return awserr.New(aws.StringValue(first.Code), fmt.Sprintf("sqs.SendMessageBatch failed for %d message(s): %s", numFailed, aws.StringValue(first.Message)), nil) } return nil } // IsRetryable implements driver.Topic.IsRetryable. func (t *sqsTopic) IsRetryable(error) bool { // The client handles retries. return false } // As implements driver.Topic.As. func (t *sqsTopic) As(i interface{}) bool { c, ok := i.(**sqs.SQS) if !ok { return false } *c = t.client return true } // ErrorAs implements driver.Topic.ErrorAs. func (t *sqsTopic) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } // ErrorCode implements driver.Topic.ErrorCode. func (t *sqsTopic) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } // Close implements driver.Topic.Close. func (*sqsTopic) Close() error { return nil } func errorCode(err error) gcerrors.ErrorCode { ae, ok := err.(awserr.Error) if !ok { return gcerrors.Unknown } ec, ok := errorCodeMap[ae.Code()] if !ok { return gcerrors.Unknown } return ec } var errorCodeMap = map[string]gcerrors.ErrorCode{ sns.ErrCodeAuthorizationErrorException: gcerrors.PermissionDenied, sns.ErrCodeKMSAccessDeniedException: gcerrors.PermissionDenied, sns.ErrCodeKMSDisabledException: gcerrors.FailedPrecondition, sns.ErrCodeKMSInvalidStateException: gcerrors.FailedPrecondition, sns.ErrCodeKMSOptInRequired: gcerrors.FailedPrecondition, sqs.ErrCodeMessageNotInflight: gcerrors.FailedPrecondition, sqs.ErrCodePurgeQueueInProgress: gcerrors.FailedPrecondition, sqs.ErrCodeQueueDeletedRecently: gcerrors.FailedPrecondition, sqs.ErrCodeQueueNameExists: gcerrors.FailedPrecondition, sns.ErrCodeInternalErrorException: gcerrors.Internal, sns.ErrCodeInvalidParameterException: gcerrors.InvalidArgument, sns.ErrCodeInvalidParameterValueException: gcerrors.InvalidArgument, sqs.ErrCodeBatchEntryIdsNotDistinct: gcerrors.InvalidArgument, sqs.ErrCodeBatchRequestTooLong: gcerrors.InvalidArgument, sqs.ErrCodeEmptyBatchRequest: gcerrors.InvalidArgument, sqs.ErrCodeInvalidAttributeName: gcerrors.InvalidArgument, sqs.ErrCodeInvalidBatchEntryId: gcerrors.InvalidArgument, sqs.ErrCodeInvalidIdFormat: gcerrors.InvalidArgument, sqs.ErrCodeInvalidMessageContents: gcerrors.InvalidArgument, sqs.ErrCodeReceiptHandleIsInvalid: gcerrors.InvalidArgument, sqs.ErrCodeTooManyEntriesInBatchRequest: gcerrors.InvalidArgument, sqs.ErrCodeUnsupportedOperation: gcerrors.InvalidArgument, sns.ErrCodeInvalidSecurityException: gcerrors.PermissionDenied, sns.ErrCodeKMSNotFoundException: gcerrors.NotFound, sns.ErrCodeNotFoundException: gcerrors.NotFound, sqs.ErrCodeQueueDoesNotExist: gcerrors.NotFound, sns.ErrCodeFilterPolicyLimitExceededException: gcerrors.ResourceExhausted, sns.ErrCodeSubscriptionLimitExceededException: gcerrors.ResourceExhausted, sns.ErrCodeTopicLimitExceededException: gcerrors.ResourceExhausted, sqs.ErrCodeOverLimit: gcerrors.ResourceExhausted, sns.ErrCodeKMSThrottlingException: gcerrors.ResourceExhausted, sns.ErrCodeThrottledException: gcerrors.ResourceExhausted, "RequestCanceled": gcerrors.Canceled, sns.ErrCodeEndpointDisabledException: gcerrors.Unknown, sns.ErrCodePlatformApplicationDisabledException: gcerrors.Unknown, } type subscription struct { client *sqs.SQS qURL string opts *SubscriptionOptions } // SubscriptionOptions will contain configuration for subscriptions. type SubscriptionOptions struct { // Raw determines how the Subscription will process message bodies. // // If the subscription is expected to process messages sent directly to // SQS, or messages from SNS topics configured to use "raw" delivery, // set this to true. Message bodies will be passed through untouched. // // If false, the Subscription will use best-effort heuristics to // identify whether message bodies are raw or SNS JSON; this may be // inefficient for raw messages. // // See https://aws.amazon.com/sns/faqs/#Raw_message_delivery. Raw bool } // OpenSubscription opens a subscription based on AWS SQS for the given SQS // queue URL. The queue is assumed to be subscribed to some SNS topic, though // there is no check for this. func OpenSubscription(ctx context.Context, sess client.ConfigProvider, qURL string, opts *SubscriptionOptions) *pubsub.Subscription { return pubsub.NewSubscription(openSubscription(ctx, sess, qURL, opts), recvBatcherOpts, ackBatcherOpts) } // openSubscription returns a driver.Subscription. func openSubscription(ctx context.Context, sess client.ConfigProvider, qURL string, opts *SubscriptionOptions) driver.Subscription { if opts == nil { opts = &SubscriptionOptions{} } return &subscription{client: sqs.New(sess), qURL: qURL, opts: opts} } // ReceiveBatch implements driver.Subscription.ReceiveBatch. func (s *subscription) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { output, err := s.client.ReceiveMessageWithContext(ctx, &sqs.ReceiveMessageInput{ QueueUrl: aws.String(s.qURL), MaxNumberOfMessages: aws.Int64(int64(maxMessages)), MessageAttributeNames: []*string{aws.String("All")}, }) if err != nil { return nil, err } var ms []*driver.Message for _, m := range output.Messages { bodyStr, rawAttrs := extractBody(m, s.opts.Raw) decodeIt := false attrs := map[string]string{} for k, v := range rawAttrs { // See BodyBase64Encoding for details on when we base64 decode message bodies. if k == base64EncodedKey { decodeIt = true continue } // See the package comments for more details on escaping of metadata // keys & values. attrs[escape.HexUnescape(k)] = escape.URLUnescape(v) } var b []byte if decodeIt { var err error b, err = base64.StdEncoding.DecodeString(bodyStr) if err != nil { // Fall back to using the raw message. b = []byte(bodyStr) } } else { b = []byte(bodyStr) } m2 := &driver.Message{ Body: b, Metadata: attrs, AckID: m.ReceiptHandle, AsFunc: func(i interface{}) bool { p, ok := i.(**sqs.Message) if !ok { return false } *p = m return true }, } ms = append(ms, m2) } if len(ms) == 0 { // When we return no messages and no error, the portable type will call // ReceiveBatch again immediately. Sleep for a bit to avoid hammering SQS // with RPCs. time.Sleep(noMessagesPollDuration) } return ms, nil } func extractBody(m *sqs.Message, raw bool) (body string, attributes map[string]string) { bodyStr := aws.StringValue(m.Body) rawAttrs := map[string]string{} // If the user told us that message bodies are raw, or if there are // top-level MessageAttributes, then it's raw. // (SNS JSON message can have attributes, but they are encoded in // the JSON instead of being at the top level). raw = raw || len(m.MessageAttributes) > 0 if raw { // For raw messages, the attributes are at the top level // and we leave bodyStr alone. for k, v := range m.MessageAttributes { rawAttrs[k] = aws.StringValue(v.StringValue) } return bodyStr, rawAttrs } // It might be SNS JSON; try to parse the raw body as such. // https://aws.amazon.com/sns/faqs/#Raw_message_delivery // If it parses as JSON and has a TopicArn field, assume it's SNS JSON. var bodyJSON struct { TopicArn string Message string MessageAttributes map[string]struct{ Value string } } if err := json.Unmarshal([]byte(bodyStr), &bodyJSON); err == nil && bodyJSON.TopicArn != "" { // It looks like SNS JSON. Get attributes from the decoded struct, // and update the body to be the JSON Message field. for k, v := range bodyJSON.MessageAttributes { rawAttrs[k] = v.Value } return bodyJSON.Message, rawAttrs } // It doesn't look like SNS JSON, either because it // isn't JSON or because the JSON doesn't have a TopicArn // field. Treat it as raw. // // As above in the other "raw" case, we leave bodyStr // alone. There can't be any top-level attributes (because // then we would have known it was raw earlier). return bodyStr, rawAttrs } // SendAcks implements driver.Subscription.SendAcks. func (s *subscription) SendAcks(ctx context.Context, ids []driver.AckID) error { req := &sqs.DeleteMessageBatchInput{QueueUrl: aws.String(s.qURL)} for _, id := range ids { req.Entries = append(req.Entries, &sqs.DeleteMessageBatchRequestEntry{ Id: aws.String(strconv.Itoa(len(req.Entries))), ReceiptHandle: id.(*string), }) } resp, err := s.client.DeleteMessageBatchWithContext(ctx, req) if err != nil { return err } // Note: DeleteMessageBatch doesn't return failures when you try // to Delete an id that isn't found. if numFailed := len(resp.Failed); numFailed > 0 { first := resp.Failed[0] return awserr.New(aws.StringValue(first.Code), fmt.Sprintf("sqs.DeleteMessageBatch failed for %d message(s): %s", numFailed, aws.StringValue(first.Message)), nil) } return nil } // CanNack implements driver.CanNack. func (s *subscription) CanNack() bool { return true } // SendNacks implements driver.Subscription.SendNacks. func (s *subscription) SendNacks(ctx context.Context, ids []driver.AckID) error { req := &sqs.ChangeMessageVisibilityBatchInput{QueueUrl: aws.String(s.qURL)} for _, id := range ids { req.Entries = append(req.Entries, &sqs.ChangeMessageVisibilityBatchRequestEntry{ Id: aws.String(strconv.Itoa(len(req.Entries))), ReceiptHandle: id.(*string), VisibilityTimeout: aws.Int64(0), }) } resp, err := s.client.ChangeMessageVisibilityBatchWithContext(ctx, req) if err != nil { return err } // Note: ChangeMessageVisibilityBatch returns failures when you try to // modify an id that isn't found; drop those. var firstFail *sqs.BatchResultErrorEntry numFailed := 0 for _, fail := range resp.Failed { if aws.StringValue(fail.Code) == sqs.ErrCodeReceiptHandleIsInvalid { continue } if numFailed == 0 { firstFail = fail } numFailed++ } if numFailed > 0 { return awserr.New(aws.StringValue(firstFail.Code), fmt.Sprintf("sqs.ChangeMessageVisibilityBatch failed for %d message(s): %s", numFailed, aws.StringValue(firstFail.Message)), nil) } return nil } // IsRetryable implements driver.Subscription.IsRetryable. func (*subscription) IsRetryable(error) bool { // The client handles retries. return false } // As implements driver.Subscription.As. func (s *subscription) As(i interface{}) bool { c, ok := i.(**sqs.SQS) if !ok { return false } *c = s.client return true } // ErrorAs implements driver.Subscription.ErrorAs. func (s *subscription) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } // ErrorCode implements driver.Subscription.ErrorCode. func (*subscription) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } func errorAs(err error, i interface{}) bool { e, ok := err.(awserr.Error) if !ok { return false } p, ok := i.(*awserr.Error) if !ok { return false } *p = e return true } // Close implements driver.Subscription.Close. func (*subscription) Close() error { return nil } go-cloud-0.20.0/pubsub/awssnssqs/awssnssqs_test.go000066400000000000000000000343571367004507500223250ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awssnssqs import ( "context" "fmt" "net/http" "strings" "sync/atomic" "testing" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sns" "github.com/aws/aws-sdk-go/service/sqs" "gocloud.dev/internal/testing/setup" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" "gocloud.dev/pubsub/drivertest" ) const ( region = "us-east-2" accountNumber = "462380225722" ) // We run conformance tests against multiple kinds of topics; this enum // represents which one we're doing. type topicKind string const ( topicKindSNS = topicKind("SNS") // send through an SNS topic topicKindSNSRaw = topicKind("SNSRaw") // send through an SNS topic using RawMessageDelivery=true topicKindSQS = topicKind("SQS") // send directly to an SQS queue ) func newSession() (*session.Session, error) { return session.NewSession(&aws.Config{ HTTPClient: &http.Client{}, Region: aws.String(region), MaxRetries: aws.Int(0), }) } type harness struct { sess *session.Session topicKind topicKind rt http.RoundTripper closer func() numTopics uint32 numSubs uint32 } func newHarness(ctx context.Context, t *testing.T, topicKind topicKind) (drivertest.Harness, error) { sess, rt, closer, _ := setup.NewAWSSession(ctx, t, region) return &harness{sess: sess, rt: rt, topicKind: topicKind, closer: closer}, nil } func (h *harness) CreateTopic(ctx context.Context, testName string) (dt driver.Topic, cleanup func(), err error) { topicName := sanitize(fmt.Sprintf("%s-top-%d", testName, atomic.AddUint32(&h.numTopics, 1))) return createTopic(ctx, topicName, h.sess, h.topicKind) } func createTopic(ctx context.Context, topicName string, sess *session.Session, topicKind topicKind) (dt driver.Topic, cleanup func(), err error) { switch topicKind { case topicKindSNS, topicKindSNSRaw: // Create an SNS topic. client := sns.New(sess) out, err := client.CreateTopicWithContext(ctx, &sns.CreateTopicInput{Name: aws.String(topicName)}) if err != nil { return nil, nil, fmt.Errorf("creating SNS topic %q: %v", topicName, err) } dt = openSNSTopic(ctx, sess, *out.TopicArn, nil) cleanup = func() { client.DeleteTopicWithContext(ctx, &sns.DeleteTopicInput{TopicArn: out.TopicArn}) } return dt, cleanup, nil case topicKindSQS: // Create an SQS queue. sqsClient := sqs.New(sess) qURL, _, err := createSQSQueue(ctx, sqsClient, topicName) if err != nil { return nil, nil, fmt.Errorf("creating SQS queue %q: %v", topicName, err) } dt = openSQSTopic(ctx, sess, qURL, nil) cleanup = func() { sqsClient.DeleteQueueWithContext(ctx, &sqs.DeleteQueueInput{QueueUrl: aws.String(qURL)}) } return dt, cleanup, nil default: panic("unreachable") } } func (h *harness) MakeNonexistentTopic(ctx context.Context) (driver.Topic, error) { switch h.topicKind { case topicKindSNS, topicKindSNSRaw: const fakeTopicARN = "arn:aws:sns:" + region + ":" + accountNumber + ":nonexistenttopic" return openSNSTopic(ctx, h.sess, fakeTopicARN, nil), nil case topicKindSQS: const fakeQueueURL = "https://" + region + ".amazonaws.com/" + accountNumber + "/nonexistent-queue" return openSQSTopic(ctx, h.sess, fakeQueueURL, nil), nil default: panic("unreachable") } } func (h *harness) CreateSubscription(ctx context.Context, dt driver.Topic, testName string) (ds driver.Subscription, cleanup func(), err error) { subName := sanitize(fmt.Sprintf("%s-sub-%d", testName, atomic.AddUint32(&h.numSubs, 1))) return createSubscription(ctx, dt, subName, h.sess, h.topicKind) } func createSubscription(ctx context.Context, dt driver.Topic, subName string, sess *session.Session, topicKind topicKind) (ds driver.Subscription, cleanup func(), err error) { switch topicKind { case topicKindSNS, topicKindSNSRaw: // Create an SQS queue, and subscribe it to the SNS topic. sqsClient := sqs.New(sess) qURL, qARN, err := createSQSQueue(ctx, sqsClient, subName) if err != nil { return nil, nil, fmt.Errorf("creating SQS queue %q: %v", subName, err) } ds = openSubscription(ctx, sess, qURL, nil) snsTopicARN := dt.(*snsTopic).arn snsClient := sns.New(sess) req := &sns.SubscribeInput{ TopicArn: aws.String(snsTopicARN), Endpoint: aws.String(qARN), Protocol: aws.String("sqs"), } // Enable RawMessageDelivery on the subscription if needed. if topicKind == topicKindSNSRaw { req.Attributes = map[string]*string{"RawMessageDelivery": aws.String("true")} } out, err := snsClient.SubscribeWithContext(ctx, req) if err != nil { return nil, nil, fmt.Errorf("subscribing: %v", err) } cleanup := func() { snsClient.UnsubscribeWithContext(ctx, &sns.UnsubscribeInput{SubscriptionArn: out.SubscriptionArn}) sqsClient.DeleteQueueWithContext(ctx, &sqs.DeleteQueueInput{QueueUrl: aws.String(qURL)}) } return ds, cleanup, nil case topicKindSQS: // The SQS queue already exists; we created it for the topic. Re-use it // for the subscription. qURL := dt.(*sqsTopic).qURL return openSubscription(ctx, sess, qURL, nil), func() {}, nil default: panic("unreachable") } } func createSQSQueue(ctx context.Context, sqsClient *sqs.SQS, topicName string) (string, string, error) { out, err := sqsClient.CreateQueueWithContext(ctx, &sqs.CreateQueueInput{QueueName: aws.String(topicName)}) if err != nil { return "", "", fmt.Errorf("creating SQS queue %q: %v", topicName, err) } qURL := aws.StringValue(out.QueueUrl) // Get the ARN. out2, err := sqsClient.GetQueueAttributesWithContext(ctx, &sqs.GetQueueAttributesInput{ QueueUrl: aws.String(qURL), AttributeNames: []*string{aws.String("QueueArn")}, }) if err != nil { return "", "", fmt.Errorf("getting queue ARN for %s: %v", qURL, err) } qARN := aws.StringValue(out2.Attributes["QueueArn"]) queuePolicy := `{ "Version": "2012-10-17", "Id": "AllowQueue", "Statement": [ { "Sid": "MySQSPolicy001", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sqs:SendMessage", "Resource": "` + qARN + `" } ] }` _, err = sqsClient.SetQueueAttributesWithContext(ctx, &sqs.SetQueueAttributesInput{ Attributes: map[string]*string{"Policy": &queuePolicy}, QueueUrl: aws.String(qURL), }) if err != nil { return "", "", fmt.Errorf("setting policy: %v", err) } return qURL, qARN, nil } func (h *harness) MakeNonexistentSubscription(ctx context.Context) (driver.Subscription, error) { const fakeSubscriptionQueueURL = "https://" + region + ".amazonaws.com/" + accountNumber + "/nonexistent-subscription" return openSubscription(ctx, h.sess, fakeSubscriptionQueueURL, nil), nil } func (h *harness) Close() { h.closer() } func (h *harness) MaxBatchSizes() (int, int) { if h.topicKind == topicKindSQS { return sendBatcherOptsSQS.MaxBatchSize, ackBatcherOpts.MaxBatchSize } return sendBatcherOptsSNS.MaxBatchSize, ackBatcherOpts.MaxBatchSize } func (h *harness) SupportsMultipleSubscriptions() bool { // If we're publishing to an SQS topic, we're reading from the same topic, // so there's no way to get multiple subscriptions. return h.topicKind != topicKindSQS } func TestConformanceSNSTopic(t *testing.T) { asTests := []drivertest.AsTest{awsAsTest{topicKind: topicKindSNS}} newSNSHarness := func(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return newHarness(ctx, t, topicKindSNS) } drivertest.RunConformanceTests(t, newSNSHarness, asTests) } func TestConformanceSNSTopicRaw(t *testing.T) { asTests := []drivertest.AsTest{awsAsTest{topicKind: topicKindSNSRaw}} newSNSHarness := func(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return newHarness(ctx, t, topicKindSNSRaw) } drivertest.RunConformanceTests(t, newSNSHarness, asTests) } func TestConformanceSQSTopic(t *testing.T) { asTests := []drivertest.AsTest{awsAsTest{topicKind: topicKindSQS}} newSQSHarness := func(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return newHarness(ctx, t, topicKindSQS) } drivertest.RunConformanceTests(t, newSQSHarness, asTests) } type awsAsTest struct { topicKind topicKind } func (awsAsTest) Name() string { return "aws test" } func (t awsAsTest) TopicCheck(topic *pubsub.Topic) error { switch t.topicKind { case topicKindSNS, topicKindSNSRaw: var s *sns.SNS if !topic.As(&s) { return fmt.Errorf("cast failed for %T", s) } case topicKindSQS: var s *sqs.SQS if !topic.As(&s) { return fmt.Errorf("cast failed for %T", s) } default: panic("unreachable") } return nil } func (awsAsTest) SubscriptionCheck(sub *pubsub.Subscription) error { var s *sqs.SQS if !sub.As(&s) { return fmt.Errorf("cast failed for %T", s) } return nil } func (t awsAsTest) TopicErrorCheck(topic *pubsub.Topic, err error) error { var ae awserr.Error if !topic.ErrorAs(err, &ae) { return fmt.Errorf("failed to convert %v (%T) to an awserr.Error", err, err) } switch t.topicKind { case topicKindSNS, topicKindSNSRaw: if got, want := ae.Code(), sns.ErrCodeNotFoundException; got != want { return fmt.Errorf("got %q, want %q", got, want) } case topicKindSQS: if got, want := ae.Code(), sqs.ErrCodeQueueDoesNotExist; got != want { return fmt.Errorf("got %q, want %q", got, want) } default: panic("unreachable") } return nil } func (awsAsTest) SubscriptionErrorCheck(s *pubsub.Subscription, err error) error { var ae awserr.Error if !s.ErrorAs(err, &ae) { return fmt.Errorf("failed to convert %v (%T) to an awserr.Error", err, err) } if got, want := ae.Code(), sqs.ErrCodeQueueDoesNotExist; got != want { return fmt.Errorf("got %q, want %q", got, want) } return nil } func (awsAsTest) MessageCheck(m *pubsub.Message) error { var sm sqs.Message if m.As(&sm) { return fmt.Errorf("cast succeeded for %T, want failure", &sm) } var psm *sqs.Message if !m.As(&psm) { return fmt.Errorf("cast failed for %T", &psm) } return nil } func (t awsAsTest) BeforeSend(as func(interface{}) bool) error { switch t.topicKind { case topicKindSNS, topicKindSNSRaw: var pub *sns.PublishInput if !as(&pub) { return fmt.Errorf("cast failed for %T", &pub) } case topicKindSQS: var smi *sqs.SendMessageInput if !as(&smi) { return fmt.Errorf("cast failed for %T", &smi) } var entry *sqs.SendMessageBatchRequestEntry if !as(&entry) { return fmt.Errorf("cast failed for %T", &entry) } default: panic("unreachable") } return nil } func sanitize(s string) string { // AWS doesn't like names that are too long; trim some not-so-useful stuff. const maxNameLen = 80 s = strings.Replace(s, "TestConformance", "", 1) s = strings.Replace(s, "/Test", "", 1) s = strings.Replace(s, "/", "_", -1) if len(s) > maxNameLen { // Drop prefix, not suffix, because suffix includes something to make // entities unique within a test. s = s[len(s)-maxNameLen:] } return s } func BenchmarkSNSSQS(b *testing.B) { benchmark(b, topicKindSNS) } func BenchmarkSQS(b *testing.B) { benchmark(b, topicKindSQS) } func benchmark(b *testing.B, topicKind topicKind) { ctx := context.Background() sess, err := session.NewSession(&aws.Config{ HTTPClient: &http.Client{}, Region: aws.String(region), MaxRetries: aws.Int(0), }) if err != nil { b.Fatal(err) } topicName := fmt.Sprintf("%s-topic", b.Name()) dt, cleanup1, err := createTopic(ctx, topicName, sess, topicKind) if err != nil { b.Fatal(err) } defer cleanup1() sendBatcherOpts := sendBatcherOptsSNS if topicKind == topicKindSQS { sendBatcherOpts = sendBatcherOptsSQS } topic := pubsub.NewTopic(dt, sendBatcherOpts) defer topic.Shutdown(ctx) subName := fmt.Sprintf("%s-subscription", b.Name()) ds, cleanup2, err := createSubscription(ctx, dt, subName, sess, topicKind) if err != nil { b.Fatal(err) } defer cleanup2() sub := pubsub.NewSubscription(ds, recvBatcherOpts, ackBatcherOpts) defer sub.Shutdown(ctx) drivertest.RunBenchmarks(b, topic, sub) } func TestOpenTopicFromURL(t *testing.T) { tests := []struct { URL string WantErr bool }{ // SNS... // OK. {"awssns:///arn:aws:service:region:accountid:resourceType/resourcePath", false}, // OK, setting region. {"awssns:///arn:aws:service:region:accountid:resourceType/resourcePath?region=us-east-2", false}, // Invalid parameter. {"awssns:///arn:aws:service:region:accountid:resourceType/resourcePath?param=value", true}, // SQS... // OK. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue", false}, // OK, setting region. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue?region=us-east-2", false}, // Invalid parameter. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue?param=value", true}, } ctx := context.Background() for _, test := range tests { topic, err := pubsub.OpenTopic(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if topic != nil { topic.Shutdown(ctx) } } } func TestOpenSubscriptionFromURL(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue", false}, // OK, setting region. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue?region=us-east-2", false}, // OK, setting raw. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue?raw=true", false}, // OK, setting raw. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue?raw=1", false}, // Invalid raw. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue?raw=foo", true}, // Invalid parameter. {"awssqs://sqs.us-east-2.amazonaws.com/99999/my-queue?param=value", true}, } ctx := context.Background() for _, test := range tests { sub, err := pubsub.OpenSubscription(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if sub != nil { sub.Shutdown(ctx) } } } go-cloud-0.20.0/pubsub/awssnssqs/example_test.go000066400000000000000000000116471367004507500217100ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awssnssqs_test import ( "context" "log" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "gocloud.dev/pubsub" "gocloud.dev/pubsub/awssnssqs" ) func ExampleOpenSNSTopic() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Establish an AWS session. // See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info. // The region must match the region for the SNS topic "mytopic". sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-east-2"), }) if err != nil { log.Fatal(err) } // Create a *pubsub.Topic. const topicARN = "arn:aws:sns:us-east-2:123456789012:mytopic" topic := awssnssqs.OpenSNSTopic(ctx, sess, topicARN, nil) defer topic.Shutdown(ctx) } func ExampleOpenSQSTopic() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Establish an AWS session. // See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info. // The region must match the region for the SQS queue "myqueue". sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-east-2"), }) if err != nil { log.Fatal(err) } // Create a *pubsub.Topic. const queueURL = "https://sqs.us-east-2.amazonaws.com/123456789012/myqueue" topic := awssnssqs.OpenSQSTopic(ctx, sess, queueURL, nil) defer topic.Shutdown(ctx) } func Example_openSNSTopicFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/awssnssqs" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() const topicARN = "arn:aws:sns:us-east-2:123456789012:mytopic" // Note the 3 slashes; ARNs have multiple colons and therefore aren't valid // as hostnames in the URL. topic, err := pubsub.OpenTopic(ctx, "awssns:///"+topicARN+"?region=us-east-2") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func Example_openSQSTopicFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/awssnssqs" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/QueueURL.html const queueURL = "sqs.us-east-2.amazonaws.com/123456789012/myqueue" topic, err := pubsub.OpenTopic(ctx, "awssqs://"+queueURL+"?region=us-east-2") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func ExampleOpenSubscription() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Establish an AWS session. // See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info. // The region must match the region for "MyQueue". sess, err := session.NewSession(&aws.Config{ Region: aws.String("us-east-2"), }) if err != nil { log.Fatal(err) } // Construct a *pubsub.Subscription. // https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/QueueURL.html const queueURL = "https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue" subscription := awssnssqs.OpenSubscription(ctx, sess, queueURL, nil) defer subscription.Shutdown(ctx) } func Example_openSubscriptionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/awssnssqs" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenSubscription creates a *pubsub.Subscription from a URL. // This URL will open the subscription with the URL // "https://sqs.us-east-2.amazonaws.com/123456789012/myqueue". subscription, err := pubsub.OpenSubscription(ctx, "awssqs://sqs.us-east-2.amazonaws.com/123456789012/"+ "myqueue?region=us-east-2") if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } go-cloud-0.20.0/pubsub/awssnssqs/testdata/000077500000000000000000000000001367004507500204675ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/000077500000000000000000000000001367004507500251445ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestAs/000077500000000000000000000000001367004507500263475ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestAs/aws_test.replay000066400000000000000000000612221367004507500314210ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUUIhriSf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "48f9899220d88c70", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNBc19hd3NfdGVzdC10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "332" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:08 GMT" ], "X-Amzn-Requestid": [ "473023b9-be70-5ebc-9ece-74e08e249420" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQXNfYXdzX3Rlc3QtdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjQ3MzAyM2I5LWJlNzAtNWViYy05ZWNlLTc0ZTA4ZTI0OTQyMDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "b2176e6442712860", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY0FzX2F3c190ZXN0LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "345" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:09 GMT" ], "X-Amzn-Requestid": [ "b72583e5-06ea-591a-ae93-d4bc36bf7861" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNBc19hd3NfdGVzdC1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmI3MjU4M2U1LTA2ZWEtNTkxYS1hZTkzLWQ0YmMzNmJmNzg2MTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "79a218db605e0b56", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0FzX2F3c190ZXN0LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "397" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:09 GMT" ], "X-Amzn-Requestid": [ "222e5135-fd13-5394-bc2e-066ccd4612ef" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0FzX2F3c190ZXN0LXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjIyMmU1MTM1LWZkMTMtNTM5NC1iYzJlLTA2NmNjZDQ2MTJlZjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "cc198ba29021cc95", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "663" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNBc19hd3NfdGVzdC1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQXNfYXdzX3Rlc3Qtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:09 GMT" ], "X-Amzn-Requestid": [ "222a2faa-1f72-5c2d-a1b7-78f32f275d56" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MjIyYTJmYWEtMWY3Mi01YzJkLWExYjctNzhmMzJmMjc1ZDU2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "ac9d69e1fc724ece", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "208" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0FzX2F3c190ZXN0LXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0FzX2F3c190ZXN0LXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "375" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:08 GMT" ], "X-Amzn-Requestid": [ "722b7551-9276-53b5-b923-2208a2234929" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQXNfYXdzX3Rlc3QtdG9wLTE6N2ZjMzliNjMtMzA2Yy00NGE0LTg5NjItMjQ0MjlmNjg1MWE1PC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjcyMmI3NTUxLTkyNzYtNTNiNS1iOTIzLTIyMDhhMjIzNDkyOTwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "ac0a15ecc0617cf1", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT14JlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljQXNfYXdzX3Rlc3QtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:08 GMT" ], "X-Amzn-Requestid": [ "7f4e7eb8-4d75-55a7-9f8b-29e17d205f3b" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjI2YTMxNGUwLTE0MGYtNTM4YS04OTBmLTQzYjkyNDVhODkxNjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+N2Y0ZTdlYjgtNGQ3NS01NWE3LTlmOGItMjllMTdkMjA1ZjNiPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "f9dc3b4434523501", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQXNfYXdzX3Rlc3Qtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1971" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:09 GMT" ], "X-Amzn-Requestid": [ "5ee08d21-9d0b-502a-990f-da78ad5e6151" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YjUxMzFhOTktYjlhMi00MTliLThiOTctZWEzYjI3Yjc1OTVjPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnYrQ0JpeXdzUGxDVGpFamR6YUJrRFdUbWYycmtKakRqaUhnZWhkYy9rdGlxRURJMzM5bjA1K1BBMmExMkRiOC9YNmpJT0c4OTdKZmkvU3kzUm9ybUFmam9EU2RBN1hMaEhsRXhldzFJZGhvK1BQKzRoelNDT3Bwd0lnU1ZSTllMQ0ZDMDRuTW5YWGpDR2xBV0FWZk1KVXhaQ1ZnUGswZldiWjRaOGxTRGpnY0dlOGg2Rlg4OFRQVGRNeTBFTG1ZRSt4QzlqcEphTmZtcGJNUXVQb29pcUhxaDV0amtmcGt2UWNyWGRQN3d2MVpBNGhjWitjZ0xZdmJNMCswcitZMFM5WEVtM2VxNStkanZxdkZpT1BGTkM0QWk3U3BnY1VpMGJTVjRSSE54bFg1TE45UHNOZHhoNkV3Z0xpbTE0ZmhEUS9FaCtHRmp4OWMvUXZ3cGFJSFZZTnJqNlN1bDJka21BL0xiaGhqZFpGTWJFSE55cGdySTNMR1grL3JXenh2ampxR3RVckVQMXhmUlVxZWN4U3RIamc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmU4MDhkMjI3MTgyNTA1NzhlZmQyYmVlMDMzMTk4ZTMyPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7MjZhMzE0ZTAtMTQwZi01MzhhLTg5MGYtNDNiOTI0NWE4OTE2JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0FzX2F3c190ZXN0LXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDt4JnF1b3Q7LAogICZxdW90O1RpbWVzdGFtcCZxdW90OyA6ICZxdW90OzIwMjAtMDYtMDlUMDY6Mzc6MDkuNzU2WiZxdW90OywKICAmcXVvdDtTaWduYXR1cmVWZXJzaW9uJnF1b3Q7IDogJnF1b3Q7MSZxdW90OywKICAmcXVvdDtTaWduYXR1cmUmcXVvdDsgOiAmcXVvdDt0R2w3a0l3cDBjSUFCUTNsRWVNWXg0RC9YQXQwb1czVUhUcDB4YXdhaDUvbUsvQTQxSFh5d2JqT0xVUzZxYk9sQ00vRmE0VGQ1Mld2QlluL0RVUU5HaDFGNDc1L0w0K3V1ZmhGWlJXejdCcXl3THNPZ3hJeXhleVpDckI5bXJoUi9HZFlOT1J0dkFXMFFweCtudUhQWWgwTjdlVm1aRGFDeW9QbENmWU1kTzVSd1JJdHVmclNFejYyUzlUZEJtNzAyaVlHV0ZDUEVXRHIrUS93MkJEalFNWEY1RGVlbjFUNURialQvcG82K0xxRVIyUWNqQXpvNjNaaTlpREFkY1FETElmZ09ZNVBLaDRkanN2d0NicE9IelRDVnRjL2V3UC91NjFVRG1ybmIzeURUY3N3Z21UWW8xWmtPdmFyZSsxSG82UWR3c1BmbXpKR2h1c09vNm1VTGc9PSZxdW90OywKICAmcXVvdDtTaWduaW5nQ2VydFVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tL1NpbXBsZU5vdGlmaWNhdGlvblNlcnZpY2UtYTg2Y2IxMGI0ZTFmMjljOTQxNzAyZDczNzEyOGY3YjYucGVtJnF1b3Q7LAogICZxdW90O1Vuc3Vic2NyaWJlVVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1VbnN1YnNjcmliZSZhbXA7U3Vic2NyaXB0aW9uQXJuPWFybjphd3M6c25zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6U05TVG9waWNBc19hd3NfdGVzdC10b3AtMTo3ZmMzOWI2My0zMDZjLTQ0YTQtODk2Mi0yNDQyOWY2ODUxYTUmcXVvdDsKfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjVlZTA4ZDIxLTlkMGItNTAyYS05OTBmLWRhNzhhZDVlNjE1MTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "f9c91cb985249cde", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "676" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnYlMkJDQml5d3NQbENUakVqZHphQmtEV1RtZjJya0pqRGppSGdlaGRjJTJGa3RpcUVESTMzOW4wNSUyQlBBMmExMkRiOCUyRlg2aklPRzg5N0pmaSUyRlN5M1Jvcm1BZmpvRFNkQTdYTGhIbEV4ZXcxSWRobyUyQlBQJTJCNGh6U0NPcHB3SWdTVlJOWUxDRkMwNG5NblhYakNHbEFXQVZmTUpVeFpDVmdQazBmV2JaNFo4bFNEamdjR2U4aDZGWDg4VFBUZE15MEVMbVlFJTJCeEM5anBKYU5mbXBiTVF1UG9vaXFIcWg1dGprZnBrdlFjclhkUDd3djFaQTRoY1olMkJjZ0xZdmJNMCUyQjByJTJCWTBTOVhFbTNlcTUlMkJkanZxdkZpT1BGTkM0QWk3U3BnY1VpMGJTVjRSSE54bFg1TE45UHNOZHhoNkV3Z0xpbTE0ZmhEUSUyRkVoJTJCR0ZqeDljJTJGUXZ3cGFJSFZZTnJqNlN1bDJka21BJTJGTGJoaGpkWkZNYkVITnlwZ3JJM0xHWCUyQiUyRnJXenh2ampxR3RVckVQMXhmUlVxZWN4U3RIamclM0QlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0FzX2F3c190ZXN0LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:09 GMT" ], "X-Amzn-Requestid": [ "3a68cc64-3ca1-5d07-a307-9b3d0cf45c7c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+M2E2OGNjNjQtM2NhMS01ZDA3LWEzMDctOWIzZDBjZjQ1YzdjPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "1aac095e5fb7e625", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "113" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0mVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBbm9uZXhpc3RlbnR0b3BpYyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "259" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:09 GMT" ], "X-Amzn-Requestid": [ "c4f04be1-aa25-5631-935d-1cb89a70bcad" ] }, "Body": "PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxFcnJvcj4KICAgIDxUeXBlPlNlbmRlcjwvVHlwZT4KICAgIDxDb2RlPk5vdEZvdW5kPC9Db2RlPgogICAgPE1lc3NhZ2U+VG9waWMgZG9lcyBub3QgZXhpc3Q8L01lc3NhZ2U+CiAgPC9FcnJvcj4KICA8UmVxdWVzdElkPmM0ZjA0YmUxLWFhMjUtNTYzMS05MzVkLTFjYjg5YTcwYmNhZDwvUmVxdWVzdElkPgo8L0Vycm9yUmVzcG9uc2U+Cg==" } }, { "ID": "a85bd13bf20933be", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:10 GMT" ], "X-Amzn-Requestid": [ "ba4f7940-a78b-524b-aa62-2e1997dd4330" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD5iYTRmNzk0MC1hNzhiLTUyNGItYWE2Mi0yZTE5OTdkZDQzMzA8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } }, { "ID": "ac9d8ce7f59140ca", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0FzX2F3c190ZXN0LXRvcC0xJTNBN2ZjMzliNjMtMzA2Yy00NGE0LTg5NjItMjQ0MjlmNjg1MWE1JlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:09 GMT" ], "X-Amzn-Requestid": [ "491884c0-7f44-58a5-bf22-d3994f125239" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD40OTE4ODRjMC03ZjQ0LTU4YTUtYmYyMi1kMzk5NGYxMjUyMzk8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "3d35e20a59780863", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "131" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNBc19hd3NfdGVzdC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:10 GMT" ], "X-Amzn-Requestid": [ "010cecf4-d091-544e-81cd-bbade0c72535" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4wMTBjZWNmNC1kMDkxLTU0NGUtODFjZC1iYmFkZTBjNzI1MzU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "a8c5c875fd08512f", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "117" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljQXNfYXdzX3Rlc3QtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:09 GMT" ], "X-Amzn-Requestid": [ "867c4cfd-4daf-5d0b-a598-1ba47df9d797" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD44NjdjNGNmZC00ZGFmLTVkMGItYTU5OC0xYmE0N2RmOWQ3OTc8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }verify_As_returns_false_when_passed_nil.replay000066400000000000000000000627771367004507500376360ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestAs{ "Initial": "AQAAAA7WcSUWHO0Xbf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d6caabc8eb42b01f", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "99" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "363" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:10 GMT" ], "X-Amzn-Requestid": [ "ad1d3f55-691f-5c9d-bf6c-680c5949c30b" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5hZDFkM2Y1NS02OTFmLTVjOWQtYmY2Yy02ODBjNTk0OWMzMGI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "d4d3a3110dcf0264", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "104" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "376" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "cda549d3-aaf4-5dc0-86a3-1e8a9aa32e7c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5jZGE1NDlkMy1hYWY0LTVkYzAtODZhMy0xZThhOWFhMzJlN2M8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "7234c151e38c1587", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "194" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "428" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "dd25192a-b89f-5384-8373-4e7388c81038" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kZDI1MTkyYS1iODlmLTUzODQtODM3My00ZTczODhjODEwMzg8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "51605bb3172083ec", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "725" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "b13c0384-ae18-55e3-8e60-54dd9e4f265f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YjEzYzAzODQtYWUxOC01NWUzLThlNjAtNTRkZDllNGYyNjVmPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "1989fb0cbbbe4d17", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "270" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "406" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "50b812bf-7f94-5087-9118-45e64fc3ff11" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xOjM5NGFjYzBlLTBhYWMtNDMyNC1hOWQ3LTZhODE4M2NmNGQ5MzwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD41MGI4MTJiZi03Zjk0LTUwODctOTExOC00NWU2NGZjM2ZmMTE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "45aec19af6e2dee3", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "154" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT14JlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljQXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "f4180718-91af-5b44-b2c2-5041a1f8c4d2" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjg1NzIzZGYwLTZiNmQtNTBkNi04YmQ0LTZhYTk1YjNhN2Y0MDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZjQxODA3MTgtOTFhZi01YjQ0LWIyYzItNTA0MWExZjhjNGQyPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "5187db16644cdd00", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "214" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2073" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "1f50d37d-95ce-55da-9c86-8424a599b666" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MWUyYzk1MjEtMTM2Yi00MmM1LTk4OTAtMzUwYjE4M2JiYzM2PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnJYOG1FQU5IZjhJdUtldmRmaS9Nbkp5N1ZuT05EYVJ4dGsyMHk2SU1vbEFReHR5ZmdUTlpqSEo5QzMvaG5nQ2paZDNObnJWOUc5Ykh4b1FydVdOSGRIRUxKK3BtbGZNejROeEpDSlh2TGhoRXZ2eTEvWlZZZ283SlpKak9KK1lidDBtZWpTb0wxSG44M2RIaXRQQUxJMDk3S3NYNjZtUTFSWHpNWkpjdDE2Z3lxZkN0VE9ZM040UmFWYnhDMnBMVno5YllGNUFXdFNBOWZJbW94b1JPTCtsM0tlQXBiYjRTU2xveEdJYWNTeTdDei95YkxWdXZjcS9aL3Z3b3F5d0ZIK0tEdWVONmtMNzd0anU2enhTTU5ZSWU5dzM1ZTV2TUZTclMzcXlxbHdLUTgxZnN6aVJHbGEwUlBmOVlyR0hEN1BmYWV6N1ZpWXYyaW5mWGVFUTR6WTRhTGRHZGVpUG9lNFdhUTFKSzFzUjlxYVFyTGhITTIvbnBHYmlGalc2S2cwY3BBemxVMFN1MjFNYXlJeE81a2xKVDZIbXF1VW9XdDErLzlFWVdJU2tDdldTeXo4M0VzUktRSHNwblJFQ3Y8L1JlY2VpcHRIYW5kbGU+PE1ENU9mQm9keT5kMGQwY2ZlYjQ3NGNkMTVjYmZkOGY2OGUyMzFmODcwODwvTUQ1T2ZCb2R5PjxCb2R5PnsKICAmcXVvdDtUeXBlJnF1b3Q7IDogJnF1b3Q7Tm90aWZpY2F0aW9uJnF1b3Q7LAogICZxdW90O01lc3NhZ2VJZCZxdW90OyA6ICZxdW90Ozg1NzIzZGYwLTZiNmQtNTBkNi04YmQ0LTZhYTk1YjNhN2Y0MCZxdW90OywKICAmcXVvdDtUb3BpY0FybiZxdW90OyA6ICZxdW90O2Fybjphd3M6c25zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6U05TVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90O3gmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNzoxMS42NzRaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O1lwa0ViOTdpdm9melhoa0ZrVWpEN1hKWC9yZW1sSFV1anBoYnNLZWhQWnNyNEFjZGQ2NlU4d1dyb25adGdBblJaNTF2MTVadnFlQ2wrZlVyR2VnNm1iTEpoeDVCajFWKzhpT1gzcjB3WXlRay9JWDhYYTc0MjdRazlsTG91Ymd4N3BUNEFYTjJVRWZrOVlGNGtmMnRabkZVM2c2V2kxZ3hVdmF3bCtqVzJlSS9kTDcyaXUvUlJSSWhlaVNTVWsyMzNuUTFMQ0VSY1dtVjcvQVVhUW9hQTM4RXZ3K2V1M3huUDJzbXFtbkhKenVjdFkzRGxnc2VLZnRkdGFCTyttYmxUNE5ZaU1iWitZUXpVa1JFSGxvVHJrVW1YbEFVMlpyRitnS1JkeHZRYlRYQUFrVmVsdmx1NGozYjVpQmJObEQrRVFWL3EySmtEeWN2QmlYaFJGQi9aUT09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMTozOTRhY2MwZS0wYWFjLTQzMjQtYTlkNy02YTgxODNjZjRkOTMmcXVvdDsKfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjFmNTBkMzdkLTk1Y2UtNTVkYS05Yzg2LTg0MjRhNTk5YjY2NjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "1e4a4f2c5f109f5a", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "733" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnJYOG1FQU5IZjhJdUtldmRmaSUyRk1uSnk3Vm5PTkRhUnh0azIweTZJTW9sQVF4dHlmZ1ROWmpISjlDMyUyRmhuZ0NqWmQzTm5yVjlHOWJIeG9RcnVXTkhkSEVMSiUyQnBtbGZNejROeEpDSlh2TGhoRXZ2eTElMkZaVllnbzdKWkpqT0olMkJZYnQwbWVqU29MMUhuODNkSGl0UEFMSTA5N0tzWDY2bVExUlh6TVpKY3QxNmd5cWZDdFRPWTNONFJhVmJ4QzJwTFZ6OWJZRjVBV3RTQTlmSW1veG9ST0wlMkJsM0tlQXBiYjRTU2xveEdJYWNTeTdDeiUyRnliTFZ1dmNxJTJGWiUyRnZ3b3F5d0ZIJTJCS0R1ZU42a0w3N3RqdTZ6eFNNTllJZTl3MzVlNXZNRlNyUzNxeXFsd0tRODFmc3ppUkdsYTBSUGY5WXJHSEQ3UGZhZXo3VmlZdjJpbmZYZUVRNHpZNGFMZEdkZWlQb2U0V2FRMUpLMXNSOXFhUXJMaEhNMiUyRm5wR2JpRmpXNktnMGNwQXpsVTBTdTIxTWF5SXhPNWtsSlQ2SG1xdVVvV3QxJTJCJTJGOUVZV0lTa0N2V1N5ejgzRXNSS1FIc3BuUkVDdiZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "c62c9acf-fe49-55af-8c8e-cd96ce1e2613" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YzYyYzlhY2YtZmU0OS01NWFmLThjOGUtY2Q5NmNlMWUyNjEzPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "476608b88cc7d231", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "113" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0mVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBbm9uZXhpc3RlbnR0b3BpYyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "259" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "35dc172a-49ab-5693-8aba-407379fc0905" ] }, "Body": "PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxFcnJvcj4KICAgIDxUeXBlPlNlbmRlcjwvVHlwZT4KICAgIDxDb2RlPk5vdEZvdW5kPC9Db2RlPgogICAgPE1lc3NhZ2U+VG9waWMgZG9lcyBub3QgZXhpc3Q8L01lc3NhZ2U+CiAgPC9FcnJvcj4KICA8UmVxdWVzdElkPjM1ZGMxNzJhLTQ5YWItNTY5My04YWJhLTQwNzM3OWZjMDkwNTwvUmVxdWVzdElkPgo8L0Vycm9yUmVzcG9uc2U+Cg==" } }, { "ID": "09b32af80111c43c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "4f0f1039-ba7f-5724-8204-47608a289498" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD40ZjBmMTAzOS1iYTdmLTU3MjQtODIwNC00NzYwOGEyODk0OTg8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } }, { "ID": "05f9c8e03a68352d", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "194" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMSUzQTM5NGFjYzBlLTBhYWMtNDMyNC1hOWQ3LTZhODE4M2NmNGQ5MyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "7015bc7e-bb2a-5e2f-990c-eb278b7271b9" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43MDE1YmM3ZS1iYjJhLTVlMmYtOTkwYy1lYjI3OGI3MjcxYjk8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "b3b168c833aeae3c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "162" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:12 GMT" ], "X-Amzn-Requestid": [ "b5f95753-3329-5cd5-9624-000a03713f69" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5iNWY5NTc1My0zMzI5LTVjZDUtOTYyNC0wMDBhMDM3MTNmNjk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "cde71a62fd92aacc", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "148" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljQXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:12 GMT" ], "X-Amzn-Requestid": [ "2a71fe7e-4bf5-5b81-9531-a9277badc417" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4yYTcxZmU3ZS00YmY1LTViODEtOTUzMS1hOTI3N2JhZGM0MTc8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestBatching.replay000066400000000000000000002647061367004507500307600ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSWzDQhcSP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d73f4ececabe18b2", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "65" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNCYXRjaGluZy10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "329" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:47 GMT" ], "X-Amzn-Requestid": [ "e84ea03e-e06c-5a1b-8041-f767d0982674" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmU4NGVhMDNlLWUwNmMtNWExYi04MDQxLWY3NjdkMDk4MjY3NDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "7fe65bb145710a0c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY0JhdGNoaW5nLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "342" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "640631eb-927f-57f1-9b00-66b2a28b7311" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNCYXRjaGluZy1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjY0MDYzMWViLTkyN2YtNTdmMS05YjAwLTY2YjJhMjhiNzMxMTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "0c79ef90d0a6d307", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "160" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0JhdGNoaW5nLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "394" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "f2264ac2-9656-5503-a44c-1d9ba6a2c1e3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmYyMjY0YWMyLTk2NTYtNTUwMy1hNDRjLTFkOWJhNmEyYzFlMzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "62ccd62f1e991fa1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "657" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNCYXRjaGluZy1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "9db1b006-3ee8-522b-b70b-e75f0e1c66cb" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OWRiMWIwMDYtM2VlOC01MjJiLWI3MGItZTc1ZjBlMWM2NmNiPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "61107ffd46a217ad", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "202" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "372" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "90517468-0305-537f-9084-233133f15f10" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiPC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjkwNTE3NDY4LTAzMDUtNTM3Zi05MDg0LTIzMzEzM2YxNWYxMDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "56dca7607eb7d4f9", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "29aa5d3a-9259-5c18-b366-0a63a2ad2077" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmJjZjIwMzAzLWY3OGQtNTlmMC1iYTc0LTU0NWFjNzc5YzU5ZjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MjlhYTVkM2EtOTI1OS01YzE4LWIzNjYtMGE2M2EyYWQyMDc3PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "c6906e4a1a8d4317", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "056b35c9-4267-50be-83a0-629072920cd1" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjhhNDQzMDZlLTM1NjUtNTdiNi04MTRmLTY3MzcwNTkwY2JkOTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MDU2YjM1YzktNDI2Ny01MGJlLTgzYTAtNjI5MDcyOTIwY2QxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "3c204ad23edc0952", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "7d107804-ef7d-5d6a-93db-2f5ddf88a105" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjRkOTA5YjY0LWU2MGUtNTE1Yi1hNWU2LWNjM2RkNmZiY2QzNDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+N2QxMDc4MDQtZWY3ZC01ZDZhLTkzZGItMmY1ZGRmODhhMTA1PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "c19954ad6a4b9a84", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "49e9a93a-df96-5574-acf0-fe63ef63291b" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmU5ODZiMmNiLTEyYjktNTk1Ny1hMTlmLWU1OTIyMjRjOTUzODwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NDllOWE5M2EtZGY5Ni01NTc0LWFjZjAtZmU2M2VmNjMyOTFiPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "709c24241ddb5ced", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "159ac05b-3136-502e-b2d8-970201c37c41" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjk0ZGNjY2Q1LWViZDYtNTRiNi04ZjNiLTliOGNkYjIzMDhkOTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MTU5YWMwNWItMzEzNi01MDJlLWIyZDgtOTcwMjAxYzM3YzQxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "6a8e7540dc63e5df", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "3439b083-b51a-5480-b9dc-e7da85efa8ef" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjdkYjgzZTRlLTcyNmYtNTdlYS04ZmYwLTY5MTc0MjlhMGI4NTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MzQzOWIwODMtYjUxYS01NDgwLWI5ZGMtZTdkYTg1ZWZhOGVmPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "bbbcec1ef896f469", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "bc33fb74-a981-5ee2-8875-ac2d9974128d" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmJjOWY4NWNlLWU1MTEtNWY0My1iY2M1LWQyOTdkNWU0ODMyYzwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+YmMzM2ZiNzQtYTk4MS01ZWUyLTg4NzUtYWMyZDk5NzQxMjhkPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "05df95139156fcd6", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:48 GMT" ], "X-Amzn-Requestid": [ "3632a6d5-ac0f-5bf0-a927-f18c9cfac79f" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmQ2YWIxYjg2LTFlNjQtNTYxZi1iNWRlLTRjZGYyZTkxMWE3MDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MzYzMmE2ZDUtYWMwZi01YmYwLWE5MjctZjE4YzljZmFjNzlmPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "5b569d81f4a34233", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:49 GMT" ], "X-Amzn-Requestid": [ "e07beeb2-b527-5d5e-8b28-b9eb85d2c131" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjkzMDlhZDdlLWYzZjEtNWIwMC05MzYwLWZhMjdjMzA0ODc2ZjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZTA3YmVlYjItYjUyNy01ZDVlLThiMjgtYjllYjg1ZDJjMTMxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "f16d05fdfacc9f8b", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:49 GMT" ], "X-Amzn-Requestid": [ "a7a7f422-cf6c-54a7-a1a7-a37bff9978c8" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmQwOTIwM2E0LTIyYmUtNWZjNS04NmQ5LTU0ZmQxMjRiNjNhYTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+YTdhN2Y0MjItY2Y2Yy01NGE3LWExYTctYTM3YmZmOTk3OGM4PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "b9f3b80cefbde0f1", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:49 GMT" ], "X-Amzn-Requestid": [ "60726111-6563-583e-8297-364855967451" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjVmYjEyYTc3LWFiMTgtNTcxYy04ZmFiLTdkMmU5YmVkMWI3MzwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NjA3MjYxMTEtNjU2My01ODNlLTgyOTctMzY0ODU1OTY3NDUxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "866d08fab2d47c9c", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:49 GMT" ], "X-Amzn-Requestid": [ "95d99bb2-502a-5475-a67b-cceb60dfe81a" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjhhODFlOTFhLTNhNWYtNTcwYi04NWQ0LWJlNDMwYWFhZGI2NDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+OTVkOTliYjItNTAyYS01NDc1LWE2N2ItY2NlYjYwZGZlODFhPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "789687bbe8a6d4d2", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:49 GMT" ], "X-Amzn-Requestid": [ "ba3715ab-d274-53b5-a39a-42f2e2818755" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OGJlZTI4OGUtYWIxMS00NGM4LTk3NzMtNjQwYmM3MTkwZjUxPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlZnNSs1dHF2VjBOc05XZnNuV1ZlLzV2ZEF2c1IzTldQamFLbU5oY0tpUDVsZm1tYWZLQ3gxTGR4L2FvZ3JHVzh1QWNQeHBObms0clJGTU9wSHA5Y3JwWTBCUERMeVRkSjdxTDBDeTlpWEdCRjVxWVlQOWUzQnZoV1hiTUxvcGF6SGJKUXFlNEo5VTZLVjhPUHJKbHdmWkdQbTRMMXRaeWRYdzRsSFUwVFQ1M05JVEVWSGF1bnIzR1hpbFYvQ0FFSElDNjU0TC9EWk9ER2tjSHRpdEFhRmp5SGhnczd6L3Y2MzVXUjN3elk0TlZiejZiMnN2blcvZkR1ajM2UlZPOFI1SDdrSjhERUEzUUxjM051L1B4UmtySm9NRER4RVNYbzBnMjRSNDZta2JVRnhBb0hIYnFIZnpEMG9wVnQ2S3lQMkJhM29NeHArRERRZTQ3K09JWmZhMkVNUVR4TVNoTGJjTlQzSmpxWTJMTXRpLzRNblBCRUlKRmZRK2RPZUg4WHNaUTZBSXBiaVdxQ2dwTDR4aVE4emc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmJjNGFjNTczM2FjMzFkMjEyMWZjZjFkMDY4OGI1MWI4PC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7NWZiMTJhNzctYWIxOC01NzFjLThmYWItN2QyZTliZWQxYjczJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5Ljc4NVomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7S0VsbUhrL1hwZisxR0dVeWs4MVpxcm9iV0lycDM4UXRuUEtlSWZ2c1NOUUtKZXMxSjR2WktHdFBHbkpJdnprKzArK0h3bHN4dTNoclJvejNmMFVwMzZtTG1GbzZjTnFGMHl5QUxYc0RaSXlqampYYi9heW5oZmpTaGZPeEtRL1lMRENuZ2RyYWtQWFdRMDZkcWNYeFFkTGVRZ3hrcG15RzNuV25oc2xMSTYwb0pVaWdJMWpCUjBqWWtMSmxtazhDaFZvNzFQZHJONnpPaFZVWlJtb0Ixc3VkZ2NNa0dxbEJBckFmTE1MWndlRXJENTA1a2ViMVQ0RXRoaHJhS1U1VCtVSGdXTVU2NEZQSWJtZEVSbmNzdnMza1hFR24xQU9DTFI1QzJFMUdER3dKOXBSblF3dGc3TlAvSStLa1RTckR2clcrMGRPNmlrQlFjNWNxSnVyU2VBPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5iYTM3MTVhYi1kMjc0LTUzYjUtYTM5YS00MmYyZTI4MTg3NTU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "8fb8a5e841423200", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "d0133eee-6418-5805-a191-69b754eeace5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YzkxOWM0YmYtM2I4Ni00OWM2LWE0ZTMtZDgzMjg2NjM4Zjg3PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmZNMUNQbDVvaU5kRUw4bmhpRExncGZibW5zeXYxWWpvaVFSRDhaVWFCNHplcTF1NThFNFM3NG9TVHZUMUwzOUhsdGR0SlRjUzdSL0s5Tm9lYXdDQWFEZlVaLzFiSzRock1BeG5BOEtTc0V3cW9vSk5Na0dDUExpdUt3aHVWSEZQRkUrTTIrem9rS3U4aXRQY0RJVUlPdE02Mi9FOUJDSFhtZ2JGYlN5ckVIbHQrUzgwWmxFNU82V3o4aDVDM05qV3pqQ1djK1FvOW9ZMzIyRFJVdXlXRkltM1FDeVVpUTZFOXlSR3U0UnB4d21OWUhPYkZTZHFpSWg4czJjOXNXTkw3TXpBdVc1Nnk3a3oyTW5JTHczZzdMMUh5YUJ2ak9MT0NlYlB6Qm85YWRpMXU3SjhNQVhMb2tMUERxSE1ISlhaRUVxL2U1YXprNURyRjh2Z01nclAxYTBEUDFxWi9xbFI5QnQ1SThFeFJ2UXBvY0VuckZubkxLcHhZQzB0RXdKZTMrQjlSZi9oNEhxajk1RUpzUHNRNGc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjQxYTM0MzJjYzdjMmI0OTM5ZTNiMjJlMGU1NjRhZWVjPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7YmNmMjAzMDMtZjc4ZC01OWYwLWJhNzQtNTQ1YWM3NzljNTlmJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ4Ljk1MFomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7R2laTW5veVpOMkhuSXZ5Tnl0aEJNOFIvOEJUYVVkUmo2enBDQjhBR0ljL3JoYWJBeGNUcmVWdlRaQmNkRVZLbmVYdDNXKzk0eVlyMXJ6MHNJQnk5L1U0cytwNHRXWm9CTng2bTl0ZVNyT0pyL1JxTE1ReHNCVWdLdHVRNXA0R3ovOXB0UU11OWR5eGg2OFE0R0hrd2w4ZzVqZDhpaGRBVFR4Lzl3NDRBeFpIQzh5ZUw3UHlaKzlDYVdoeXdKcXNxTTI4ZnBzSVlLUUpOdS95dFRQdEgrY3ZnaWZxZHAyb01ScVU5UCs1dERYNjFHTlZxeDNTRlZTMVpTRkdoRnJkV0hDOUpVZ05hY2h3ZHlmNmJsVE1YUThQSlpHS0QvTmxTSXIrSGlvK1RSWGpBc2MrWXJ1bmJGOWduYWd0dzJNdit2cXRvK3Z4NXpNS1RDSlUwaWVkSmR3PT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kMDEzM2VlZS02NDE4LTU4MDUtYTE5MS02OWI3NTRlZWFjZTU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "0ed80236f0a30c6b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "3d4360a2-ce3c-57f4-bba8-37fbfecab314" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NTJhYWJiNDAtNmIxOS00ODYxLTlkNTYtYzI1ODdmYjEwZThmPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlFrcVdKV1hKY3VjTkxPZGwxMDQrUS8wZzkxME50NWF3YUpvby9rUFgwdy90MWw2RG5CbStGaEZzV1JibkVUUUhCMFJFeTJDVXlwRVQyVXdOeXNhd1YwK1dRa1IzQkJVSDIvQ0NHT0htVzdMWlF4aHFkRHN0MDV4VVYyNHJFdFlRUW9HVlhPamxGMjFxVENOL1poUmpOVVorRzBZQ09QQVY4SXFnbUI3blFjY2ZIMFdlczhCZ3BzWjJ0K3lkMUNzc3RoOWJUekt1M216QlNUL1dxL3JyQ1RUVFZ6L2Q5d0Zhb08wdWdqOHFWTmluTHR0MXpkMFlqVEN1NGtRWkpBNE1jNTFHWXlqMnBEeDFTZ29BL0FxYk5xVTdMRnYvS1Avdkw0dmQ4cS9nRVRHWG5qcHBaeXo2amw1KzZ0Vm54N2ErK3BDUlFTNmRzNUcwZGNLWnBJVkxmcVBoNUcwN1JSdVl0YVFncWthekcvL1IycnRhci91eENnek9QVTlzT0RMK3UveEsrQmo3VXR2cXpWdFhtNFhUQmc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmEyNDdkMThkNjJlMGE3MGQzMDEwMjBjZmQwODk0ZmY3PC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7OGE0NDMwNmUtMzU2NS01N2I2LTgxNGYtNjczNzA1OTBjYmQ5JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjAzM1omcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7WnQzQVpzU2RBcGswYTQzRkd6QUxld290WEZ3SVhWR1hrbDVGMERnQmhaMm1uSmlTTlUvZGdaVjFyRDlkcUpET2Q3akttQjB1b3dia3Q5aTFYUUtBelhjRmc5QzVHZjdvbktxQlVLMDBtNjdxMWZyeVBqcHMyeEtKaFlzeStJZ1UyNkpkYTdKa25mSmxFNk5VMEhLVGpNUHhpRkVGSzFlQkZqNmxleTFOWjB3RitqTEpvakxQbUZuNU81M3lTNDFaN2wwWVlvNFB2RTlOWitEQWR5TkJMU280d2ppQnBDYVhrUUhycWlCQTE3SkJqNW4vWEZST3pqZDlkSlJiZUZmL211RjdnSU1RelUyTXUrRmtQM3NGK1gwNmtmV0R1VTBjbG1qYisyNWdqcHA5dVRnY3pBQzIvei82UFVsdy9ERUxCcll1Ukd3LzdFclRISzlSV25GOE93PT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zZDQzNjBhMi1jZTNjLTU3ZjQtYmJhOC0zN2ZiZmVjYWIzMTQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "a9a07cedf25fa5d2", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "f29b292a-a846-5722-9e09-7e7398b033c2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MDEwOWQ0MWQtNmNkNC00YTM4LTg4OGUtOTliYmMxM2FkODRlPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlZTdi8rbzZ1K3FGajB5aDB4Ni9RVy9lTFIyTkJtZmxKUGI4RHMrV25JVXRYaUNLZTQ3L0hrYXBJSUw1YUFkYlQ4NmNzam9MSlVvTm5IZGJSdHhWYm1SV0lmNVdTZTF3bGJ3Wm5RbUdZV1M4R0UxVDhWNWtNeldtZnp3T0pHMldoSXMvdEM3bk9pcDV0My9udmRxREZJRUxoWEpoSkdlRjFFbWQwMVg4ZEJzd05scHJwMXpVMmY3b3Q3QUNNTWRHZ2diVUhkaVFRYlpYVG1oallBRnV6NDZpODlhb1FwOFhGYkVIUWpqOWEwOGxmejJSUkxONHF3Y1c3ejFqYzRpcmlkVG54UGJJenJERi9sQUZ5a1l5SnArNkovaURVa0hIQzg5blFMay9iNGFUQ0t5Ulc4bXpjZ2lsVUxySUxqLzk1d1UzdEYvbjVGUThqVllUeUpkRXRvTCthbXRPTkNmUk56RVB3MytFUFlpVTNneFdWaUUvbHZXWFB1ano5azlJTFFTN25RdWVPSTYyQ0hvZVUvOGQrbHc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjhjYmJjZmQ2ZTI2OGM4MDJmMzQ4MzZmZTRjNzJhZjZlPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7OTMwOWFkN2UtZjNmMS01YjAwLTkzNjAtZmEyN2MzMDQ4NzZmJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjYxOFomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7bUdQb2VsU3hXcnczM09BakRpNFkvNk84Z3pUVXBlcFJlWmJlcmFvVFVaTmlkNDJUQm4vU3MyWWpYUmdHOCtsSGpQc2hXS2xDalJlQ3hRSStVNjRrNVZNVVJnUHdvcW9Yb2ZSR21UYzVneGlsdWIzME5aWHNzeDRlZ29FdE50Q2l4ekhVWjgwWjZDVk9DMUt4Qnp5ZkNvM2hKMlJyZHlLM0Jwdy9kWTY5dVE2ZW5NUkVvMDFYT1RYSkFBL2habWNLc3RmZlpBdi9CN0g5UUp4ZzFWdDVlWHE3cWNVaXNVK1QzVDJJUmlJdWpUQ2tGMXVYa0xkakRUbGYvLzhydnRYUGMwdUE0QjNCR3RzUWVDNEtsdlNtT2pndmQ4SlB5ZHZwQXEyMzdSSnkwVU9GUGlUd2dqVnY1TEFFZDI3aE41L05uL0hVYXpkQ1F0NG8vWHcySmUrTmJnPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5mMjliMjkyYS1hODQ2LTU3MjItOWUwOS03ZTczOThiMDMzYzI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "32c6093175efab69", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "942e0856-2a72-540b-a5ab-5f0f1a8490eb" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ODM0NGYyMzUtNmIzNi00MDgwLWI0NDMtNWM1MDhjZDViYTViPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmIzbUVkL1p2WFRZaEF1MmtMUE1DVjhoSkxLellRMlIvdWxqNjh0WUxWZGM0ZUYrZmxScVpOd1FNVzFOc1pXSHVqOVBsQ0JTVGc5cEpGRDJVcDNsZGNjZnNqU3dLVGJsU0hsSldQamg0WTc4R1pwbk9hQmdKSHVGTTRCK3JFQWZzRG5oSDZhUk0xK2s2ZmdSNzY4azNGS3F2emdEMEFGK0VvR2RhTmRjNlBJdHBpQi9OWUFVeGF6d1Y2ZnBpSk15b3pUMGpJZ0M2dHcxQkdFTVZYa21nS3dTcGxBbEF3OFhVVklaRXZjNTIyVkxUSSs2cWhIVHFlVjhpQVdSOFpGNmwyQlVvWGtvWWNKS2QxS0Jjc2ZjQXpVQ0MrMEx6L0RVdm1obE5XYjQ3TjlJZFV1U083dC8ycTY3SnAzd2F0VjJoV0JrdUxjQmhGMnQ2WUNIOStqNTcyNGY5ZEJNSTd2STdacDFxb24yVjIvL2c5UlNDTE9LWG9oM0FEWGV1bHd6U1oyMmJUNW4rYW9aY29lYmVUeWxTNVE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjFkNjA5YmJhYzc2N2NlYmZlZDYyZWVjMjkwNDBiOTEwPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7NGQ5MDliNjQtZTYwZS01MTViLWE1ZTYtY2MzZGQ2ZmJjZDM0JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjExNVomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7cGJnNXpHMTJPclduM2RLK1c2UW9LTEd6ZXJNZ1JqczhMT1pma3NBdXA0Z3ZiYzROWitaKys5WEhzdVA4SFk1bXJKTllTUnhycDRNcmhTZVozQ2NuL3VZUlc4YTJsZWw5SGhhRWpFN1Q2ek5xcVFUZGg4RFY3cm9iallTZ1JLeHl3R1QzOUlqVlNPYmJGSUdwS1pVMHNBeC9pZVFuSFNHa1lKbUNmK0hHTUFZekxBZW9ua1ZJNG1sa096ZlZld1hmN2FLSEpyZldsNmF2aHJyUHRPZVRzK2RvMWJyRDJKUWVSelZqRkloR2xnQkpZQ0tNb3lzamdQWTBvVkVhZ2hQUUJSS3FTeklOSDZrTnY5eXd2eGd0b2ZramV5ZUJ1UWh5eWhvc2dScE5DMEgrRG1TUmhGSXdZbHRiWGRFUzM5SHJTSkdCUExuMnZKOTZ1YnpOUEtINHpnPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45NDJlMDg1Ni0yYTcyLTU0MGItYTVhYi01ZjBmMWE4NDkwZWI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "51c32336549d3fb8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "c232d19c-e59c-5949-8ddf-86c5d56a8da9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZjhjMTNlODctMDhlOC00ZWRiLTkxNjEtN2FjODc3YTE1NGM0PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjFkWmZhai9maHc0cnZ5bDlMNnVQUXJOZHFSTzUxZHYwSXhOK2ljTUFIS3dReE1ZZ0pkYVBzU2xyakw5WlRLZWc3VlRKNEN1cHNDenJpam1UdnhUcUg2ZlFwdmhBWEZJVjZCVDBlTVNYZ09jRW1Vc1IrWXNIKzlDMHdBZGNGbTVQcXpoVGEvZ2hPam9ScGk3OGY0NzNBMTNiZFZFb0FDU3Rnc1I0Rnp1YnZ0MVpXVWFXTWVSQXFQaVRCRjZMM3lqYlpjZEUwZFlEYk1VTzBldDZxLzNmMExDeXVqaXRNOHZMNWJjdW1BQk9BOG1pTmpiWk9aaFNQZlNLY3BmWGxHYzZkb3hwQ0x5Wk14NlRZOTFjdkxsQWhUTlFRY2VSZHNLSEFuSldpUjY0VUdtdzVHcSt3dFhZTlhGaVdSU1lCY0t4cEhhTWFTVTkzcVFpNU9kR0o4dVZOMFdnNmJSTDRSaW1WYXArWlE0dFdwdFVGR2cybTBIWGluREZ5S3pycXB3QUpadjJuaWQ5TUFiVDNCcitGbVVoWGc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmEyMzhmY2E0YjRlMzRiZDU5YTZhM2NjMDM0NjE4OTkyPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7N2RiODNlNGUtNzI2Zi01N2VhLThmZjAtNjkxNzQyOWEwYjg1JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjM2OVomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7VzBWRGlnT3ZKWTZOZ0t6RVNVQUxmakVtUWhsKytiUElFTytHSWZmSml3QTdwVFFOQ3kzeVVuUUlxMStLYk1leUdLdXJnKy9aS0VBV3h5UzV2ZVc5WDdKN2tYb2dvOHNBbDhkV214OHVabExBd2JUQ2tuTlliT3dJV05JbUpXdDAvRmZxOHlpbEJ4U1dLeEpMZE9UV1VxK29BdlpZWVJYUTJvdENIZlhRUXlSR0ZUTlNWYjFJSUo5bkFtVUlacUJ5SGlLS1E3UEViMFdGbm5XM3ZOQys1R1UrRHI1am83MnVMN3JBRFgzK1RQM0RsWU1YWExudjFWcElMeUlQV05maTlsSnlKOEM2VHcxYVk1dnB6c3JnMjEwNTJUd3lzRldHK3pBZkJSZy9OVGFZVlcvTXRSdE5iazFxb0FDRVUwNk1qc1B3UTBsVzZyZXY4Y3dseUFVUUtBPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5jMjMyZDE5Yy1lNTljLTU5NDktOGRkZi04NmM1ZDU2YThkYTk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "30aa08d64ac6f00d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "5fb0d6e8-8e77-58b9-b78a-81b1be81ac59" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NjM2OWYwOWUtZjRjYy00MDVmLWExMTMtMDIxMTI4NjE3ZDc1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkpjL0pRN2VSbkVSTlBlbkFqRjRQSTdaeDZvNG9DajZCeWJ1VnNQM3lhd2IvUGxqdDhjVVdOMW5KRU1iTnUzQVhxdTR4UzN6QXVKZnNRUUtvSmtDZ1ZjejNJZnIzNlN4WmxaQmRwcEwyK1RVamF6Z21pSmFFM0dXZ095OHJHSkpnV3doTUVaTFpmV3lkR0huUS9pRXBIMXFyM1UzQmN6WnVoT2RPbit2b1R4dVptV1BzbVhqQUNMbDlJR1VLWGxZN2poZi8yOSt6cE5PL3laWDRBZzZQNThsYkJlR2xDdjU4dTJ6UWpVTGFsVTY3OVI0UzBBUUptdkphWmZIY1d2cHIzZkl0bWtZNkZnWlFvM3VIUmdJV1VKSS9WY2ljRVBqNmdNV2pnNXJYWjJVSUxld3V3eHpyZkxZZUZBZ21BcEVwZWQydkpHUWZ2bXNGdGVOUEZBRElvdmo2MTVVYnVCOWl2M3hubStmYjNtV2tqMkQ3V3M4U2p6Tm0wWkp3NUI3bmVENFBTVllHRlk4dEdmRDlZYkxjZmc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjI5ZmQ5MzUwY2E1NTIzMjc5MDhmMDFkY2QwOGY3YzkxPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7OTRkY2NjZDUtZWJkNi01NGI2LThmM2ItOWI4Y2RiMjMwOGQ5JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjI4N1omcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7RHZESkhJS0ovSjIvNi9nUFVMREhHVHlWWDMzZlZlaXcvUzJxTUxlNE02WHVCWDMrcEI0VGdiREh2aHUvbFJqMUdhRG5CNVY2N3lRT0xoSXcrcWZ4VHFlNXdJT1puUXhTc2IwNFF1dzhNVDhKY2xuVmRrc0ZibERYbUd0cHVGbFlUVHNRRndib2pDcWVCdG02OTdBY1F4TWNibkNudDBtS3hqK0RaaEpGZlcyaFR1QUpWeUE3MHpUSDVNR0JOMlJZd3Z2QXc2VXJmZ0oxUjdFVDN2ZGNUN1h1WWlEZEthTFZkSlRWZENzT2RIU251cUIzRkRidFNtRVFmeXYvSnJtQ0ExN1V3endZRTJNcEgvckp3VXE2N0Rmb1NjSk8vWWUyMHExOWl4SXYzUTB5L3VEUWttWUswZTZsSWQ4K3AzU2NDU3I1QldDWm1XcDB3bWkvUVNnSkZnPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41ZmIwZDZlOC04ZTc3LTU4YjktYjc4YS04MWIxYmU4MWFjNTk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "fcc734aae40e6501", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3333" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlZnNSUyQjV0cXZWME5zTldmc25XVmUlMkY1dmRBdnNSM05XUGphS21OaGNLaVA1bGZtbWFmS0N4MUxkeCUyRmFvZ3JHVzh1QWNQeHBObms0clJGTU9wSHA5Y3JwWTBCUERMeVRkSjdxTDBDeTlpWEdCRjVxWVlQOWUzQnZoV1hiTUxvcGF6SGJKUXFlNEo5VTZLVjhPUHJKbHdmWkdQbTRMMXRaeWRYdzRsSFUwVFQ1M05JVEVWSGF1bnIzR1hpbFYlMkZDQUVISUM2NTRMJTJGRFpPREdrY0h0aXRBYUZqeUhoZ3M3eiUyRnY2MzVXUjN3elk0TlZiejZiMnN2blclMkZmRHVqMzZSVk84UjVIN2tKOERFQTNRTGMzTnUlMkZQeFJrckpvTUREeEVTWG8wZzI0UjQ2bWtiVUZ4QW9ISGJxSGZ6RDBvcFZ0Nkt5UDJCYTNvTXhwJTJCRERRZTQ3JTJCT0laZmEyRU1RVHhNU2hMYmNOVDNKanFZMkxNdGklMkY0TW5QQkVJSkZmUSUyQmRPZUg4WHNaUTZBSXBiaVdxQ2dwTDR4aVE4emclM0QlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJmTTFDUGw1b2lOZEVMOG5oaURMZ3BmYm1uc3l2MVlqb2lRUkQ4WlVhQjR6ZXExdTU4RTRTNzRvU1R2VDFMMzlIbHRkdEpUY1M3UiUyRks5Tm9lYXdDQWFEZlVaJTJGMWJLNGhyTUF4bkE4S1NzRXdxb29KTk1rR0NQTGl1S3dodVZIRlBGRSUyQk0yJTJCem9rS3U4aXRQY0RJVUlPdE02MiUyRkU5QkNIWG1nYkZiU3lyRUhsdCUyQlM4MFpsRTVPNld6OGg1QzNOald6akNXYyUyQlFvOW9ZMzIyRFJVdXlXRkltM1FDeVVpUTZFOXlSR3U0UnB4d21OWUhPYkZTZHFpSWg4czJjOXNXTkw3TXpBdVc1Nnk3a3oyTW5JTHczZzdMMUh5YUJ2ak9MT0NlYlB6Qm85YWRpMXU3SjhNQVhMb2tMUERxSE1ISlhaRUVxJTJGZTVhems1RHJGOHZnTWdyUDFhMERQMXFaJTJGcWxSOUJ0NUk4RXhSdlFwb2NFbnJGbm5MS3B4WUMwdEV3SmUzJTJCQjlSZiUyRmg0SHFqOTVFSnNQc1E0ZyUzRCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMy5JZD0yJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4zLlJlY2VpcHRIYW5kbGU9QVFFQlFrcVdKV1hKY3VjTkxPZGwxMDQlMkJRJTJGMGc5MTBOdDVhd2FKb28lMkZrUFgwdyUyRnQxbDZEbkJtJTJCRmhGc1dSYm5FVFFIQjBSRXkyQ1V5cEVUMlV3TnlzYXdWMCUyQldRa1IzQkJVSDIlMkZDQ0dPSG1XN0xaUXhocWREc3QwNXhVVjI0ckV0WVFRb0dWWE9qbEYyMXFUQ04lMkZaaFJqTlVaJTJCRzBZQ09QQVY4SXFnbUI3blFjY2ZIMFdlczhCZ3BzWjJ0JTJCeWQxQ3NzdGg5YlR6S3UzbXpCU1QlMkZXcSUyRnJyQ1RUVFZ6JTJGZDl3RmFvTzB1Z2o4cVZOaW5MdHQxemQwWWpUQ3U0a1FaSkE0TWM1MUdZeWoycER4MVNnb0ElMkZBcWJOcVU3TEZ2JTJGS1AlMkZ2TDR2ZDhxJTJGZ0VUR1huanBwWnl6NmpsNSUyQjZ0Vm54N2ElMkIlMkJwQ1JRUzZkczVHMGRjS1pwSVZMZnFQaDVHMDdSUnVZdGFRZ3FrYXpHJTJGJTJGUjJydGFyJTJGdXhDZ3pPUFU5c09ETCUyQnUlMkZ4SyUyQkJqN1V0dnF6VnRYbTRYVEJnJTNEJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS40LklkPTMmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjQuUmVjZWlwdEhhbmRsZT1BUUVCVlN2JTJGJTJCbzZ1JTJCcUZqMHloMHg2JTJGUVclMkZlTFIyTkJtZmxKUGI4RHMlMkJXbklVdFhpQ0tlNDclMkZIa2FwSUlMNWFBZGJUODZjc2pvTEpVb05uSGRiUnR4VmJtUldJZjVXU2Uxd2xid1puUW1HWVdTOEdFMVQ4VjVrTXpXbWZ6d09KRzJXaElzJTJGdEM3bk9pcDV0MyUyRm52ZHFERklFTGhYSmhKR2VGMUVtZDAxWDhkQnN3TmxwcnAxelUyZjdvdDdBQ01NZEdnZ2JVSGRpUVFiWlhUbWhqWUFGdXo0Nmk4OWFvUXA4WEZiRUhRamo5YTA4bGZ6MlJSTE40cXdjVzd6MWpjNGlyaWRUbnhQYkl6ckRGJTJGbEFGeWtZeUpwJTJCNkolMkZpRFVrSEhDODluUUxrJTJGYjRhVENLeVJXOG16Y2dpbFVMcklMaiUyRjk1d1UzdEYlMkZuNUZROGpWWVR5SmRFdG9MJTJCYW10T05DZlJOekVQdzMlMkJFUFlpVTNneFdWaUUlMkZsdldYUHVqejlrOUlMUVM3blF1ZU9JNjJDSG9lVSUyRjhkJTJCbHclM0QlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjUuSWQ9NCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNS5SZWNlaXB0SGFuZGxlPUFRRUJiM21FZCUyRlp2WFRZaEF1MmtMUE1DVjhoSkxLellRMlIlMkZ1bGo2OHRZTFZkYzRlRiUyQmZsUnFaTndRTVcxTnNaV0h1ajlQbENCU1RnOXBKRkQyVXAzbGRjY2ZzalN3S1RibFNIbEpXUGpoNFk3OEdacG5PYUJnSkh1Rk00QiUyQnJFQWZzRG5oSDZhUk0xJTJCazZmZ1I3NjhrM0ZLcXZ6Z0QwQUYlMkJFb0dkYU5kYzZQSXRwaUIlMkZOWUFVeGF6d1Y2ZnBpSk15b3pUMGpJZ0M2dHcxQkdFTVZYa21nS3dTcGxBbEF3OFhVVklaRXZjNTIyVkxUSSUyQjZxaEhUcWVWOGlBV1I4WkY2bDJCVW9Ya29ZY0pLZDFLQmNzZmNBelVDQyUyQjBMeiUyRkRVdm1obE5XYjQ3TjlJZFV1U083dCUyRjJxNjdKcDN3YXRWMmhXQmt1TGNCaEYydDZZQ0g5JTJCajU3MjRmOWRCTUk3dkk3WnAxcW9uMlYyJTJGJTJGZzlSU0NMT0tYb2gzQURYZXVsd3pTWjIyYlQ1biUyQmFvWmNvZWJlVHlsUzVRJTNEJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42LklkPTUmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjYuUmVjZWlwdEhhbmRsZT1BUUVCMWRaZmFqJTJGZmh3NHJ2eWw5TDZ1UFFyTmRxUk81MWR2MEl4TiUyQmljTUFIS3dReE1ZZ0pkYVBzU2xyakw5WlRLZWc3VlRKNEN1cHNDenJpam1UdnhUcUg2ZlFwdmhBWEZJVjZCVDBlTVNYZ09jRW1Vc1IlMkJZc0glMkI5QzB3QWRjRm01UHF6aFRhJTJGZ2hPam9ScGk3OGY0NzNBMTNiZFZFb0FDU3Rnc1I0Rnp1YnZ0MVpXVWFXTWVSQXFQaVRCRjZMM3lqYlpjZEUwZFlEYk1VTzBldDZxJTJGM2YwTEN5dWppdE04dkw1YmN1bUFCT0E4bWlOamJaT1poU1BmU0tjcGZYbEdjNmRveHBDTHlaTXg2VFk5MWN2TGxBaFROUVFjZVJkc0tIQW5KV2lSNjRVR213NUdxJTJCd3RYWU5YRmlXUlNZQmNLeHBIYU1hU1U5M3FRaTVPZEdKOHVWTjBXZzZiUkw0UmltVmFwJTJCWlE0dFdwdFVGR2cybTBIWGluREZ5S3pycXB3QUpadjJuaWQ5TUFiVDNCciUyQkZtVWhYZyUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "716" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "5d9de83c-0c54-59d5-a453-bf653ca2ed35" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+NDwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjI8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD41PC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MzwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjE8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41ZDlkZTgzYy0wYzU0LTU5ZDUtYTQ1My1iZjY1M2NhMmVkMzU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "3ad3769f07c75c25", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "32dec7cc-2b65-503f-b318-90951b9334df" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OTA0MmI4MDktYmFjOS00MzU5LTkyOTMtYjFmZjJkZjA0YjZmPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkp6MjY1blFnaTZpVDlHWXdoUklKM1htcHhsUTY1VTNZczR2bnBGQ3lkQ0NBdFcyTUVqMUtKYW8rVldDaU55TkMzUHNEV1NhSUhZblE1Yno1OERZZm5PeGd4a0tkTy9adlVhdWZPeXJKUDJScFhLcjVFdm9Pa3Y5ekltaGFhendTektlem42amE5WUgxckJoWmt3OWxMVDYrYWFLSlRiMnl3dm5hTjlRNGRMcytoNHlyY21LWUtrV3BTQlBnZGVLK0N5QitwVEdWS3h5d2MxQmNncEVQdEM3dnVzMTJRM1laRnVEckNzcEgyTVhJcWpSekZEYjFselp2M2JxWWVaZkE5RUZSRjJJYVhaZ3NaVmlsQXRjZ3FGMU9wd1dxWUt6Y1JlV0lXNUo5ajNERDJURGxFRk5oM2R5RU5PbXFsTEdnNGZ6MVByQ0RnVi9zbHRqTmZXdGlkQllqMFVVUFNZbUZBazQwb2VtUy9rbFN5QWNBNThxMGxoaFJnRXZrdnUwdkpYL2NFcFgwdVZIOFFIQklEZEhad0E9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjgwZjllOTBhMTdlMTI4YzdkOWQwZGRmYTZhM2QzMDY2PC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7ZTk4NmIyY2ItMTJiOS01OTU3LWExOWYtZTU5MjIyNGM5NTM4JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjIwM1omcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7UHF6ZG9oVnZqVnhSUVE5eFFFZmhTNVp1MmdDV09XYU45NFY4bU1zd2ZQOWs0RzY4K3hLOEczbENQdmV0NWIyUEY1cVNUaFphd0dQRC9aQXZnYXIyeUtTWmxnQ1k2WDE3a1U3ZmdlY3g5R3dsTzd6cVEyZFRDaEljeWNBOUtWMEpMRGs2bGYzaW9qTm9ib0ZhUCtsM0tieW5hK0dUcEswaUsva2lMeHZjMzhTV044YmZ2ZjBqVFpPQ0w2TTNIcmRwODA3NGVKVGJVQ200ak8xc1Z3L0dkVEdYUWJlbjUyYk1QWTgzTU9yR2pZK3o4dCtDNGZsYWJyOWFPbzdRVkhDODVZbG1oZHNJRkQzMGNHNGVjM0h1eU9BaW9uN2JmcnBUWGw2SWZGb2FIaDZjbVV3bXlWTG1hMndub3BDZ2xUNUtFZVFEUzRwRkN2L1ZlcHpPZU12UHB3PT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zMmRlYzdjYy0yYjY1LTUwM2YtYjMxOC05MDk1MWI5MzM0ZGY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "d08007d6f8b4e1ad", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "91bc572a-7688-57ca-bf21-0073467e332a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MDkxMTllZTYtODU4Mi00MGEwLTgyM2QtNzczMTUwNzFmMThkPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQk9rWDhWVTRPdEpvejhGQXV5c0NucStzUjJDd0xXcXRPTG9CYjVlZmlPT0NvUFZVZC9ZZEpqQjNRL0VjcngwS1pDdXlLcm84S3VVMnc3YURybDE5Q0YzZEhKVEZhZXhtdE1xaDZxTXJOZGtpZTNHazV3eERlbVc0NC8rbkIzamhKTjFlVDIwekpTbkR3T0lMbzQxNjExSlppMzNTT3YySGI3b0ZKRG9nM09LajUrckFBVmh1SUNJSW84RXc3aUFleVNHcGZod0JnWnJvcHhYK3ZaaTY1VnJRcXE3ejMrbytsVjBpODFhZ25HT0MyU0VqelJpUHFOTlltY2s0azF1c1NEeElRQklVeUs4VG9qTGZWb0FBWWkxOFZlWVVORDFHOWU5b3ZRbytpNnRzT1g0a1BGbXV4T3ZxNWxmRmh5ci9uWTFpZ2xwN2Y5NE1yT3NKdFM1NGRVcGUrTHVYMDdpUHJQSm5MaU8zYmxZMXdLYm55NW9jSkEyK25YMzhjdEVtUHVKVmR4SG9ZUExvQ3VsL3hMZzk4T1E9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjM3N2U0Zjk1NDRkMDJlMTM1NGExMTY2MzE5ZmJlMWM4PC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7YmM5Zjg1Y2UtZTUxMS01ZjQzLWJjYzUtZDI5N2Q1ZTQ4MzJjJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjQ1MlomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7TFQ5djEvK0dMZXlhODlYQ29SVldBeDZQNDdnU05rVlZTZmNFdFMzUmorNmNYZWo4cSs1U0VSKzl4RnpTbXI0VkNVeFhjZlMxc0lqUENDVkUwVEphcWdyWWFsQ0x2cG9XVW1oQWJ0K0lKNWlNSzhqWWgwdEdLdTdCU3pFanY5TzZpeUJCczhNNzFOSitDMGUyUUNCaUxoaWEvcXR5WmlONElPU01BNjhmdDlIdVVrZmQ4N1RTcFB4Vk9BQ2I0d09ITXZDeHJ4RXlpTnVPeGZkOElZTU5xWSt4aDBUamFDNU5yOUV0UmpvYlBGR3YvSTErSzBPZGVjUE5GVXJsYmpDOGh2ZktMUkhnSnE0Y3JkWnE3QXVEVmJ5WEFtV2l0dElOR3JlcG5uaHc3TjRHUXhWTTVrT28vYTNrUzFWNHhJQzl2bTByZ011LzN4NkJrWCtHU1cwbmxBPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45MWJjNTcyYS03Njg4LTU3Y2EtYmYyMS0wMDczNDY3ZTMzMmE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "fc0affeef53cddf8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "d892d7f3-5b67-5576-b32d-80aa6b91d22b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MDdiNWMxMjktMDY5My00YTYzLWJjOWEtOWM3NTVkNzIyNDA1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkNOS25QSFpTeC9VQ3E0T1lQY0ZORDNPaHZHOE5xcG1zYnFjRldQaXRrUU05aWNkaWNXRVBLNVBrTlpKeXdZL3E3dmtMclJsZWtzeGQyaVduVCsrSGJpSkg2bEhXUXkrazREQm9oK25LcGhBZFo5aG1GMGRVN2daNGlFRkFzQ09mTUdxb0ExZ3JFdWZLK1VMKzBTZGkvOVRibmtaakd5LzZjTWVLY0lITHFJMjl0TlRUUTJzN2xiRGhMQ0EzTjJZWkt4R0hOUXNEYy80ZkxaN3I3bkVlc2F3cTBBWksvbVdENFA0eUVkM3g4N2d2a2hEQkZkNTNmS2lnQkduZTJ6RkVsemVOeUlkeWNoZHV4eHFPaUUxa2xkdkdaOThyS0hjUkkyOG1xZlNMbms0WWVVY3hGNjh3aGV1VGVEbFltSlR2eEVLRWprS3c0N1FMVE9tbGwvbk1nb1hxZXNieVRQOFFiczVRR3N0bDd3Nis3MzF0dkhneXE4cTd3QkQvSG9UNjNyOUdPQkJ0eWtXOTgvSUlJYlFzeFE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjkxYWUyZTFkZGQ3NGY0M2I4ODE4ZGQwMTM3NjRjMmZiPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7ZDA5MjAzYTQtMjJiZS01ZmM1LTg2ZDktNTRmZDEyNGI2M2FhJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjcwMlomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7dER1QUJUWmU4Q0UrTUJnbVI0dlkwcjg4VWxUamk3OGFjVDk0VFVSbDRoc0FmODN6cnU0WDNqN2FhV3YxRThLb2M5bkMrMnFQdmV4QVRZVEdiMCtJVzdZVWsvd1o3NHJoaHl5cHkwaU11aWNsZWxDSU51S29ESWRiOFVHZXphckFDOHgxWFNuR044QzFlU0lHQzNNNWJrdGZYR203alB1OG8yenVnVTVkZXVqaUFvak85dFdTSE0zQWI4V1NsdEd6bFc3QTlHOVhkNDZzL2tyaEZPRnd2WGxHcHNyVS9kMHhaMkFIQUdJU3ZTVXRUdmIwcDVUcUtBcUhVRUl5ZXBmNURxNUQ1dnlVQWtEdnNGMkRTdC9hSVJBQ3pLVGFzdG85ejlQdVF4cDRva2p2eFNlcDNEUmcySGtDc2ZHK1BwSWxnSXhnUDRONEJhRWJ2QUd3d2RQM3RnPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kODkyZDdmMy01YjY3LTU1NzYtYjMyZC04MGFhNmI5MWQyMmI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "4695e3e558db46f4", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "a1beea4c-4948-56d3-ac59-bd1579beb18e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ODczOTQzY2QtNTRkMS00MDAwLWFlZDUtZWFiZjg3Zjk3ZGFhPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkpCY0lrR20rY3hJSVA0b2hIQ3BESjd3ZjhiS1R4aHdtOGphYnBPK0RwRnMvQ2hteW41WlhwUUhLTUlRc2FmbEJGaUd3eTBud2tlRlZkSFpmWmJlZlRnU2l4MVVMell6dkEwMnFFR1ZsQitkeGZCbmsyMXhHbnlySnRqeUh1RFRtdEhYL2llQWpiMksyb3lWenJ1MXFDQXZLNGJKaE1IaDAySEY3Yy9UcURlZG1yM2tPOWJsZ0dtanl6d3ptRzErNVA1VlJRdW84UjI5TjBPRjczdGVKMHlKRmtPZUR1TG9scXZtSVpWbGExN25ZUkFoYmN1Qjk5K3J6aDhwcSt1Uzk0SmVXanVjRElvMTJwZ3pOdmVzdXQ0MHllaWxMMnZHdEhIeUM5dFJBYXJEc0diSkNqVXBhMWdyVEV5YSs0SjM0K2hnOTAweTBUdTh3bGZDMlVybklVWFhVdDRBemswbHpZZ2dLOHdZY2lLRVVXaGQxRnZha2d2eGM2WkxxM3NacjI3VU9taW43OGRRdkNoRE5vcENOSEE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjM0MTkyNTVhNTk2ZmNmZjk3MzRhZDZjODNkNzNkZTQyPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7ZDZhYjFiODYtMWU2NC01NjFmLWI1ZGUtNGNkZjJlOTExYTcwJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5LjUzNVomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7Q1VQdjdVTU5RVjZHU2Jmb2NJQTErU29YY1Q1UG9DUklQQ3VQNC9nRnVYZ3k4c0QxVHpQWi9iZ0kxWnhDeERIUzJ2T002RTdaVSsrS0V2NGVBdGNMcTBsUStidVR3b0QzMkVwcExsVlNWTkU2RktkSUcyL1FIQ2cxbXozWGJnQ1B5YkdnZ2FGSFBYOTYzaFJqcmdmWlN3bVZPbjRzUmNHYmlXdDE4aTZYUlpFeHhGL3JzYWIwbzZwZ21NdXlLZW8wY3k5R21oVXRncURzWkU5Y0dydjdJNmFmV3dwMHc3R1ArSkE5K3d1V3NoOWhRYWcwUnAyYW5BOVBNdlY5bnIzVnJsRUdhSHhhYWE4d2J6SWRWUGY1bnRQRWlzM1BuaXVxMUlSUmZjeTFvUTRHZTloUVpiNlBaU1JuR3pXK0NkUnZ2L2hIYkRldWZwdUlBNEFHVzhsNjlRPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hMWJlZWE0Yy00OTQ4LTU2ZDMtYWM1OS1iZDE1NzliZWIxOGU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "d39a3336686d6ea6", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1975" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "a23fbd0b-a505-578b-95ee-ea5295f3a0d6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MGQxNGJmM2MtMzk1OC00MTFkLWE4ZDUtZWQ4MzdjNzdlZTNmPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkptRTkyaVgxNDJaOVpqWHdmaXFsYmwxditoeHNUeFNoMTl3anYrTzU3NU5Tcm9aNVVLTFpKSGZ5V3Y3U05uL0p2UFBiR3E0emF4V1NGK0hCM0R2eTFNME9HNmRFSzkzS0NaL3d2TitVNytPSXAyWTZ6VXk2bnpkNlpaemZITitXQkNqUGc3dzNtQWlRa2ZLYnp6M08wWlZOS0tMYmR3OTNGRktJRlZGb3N6NS80T09TaWFQMHgycWRlZitNdFdKOWpQK3FOVm1IUkFadmNRd0VzY05wUDdDWVhtSzNFZXN5QytyckZOUU0rUXByb3RVNU51dkpuMm5uNjhBR2xXOGFGRytVYnRaVXhVWFZjWGxmSElRWlhNMnZPZytGVUl4ZndWcERNYnR2ZGhacXZwd2gxaHIwREI2T1dkdHZJNTkwd2JxMmRYaHh6anc1SHQrbTRPSy81VU5MSWd4RzFxK0ZxTEpieURHdmFBTmhPNnFZVlYrQTJKb3JPVGhqVmVsdkhtMmtqb2VueXRnQVJDMEZMaFNtS3c9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjI1N2MyN2NkNGUyZGRmYjM2YzAzMGEzZTcxN2UwYjcwPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7OGE4MWU5MWEtM2E1Zi01NzBiLTg1ZDQtYmU0MzBhYWFkYjY0JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM5OjQ5Ljg2OFomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7aFRkY3oxWnpIdEdZNklDYkdrbm5pUDZtUWhoT1JSV1B3MlZjMFR4clBVcGtUM3JtQWI2ZWZERUFwSlNHYnp0RzZuY0krbjVRblgxakNqVkFSUCtQd09xdXJ0OXNLWWh3QmFIM3dlaU9LSkZnbzFjcDYrVFhqc3dHei9POXY5VWdPQVJTSmpneHNVN0FPeEFpOG9jVUVjcDg2UlhaU0x6NFQvQjAwRW9SVUo1T0tsVmNXUHBNaUpybjA3dGRoTzlFZEd2d0FENGhCL082Y1RZUEhyUWhXazYwc2Jmd29qazVnd1NmUGh6YmNGVkViTUlFZmQwbHNmejY0bVRlSkllRDZjd2lWVXhxT29nQXR6SUsxWVdSdUxtMlJkTGRjM0x2YWFJWEVBUTZtdkdoZ0kwQ2lpNjg3RmZHSGtXcFJaUHpWL2Y2RHVDTFJiNXJXYmdiQ3Q3Vnd3PT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQmF0Y2hpbmctdG9wLTE6MTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJnF1b3Q7Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hMjNmYmQwYi1hNTA1LTU3OGItOTVlZS1lYTUyOTVmM2EwZDY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "3653666c9073e7cd", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3305" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkpjJTJGSlE3ZVJuRVJOUGVuQWpGNFBJN1p4Nm80b0NqNkJ5YnVWc1AzeWF3YiUyRlBsanQ4Y1VXTjFuSkVNYk51M0FYcXU0eFMzekF1SmZzUVFLb0prQ2dWY3ozSWZyMzZTeFpsWkJkcHBMMiUyQlRVamF6Z21pSmFFM0dXZ095OHJHSkpnV3doTUVaTFpmV3lkR0huUSUyRmlFcEgxcXIzVTNCY3padWhPZE9uJTJCdm9UeHVabVdQc21YakFDTGw5SUdVS1hsWTdqaGYlMkYyOSUyQnpwTk8lMkZ5Wlg0QWc2UDU4bGJCZUdsQ3Y1OHUyelFqVUxhbFU2NzlSNFMwQVFKbXZKYVpmSGNXdnByM2ZJdG1rWTZGZ1pRbzN1SFJnSVdVSkklMkZWY2ljRVBqNmdNV2pnNXJYWjJVSUxld3V3eHpyZkxZZUZBZ21BcEVwZWQydkpHUWZ2bXNGdGVOUEZBRElvdmo2MTVVYnVCOWl2M3hubSUyQmZiM21Xa2oyRDdXczhTanpObTBaSnc1QjduZUQ0UFNWWUdGWTh0R2ZEOVliTGNmZyUzRCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5JZD0xJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4yLlJlY2VpcHRIYW5kbGU9QVFFQkp6MjY1blFnaTZpVDlHWXdoUklKM1htcHhsUTY1VTNZczR2bnBGQ3lkQ0NBdFcyTUVqMUtKYW8lMkJWV0NpTnlOQzNQc0RXU2FJSFluUTViejU4RFlmbk94Z3hrS2RPJTJGWnZVYXVmT3lySlAyUnBYS3I1RXZvT2t2OXpJbWhhYXp3U3pLZXpuNmphOVlIMXJCaFprdzlsTFQ2JTJCYWFLSlRiMnl3dm5hTjlRNGRMcyUyQmg0eXJjbUtZS2tXcFNCUGdkZUslMkJDeUIlMkJwVEdWS3h5d2MxQmNncEVQdEM3dnVzMTJRM1laRnVEckNzcEgyTVhJcWpSekZEYjFselp2M2JxWWVaZkE5RUZSRjJJYVhaZ3NaVmlsQXRjZ3FGMU9wd1dxWUt6Y1JlV0lXNUo5ajNERDJURGxFRk5oM2R5RU5PbXFsTEdnNGZ6MVByQ0RnViUyRnNsdGpOZld0aWRCWWowVVVQU1ltRkFrNDBvZW1TJTJGa2xTeUFjQTU4cTBsaGhSZ0V2a3Z1MHZKWCUyRmNFcFgwdVZIOFFIQklEZEhad0ElM0QlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjMuSWQ9MiZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMy5SZWNlaXB0SGFuZGxlPUFRRUJPa1g4VlU0T3RKb3o4RkF1eXNDbnElMkJzUjJDd0xXcXRPTG9CYjVlZmlPT0NvUFZVZCUyRllkSmpCM1ElMkZFY3J4MEtaQ3V5S3JvOEt1VTJ3N2FEcmwxOUNGM2RISlRGYWV4bXRNcWg2cU1yTmRraWUzR2s1d3hEZW1XNDQlMkYlMkJuQjNqaEpOMWVUMjB6SlNuRHdPSUxvNDE2MTFKWmkzM1NPdjJIYjdvRkpEb2czT0tqNSUyQnJBQVZodUlDSUlvOEV3N2lBZXlTR3BmaHdCZ1pyb3B4WCUyQnZaaTY1VnJRcXE3ejMlMkJvJTJCbFYwaTgxYWduR09DMlNFanpSaVBxTk5ZbWNrNGsxdXNTRHhJUUJJVXlLOFRvakxmVm9BQVlpMThWZVlVTkQxRzllOW92UW8lMkJpNnRzT1g0a1BGbXV4T3ZxNWxmRmh5ciUyRm5ZMWlnbHA3Zjk0TXJPc0p0UzU0ZFVwZSUyQkx1WDA3aVByUEpuTGlPM2JsWTF3S2JueTVvY0pBMiUyQm5YMzhjdEVtUHVKVmR4SG9ZUExvQ3VsJTJGeExnOThPUSUzRCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNC5JZD0zJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS40LlJlY2VpcHRIYW5kbGU9QVFFQkNOS25QSFpTeCUyRlVDcTRPWVBjRk5EM09odkc4TnFwbXNicWNGV1BpdGtRTTlpY2RpY1dFUEs1UGtOWkp5d1klMkZxN3ZrTHJSbGVrc3hkMmlXblQlMkIlMkJIYmlKSDZsSFdReSUyQms0REJvaCUyQm5LcGhBZFo5aG1GMGRVN2daNGlFRkFzQ09mTUdxb0ExZ3JFdWZLJTJCVUwlMkIwU2RpJTJGOVRibmtaakd5JTJGNmNNZUtjSUhMcUkyOXROVFRRMnM3bGJEaExDQTNOMllaS3hHSE5Rc0RjJTJGNGZMWjdyN25FZXNhd3EwQVpLJTJGbVdENFA0eUVkM3g4N2d2a2hEQkZkNTNmS2lnQkduZTJ6RkVsemVOeUlkeWNoZHV4eHFPaUUxa2xkdkdaOThyS0hjUkkyOG1xZlNMbms0WWVVY3hGNjh3aGV1VGVEbFltSlR2eEVLRWprS3c0N1FMVE9tbGwlMkZuTWdvWHFlc2J5VFA4UWJzNVFHc3RsN3c2JTJCNzMxdHZIZ3lxOHE3d0JEJTJGSG9UNjNyOUdPQkJ0eWtXOTglMkZJSUliUXN4USUzRCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNS5JZD00JkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS41LlJlY2VpcHRIYW5kbGU9QVFFQkpCY0lrR20lMkJjeElJUDRvaEhDcERKN3dmOGJLVHhod204amFicE8lMkJEcEZzJTJGQ2hteW41WlhwUUhLTUlRc2FmbEJGaUd3eTBud2tlRlZkSFpmWmJlZlRnU2l4MVVMell6dkEwMnFFR1ZsQiUyQmR4ZkJuazIxeEdueXJKdGp5SHVEVG10SFglMkZpZUFqYjJLMm95VnpydTFxQ0F2SzRiSmhNSGgwMkhGN2MlMkZUcURlZG1yM2tPOWJsZ0dtanl6d3ptRzElMkI1UDVWUlF1bzhSMjlOME9GNzN0ZUoweUpGa09lRHVMb2xxdm1JWlZsYTE3bllSQWhiY3VCOTklMkJyemg4cHElMkJ1Uzk0SmVXanVjRElvMTJwZ3pOdmVzdXQ0MHllaWxMMnZHdEhIeUM5dFJBYXJEc0diSkNqVXBhMWdyVEV5YSUyQjRKMzQlMkJoZzkwMHkwVHU4d2xmQzJVcm5JVVhYVXQ0QXprMGx6WWdnSzh3WWNpS0VVV2hkMUZ2YWtndnhjNlpMcTNzWnIyN1VPbWluNzhkUXZDaEROb3BDTkhBJTNEJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42LklkPTUmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjYuUmVjZWlwdEhhbmRsZT1BUUVCSm1FOTJpWDE0Mlo5WmpYd2ZpcWxibDF2JTJCaHhzVHhTaDE5d2p2JTJCTzU3NU5Tcm9aNVVLTFpKSGZ5V3Y3U05uJTJGSnZQUGJHcTR6YXhXU0YlMkJIQjNEdnkxTTBPRzZkRUs5M0tDWiUyRnd2TiUyQlU3JTJCT0lwMlk2elV5Nm56ZDZaWnpmSE4lMkJXQkNqUGc3dzNtQWlRa2ZLYnp6M08wWlZOS0tMYmR3OTNGRktJRlZGb3N6NSUyRjRPT1NpYVAweDJxZGVmJTJCTXRXSjlqUCUyQnFOVm1IUkFadmNRd0VzY05wUDdDWVhtSzNFZXN5QyUyQnJyRk5RTSUyQlFwcm90VTVOdXZKbjJubjY4QUdsVzhhRkclMkJVYnRaVXhVWFZjWGxmSElRWlhNMnZPZyUyQkZVSXhmd1ZwRE1idHZkaFpxdnB3aDFocjBEQjZPV2R0dkk1OTB3YnEyZFhoeHpqdzVIdCUyQm00T0slMkY1VU5MSWd4RzFxJTJCRnFMSmJ5REd2YUFOaE82cVlWViUyQkEySm9yT1RoalZlbHZIbTJram9lbnl0Z0FSQzBGTGhTbUt3JTNEJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNCYXRjaGluZy1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "716" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "25a38af1-f18e-5fd7-857c-dda8c178b88a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4yPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MzwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjU8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4xPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MDwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjQ8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4yNWEzOGFmMS1mMThlLTVmZDctODU3Yy1kZGE4YzE3OGI4OGE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "e10c679cd43c9c39", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "160" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0JhdGNoaW5nLXRvcC0xJTNBMTA2ZWFkOTMtMjliMC00MGE4LTg3MzUtMWIwNjJmNWFlZDBiJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "2a7ba42c-010b-529d-afde-f37531fc1ef2" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4yYTdiYTQyYy0wMTBiLTUyOWQtYWZkZS1mMzc1MzFmYzFlZjI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "de30849224fe4e6b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "128" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNCYXRjaGluZy1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:51 GMT" ], "X-Amzn-Requestid": [ "8836d128-a978-53bd-9ff0-8671998f24e0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD44ODM2ZDEyOC1hOTc4LTUzYmQtOWZmMC04NjcxOTk4ZjI0ZTA8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "3b4d52277e0af052", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "114" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:50 GMT" ], "X-Amzn-Requestid": [ "11475e62-4c5a-55cf-8ae5-093b7cadf9a0" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4xMTQ3NWU2Mi00YzVhLTU1Y2YtOGFlNS0wOTNiN2NhZGY5YTA8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestCancelSendReceive.replay000066400000000000000000000337161367004507500325360ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUKCO/def5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d451a087aaf7ac8d", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "74" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNDYW5jZWxTZW5kUmVjZWl2ZS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "338" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:58 GMT" ], "X-Amzn-Requestid": [ "2e1b1ad1-2ebf-54b2-9f86-4d881ef5cc69" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQ2FuY2VsU2VuZFJlY2VpdmUtdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjJlMWIxYWQxLTJlYmYtNTRiMi05Zjg2LTRkODgxZWY1Y2M2OTwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "dff965223b25e8ed", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "79" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:58 GMT" ], "X-Amzn-Requestid": [ "a0adf52f-8748-578f-a2ce-a276b70225ff" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNDYW5jZWxTZW5kUmVjZWl2ZS1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmEwYWRmNTJmLTg3NDgtNTc4Zi1hMmNlLWEyNzZiNzAyMjVmZjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "c4a1e80d97ff0096", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "169" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "403" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:58 GMT" ], "X-Amzn-Requestid": [ "d3557a10-262d-5e9a-b67b-2d4916677cea" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmQzNTU3YTEwLTI2MmQtNWU5YS1iNjdiLTJkNDkxNjY3N2NlYTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "2366e630a56c36e7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "675" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNDYW5jZWxTZW5kUmVjZWl2ZS1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljQ2FuY2VsU2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:58 GMT" ], "X-Amzn-Requestid": [ "78304d1a-323a-5d19-b29e-1a430270df69" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NzgzMDRkMWEtMzIzYS01ZDE5LWIyOWUtMWE0MzAyNzBkZjY5PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "c6799f9f4b960ad5", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "220" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "381" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:58 GMT" ], "X-Amzn-Requestid": [ "c166d731-52ce-5b14-9b1f-80686285c3cf" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljQ2FuY2VsU2VuZFJlY2VpdmUtdG9wLTE6NWQ1Njg4ZmMtOWZjOS00MmE1LWFmYzItODdlMTdjMjg1ZTg0PC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmMxNjZkNzMxLTUyY2UtNWIxNC05YjFmLTgwNjg2Mjg1YzNjZjwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "1cad6b2be8926ae4", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "169" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXRvcC0xJTNBNWQ1Njg4ZmMtOWZjOS00MmE1LWFmYzItODdlMTdjMjg1ZTg0JlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:59 GMT" ], "X-Amzn-Requestid": [ "7eef123c-dbae-55b6-9f46-4565ebe5bd6d" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43ZWVmMTIzYy1kYmFlLTU1YjYtOWY0Ni00NTY1ZWJlNWJkNmQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "276807f88a5727bb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "137" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNDYW5jZWxTZW5kUmVjZWl2ZS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:59 GMT" ], "X-Amzn-Requestid": [ "1cb2ac19-c8cd-587f-ac8c-fb40f8862a0f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4xY2IyYWMxOS1jOGNkLTU4N2YtYWM4Yy1mYjQwZjg4NjJhMGY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "595b8030ba91a147", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljQ2FuY2VsU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:59 GMT" ], "X-Amzn-Requestid": [ "bd2c1114-c78a-54b6-9094-464df7c17c6d" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5iZDJjMTExNC1jNzhhLTU0YjYtOTA5NC00NjRkZjdjMTdjNmQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestDoubleAck.replay000066400000000000000000001256371367004507500310710ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUHDXPHHP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "8c339bf59bf2e381", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "66" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNEb3VibGVBY2stdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "330" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:55 GMT" ], "X-Amzn-Requestid": [ "6a939c12-ebfe-5e05-bdba-cb4bdbb9c9d3" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljRG91YmxlQWNrLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD42YTkzOWMxMi1lYmZlLTVlMDUtYmRiYS1jYjRiZGJiOWM5ZDM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "a990840316cc677c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY0RvdWJsZUFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "343" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:55 GMT" ], "X-Amzn-Requestid": [ "df467602-6281-5f42-b8b8-215b52c6af58" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNEb3VibGVBY2stc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kZjQ2NzYwMi02MjgxLTVmNDItYjhiOC0yMTViNTJjNmFmNTg8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "3ab0965cd84e17c6", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "161" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0RvdWJsZUFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "395" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:55 GMT" ], "X-Amzn-Requestid": [ "b4c6272a-efce-579d-80ff-7073df895787" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0RvdWJsZUFjay1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5iNGM2MjcyYS1lZmNlLTU3OWQtODBmZi03MDczZGY4OTU3ODc8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "5b0e653ef38d4fb5", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "659" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNEb3VibGVBY2stc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0RvdWJsZUFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "b7fb7145-50b8-5f6a-981f-261c60f06f70" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YjdmYjcxNDUtNTBiOC01ZjZhLTk4MWYtMjYxYzYwZjA2ZjcwPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "86abc0dd6bd6ebd4", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "204" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0RvdWJsZUFjay1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNEb3VibGVBY2stdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "373" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:55 GMT" ], "X-Amzn-Requestid": [ "afd18b80-e6fe-5771-8644-dcd9d6b6b0a7" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljRG91YmxlQWNrLXRvcC0xOjE2YThiODBlLTQ4NWMtNGY2NC1iMjQ0LTA2MDhkYTBjYmU3YjwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5hZmQxOGI4MC1lNmZlLTU3NzEtODY0NC1kY2Q5ZDZiNmIwYTc8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "242b51c935c4dc7b", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "121" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0wJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljRG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "6f5320e2-204d-5af7-952b-77bb1005fd21" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmEwOGFlZjA0LTE5ZWEtNWJiYi1iOWRmLWI4NWQyOWEyN2M2ZDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NmY1MzIwZTItMjA0ZC01YWY3LTk1MmItNzdiYjEwMDVmZDIxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "dd0a54885e8053c0", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "121" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0xJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljRG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "05f01c3d-8d58-5948-87f5-4b64bd10de9e" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmI4YmNlODhhLThiNWUtNTlmNy05MjY1LWJmZDNiYjE2MGUyMTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MDVmMDFjM2QtOGQ1OC01OTQ4LTg3ZjUtNGI2NGJkMTBkZTllPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "17fd9c8cf103110c", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "121" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0yJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljRG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "6273e1eb-d08f-51af-929a-b6b2e0c75679" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmNhZTM2ZjIzLWZhM2UtNTcyMS04MzA0LTM4N2FjYTc2YjBmNzwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NjI3M2UxZWItZDA4Zi01MWFmLTkyOWEtYjZiMmUwYzc1Njc5PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "61b792d53a777725", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "181" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MyZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljRG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1967" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "066d30fa-fb19-516d-a346-67a3cb518177" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NTQ3ZDA5YmUtMTE0Ni00N2UyLWI3NDYtMWM5YTgyNjU2MWQ1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlVDSTI1NXB2R093YjVwVU4rcTJOV1YxUGFNVmRVYWVzeU0rOVk3NTR0dFgrblNwVUJDRW1ibnAwNzZvRkpWSTlxK0F6OU9DWWZHVnVBSUZFN3lUL1p0K3QwdzVzVFpxODZFNHh4Ukh0TXlLMUlRLy91Sm5GS0RTR0wwVHB1YkNGU1JhNk14TlIxSG9TR3lxMCtkUldmblp5MHBTUFVRMVJCT3Q2Y2JVRWVPaXRhS243akFmZHVKNHF2T3V0TSthMEZvVEcxZFFtTXJWbDhzMElYZy9tUUpDTHV0b3RxUnFrZmtlYmVWMnNUbFd5NXFpTVpkTWFUZzZsZi9YaFo3R1dyV0x2UWxnQWRoM282VGM0c2pSN0k3aWxRcGYxUlI0cFlwSjlwMWlFU3NoVGFlUU5scW9aamt4ajVxKzQ2WW1QczdPY1A1N2d5a1dMWFNNK3VKczNubFRkcnpLOHBCOFNhVmV5VWdCUGdPV1VYYi9PSjJtdGMrTHVRdVJRQ1QxTTdsaCtWL2xyQXI1c2g0UHZEekoyVGc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjYyNDRlMjlkMTdiOWUyYTE3OTNhYTIxOTdhNGNjMGZlPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7Y2FlMzZmMjMtZmEzZS01NzIxLTgzMDQtMzg3YWNhNzZiMGY3JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0RvdWJsZUFjay10b3AtMSZxdW90OywKICAmcXVvdDtNZXNzYWdlJnF1b3Q7IDogJnF1b3Q7MiZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM2OjU2LjU4N1omcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7R3Y1aGFJVmtXZHljTEdvdnNxNjhsMXZJV09peWpjV3llZTJDUHpja2JPcWw3UktGK1ByZWdzQndNMDJhcGgyUFBnU0VGUHlCVHVNQ2d4cFdMTUE0L2swS2k2M28weXpUUDNUdE9HTVNZenNIcGgwci81WWszbnlzVHNnSG53V21wTnVoYVBESWFhcnoxcjFXaXg0cDZ4WU9ETXdFVjJuVWxqcHBmZ29KbFB4d1VzTVljT08reTEvTGdkQktBOTJ4QTl2bmwyTk1IelZjOUlrZGlvZ3ViNUZwMFZBOVlCNkR0eVdHR0ZOYzR1WXpuVDY3VmVNcCsvS0o0ZC9VcjhGZkNFRW9SWnppZDB0S2Z2aW5DYWp5ZkRsR09nTkxma1VldDNDM2FxaEFlYjFqQXlnclkyVURrOEZzTHJzdTJNMGlqV21FeWRxMWVBeWREWXpWMDd2aWZ3PT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljRG91YmxlQWNrLXRvcC0xOjE2YThiODBlLTQ4NWMtNGY2NC1iMjQ0LTA2MDhkYTBjYmU3YiZxdW90Owp9PC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MDY2ZDMwZmEtZmIxOS01MTZkLWEzNDYtNjdhM2NiNTE4MTc3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "491f78e379de3820", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "181" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MyZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljRG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "3672" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "88c848ce-b6a4-59e4-ac9d-1f9786ece9fe" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YTFjODJkNjEtYTAwZC00OWU4LWI5MDAtOTFkZjM4OThkMmQyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQldUTnozcGFjT3RESWxJa0FIdUpqYnFCQ00wM0t2KzhQNElOY2l2NTdLOWpqdUxZQVpqTlJtUHFpN1gzQitYcG5uam5QVTdPb3hiNVZVMkJwYU4zS3Y2K29jV2pKTE9zYWpwWkVhSVM3cHFVSzNILzh6M3daMGlxaGlzZXZ0dnlLRVBPbkFoU2pxcjhDcldPdFZPYitUU2ZITmkwZTJVVGxwREY0STZSbGxDcTNFTjlCZ2wzVEx4QXBvWXlRV2liTWo3QjhvbFB6UDBiajZMbGNnaWoyN2RkamxlSm85OUVYNHdJRW5EczhkVS9Gdy9ub0VEMk1UMDMxaWdLaWJOdm93YVVrbmRTVysvdjdQSjFFd2prSWprWm5GUU5lOXM0akpqTVdocDlLc08zVEx2RGFaQ3ZrUDh4UHQxVWVka3RicExWVENFU3crZzlnV3gzd1doTUJNVGs1V3FEVXlXeEFZM1ZaeEVUT21HZmJWUS9hSmJ1LzZpOFA4NEwrZzZmditBMEhaRnJKeHlkRzR3Rld2SVNwZ1E9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjA0ZTljMTg5YjdkMGZhMTQxMmFjNjVlMmQ0Nzg4OGY2PC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7YTA4YWVmMDQtMTllYS01YmJiLWI5ZGYtYjg1ZDI5YTI3YzZkJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0RvdWJsZUFjay10b3AtMSZxdW90OywKICAmcXVvdDtNZXNzYWdlJnF1b3Q7IDogJnF1b3Q7MCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM2OjU2LjQwNlomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7bGwyWXRITDNvb2hZNmZsTCt4M1NnREkxVkl5OWZKUGJKMkJUb3krWXZTTEVSN09uWDd2VW1henlGZ0ZoUjNtUDFHV2pQQVhHQWFpbndOMURhV2pMNk9zNS9RU2k4UjM3MWk1MmM0QUJPWnl2SlN1SHVnMFM2b2tFMmg0Y1NzMzg2eGZCazZzbHRnbHN4TDEvWlVuM0hCcENjTFlkTGIyeVZqcVRsdkFVZ0hhNkZCNCtYaDRyOTlBZDNrRFVOZFA2RWVab2lxTDZMK2VPcEsrY3g1UmJzMDNNcjFBczdpUE1wb0hoeTMvWEpON0xub3FXMHA4Zlh1ZHU2U05mMnF6cmMwb016NnRERUhMWk4xQnpIb3JtMGF2anZmTTlrWisrN2M4UXlpSm83cUk1RWw4Zk0xakdydGU3SStKOFdYTU1WRjE2TkswOFlrRGFnMkl3QWtDT0F3PT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljRG91YmxlQWNrLXRvcC0xOjE2YThiODBlLTQ4NWMtNGY2NC1iMjQ0LTA2MDhkYTBjYmU3YiZxdW90Owp9PC9Cb2R5PjwvTWVzc2FnZT48TWVzc2FnZT48TWVzc2FnZUlkPmQxMzczY2NkLTI5OGQtNDU1Ny1hZjEyLTM1YjE3YTNmYTA4MTwvTWVzc2FnZUlkPjxSZWNlaXB0SGFuZGxlPkFRRUJlVFZCWnVORjRQS2k2emhLSDRPdlRuMmo1WFF6UzFTd2NuU1RkNGZ4S01vQ1g4ZWgyR2xuWXdkdE1pd3czaEh2b0pZRFM2MzN3a1NGTFJTbHlleThLbFVGMCt5dEFJbmRlc0ZialBQd1ZWcUdjRkpZWjNuQmxTK2xZTlVrYnV3NDhnazU3eXdHKzk3MkN0TEtBT1VrYXRxMkdMUTl6cW5BU3pDdlZtdHI2NUdtWGpXcmRQV2hBWitrdXRWOE5MNkNyNVhlcUZCK3FpV3hsb2ZqOVBvYlAwN05kODAxYkt3QUV0VXRENE9RZXdiMWladHJWTm5BbGppai9WTjdlRnVFZXZJL3ZINzVRZ3B0aXI5cHJ4QnRVQWhTNXZyZ29KS052YmFrZmcxMjBVYTUvSWlUUUEwdGNaQk9jaElMUXNqcTIrNEN2OTF3WUJFVFpTQ3ZjdjFjNmdaekpVUWNYcU9JZUNqNTZzc1o4WEZ4WHk1RTIxSEhGdXJhQzJ6VldsZWgxUFUxY2VPM1JjTk5YMHdQYTloWUJBPT08L1JlY2VpcHRIYW5kbGU+PE1ENU9mQm9keT4yOTg5MGE0NzQzNmM4YTM0YTM3NmM4ZTZiZTMyZDNjZTwvTUQ1T2ZCb2R5PjxCb2R5PnsKICAmcXVvdDtUeXBlJnF1b3Q7IDogJnF1b3Q7Tm90aWZpY2F0aW9uJnF1b3Q7LAogICZxdW90O01lc3NhZ2VJZCZxdW90OyA6ICZxdW90O2I4YmNlODhhLThiNWUtNTlmNy05MjY1LWJmZDNiYjE2MGUyMSZxdW90OywKICAmcXVvdDtUb3BpY0FybiZxdW90OyA6ICZxdW90O2Fybjphd3M6c25zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6U05TVG9waWNEb3VibGVBY2stdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo1Ni41MDFaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O09aOGpPVVAzYTBnNFZYVjFNMjh5ckM2MCtNdVNhRXhJemhNaEJiaTlKQjNNRVEyQmtKTEVBbU91YmQyWktLTkFuSG5sMFVWbmY4RVRlMVhOSUc4WEFVazlZM1RxVHBKdm50Y0N2TDJ3RmNNTnE0elJEQUhnUVNNRzBGdGtTazNKdVczeURSbzYrQzcrTzBRaHFWU3RYVTFBQWZWS04rbXFUbU1XdHZ0OEx1ajZORmdjem1obUxqYjEvZDdKRFZIUm0yTkNmcllIOTRQOU9rU2ZPTEcwcXBYTXp1ZGlFY2ZablZyRUpnbkpGZWYvZDFwRk1tdk5NcGtFVjl2aW5XTmFOYUVuZUhyL0I5SmExMldWVVo5dUtkNm9hbGVOY3dWTHNoeW9lNHc2M3ZJNzFLNXdxK1NGK2F3am9TemgxWGJpTU4wdTBzVWxTTlU5c0J2SjNFZlhEZz09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0RvdWJsZUFjay10b3AtMToxNmE4YjgwZS00ODVjLTRmNjQtYjI0NC0wNjA4ZGEwY2JlN2ImcXVvdDsKfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjg4Yzg0OGNlLWI2YTQtNTllNC1hYzlkLTFmOTc4NmVjZTlmZTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "3243d013c2e5828f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1204" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlVDSTI1NXB2R093YjVwVU4lMkJxMk5XVjFQYU1WZFVhZXN5TSUyQjlZNzU0dHRYJTJCblNwVUJDRW1ibnAwNzZvRkpWSTlxJTJCQXo5T0NZZkdWdUFJRkU3eVQlMkZadCUyQnQwdzVzVFpxODZFNHh4Ukh0TXlLMUlRJTJGJTJGdUpuRktEU0dMMFRwdWJDRlNSYTZNeE5SMUhvU0d5cTAlMkJkUldmblp5MHBTUFVRMVJCT3Q2Y2JVRWVPaXRhS243akFmZHVKNHF2T3V0TSUyQmEwRm9URzFkUW1NclZsOHMwSVhnJTJGbVFKQ0x1dG90cVJxa2ZrZWJlVjJzVGxXeTVxaU1aZE1hVGc2bGYlMkZYaFo3R1dyV0x2UWxnQWRoM282VGM0c2pSN0k3aWxRcGYxUlI0cFlwSjlwMWlFU3NoVGFlUU5scW9aamt4ajVxJTJCNDZZbVBzN09jUDU3Z3lrV0xYU00lMkJ1SnMzbmxUZHJ6SzhwQjhTYVZleVVnQlBnT1dVWGIlMkZPSjJtdGMlMkJMdVF1UlFDVDFNN2xoJTJCViUyRmxyQXI1c2g0UHZEekoyVGclM0QlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJXVE56M3BhY090RElsSWtBSHVKamJxQkNNMDNLdiUyQjhQNElOY2l2NTdLOWpqdUxZQVpqTlJtUHFpN1gzQiUyQlhwbm5qblBVN09veGI1VlUyQnBhTjNLdjYlMkJvY1dqSkxPc2FqcFpFYUlTN3BxVUszSCUyRjh6M3daMGlxaGlzZXZ0dnlLRVBPbkFoU2pxcjhDcldPdFZPYiUyQlRTZkhOaTBlMlVUbHBERjRJNlJsbENxM0VOOUJnbDNUTHhBcG9ZeVFXaWJNajdCOG9sUHpQMGJqNkxsY2dpajI3ZGRqbGVKbzk5RVg0d0lFbkRzOGRVJTJGRnclMkZub0VEMk1UMDMxaWdLaWJOdm93YVVrbmRTVyUyQiUyRnY3UEoxRXdqa0lqa1puRlFOZTlzNGpKak1XaHA5S3NPM1RMdkRhWkN2a1A4eFB0MVVlZGt0YnBMVlRDRVN3JTJCZzlnV3gzd1doTUJNVGs1V3FEVXlXeEFZM1ZaeEVUT21HZmJWUSUyRmFKYnUlMkY2aThQODRMJTJCZzZmdiUyQkEwSFpGckp4eWRHNHdGV3ZJU3BnUSUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljRG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "424" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "f1266398-e652-530c-bddf-34c1d61ae316" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MTwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmYxMjY2Mzk4LWU2NTItNTMwYy1iZGRmLTM0YzFkNjFhZTMxNjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlPg==" } }, { "ID": "fc35b7f62d7cad7d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1204" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlVDSTI1NXB2R093YjVwVU4lMkJxMk5XVjFQYU1WZFVhZXN5TSUyQjlZNzU0dHRYJTJCblNwVUJDRW1ibnAwNzZvRkpWSTlxJTJCQXo5T0NZZkdWdUFJRkU3eVQlMkZadCUyQnQwdzVzVFpxODZFNHh4Ukh0TXlLMUlRJTJGJTJGdUpuRktEU0dMMFRwdWJDRlNSYTZNeE5SMUhvU0d5cTAlMkJkUldmblp5MHBTUFVRMVJCT3Q2Y2JVRWVPaXRhS243akFmZHVKNHF2T3V0TSUyQmEwRm9URzFkUW1NclZsOHMwSVhnJTJGbVFKQ0x1dG90cVJxa2ZrZWJlVjJzVGxXeTVxaU1aZE1hVGc2bGYlMkZYaFo3R1dyV0x2UWxnQWRoM282VGM0c2pSN0k3aWxRcGYxUlI0cFlwSjlwMWlFU3NoVGFlUU5scW9aamt4ajVxJTJCNDZZbVBzN09jUDU3Z3lrV0xYU00lMkJ1SnMzbmxUZHJ6SzhwQjhTYVZleVVnQlBnT1dVWGIlMkZPSjJtdGMlMkJMdVF1UlFDVDFNN2xoJTJCViUyRmxyQXI1c2g0UHZEekoyVGclM0QlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJXVE56M3BhY090RElsSWtBSHVKamJxQkNNMDNLdiUyQjhQNElOY2l2NTdLOWpqdUxZQVpqTlJtUHFpN1gzQiUyQlhwbm5qblBVN09veGI1VlUyQnBhTjNLdjYlMkJvY1dqSkxPc2FqcFpFYUlTN3BxVUszSCUyRjh6M3daMGlxaGlzZXZ0dnlLRVBPbkFoU2pxcjhDcldPdFZPYiUyQlRTZkhOaTBlMlVUbHBERjRJNlJsbENxM0VOOUJnbDNUTHhBcG9ZeVFXaWJNajdCOG9sUHpQMGJqNkxsY2dpajI3ZGRqbGVKbzk5RVg0d0lFbkRzOGRVJTJGRnclMkZub0VEMk1UMDMxaWdLaWJOdm93YVVrbmRTVyUyQiUyRnY3UEoxRXdqa0lqa1puRlFOZTlzNGpKak1XaHA5S3NPM1RMdkRhWkN2a1A4eFB0MVVlZGt0YnBMVlRDRVN3JTJCZzlnV3gzd1doTUJNVGs1V3FEVXlXeEFZM1ZaeEVUT21HZmJWUSUyRmFKYnUlMkY2aThQODRMJTJCZzZmdiUyQkEwSFpGckp4eWRHNHdGV3ZJU3BnUSUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljRG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "424" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "a0c46a95-75ec-552f-97d7-3dcc45a40535" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MTwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmEwYzQ2YTk1LTc1ZWMtNTUyZi05N2Q3LTNkY2M0NWE0MDUzNTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlPg==" } }, { "ID": "fc782d02380271b1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1983" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlVDSTI1NXB2R093YjVwVU4lMkJxMk5XVjFQYU1WZFVhZXN5TSUyQjlZNzU0dHRYJTJCblNwVUJDRW1ibnAwNzZvRkpWSTlxJTJCQXo5T0NZZkdWdUFJRkU3eVQlMkZadCUyQnQwdzVzVFpxODZFNHh4Ukh0TXlLMUlRJTJGJTJGdUpuRktEU0dMMFRwdWJDRlNSYTZNeE5SMUhvU0d5cTAlMkJkUldmblp5MHBTUFVRMVJCT3Q2Y2JVRWVPaXRhS243akFmZHVKNHF2T3V0TSUyQmEwRm9URzFkUW1NclZsOHMwSVhnJTJGbVFKQ0x1dG90cVJxa2ZrZWJlVjJzVGxXeTVxaU1aZE1hVGc2bGYlMkZYaFo3R1dyV0x2UWxnQWRoM282VGM0c2pSN0k3aWxRcGYxUlI0cFlwSjlwMWlFU3NoVGFlUU5scW9aamt4ajVxJTJCNDZZbVBzN09jUDU3Z3lrV0xYU00lMkJ1SnMzbmxUZHJ6SzhwQjhTYVZleVVnQlBnT1dVWGIlMkZPSjJtdGMlMkJMdVF1UlFDVDFNN2xoJTJCViUyRmxyQXI1c2g0UHZEekoyVGclM0QlM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlZpc2liaWxpdHlUaW1lb3V0PTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4yLklkPTEmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4yLlJlY2VpcHRIYW5kbGU9QVFFQldUTnozcGFjT3RESWxJa0FIdUpqYnFCQ00wM0t2JTJCOFA0SU5jaXY1N0s5amp1TFlBWmpOUm1QcWk3WDNCJTJCWHBubmpuUFU3T294YjVWVTJCcGFOM0t2NiUyQm9jV2pKTE9zYWpwWkVhSVM3cHFVSzNIJTJGOHozd1owaXFoaXNldnR2eUtFUE9uQWhTanFyOENyV090Vk9iJTJCVFNmSE5pMGUyVVRscERGNEk2UmxsQ3EzRU45QmdsM1RMeEFwb1l5UVdpYk1qN0I4b2xQelAwYmo2TGxjZ2lqMjdkZGpsZUpvOTlFWDR3SUVuRHM4ZFUlMkZGdyUyRm5vRUQyTVQwMzFpZ0tpYk52b3dhVWtuZFNXJTJCJTJGdjdQSjFFd2prSWprWm5GUU5lOXM0akpqTVdocDlLc08zVEx2RGFaQ3ZrUDh4UHQxVWVka3RicExWVENFU3clMkJnOWdXeDN3V2hNQk1UazVXcURVeVd4QVkzVlp4RVRPbUdmYlZRJTJGYUpidSUyRjZpOFA4NEwlMkJnNmZ2JTJCQTBIWkZySnh5ZEc0d0ZXdklTcGdRJTNEJTNEJkNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXF1ZXN0RW50cnkuMi5WaXNpYmlsaXR5VGltZW91dD0wJkNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXF1ZXN0RW50cnkuMy5JZD0yJkNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXF1ZXN0RW50cnkuMy5SZWNlaXB0SGFuZGxlPUFRRUJlVFZCWnVORjRQS2k2emhLSDRPdlRuMmo1WFF6UzFTd2NuU1RkNGZ4S01vQ1g4ZWgyR2xuWXdkdE1pd3czaEh2b0pZRFM2MzN3a1NGTFJTbHlleThLbFVGMCUyQnl0QUluZGVzRmJqUFB3VlZxR2NGSllaM25CbFMlMkJsWU5Va2J1dzQ4Z2s1N3l3RyUyQjk3MkN0TEtBT1VrYXRxMkdMUTl6cW5BU3pDdlZtdHI2NUdtWGpXcmRQV2hBWiUyQmt1dFY4Tkw2Q3I1WGVxRkIlMkJxaVd4bG9majlQb2JQMDdOZDgwMWJLd0FFdFV0RDRPUWV3YjFpWnRyVk5uQWxqaWolMkZWTjdlRnVFZXZJJTJGdkg3NVFncHRpcjlwcnhCdFVBaFM1dnJnb0pLTnZiYWtmZzEyMFVhNSUyRklpVFFBMHRjWkJPY2hJTFFzanEyJTJCNEN2OTF3WUJFVFpTQ3ZjdjFjNmdaekpVUWNYcU9JZUNqNTZzc1o4WEZ4WHk1RTIxSEhGdXJhQzJ6VldsZWgxUFUxY2VPM1JjTk5YMHdQYTloWUJBJTNEJTNEJkNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXF1ZXN0RW50cnkuMy5WaXNpYmlsaXR5VGltZW91dD0wJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNEb3VibGVBY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "839" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:57 GMT" ], "X-Amzn-Requestid": [ "9b7df2ef-165c-507d-aee9-a5b626152067" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4yPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48QmF0Y2hSZXN1bHRFcnJvckVudHJ5PjxJZD4wPC9JZD48Q29kZT5SZWNlaXB0SGFuZGxlSXNJbnZhbGlkPC9Db2RlPjxNZXNzYWdlPk1lc3NhZ2UgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGF2YWlsYWJsZSBmb3IgdmlzaWJpbGl0eSB0aW1lb3V0IGNoYW5nZTwvTWVzc2FnZT48U2VuZGVyRmF1bHQ+dHJ1ZTwvU2VuZGVyRmF1bHQ+PC9CYXRjaFJlc3VsdEVycm9yRW50cnk+PEJhdGNoUmVzdWx0RXJyb3JFbnRyeT48SWQ+MTwvSWQ+PENvZGU+UmVjZWlwdEhhbmRsZUlzSW52YWxpZDwvQ29kZT48TWVzc2FnZT5NZXNzYWdlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhdmFpbGFibGUgZm9yIHZpc2liaWxpdHkgdGltZW91dCBjaGFuZ2U8L01lc3NhZ2U+PFNlbmRlckZhdWx0PnRydWU8L1NlbmRlckZhdWx0PjwvQmF0Y2hSZXN1bHRFcnJvckVudHJ5PjwvQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjliN2RmMmVmLTE2NWMtNTA3ZC1hZWU5LWE1YjYyNjE1MjA2NzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZT4=" } }, { "ID": "2e616ea989351451", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "181" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljRG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1967" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:57 GMT" ], "X-Amzn-Requestid": [ "d4a20f76-a301-5dcf-a6ae-582f93489dd5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZDEzNzNjY2QtMjk4ZC00NTU3LWFmMTItMzViMTdhM2ZhMDgxPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkZZOGNLaVVjQ2VoRW5TMkl0dEY5emIvZlhaMTBHb1htdzhrRlcvbHNvNEQyTFpJa0Y1UEZqZlphQTFTRkZOb2c2MzB2aTJzc1VYcGRoaFhsZWZmWEtPYkRzTkVodnFEWkJDQTN5NTg0QkM3MVlmSHRRbkxOVzBydWlMMExYSk9tWGxiekJ4UXp5V1haWUluUEdGMEdsN1VsL05jTlVOQVJmTFoyRHRNTzhuZWwzY3ZlTyt3T2s0Z1NYOEo2TkRtc2JtNXd3a1BWaVZPRzhkNmFoa1Q1OHNISmwxUDVKemxNdERJN2dKVEtsSUx4UEhjY0hWZG1Ea2dITDQ5NWJVcUtwYzFqNGJjSFJSaDJuRTJYTHR5ZkMzQVpBbE85clBRNnNBVm5ndlZwK3U5dTVRN1oyNGxNeGg2cVhXQXZRQVhEWFdFb1hNR3FIZm8wWnhXT1Rqamkza043OG0rVytsM3hVUzFDVWtvdXc5QXdjR2tEeEtiQlV0U3dQMGMydzVWK1hRQm9hZ2QrNGo5dDFDaDk5WEhpUmc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjI5ODkwYTQ3NDM2YzhhMzRhMzc2YzhlNmJlMzJkM2NlPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7YjhiY2U4OGEtOGI1ZS01OWY3LTkyNjUtYmZkM2JiMTYwZTIxJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0RvdWJsZUFjay10b3AtMSZxdW90OywKICAmcXVvdDtNZXNzYWdlJnF1b3Q7IDogJnF1b3Q7MSZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM2OjU2LjUwMVomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7T1o4ak9VUDNhMGc0VlhWMU0yOHlyQzYwK011U2FFeEl6aE1oQmJpOUpCM01FUTJCa0pMRUFtT3ViZDJaS0tOQW5IbmwwVVZuZjhFVGUxWE5JRzhYQVVrOVkzVHFUcEp2bnRjQ3ZMMndGY01OcTR6UkRBSGdRU01HMEZ0a1NrM0p1VzN5RFJvNitDNytPMFFocVZTdFhVMUFBZlZLTittcVRtTVd0dnQ4THVqNk5GZ2N6bWhtTGpiMS9kN0pEVkhSbTJOQ2ZyWUg5NFA5T2tTZk9MRzBxcFhNenVkaUVjZlpuVnJFSmduSkZlZi9kMXBGTW12Tk1wa0VWOXZpbldOYU5hRW5lSHIvQjlKYTEyV1ZVWjl1S2Q2b2FsZU5jd1ZMc2h5b2U0dzYzdkk3MUs1d3ErU0YrYXdqb1N6aDFYYmlNTjB1MHNVbFNOVTlzQnZKM0VmWERnPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljRG91YmxlQWNrLXRvcC0xOjE2YThiODBlLTQ4NWMtNGY2NC1iMjQ0LTA2MDhkYTBjYmU3YiZxdW90Owp9PC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZDRhMjBmNzYtYTMwMS01ZGNmLWE2YWUtNTgyZjkzNDg5ZGQ1PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "be2f767370ac9fef", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "161" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0RvdWJsZUFjay10b3AtMSUzQTE2YThiODBlLTQ4NWMtNGY2NC1iMjQ0LTA2MDhkYTBjYmU3YiZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:56 GMT" ], "X-Amzn-Requestid": [ "e3f52822-17b8-5537-9b26-7f7b27f1c2e1" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5lM2Y1MjgyMi0xN2I4LTU1MzctOWIyNi03ZjdiMjdmMWMyZTE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "3367214963febcfd", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "129" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNEb3VibGVBY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:57 GMT" ], "X-Amzn-Requestid": [ "c393cb09-f968-5c0d-8f0d-9c50c921ac17" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5jMzkzY2IwOS1mOTY4LTVjMGQtOGYwZC05YzUwYzkyMWFjMTc8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "0b5216c300f773e4", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "115" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljRG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:57 GMT" ], "X-Amzn-Requestid": [ "698fdf34-535c-5071-8090-886d6315a7a7" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD42OThmZGYzNC01MzVjLTUwNzEtODA5MC04ODZkNjMxNWE3YTc8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }TestErrorOnReceiveFromClosedSubscription.replay000066400000000000000000000344561367004507500364330ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic{ "Initial": "AQAAAA7WcSUTAJ2hUf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "99302f25cfc55f70", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "93" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "357" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "c99fafb9-6e8b-5f8a-abde-f8e05ed8eedd" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljRXJyb3JPblJlY2VpdmVGcm9tQ2xvc2VkU3Vic2NyaXB0aW9uLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5jOTlmYWZiOS02ZThiLTVmOGEtYWJkZS1mOGUwNWVkOGVlZGQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "0881fa79aa5badf1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "98" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "370" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:07 GMT" ], "X-Amzn-Requestid": [ "c3d0e9ed-aada-58a2-a1f2-beb49a890660" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5jM2QwZTllZC1hYWRhLTU4YTItYTFmMi1iZWI0OWE4OTA2NjA8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "60e3caa34eebf591", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "188" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "422" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:07 GMT" ], "X-Amzn-Requestid": [ "f7f502ef-5518-564b-b5f2-55b6654b2889" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5mN2Y1MDJlZi01NTE4LTU2NGItYjVmMi01NWI2NjU0YjI4ODk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "9fb9e021b60218a4", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "713" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:07 GMT" ], "X-Amzn-Requestid": [ "49b768d9-b823-58bf-a95e-3f808870e67d" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NDliNzY4ZDktYjgyMy01OGJmLWE5NWUtM2Y4MDg4NzBlNjdkPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "da92d4aeb6dac1ef", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "258" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "400" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:07 GMT" ], "X-Amzn-Requestid": [ "74444e29-bc01-5634-bb85-19708c52f763" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljRXJyb3JPblJlY2VpdmVGcm9tQ2xvc2VkU3Vic2NyaXB0aW9uLXRvcC0xOjQxNTc4NmQxLTI5MWEtNGE4Ni04YzUxLWU0ZTBkN2MwMDgwNTwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43NDQ0NGUyOS1iYzAxLTU2MzQtYmI4NS0xOTcwOGM1MmY3NjM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "f4cc2f9e3457acd0", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "188" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi10b3AtMSUzQTQxNTc4NmQxLTI5MWEtNGE4Ni04YzUxLWU0ZTBkN2MwMDgwNSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:07 GMT" ], "X-Amzn-Requestid": [ "6ea9a7e1-fe3f-5965-8986-f0b8ce6b1832" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD42ZWE5YTdlMS1mZTNmLTU5NjUtODk4Ni1mMGI4Y2U2YjE4MzI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "5600cc1c690d00e8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "156" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:08 GMT" ], "X-Amzn-Requestid": [ "81eb73ed-3327-57e3-9f70-24b403731921" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD44MWViNzNlZC0zMzI3LTU3ZTMtOWY3MC0yNGI0MDM3MzE5MjE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "43ede78504ba4fe3", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "142" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljRXJyb3JPblJlY2VpdmVGcm9tQ2xvc2VkU3Vic2NyaXB0aW9uLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:08 GMT" ], "X-Amzn-Requestid": [ "56dea6bc-0159-57e1-945c-f1e5310d66b6" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD41NmRlYTZiYy0wMTU5LTU3ZTEtOTQ1Yy1mMWU1MzEwZDY2YjY8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }TestErrorOnSendToClosedTopic.replay000066400000000000000000000075111367004507500340030ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic{ "Initial": "AQAAAA7WcSUJJhpf+P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d55667c52fa9db8d", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "81" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNFcnJvck9uU2VuZFRvQ2xvc2VkVG9waWMtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "345" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:57 GMT" ], "X-Amzn-Requestid": [ "0f13a3bc-a45a-59bc-b329-f4e59413378f" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljRXJyb3JPblNlbmRUb0Nsb3NlZFRvcGljLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4wZjEzYTNiYy1hNDVhLTU5YmMtYjMyOS1mNGU1OTQxMzM3OGY8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "a57ccc5cc1063409", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "130" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljRXJyb3JPblNlbmRUb0Nsb3NlZFRvcGljLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:57 GMT" ], "X-Amzn-Requestid": [ "960b31f4-8075-51c7-8341-66adb03f8ff4" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD45NjBiMzFmNC04MDc1LTUxYzctODM0MS02NmFkYjAzZjhmZjQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestMetadata.replay000066400000000000000000001141341367004507500307460ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUQM1LmbP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "6260a35fda25bcbb", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "65" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNNZXRhZGF0YS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "329" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:04 GMT" ], "X-Amzn-Requestid": [ "c59b5b3d-65c4-532b-a9d3-0c645595849f" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTWV0YWRhdGEtdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmM1OWI1YjNkLTY1YzQtNTMyYi1hOWQzLTBjNjQ1NTk1ODQ5ZjwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "52ab556f406bdac3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY01ldGFkYXRhLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "342" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:05 GMT" ], "X-Amzn-Requestid": [ "f03a1fb7-dd79-570d-98e2-48eeed283632" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNNZXRhZGF0YS1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmYwM2ExZmI3LWRkNzktNTcwZC05OGUyLTQ4ZWVlZDI4MzYzMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "8c9539733f4e47be", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "160" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY01ldGFkYXRhLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "394" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:05 GMT" ], "X-Amzn-Requestid": [ "491db865-fdfb-5ee1-8e94-ef3ccdaacfde" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY01ldGFkYXRhLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjQ5MWRiODY1LWZkZmItNWVlMS04ZTk0LWVmM2NjZGFhY2ZkZTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "9d56146a7e2eff11", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "657" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNNZXRhZGF0YS1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTWV0YWRhdGEtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:05 GMT" ], "X-Amzn-Requestid": [ "d5bd1b83-a024-539f-938d-4cda9075a2a0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZDViZDFiODMtYTAyNC01MzlmLTkzOGQtNGNkYTkwNzVhMmEwPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "b4630299bb90bf0e", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "202" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY01ldGFkYXRhLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY01ldGFkYXRhLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "372" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:05 GMT" ], "X-Amzn-Requestid": [ "510bd2f8-bfd3-58d0-81db-85a18f82df64" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTWV0YWRhdGEtdG9wLTE6M2YzOTI2MWQtNGNmYy00MWI0LTg5MWQtNTVhZTQyNTA3YmVjPC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjUxMGJkMmY4LWJmZDMtNThkMC04MWRiLTg1YTE4ZjgyZGY2NDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "0e9756766505bfd3", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "2568" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4xLk5hbWU9MTIzNDUmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuMS5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuMS5WYWx1ZS5TdHJpbmdWYWx1ZT0xMjM0NSZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4xMC5OYW1lPV9fMHg1Yl9fX18weDVjX19fXzB4NWRfX19fMHg1ZV9fXyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4xMC5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuMTAuVmFsdWUuU3RyaW5nVmFsdWU9JTI1NUIlMjU1QyUyNTVEJTI1NUVfJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjIuTmFtZT1fXzB4MF9fX18weDFfX19fMHgyX19fXzB4M19fX18weDRfX19fMHg1X19fXzB4Nl9fX18weDdfX19fMHg4X19fXzB4OV9fX18weGFfX19fMHhiX19fXzB4Y19fX18weGRfX19fMHhlX19fXzB4Zl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjIuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjIuVmFsdWUuU3RyaW5nVmFsdWU9JTI1MDAlMjUwMSUyNTAyJTI1MDMlMjUwNCUyNTA1JTI1MDYlMjUwNyUyNTA4JTI1MDklMjUwQSUyNTBCJTI1MEMlMjUwRCUyNTBFJTI1MEYmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuMy5OYW1lPV9fMHgxMF9fX18weDExX19fXzB4MTJfX19fMHgxM19fX18weDE0X19fXzB4MTVfX19fMHgxNl9fX18weDE3X19fXzB4MThfX19fMHgxOV9fX18weDFhX19fXzB4MWJfX19fMHgxY19fX18weDFkX19fXzB4MWVfX19fMHgxZl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuVmFsdWUuU3RyaW5nVmFsdWU9JTI1MTAlMjUxMSUyNTEyJTI1MTMlMjUxNCUyNTE1JTI1MTYlMjUxNyUyNTE4JTI1MTklMjUxQSUyNTFCJTI1MUMlMjUxRCUyNTFFJTI1MUYmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNC5OYW1lPV9fMHgyMF9fX18weDIxX19fXzB4MjJfX19fMHgyM19fX18weDI0X19fXzB4MjVfX19fMHgyNl9fX18weDI3X19fXzB4MjhfX19fMHgyOV9fX18weDJhX19fXzB4MmJfX19fMHgyY19fLS5fXzB4MmZfXyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS40LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS40LlZhbHVlLlN0cmluZ1ZhbHVlPSUyNTIwJTI1MjElMjUyMiUyNTIzJTI0JTI1MjUlMjYlMjUyNyUyNTI4JTI1MjklMjUyQSUyQiUyNTJDLS4lMjUyRiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS41Lk5hbWU9X18weDJlX19fXzB4MmVfX19fMHgyZl9fZm9vX18weDJmX18uX18weDJlX19fXzB4MmZfX2Jhcl9fMHgyZl9fLl9fMHgyZV9fX18weDJmX18uX18weDJlX19fXzB4MmZfX2Jhei5fXzB4MmVfX19fMHgyZl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjUuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjUuVmFsdWUuU3RyaW5nVmFsdWU9Li4lMjUyRmZvbyUyNTJGLi4lMjUyRmJhciUyNTJGLi4lMjUyRi4uJTI1MkZiYXouLiUyNTJGJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjYuTmFtZT1fXzB4MmVfX19fMHgyZV9fX18weDVjX19mb29fXzB4NWNfXy5fXzB4MmVfX19fMHg1Y19fYmFyX18weDVjX18uX18weDJlX19fXzB4NWNfXy5fXzB4MmVfX19fMHg1Y19fYmF6Ll9fMHgyZV9fX18weDVjX18mTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5WYWx1ZS5TdHJpbmdWYWx1ZT0uLiUyNTVDZm9vJTI1NUMuLiUyNTVDYmFyJTI1NUMuLiUyNTVDLi4lMjU1Q2Jhei4uJTI1NUMmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNy5OYW1lPV9fMHgyZV9fX18weDJlX19fXzB4NWNfX2Zvb19fMHg1Y19fX18weDVjX19iYXJfXzB4NWNfX19fMHg1Y19fX18weDVjX19iYXomTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNy5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNy5WYWx1ZS5TdHJpbmdWYWx1ZT0uLiUyNTVDZm9vJTI1NUMlMjU1Q2JhciUyNTVDJTI1NUMlMjU1Q2JheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS44Lk5hbWU9X18weDNhX19fXzB4M2JfX19fMHgzY19fX18weDNkX19fXzB4M2VfX19fMHgzZl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjguVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjguVmFsdWUuU3RyaW5nVmFsdWU9JTNBJTI1M0IlMjUzQyUzRCUyNTNFJTI1M0YmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuOS5OYW1lPV9fMHg0MF9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjkuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjkuVmFsdWUuU3RyaW5nVmFsdWU9JTQwJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljTWV0YWRhdGEtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:05 GMT" ], "X-Amzn-Requestid": [ "1e56f701-52d4-5a75-9bf2-a05862862dc1" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjc1ZTc3ODkyLTFhNmItNTY1Ny05OTliLTJmY2IyYTM5NzFlMzwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MWU1NmY3MDEtNTJkNC01YTc1LTliZjItYTA1ODYyODYyZGMxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "d77b3a6ca3297833", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTWV0YWRhdGEtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "3940" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "04d707b8-6a9d-5ee2-a210-50e15acf9fdd" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+Zjk5OGVkOWMtYTMyNy00YmNjLWE0NGYtMWJhZGFjZTA1YmIyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjZiejB4OTJ4VW9XY3E4MDBtT2hsVkJaQ1pmZHM3ZkpPc2pHT0tQSEZiaVp4NEQ3dVhaVHNZOFdVQVpYbXBOMURjaDFKdzJWU3M5NjdtZ0p4SXdMSFNkL2VlVGJqRTF3bHowbG5VVWNMYTRTWnp6VlNwTHQzbzlXdXYyQjJUL1FFU3JjVEZyaHBqVnI0bXZ2bEpiemxHellMYmdOellJVFBBR05WS3hPYjlKOVY1TzBMUDlMMW5QcHZwRnFvZXl5WTlhOXRsRHpFWXozK2xDcU16MFBQelRwL3h3MTZ1Z0lpTzVodDJBV08zZDR0UnFka1RDdi94L01KQURueStmVHFiWVFuRmZxU29BMjhzVlA4UW95RkU2SlhVeUduek1LaWd2Nk53eXNxNHJnWHpYSWJWUmNmYXJyM1luVDd4QlhibzYwRVVldzlReU5zY0NpRGxCR2p1YVJnUlJxQnJpTWFWcWpDd21sSjFicjNBcld3TWZidkVLK01HQndPU0xNUWdwNFpNbkYxTUJHWTJEcnpkQ0JZcXc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmVmZjg1Y2ZhZTM5MGQ1YTNmYTcwOTIxNmM1M2VmOTMxPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7NzVlNzc4OTItMWE2Yi01NjU3LTk5OWItMmZjYjJhMzk3MWUzJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY01ldGFkYXRhLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM3OjA2LjIwMlomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7Tm5qTnFJNnhmampIZlYrSFlVTzc2dVo4dWNvZzhOMTZvemF3OE1BUHZBSWp0TXVqUWgvQW11ZXNxUnVYOHNOQ2RrYXZIelBiaFIrellrbHV6aXZYRWU2c3QxRVBCWmdGMlNnU2xFQ3FHOTZiM0F4VGE2SE51Z2VKbEZjMlM5TmlHc0paZjVGS25Sa1AyZlRBWFFHa2ttT0dUN1NwWm5LTS91UXlISmUvQjBHc3cwM2pIb0F5a1JIbk1ZbzdxdEF3Vll6MHduaVhQOEExRmJVYmtsRzZTTytkS2wzZ0RDLzdMQ0hSU1ZUc2g0Wi9WYVpVRlI3azduZDRtNExzSHdHNGZVWGh1N1pid3BEMW00T25TdWZ4T3ZacGJZcGcrR1pUZFk5Y1Z5QmVmMjdzOUN0OUYrZUVwTkg5bS9mM1daVlB5dFRGcFZiaGN3cWdIZlNiUVQ2M3p3PT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTWV0YWRhdGEtdG9wLTE6M2YzOTI2MWQtNGNmYy00MWI0LTg5MWQtNTVhZTQyNTA3YmVjJnF1b3Q7LAogICZxdW90O01lc3NhZ2VBdHRyaWJ1dGVzJnF1b3Q7IDogewogICAgJnF1b3Q7X18weDJlX19fXzB4MmVfX19fMHg1Y19fZm9vX18weDVjX19fXzB4NWNfX2Jhcl9fMHg1Y19fX18weDVjX19fXzB4NWNfX2JheiZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDsuLiU1Q2ZvbyU1QyU1Q2JhciU1QyU1QyU1Q2JheiZxdW90O30sCiAgICAmcXVvdDtfXzB4MTBfX19fMHgxMV9fX18weDEyX19fXzB4MTNfX19fMHgxNF9fX18weDE1X19fXzB4MTZfX19fMHgxN19fX18weDE4X19fXzB4MTlfX19fMHgxYV9fX18weDFiX19fXzB4MWNfX19fMHgxZF9fX18weDFlX19fXzB4MWZfXyZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDslMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUYmcXVvdDt9LAogICAgJnF1b3Q7X18weDJlX19fXzB4MmVfX19fMHg1Y19fZm9vX18weDVjX18uX18weDJlX19fXzB4NWNfX2Jhcl9fMHg1Y19fLl9fMHgyZV9fX18weDVjX18uX18weDJlX19fXzB4NWNfX2Jhei5fXzB4MmVfX19fMHg1Y19fJnF1b3Q7IDogeyZxdW90O1R5cGUmcXVvdDs6JnF1b3Q7U3RyaW5nJnF1b3Q7LCZxdW90O1ZhbHVlJnF1b3Q7OiZxdW90Oy4uJTVDZm9vJTVDLi4lNUNiYXIlNUMuLiU1Qy4uJTVDYmF6Li4lNUMmcXVvdDt9LAogICAgJnF1b3Q7X18weDNhX19fXzB4M2JfX19fMHgzY19fX18weDNkX19fXzB4M2VfX19fMHgzZl9fJnF1b3Q7IDogeyZxdW90O1R5cGUmcXVvdDs6JnF1b3Q7U3RyaW5nJnF1b3Q7LCZxdW90O1ZhbHVlJnF1b3Q7OiZxdW90OzolM0IlM0M9JTNFJTNGJnF1b3Q7fSwKICAgICZxdW90O19fMHgwX19fXzB4MV9fX18weDJfX19fMHgzX19fXzB4NF9fX18weDVfX19fMHg2X19fXzB4N19fX18weDhfX19fMHg5X19fXzB4YV9fX18weGJfX19fMHhjX19fXzB4ZF9fX18weGVfX19fMHhmX18mcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7JTAwJTAxJTAyJTAzJTA0JTA1JTA2JTA3JTA4JTA5JTBBJTBCJTBDJTBEJTBFJTBGJnF1b3Q7fSwKICAgICZxdW90O19fMHgyZV9fX18weDJlX19fXzB4MmZfX2Zvb19fMHgyZl9fLl9fMHgyZV9fX18weDJmX19iYXJfXzB4MmZfXy5fXzB4MmVfX19fMHgyZl9fLl9fMHgyZV9fX18weDJmX19iYXouX18weDJlX19fXzB4MmZfXyZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDsuLiUyRmZvbyUyRi4uJTJGYmFyJTJGLi4lMkYuLiUyRmJhei4uJTJGJnF1b3Q7fSwKICAgICZxdW90O19fMHgyMF9fX18weDIxX19fXzB4MjJfX19fMHgyM19fX18weDI0X19fXzB4MjVfX19fMHgyNl9fX18weDI3X19fXzB4MjhfX19fMHgyOV9fX18weDJhX19fXzB4MmJfX19fMHgyY19fLS5fXzB4MmZfXyZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDslMjAlMjElMjIlMjMkJTI1JmFtcDslMjclMjglMjklMkErJTJDLS4lMkYmcXVvdDt9LAogICAgJnF1b3Q7MTIzNDUmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MTIzNDUmcXVvdDt9LAogICAgJnF1b3Q7X18weDQwX18mcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7QCZxdW90O30sCiAgICAmcXVvdDtfXzB4NWJfX19fMHg1Y19fX18weDVkX19fXzB4NWVfX18mcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7JTVCJTVDJTVEJTVFXyZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4wNGQ3MDdiOC02YTlkLTVlZTItYTIxMC01MGUxNWFjZjlmZGQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "b99360ca3b5e2b92", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "653" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjZiejB4OTJ4VW9XY3E4MDBtT2hsVkJaQ1pmZHM3ZkpPc2pHT0tQSEZiaVp4NEQ3dVhaVHNZOFdVQVpYbXBOMURjaDFKdzJWU3M5NjdtZ0p4SXdMSFNkJTJGZWVUYmpFMXdsejBsblVVY0xhNFNaenpWU3BMdDNvOVd1djJCMlQlMkZRRVNyY1RGcmhwalZyNG12dmxKYnpsR3pZTGJnTnpZSVRQQUdOVkt4T2I5SjlWNU8wTFA5TDFuUHB2cEZxb2V5eVk5YTl0bER6RVl6MyUyQmxDcU16MFBQelRwJTJGeHcxNnVnSWlPNWh0MkFXTzNkNHRScWRrVEN2JTJGeCUyRk1KQURueSUyQmZUcWJZUW5GZnFTb0EyOHNWUDhRb3lGRTZKWFV5R256TUtpZ3Y2Tnd5c3E0cmdYelhJYlZSY2ZhcnIzWW5UN3hCWGJvNjBFVWV3OVF5TnNjQ2lEbEJHanVhUmdSUnFCcmlNYVZxakN3bWxKMWJyM0FyV3dNZmJ2RUslMkJNR0J3T1NMTVFncDRaTW5GMU1CR1kyRHJ6ZENCWXF3JTNEJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNNZXRhZGF0YS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "a8151c4c-b028-5906-9dcc-4b15807a1839" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YTgxNTFjNGMtYjAyOC01OTA2LTlkY2MtNGIxNTgwN2ExODM5PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "4ac268b3a1466ff4", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1538" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4xLk5hbWU9X18weDI2M2FfX19fMHgyNjNhX19fXzB4MjYzYV9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9JTI1RTIlMjU5OCUyNUJBJTI1RTIlMjU5OCUyNUJBJTI1RTIlMjU5OCUyNUJBJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjIuTmFtZT1fXzB4NjBfXyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4yLlZhbHVlLkRhdGFUeXBlPVN0cmluZyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4yLlZhbHVlLlN0cmluZ1ZhbHVlPSUyNTYwJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuTmFtZT1fXzB4N2JfX19fMHg3Y19fX18weDdkX19fXzB4N2VfX19fMHg3Zl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuVmFsdWUuU3RyaW5nVmFsdWU9JTI1N0IlMjU3QyUyNTdEfiUyNTdGJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjQuTmFtZT1mb29fXzB4MjBfX2Jhcl9fMHgyMF9fYmF6Jk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjQuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjQuVmFsdWUuU3RyaW5nVmFsdWU9Zm9vJTI1MjBiYXIlMjUyMGJheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS41Lk5hbWU9Zm9vX18weDIyX19iYXJfXzB4MjJfX2JheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS41LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS41LlZhbHVlLlN0cmluZ1ZhbHVlPWZvbyUyNTIyYmFyJTI1MjJiYXomTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5OYW1lPWZvb19fMHgyZl9fX18weDJmX19iYXJfXzB4MmZfX19fMHgyZl9fX18weDJmX19iYXomTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5WYWx1ZS5TdHJpbmdWYWx1ZT1mb28lMjUyRiUyNTJGYmFyJTI1MkYlMjUyRiUyNTJGYmF6Jk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjcuTmFtZT1mb29fXzB4MmZfX2Jhcl9fMHgyZl9fYmF6Jk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjcuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjcuVmFsdWUuU3RyaW5nVmFsdWU9Zm9vJTI1MkZiYXIlMjUyRmJheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS44Lk5hbWU9Zm9vX18weDVjX19iYXJfXzB4NWNfX2JheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS44LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS44LlZhbHVlLlN0cmluZ1ZhbHVlPWZvbyUyNTVDYmFyJTI1NUNiYXomVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNNZXRhZGF0YS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "18b9399c-e240-5376-bb6e-6ec5d21214c2" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjg0MjQ2NTRmLThkNzktNTIxNC05ODZiLTMyMTZiZDJiYjVhMDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MThiOTM5OWMtZTI0MC01Mzc2LWJiNmUtNmVjNWQyMTIxNGMyPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "0adc5b47a5f366c7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTWV0YWRhdGEtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "3081" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "14e98ae5-3e4e-57a3-9ead-ddbc0e1c569c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OWRmOWFiNjMtNjBjOS00MGM1LTlhMjQtMzFhYTBjYzI0ZmYwPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlEvU3JMSWM0ejQ1cEQrRmNzRnJxbTlGQmtRdTlpTzhaWDNSb01aU0doTlpDSmM0MWM0Qzd6VXM4VS94QWJ1UCtqTWV4Qk9NY01kWUhwOUs2Si9EZllLbHJSdW51QjRBVkJMUDJNUi93aThUSU1jNVhyWDkrbUk1QThKYkZMa3NKd1ltUHh5TmdDcUFaUyt3WU94MDNxUzhyQTEraFNPRjZadmMvWktJNDU3Uk5waFp1aXNTUzZJM0tmbkhJUWU5SW1RdVluWVhHQnVKcENIajI0MjRORGVqMy9nTllBR01WVEQzV1E1RUtIUVVkMTl0MnZBWW8wTjRCbFJzWGNJU3hkOEJVMVBvTHhmZWZ3eXlCZUVkYks3amhnVzNHdWdyZEU1YWRreVF3RmtkVWtvSEZFRnRKNDNWblRPM0duRzQ1RkozZ1dHTnhMOHU3UnlmOHNsMGVmY2dFTXZVOWk3UzNOMDVrcTd1Y3NpRjJUMmtvT3o1WW5hazhteWp4Q2JFaDM1YXZFRmRiZzZUSWJiMlNYbmx2aVE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjI2YWRhMGE4MTViMTAzZDAwYmViMTAxYjViNWExNjRlPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7ODQyNDY1NGYtOGQ3OS01MjE0LTk4NmItMzIxNmJkMmJiNWEwJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY01ldGFkYXRhLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtoZWxsbyB3b3JsZCZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM3OjA2LjM3MlomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7S0Y1ZFZxaWErUjBMbXZIWDkyaURYU0xabDR3NFY0LzdKckRvbUdOTlBuTytCYTNCK3RjOG1id29aeTNFbFJqMlYxTE1aTlI4dm56akc4ZkozSWNzZ2tYbkhYOVVnLzYva2pPQVo1b1FCeENNL3FpVUVLTWVTeGNBU1NlU2pVaUtQV3BqWXlxN1RlNEJnZGtnM2hteCtNaW9VRGlPUDNEcEt3N0IvczQ2MUVDUTJxdzdMb3ozeU5xV2dXUnR6cnpzK3V2ZlQwbTB1dzh6OGloNXordjBuNTZ1VnQ3dXRUb0FjdHZLTXp2emV4ZDVNMk1VVjU0Tk9nZjdTcmFEVXZiNDh3Q01EdlZTdzdrdTR2UVZSVlRqZjE0SysyaEk0VnhLeDZQaDl1MVlIaE92V2Fhcmp2elc4TXFoWTRVVHlPcjNsQ3NFQ0FUcFZZL0VBT3M0Yk5qdjJnPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTWV0YWRhdGEtdG9wLTE6M2YzOTI2MWQtNGNmYy00MWI0LTg5MWQtNTVhZTQyNTA3YmVjJnF1b3Q7LAogICZxdW90O01lc3NhZ2VBdHRyaWJ1dGVzJnF1b3Q7IDogewogICAgJnF1b3Q7Zm9vX18weDIwX19iYXJfXzB4MjBfX2JheiZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDtmb28lMjBiYXIlMjBiYXomcXVvdDt9LAogICAgJnF1b3Q7Zm9vX18weDIyX19iYXJfXzB4MjJfX2JheiZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDtmb28lMjJiYXIlMjJiYXomcXVvdDt9LAogICAgJnF1b3Q7Zm9vX18weDJmX19iYXJfXzB4MmZfX2JheiZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDtmb28lMkZiYXIlMkZiYXomcXVvdDt9LAogICAgJnF1b3Q7X18weDdiX19fXzB4N2NfX19fMHg3ZF9fX18weDdlX19fXzB4N2ZfXyZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDslN0IlN0MlN0R+JTdGJnF1b3Q7fSwKICAgICZxdW90O2Zvb19fMHg1Y19fYmFyX18weDVjX19iYXomcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7Zm9vJTVDYmFyJTVDYmF6JnF1b3Q7fSwKICAgICZxdW90O19fMHg2MF9fJnF1b3Q7IDogeyZxdW90O1R5cGUmcXVvdDs6JnF1b3Q7U3RyaW5nJnF1b3Q7LCZxdW90O1ZhbHVlJnF1b3Q7OiZxdW90OyU2MCZxdW90O30sCiAgICAmcXVvdDtfXzB4MjYzYV9fX18weDI2M2FfX19fMHgyNjNhX18mcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7JUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBJnF1b3Q7fSwKICAgICZxdW90O2Zvb19fMHgyZl9fX18weDJmX19iYXJfXzB4MmZfX19fMHgyZl9fX18weDJmX19iYXomcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7Zm9vJTJGJTJGYmFyJTJGJTJGJTJGYmF6JnF1b3Q7fQogIH0KfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjE0ZTk4YWU1LTNlNGUtNTdhMy05ZWFkLWRkYmMwZTFjNTY5YzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "dc3c61542ff738b3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "659" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlElMkZTckxJYzR6NDVwRCUyQkZjc0ZycW05RkJrUXU5aU84WlgzUm9NWlNHaE5aQ0pjNDFjNEM3elVzOFUlMkZ4QWJ1UCUyQmpNZXhCT01jTWRZSHA5SzZKJTJGRGZZS2xyUnVudUI0QVZCTFAyTVIlMkZ3aThUSU1jNVhyWDklMkJtSTVBOEpiRkxrc0p3WW1QeHlOZ0NxQVpTJTJCd1lPeDAzcVM4ckExJTJCaFNPRjZadmMlMkZaS0k0NTdSTnBoWnVpc1NTNkkzS2ZuSElRZTlJbVF1WW5ZWEdCdUpwQ0hqMjQyNE5EZWozJTJGZ05ZQUdNVlREM1dRNUVLSFFVZDE5dDJ2QVlvME40QmxSc1hjSVN4ZDhCVTFQb0x4ZmVmd3l5QmVFZGJLN2poZ1czR3VncmRFNWFka3lRd0ZrZFVrb0hGRUZ0SjQzVm5UTzNHbkc0NUZKM2dXR054TDh1N1J5ZjhzbDBlZmNnRU12VTlpN1MzTjA1a3E3dWNzaUYyVDJrb096NVluYWs4bXlqeENiRWgzNWF2RUZkYmc2VEliYjJTWG5sdmlRJTNEJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNNZXRhZGF0YS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "e43ac92e-b310-5c85-9bb2-9e7783424dba" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZTQzYWM5MmUtYjMxMC01Yzg1LTliYjItOWU3NzgzNDI0ZGJhPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "a0bed4fa72e7bb03", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "160" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY01ldGFkYXRhLXRvcC0xJTNBM2YzOTI2MWQtNGNmYy00MWI0LTg5MWQtNTVhZTQyNTA3YmVjJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "1f3c0779-81b2-5d46-af5b-5020b1e0caf2" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4xZjNjMDc3OS04MWIyLTVkNDYtYWY1Yi01MDIwYjFlMGNhZjI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "23f294a3500160cd", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "128" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNNZXRhZGF0YS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "b375a966-0ceb-5406-8310-fe3f3cb90539" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5iMzc1YTk2Ni0wY2ViLTU0MDYtODMxMC1mZTNmM2NiOTA1Mzk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "bae9a40b49c1761f", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "114" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljTWV0YWRhdGEtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:06 GMT" ], "X-Amzn-Requestid": [ "7a6197b4-ddd5-523b-8eb1-c0eded87458f" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43YTYxOTdiNC1kZGQ1LTUyM2ItOGViMS1jMGVkZWQ4NzQ1OGY8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestNack.replay000066400000000000000000001251141367004507500301020ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcST9GKIA0P5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "9fac24e7d8163b52", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "61" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNOYWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "325" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:45 GMT" ], "X-Amzn-Requestid": [ "889b7bd1-256d-5f94-b302-2c881550c002" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTmFjay10b3AtMTwvVG9waWNBcm4+CiAgPC9DcmVhdGVUb3BpY1Jlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ODg5YjdiZDEtMjU2ZC01Zjk0LWIzMDItMmM4ODE1NTBjMDAyPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L0NyZWF0ZVRvcGljUmVzcG9uc2U+Cg==" } }, { "ID": "f1ba26f3aea10246", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "66" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY05hY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "338" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "2954fa1e-2c43-59ac-add7-ad471c7d87ee" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNOYWNrLXN1Yi0xPC9RdWV1ZVVybD48L0NyZWF0ZVF1ZXVlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+Mjk1NGZhMWUtMmM0My01OWFjLWFkZDctYWQ0NzFjN2Q4N2VlPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvQ3JlYXRlUXVldWVSZXNwb25zZT4=" } }, { "ID": "c710e5fea305c4b2", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "156" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY05hY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "390" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "f22c5aa8-1905-565b-b1b1-0df1293bb819" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stc3ViLTE8L1ZhbHVlPjwvQXR0cmlidXRlPjwvR2V0UXVldWVBdHRyaWJ1dGVzUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZjIyYzVhYTgtMTkwNS01NjViLWIxYjEtMGRmMTI5M2JiODE5PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvR2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "7265d1d117319297", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "649" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNOYWNrLXN1Yi0xJTIyJTBBJTA5JTA5JTdEJTBBJTA5JTA5JTVEJTBBJTA5JTA5JTdEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNOYWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "e613ef2f-2cdf-5f5e-8ce2-b8761ce1f11c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZTYxM2VmMmYtMmNkZi01ZjVlLThjZTItYjg3NjFjZTFmMTFjPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "c30b980a2ed5f875", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "194" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY05hY2stc3ViLTEmUHJvdG9jb2w9c3FzJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljTmFjay10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "368" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "d1ea0538-221b-5540-861b-526112252ad6" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTmFjay10b3AtMTozZDAwMjg2YS0xYjc1LTQxNTYtYWFkYS1jM2I4NWZlZDkwOGU8L1N1YnNjcmlwdGlvbkFybj4KICA8L1N1YnNjcmliZVJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZDFlYTA1MzgtMjIxYi01NTQwLTg2MWItNTI2MTEyMjUyYWQ2PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1N1YnNjcmliZVJlc3BvbnNlPgo=" } }, { "ID": "f3723004153daf52", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "243" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0wJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY05hY2stdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "d33eef67-b79c-559c-b3a0-b83e87a28a0a" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjE3OGE5OWM5LWMwMzctNWZhYy1iNjQzLWNlOTBmMDA5ZDAzYTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZDMzZWVmNjctYjc5Yy01NTljLWIzYTAtYjgzZTg3YTI4YTBhPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "b50bda3db54412e6", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "243" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0xJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MSZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY05hY2stdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "62ef7e69-ef4a-55c6-9556-2930df74da50" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjk3NzJhOTVhLTkxM2QtNTdhZi05ZTVhLWZlMDNhMTAzMjgzOTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NjJlZjdlNjktZWY0YS01NWM2LTk1NTYtMjkzMGRmNzRkYTUwPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "dc3f7c73789409c9", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2088" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "ec9240c1-dcfb-5c6a-b3fe-1798ecc52228" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MzA3NjQ1ZDgtYjZlYS00MzkwLWFmNWMtNWMzMGE5YzcyMDJkPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnlCMmo4WHNIZ0FTOStMeXVaVVNteTFzRGl3bklMeHF1TytWc1QxNUZXMWVPUEZiOVBodnJaYTg0TTJ4RmpJSWV1VXd3RnNnLzBVbUl5dExWbk5iZ0xCMGdya0Y3am81ZXpLbmc0ZVZLblNqdmQvZHYyS2ZUbEZQYjBYSThmS0JGb1I2dEdBK0V3aEIybUkzUVU1dHFudklKM2RTWFZyL0RQR2sxNUJtTHdCS2k0WTgyTTRua0wvSWR0T1BEREVwbGhHN2g3UEpETFkvT1FueFJtRHVLaTN3TStoUHo5RjVrT3AycTJUdVZWdU9kN1ZpQzFSZ1AxRjJrUngyb2p3d1RONUF3TjgydHIvV284ZmwrM3hKZCs4NG9SNW15b2t4ZmpHbHVCaTByaElhT21yOTN0UCtjRHFxeDhMa1lQTktxZVNrOExhSGlrWlVMdDVRNFNzL1Rhb0t5OXdNWmNzZ05ic0N6QTdwTHZpK2ZaWkxRQ2Y2STczU2xaTEhsemVlU1NyQVpFV2FuUkpVRTl3VmxnZ3E1SHc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjU5YWRmNTVmMDRlMGJiNmJiZDEyNDg4MmM1NGYwMGFlPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7MTc4YTk5YzktYzAzNy01ZmFjLWI2NDMtY2U5MGYwMDlkMDNhJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzAmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0Ni42MjBaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O3FJeVFNRW84U0tIdWorMHJHZktvbDAxZ1pSbGZ5T0c2d3pxazlNMnE5Q3FMTmhmMStka2FGQXBmYWw1d3laZmp1dVRIenRFTEpiTDcwckFSSG9sS1Nqb25SaFFKeUpYT29HdCthcmcxTElmNVM2MXh6U0xUcGN6ZGhWNXowcjdQTXloWTJaQmlYL05NcU12Y1Q2ZE83UGRVTUpmUFN2L3d0eG1ZSDQvQkhXdGhNVGEycFFxcy95NktONVdBK2hjZ1BPaVR4YStiZEFFdnBMckRpaGxkc1VSeXNEMUhiNSsvMk8wU2EzdDZDMnE1SmN6YlFNR0NaT1VHVkhwSE1SbzVnYzdmMkJQUjdxR3NaSkdWRGVOSG1WeEhRczRSRmN1ZVN5NXJZb1F6dU9hZ0pWcnN0V2dCZUdGR1FKN3ZqSWsyOVRTL1ZEaDBUOU1teUNFREpyRXp3Zz09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stdG9wLTE6M2QwMDI4NmEtMWI3NS00MTU2LWFhZGEtYzNiODVmZWQ5MDhlJnF1b3Q7LAogICZxdW90O01lc3NhZ2VBdHRyaWJ1dGVzJnF1b3Q7IDogewogICAgJnF1b3Q7YSZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDswJnF1b3Q7fQogIH0KfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmVjOTI0MGMxLWRjZmItNWM2YS1iM2ZlLTE3OThlY2M1MjIyODwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "df8efc8e97183ba4", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2088" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "0a212a82-5a7b-54fb-8199-7ddb6a45cab9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ODc3MDBjZGUtNmFjZC00OGUzLWJmNjktMTI2YTFlNDk0ZjRmPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkxoUjNCSmdSMTVCcVUxdWtEV3lSUGRFSklmdHU5UjYwNmlKYWRJWk1hajNPdk5vdzBVc0hSQ2tmMUU5a3Q0UFVkZW5YVXBxY0UrWHBJUkpHcVJJNFZXcWtlRnh1TW8zdG5nMFJ3dHlKQnlyclpnK2o3MUJmNmRTSm51MWZnNm5MTXZjSEw1U05Xa3N6WWRYMGFFcFlZMHREU3hGaTFQclRrOE81d3BINTNLUU01Z1lRZUpVQlpnRTdkakFmM0VrVkFybGpQZTZqa0lwNThZdTZ6TVBWd2VTQ2NiMGJhdzBPM2RvWTgvS2dEeSttRVN4VDhOZGRwMzFabXNnalg4ZEVleXpJbDVkODR5ZVpYUGZ5c0tRNzZaTFVCS0p4Z3Y3blI5a1VmeXdmOG81VzlIQTRpcDVBNmNydGROU1h2YXdaQUpHSGhqVHd3OTY1Tyt3eU5kdDVzdGFVL2wySjYwNXN1cjRsMHpyOUdIVXllNEZLTGhxMWh2OWVqeDQwVExMcC9yL0RVSDZFeHVFSEREU28rVFZXdEE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmZmNTA1MmMxMWE4YmU3MzA1YjgyMzYzZDNiNDcxYTI5PC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7OTc3MmE5NWEtOTEzZC01N2FmLTllNWEtZmUwM2ExMDMyODM5JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0Ni43MTBaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O05OWDJkMGJpT3FleEYrOVBsVm5zRGkreXZDMFhob21IMXdqVWFYNk9NcGl2R210MEZ0YjlTQTFNbVF5SFRIZnpZWGZhSkpiNmk1dEdiRHRwTmlxa2IrWFlnRkZRdFJZczNiWXVjVDlQbUcrZnlqb3p3bzlpcG80d0cxWjJ1WUQxdEZnZHRCUVpZS0pScDNDS0pndzN4cWEySnRabnh5ZHh5bVVrRTBwY2FTSm9zWDBadk00Tm40M0pFU2s1OUMxUXNPVVJQdjhaVW5zNTVOblhIdnFWaDNGcjEzTGZnMithS2tOcG9FNTB1NTYvUW0zTVdpTmJGRHFMRXhzL0hEbG1mYU1xSlF5MkR6ZTI5eFVZVFlLZ0FmeFUvTjEycm9GN2FlM1lyR2IzWkFjaERuYXBMVk9DRCtLL3JlNkIybm1RT2FOWXVPSWh1N3pkc2piQ1RybUdQUT09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stdG9wLTE6M2QwMDI4NmEtMWI3NS00MTU2LWFhZGEtYzNiODVmZWQ5MDhlJnF1b3Q7LAogICZxdW90O01lc3NhZ2VBdHRyaWJ1dGVzJnF1b3Q7IDogewogICAgJnF1b3Q7YSZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDsxJnF1b3Q7fQogIH0KfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjBhMjEyYTgyLTVhN2ItNTRmYi04MTk5LTdkZGI2YTQ1Y2FiOTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "fc0a592942ccf241", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "756" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnlCMmo4WHNIZ0FTOSUyQkx5dVpVU215MXNEaXduSUx4cXVPJTJCVnNUMTVGVzFlT1BGYjlQaHZyWmE4NE0yeEZqSUlldVV3d0ZzZyUyRjBVbUl5dExWbk5iZ0xCMGdya0Y3am81ZXpLbmc0ZVZLblNqdmQlMkZkdjJLZlRsRlBiMFhJOGZLQkZvUjZ0R0ElMkJFd2hCMm1JM1FVNXRxbnZJSjNkU1hWciUyRkRQR2sxNUJtTHdCS2k0WTgyTTRua0wlMkZJZHRPUERERXBsaEc3aDdQSkRMWSUyRk9RbnhSbUR1S2kzd00lMkJoUHo5RjVrT3AycTJUdVZWdU9kN1ZpQzFSZ1AxRjJrUngyb2p3d1RONUF3TjgydHIlMkZXbzhmbCUyQjN4SmQlMkI4NG9SNW15b2t4ZmpHbHVCaTByaElhT21yOTN0UCUyQmNEcXF4OExrWVBOS3FlU2s4TGFIaWtaVUx0NVE0U3MlMkZUYW9LeTl3TVpjc2dOYnNDekE3cEx2aSUyQmZaWkxRQ2Y2STczU2xaTEhsemVlU1NyQVpFV2FuUkpVRTl3VmxnZ3E1SHclM0QlM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlZpc2liaWxpdHlUaW1lb3V0PTAmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY05hY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "411" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:46 GMT" ], "X-Amzn-Requestid": [ "ad82c9a0-f8e3-5a5e-8626-9ef9c8dd841c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hZDgyYzlhMC1mOGUzLTVhNWUtODYyNi05ZWY5YzhkZDg0MWM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVzcG9uc2U+" } }, { "ID": "328c23a68dfdcfac", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2088" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:47 GMT" ], "X-Amzn-Requestid": [ "a154a7f0-0cbb-5681-9079-f0a93c84a8c3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MzA3NjQ1ZDgtYjZlYS00MzkwLWFmNWMtNWMzMGE5YzcyMDJkPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnU3V004SkpnRmFVMmIwMWNPSTZxUzZ5bGxOdnRKUVFtZkJaUWdBRWU2czNxRWpXSHU0NDZFSTRLL25kdEpQbVN3SzdnWGVaOWJlT3krV0wybDVUV0ZldVdJY21EaGJPcmtUTVAvdmkxRnp6NmJ3NnVwRUJsOEh0clV6b1FCUzgwT1d4RmtPUkczUEk2MjhhR1pPQXdFVkIrb0tIZ0I4V2Q3eGRHYWh1RDFSRzBrbWlvUUJVajNBN1lUS3NjbEVaVHh1end0eENYalVyUGtkemF0VUV6MklLUHZKd2piRzYvQjR4UktuTCtmWmMzaU5QZjZ4N0ptVytPVkdYUVkwNWFDVlBSV014ZkwwdFI1Z25VWEhBYVQweCtCMTBvRXJ5dXFBRWtWdjQ0M0F6eGZKMmtiZnZOYi9qSnZXNkxualhhWG9DWVhiSkdZRE5sRjZGbEJ3alJ1aFJ4SU8vdVNmc2lMcUtnZ0NobGVEMjJtZllSc0kzWW1WRnBDcnFqaDJBZ085TFo1OFB0dVlKRkpPbU1LWWdJUFE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjU5YWRmNTVmMDRlMGJiNmJiZDEyNDg4MmM1NGYwMGFlPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7MTc4YTk5YzktYzAzNy01ZmFjLWI2NDMtY2U5MGYwMDlkMDNhJnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzAmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0Ni42MjBaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O3FJeVFNRW84U0tIdWorMHJHZktvbDAxZ1pSbGZ5T0c2d3pxazlNMnE5Q3FMTmhmMStka2FGQXBmYWw1d3laZmp1dVRIenRFTEpiTDcwckFSSG9sS1Nqb25SaFFKeUpYT29HdCthcmcxTElmNVM2MXh6U0xUcGN6ZGhWNXowcjdQTXloWTJaQmlYL05NcU12Y1Q2ZE83UGRVTUpmUFN2L3d0eG1ZSDQvQkhXdGhNVGEycFFxcy95NktONVdBK2hjZ1BPaVR4YStiZEFFdnBMckRpaGxkc1VSeXNEMUhiNSsvMk8wU2EzdDZDMnE1SmN6YlFNR0NaT1VHVkhwSE1SbzVnYzdmMkJQUjdxR3NaSkdWRGVOSG1WeEhRczRSRmN1ZVN5NXJZb1F6dU9hZ0pWcnN0V2dCZUdGR1FKN3ZqSWsyOVRTL1ZEaDBUOU1teUNFREpyRXp3Zz09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stdG9wLTE6M2QwMDI4NmEtMWI3NS00MTU2LWFhZGEtYzNiODVmZWQ5MDhlJnF1b3Q7LAogICZxdW90O01lc3NhZ2VBdHRyaWJ1dGVzJnF1b3Q7IDogewogICAgJnF1b3Q7YSZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDswJnF1b3Q7fQogIH0KfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmExNTRhN2YwLTBjYmItNTY4MS05MDc5LWYwYTkzYzg0YThjMzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "6de57eec0d4071d0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "744" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkxoUjNCSmdSMTVCcVUxdWtEV3lSUGRFSklmdHU5UjYwNmlKYWRJWk1hajNPdk5vdzBVc0hSQ2tmMUU5a3Q0UFVkZW5YVXBxY0UlMkJYcElSSkdxUkk0Vldxa2VGeHVNbzN0bmcwUnd0eUpCeXJyWmclMkJqNzFCZjZkU0pudTFmZzZuTE12Y0hMNVNOV2tzellkWDBhRXBZWTB0RFN4RmkxUHJUazhPNXdwSDUzS1FNNWdZUWVKVUJaZ0U3ZGpBZjNFa1ZBcmxqUGU2amtJcDU4WXU2ek1QVndlU0NjYjBiYXcwTzNkb1k4JTJGS2dEeSUyQm1FU3hUOE5kZHAzMVptc2dqWDhkRWV5eklsNWQ4NHllWlhQZnlzS1E3NlpMVUJLSnhndjduUjlrVWZ5d2Y4bzVXOUhBNGlwNUE2Y3J0ZE5TWHZhd1pBSkdIaGpUd3c5NjVPJTJCd3lOZHQ1c3RhVSUyRmwySjYwNXN1cjRsMHpyOUdIVXllNEZLTGhxMWh2OWVqeDQwVExMcCUyRnIlMkZEVUg2RXh1RUhERFNvJTJCVFZXdEElM0QlM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlZpc2liaWxpdHlUaW1lb3V0PTAmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY05hY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "411" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:47 GMT" ], "X-Amzn-Requestid": [ "9173fdf5-63b9-580e-8937-aaac5386e64c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45MTczZmRmNS02M2I5LTU4MGUtODkzNy1hYWFjNTM4NmU2NGM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVzcG9uc2U+" } }, { "ID": "1e55061b5e7330c8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2088" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:47 GMT" ], "X-Amzn-Requestid": [ "bab98944-3c95-5619-8a60-de1d0caa3c59" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ODc3MDBjZGUtNmFjZC00OGUzLWJmNjktMTI2YTFlNDk0ZjRmPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjczaHdTNmRmQXhIUm9CVkVyeC9xK2hUeityL09OZW9IVExCWVU3VWtUUHB4OGI0amF5L1lGbUsyVnZaUWk5cC8yNytvNjdGQlhxd0xmOHVnc3BlQnJNbW1QbWdaRzM3d1h0THdYRE5WOHJPSklHZGNJRG5kc0Y2U1FkTTNDWExYN3dTd1hXODkydkQyaGQ1VEt6R0duN1lTRnd5amxuaUxRN2VwdEZtNG5mdUViaFBoRjRSTkcxV0VOdkFoWDhDR2U4NUQ0aHBhWWpsdHBBVFlldXRLaThjTmljaHZMZnJTdjZNT0VxVm0vVXU1R0ZMTVo0Y3dNVkQ2TXRtSThrN0xaUE1ZQm1VbnlxUkJoUUVrUk1wTHpWUWZIeFlIbW9vOFoyU1kxblJjbTZTZktKNEtnNkRlVFpFUmFtNmw0dTd4dkh6VkwwbmswbUxmcTJBaDJndngzWjcvKy8vLzZrd1RrQlJtcGhTQ0JubytKQnlCQ0NadUsvZTkwamV1TlAzUTJmVjdDTG1JcEpNdlF0NkVZOTJlTmc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmZmNTA1MmMxMWE4YmU3MzA1YjgyMzYzZDNiNDcxYTI5PC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7OTc3MmE5NWEtOTEzZC01N2FmLTllNWEtZmUwM2ExMDMyODM5JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0Ni43MTBaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O05OWDJkMGJpT3FleEYrOVBsVm5zRGkreXZDMFhob21IMXdqVWFYNk9NcGl2R210MEZ0YjlTQTFNbVF5SFRIZnpZWGZhSkpiNmk1dEdiRHRwTmlxa2IrWFlnRkZRdFJZczNiWXVjVDlQbUcrZnlqb3p3bzlpcG80d0cxWjJ1WUQxdEZnZHRCUVpZS0pScDNDS0pndzN4cWEySnRabnh5ZHh5bVVrRTBwY2FTSm9zWDBadk00Tm40M0pFU2s1OUMxUXNPVVJQdjhaVW5zNTVOblhIdnFWaDNGcjEzTGZnMithS2tOcG9FNTB1NTYvUW0zTVdpTmJGRHFMRXhzL0hEbG1mYU1xSlF5MkR6ZTI5eFVZVFlLZ0FmeFUvTjEycm9GN2FlM1lyR2IzWkFjaERuYXBMVk9DRCtLL3JlNkIybm1RT2FOWXVPSWh1N3pkc2piQ1RybUdQUT09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05hY2stdG9wLTE6M2QwMDI4NmEtMWI3NS00MTU2LWFhZGEtYzNiODVmZWQ5MDhlJnF1b3Q7LAogICZxdW90O01lc3NhZ2VBdHRyaWJ1dGVzJnF1b3Q7IDogewogICAgJnF1b3Q7YSZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDsxJnF1b3Q7fQogIH0KfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmJhYjk4OTQ0LTNjOTUtNTYxOS04YTYwLWRlMWQwY2FhM2M1OTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "7366dadf43e223cb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "653" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnU3V004SkpnRmFVMmIwMWNPSTZxUzZ5bGxOdnRKUVFtZkJaUWdBRWU2czNxRWpXSHU0NDZFSTRLJTJGbmR0SlBtU3dLN2dYZVo5YmVPeSUyQldMMmw1VFdGZXVXSWNtRGhiT3JrVE1QJTJGdmkxRnp6NmJ3NnVwRUJsOEh0clV6b1FCUzgwT1d4RmtPUkczUEk2MjhhR1pPQXdFVkIlMkJvS0hnQjhXZDd4ZEdhaHVEMVJHMGttaW9RQlVqM0E3WVRLc2NsRVpUeHV6d3R4Q1hqVXJQa2R6YXRVRXoySUtQdkp3amJHNiUyRkI0eFJLbkwlMkJmWmMzaU5QZjZ4N0ptVyUyQk9WR1hRWTA1YUNWUFJXTXhmTDB0UjVnblVYSEFhVDB4JTJCQjEwb0VyeXVxQUVrVnY0NDNBenhmSjJrYmZ2TmIlMkZqSnZXNkxualhhWG9DWVhiSkdZRE5sRjZGbEJ3alJ1aFJ4SU8lMkZ1U2ZzaUxxS2dnQ2hsZUQyMm1mWVJzSTNZbVZGcENycWpoMkFnTzlMWjU4UHR1WUpGSk9tTUtZZ0lQUSUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:47 GMT" ], "X-Amzn-Requestid": [ "039623ad-dcce-537b-9256-74f4ecf10d39" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MDM5NjIzYWQtZGNjZS01MzdiLTkyNTYtNzRmNGVjZjEwZDM5PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "f34c89388b954c11", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "663" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjczaHdTNmRmQXhIUm9CVkVyeCUyRnElMkJoVHolMkJyJTJGT05lb0hUTEJZVTdVa1RQcHg4YjRqYXklMkZZRm1LMlZ2WlFpOXAlMkYyNyUyQm82N0ZCWHF3TGY4dWdzcGVCck1tbVBtZ1pHMzd3WHRMd1hETlY4ck9KSUdkY0lEbmRzRjZTUWRNM0NYTFg3d1N3WFc4OTJ2RDJoZDVUS3pHR243WVNGd3lqbG5pTFE3ZXB0Rm00bmZ1RWJoUGhGNFJORzFXRU52QWhYOENHZTg1RDRocGFZamx0cEFUWWV1dEtpOGNOaWNodkxmclN2Nk1PRXFWbSUyRlV1NUdGTE1aNGN3TVZENk10bUk4azdMWlBNWUJtVW55cVJCaFFFa1JNcEx6VlFmSHhZSG1vbzhaMlNZMW5SY202U2ZLSjRLZzZEZVRaRVJhbTZsNHU3eHZIelZMMG5rMG1MZnEyQWgyZ3Z4M1o3JTJGJTJCJTJGJTJGJTJGNmt3VGtCUm1waFNDQm5vJTJCSkJ5QkNDWnVLJTJGZTkwamV1TlAzUTJmVjdDTG1JcEpNdlF0NkVZOTJlTmclM0QlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY05hY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:47 GMT" ], "X-Amzn-Requestid": [ "77ae9095-20a8-5b9f-90db-c7cc1097f5dd" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NzdhZTkwOTUtMjBhOC01YjlmLTkwZGItYzdjYzEwOTdmNWRkPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "6d7f3a781387268a", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "156" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY05hY2stdG9wLTElM0EzZDAwMjg2YS0xYjc1LTQxNTYtYWFkYS1jM2I4NWZlZDkwOGUmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:47 GMT" ], "X-Amzn-Requestid": [ "9286481b-46f5-572a-85a8-1f4276ca98bc" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD45Mjg2NDgxYi00NmY1LTU3MmEtODVhOC0xZjQyNzZjYTk4YmM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "723f66f347835e99", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "124" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNOYWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:47 GMT" ], "X-Amzn-Requestid": [ "85c17826-2578-56b6-9513-2f7f15474ec9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD44NWMxNzgyNi0yNTc4LTU2YjYtOTUxMy0yZjdmMTU0NzRlYzk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "b8e539202d3eca26", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "110" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljTmFjay10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 500, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "276" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:52 GMT" ], "X-Amzn-Requestid": [ "c0d3cfca-fb9e-5f6f-926e-9893cba1d0f9" ] }, "Body": "PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxFcnJvcj4KICAgIDxUeXBlPlJlY2VpdmVyPC9UeXBlPgogICAgPENvZGU+SW50ZXJuYWxFcnJvcjwvQ29kZT4KICAgIDxNZXNzYWdlPlJlcXVlc3QgY291bGQgbm90IGJlIGNvbXBsZXRlZDwvTWVzc2FnZT4KICA8L0Vycm9yPgogIDxSZXF1ZXN0SWQ+YzBkM2NmY2EtZmI5ZS01ZjZmLTkyNmUtOTg5M2NiYTFkMGY5PC9SZXF1ZXN0SWQ+CjwvRXJyb3JSZXNwb25zZT4K" } } ] }TestNonExistentSubscriptionSucceedsOnOpenButFailsOnReceive.replay000066400000000000000000000050131367004507500420550ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic{ "Initial": "AQAAAA7WcSUQH+KAKP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d7e8da3a74c4cd79", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:04 GMT" ], "X-Amzn-Requestid": [ "40c12fc5-d168-5644-bba1-789ce13854d3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD40MGMxMmZjNS1kMTY4LTU2NDQtYmJhMS03ODljZTEzODU0ZDM8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } } ] }TestNonExistentTopicSucceedsOnOpenButFailsOnSend.replay000066400000000000000000000045231367004507500377630ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic{ "Initial": "AQAAAA7WcSUQDBREo/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "dc129b5161ef7c9c", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "113" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0mVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBbm9uZXhpc3RlbnR0b3BpYyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "259" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:04 GMT" ], "X-Amzn-Requestid": [ "4ab0c949-2dc6-5a2d-886f-9e101d96875a" ] }, "Body": "PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxFcnJvcj4KICAgIDxUeXBlPlNlbmRlcjwvVHlwZT4KICAgIDxDb2RlPk5vdEZvdW5kPC9Db2RlPgogICAgPE1lc3NhZ2U+VG9waWMgZG9lcyBub3QgZXhpc3Q8L01lc3NhZ2U+CiAgPC9FcnJvcj4KICA8UmVxdWVzdElkPjRhYjBjOTQ5LTJkYzYtNWEyZC04ODZmLTllMTAxZDk2ODc1YTwvUmVxdWVzdElkPgo8L0Vycm9yUmVzcG9uc2U+Cg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestNonUTF8MessageBody.replay000066400000000000000000000554741367004507500325650ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUOElWqXP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "0a0194cf0f2c8658", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "75" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNOb25VVEY4TWVzc2FnZUJvZHktdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "339" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:02 GMT" ], "X-Amzn-Requestid": [ "50d13c5f-ddfa-506a-bc3e-6b06edb467de" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTm9uVVRGOE1lc3NhZ2VCb2R5LXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD41MGQxM2M1Zi1kZGZhLTUwNmEtYmMzZS02YjA2ZWRiNDY3ZGU8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "99a96310d2817676", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "80" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY05vblVURjhNZXNzYWdlQm9keS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "352" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "91a37e60-bbcf-516a-bfbd-29398b81070a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNOb25VVEY4TWVzc2FnZUJvZHktc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45MWEzN2U2MC1iYmNmLTUxNmEtYmZiZC0yOTM5OGI4MTA3MGE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "45381db4cf397587", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "170" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY05vblVURjhNZXNzYWdlQm9keS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "404" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "4fea466e-d083-5c6f-a07c-1137e0cc9a0f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY05vblVURjhNZXNzYWdlQm9keS1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD40ZmVhNDY2ZS1kMDgzLTVjNmYtYTA3Yy0xMTM3ZTBjYzlhMGY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "ce6094693115b2cc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "677" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNOb25VVEY4TWVzc2FnZUJvZHktc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY05vblVURjhNZXNzYWdlQm9keS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "749b9e84-e1a9-5c9c-b6ec-c9ddd1e6eafc" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NzQ5YjllODQtZTFhOS01YzljLWI2ZWMtYzlkZGQxZTZlYWZjPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "c6de2208b6874ebd", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "222" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY05vblVURjhNZXNzYWdlQm9keS1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNOb25VVEY4TWVzc2FnZUJvZHktdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "382" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "8037512e-7ba3-526f-aee9-06774bece5db" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTm9uVVRGOE1lc3NhZ2VCb2R5LXRvcC0xOjBmZmRkZmZlLWFkMWYtNGYwZS1iYmIxLWM0NGYwYTk1ZmQ1ZDwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD44MDM3NTEyZS03YmEzLTUyNmYtYWVlOS0wNjc3NGJlY2U1ZGI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "5be0e02d282fca69", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "557" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1BQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2T2pzOFBUNCUyRlFGdGNYVjVmWUh0OGZYNSUyRlptOXZYR0poY2x4aVlYb3VMbHhtYjI5Y0xpNWNZbUZ5WEM0dVhDNHVYR0poZWk0dVhDNHVMMlp2Ynk4dUxpOWlZWEl2TGk0dkxpNHZZbUY2TGk0dlptOXZMMkpoY2k5aVlYcG1iMjhpWW1GeUltSmhlaTR1WEdadmIxeGNZbUZ5WEZ4Y1ltRjZabTl2THk5aVlYSXZMeTlpWVhwbWIyOGdZbUZ5SUdKaGVqRXlNelExNHBpNjRwaTY0cGk2dmJJJTNEJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1iYXNlNjRlbmNvZGVkJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9dHJ1ZSZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY05vblVURjhNZXNzYWdlQm9keS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "a587cca4-9d90-5477-8944-9bfdaddf93c3" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmVlNDQzNTI5LWQ4MjctNWQxMy05MWVlLTYyNzBlODY4MmFhNzwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+YTU4N2NjYTQtOWQ5MC01NDc3LTg5NDQtOWJmZGFkZGY5M2MzPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "e158ab73c5206e63", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTm9uVVRGOE1lc3NhZ2VCb2R5LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2430" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "52058105-ab13-5f48-89e9-d65c9b5c0928" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZjMxY2JjYTgtNTlmNC00NDJjLTkzZDgtZDk0NWQ1NzM4ZmFkPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkM4OE12THZvaW9ONDY2cnhMd2xGUmJhNUFMTzFaL2pjOHRMcUdxWEE5RVBmbFY3K3l6NFR0UWZtUDFRYXp0bEpkM3AwN1dNbk9sMjlVMis2ZlRoZmQza2Q1VDZGVnBubTZ6SVd1UnhnWmlLNlJQUk5UOW95UDFqekZGWC9tQXJUTW1GVDlaem9BWGlnYXFEU29DZTRXS0tIdjh2WDh5ZXMzcGYvVXB0YXVqM1BNS0Y4Z2FkYTZ0ZU5SQVp6TWg3a0pMQVR5VVlJam9FbW5GcnZzWnVkWnN0MkhUK1J1a1pmUUkxekZQV2VXTGU5dWVWU09kdjFmODVDTnRzaXI4WFVOQkRqSXlsRUwraVRwSEc1ZWpzbG5NRjFKWDkyV0V4R0pWckFBV0thSU5RcU85V0U2cHNvQ3BkZ0NEb29YWjNyMTZBRVhLY1ZGdHg0M2tmaTVOU2dKMlRhUmJQTVhZZ3lvMTU1UWFvZGVJWHJGTm01MXc3N0JoZENLOVFMd21WV0dQc2hmdndjT1BPYnhMTDdLc1pmVmpIVmVOY3FSejJteDFWVUZHU1NrcXM9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YWEyZWU5Y2Q4NmU0OTg0MmE2NjIzMzI0NmI5NzZlOTQ8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDtlZTQ0MzUyOS1kODI3LTVkMTMtOTFlZS02MjcwZTg2ODJhYTcmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljTm9uVVRGOE1lc3NhZ2VCb2R5LXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDtBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2T2pzOFBUNC9RRnRjWFY1ZllIdDhmWDUvWm05dlhHSmhjbHhpWVhvdUxseG1iMjljTGk1Y1ltRnlYQzR1WEM0dVhHSmhlaTR1WEM0dUwyWnZieTh1TGk5aVlYSXZMaTR2TGk0dlltRjZMaTR2Wm05dkwySmhjaTlpWVhwbWIyOGlZbUZ5SW1KaGVpNHVYR1p2YjF4Y1ltRnlYRnhjWW1GNlptOXZMeTlpWVhJdkx5OWlZWHBtYjI4Z1ltRnlJR0poZWpFeU16UTE0cGk2NHBpNjRwaTZ2Ykk9JnF1b3Q7LAogICZxdW90O1RpbWVzdGFtcCZxdW90OyA6ICZxdW90OzIwMjAtMDYtMDlUMDY6Mzc6MDMuNTY0WiZxdW90OywKICAmcXVvdDtTaWduYXR1cmVWZXJzaW9uJnF1b3Q7IDogJnF1b3Q7MSZxdW90OywKICAmcXVvdDtTaWduYXR1cmUmcXVvdDsgOiAmcXVvdDthVytOVVNkZFZ3WDNRbXlmSzQxcVFpWnJLVjNpaDR4YWNocGxNTUMrTEVjK3A0UEZzcnYxb1VQNGlRV1k5dEVWQWt5Z2toSS8wdzhrVHF1enRCSU1SMUxKNkZ1L2tkMU9qTVdpQnFheFZyT2o4ekRzS1NPOTQvWkNiMlIrMWNWL3IvM1JNaWJLUm96WVlFR2tqNGN6byt3cDZLd0UyTlFNSmo5ekZwdVd0d1JVa0hCelMxakc1UnREZi9UcUtXcjUvYy9HMGFrSWg4YVprdE9HSzZhS2FJcG41SjRBNHJNMklFQUErMUdjWVY2RWJXV21sQk5tQlgxSGVLSGo4QXJxUWNFS2hRbjNoUVRBYVJWbllXc2FHaUQzK2V4TEpMVGt0emEvcFg5eEJEN3BQY3QzNXVMOUFjRXhmdGJheFEwWHZZZW9ZKzkvRWRUcGp4QnUwZCtVcFE9PSZxdW90OywKICAmcXVvdDtTaWduaW5nQ2VydFVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tL1NpbXBsZU5vdGlmaWNhdGlvblNlcnZpY2UtYTg2Y2IxMGI0ZTFmMjljOTQxNzAyZDczNzEyOGY3YjYucGVtJnF1b3Q7LAogICZxdW90O1Vuc3Vic2NyaWJlVVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1VbnN1YnNjcmliZSZhbXA7U3Vic2NyaXB0aW9uQXJuPWFybjphd3M6c25zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6U05TVG9waWNOb25VVEY4TWVzc2FnZUJvZHktdG9wLTE6MGZmZGRmZmUtYWQxZi00ZjBlLWJiYjEtYzQ0ZjBhOTVmZDVkJnF1b3Q7LAogICZxdW90O01lc3NhZ2VBdHRyaWJ1dGVzJnF1b3Q7IDogewogICAgJnF1b3Q7YmFzZTY0ZW5jb2RlZCZxdW90OyA6IHsmcXVvdDtUeXBlJnF1b3Q7OiZxdW90O1N0cmluZyZxdW90OywmcXVvdDtWYWx1ZSZxdW90OzomcXVvdDt0cnVlJnF1b3Q7fQogIH0KfTwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjUyMDU4MTA1LWFiMTMtNWY0OC04OWU5LWQ2NWM5YjVjMDkyODwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "f757fa9611744a54", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "679" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkM4OE12THZvaW9ONDY2cnhMd2xGUmJhNUFMTzFaJTJGamM4dExxR3FYQTlFUGZsVjclMkJ5ejRUdFFmbVAxUWF6dGxKZDNwMDdXTW5PbDI5VTIlMkI2ZlRoZmQza2Q1VDZGVnBubTZ6SVd1UnhnWmlLNlJQUk5UOW95UDFqekZGWCUyRm1BclRNbUZUOVp6b0FYaWdhcURTb0NlNFdLS0h2OHZYOHllczNwZiUyRlVwdGF1ajNQTUtGOGdhZGE2dGVOUkFaek1oN2tKTEFUeVVZSWpvRW1uRnJ2c1p1ZFpzdDJIVCUyQlJ1a1pmUUkxekZQV2VXTGU5dWVWU09kdjFmODVDTnRzaXI4WFVOQkRqSXlsRUwlMkJpVHBIRzVlanNsbk1GMUpYOTJXRXhHSlZyQUFXS2FJTlFxTzlXRTZwc29DcGRnQ0Rvb1haM3IxNkFFWEtjVkZ0eDQza2ZpNU5TZ0oyVGFSYlBNWFlneW8xNTVRYW9kZUlYckZObTUxdzc3QmhkQ0s5UUx3bVZXR1BzaGZ2d2NPUE9ieExMN0tzWmZWakhWZU5jcVJ6Mm14MVZVRkdTU2txcyUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljTm9uVVRGOE1lc3NhZ2VCb2R5LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "91d322e9-fe80-5da0-bd62-75b0cecfbbc0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OTFkMzIyZTktZmU4MC01ZGEwLWJkNjItNzViMGNlY2ZiYmMwPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "438978858b89ad7e", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "170" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY05vblVURjhNZXNzYWdlQm9keS10b3AtMSUzQTBmZmRkZmZlLWFkMWYtNGYwZS1iYmIxLWM0NGYwYTk1ZmQ1ZCZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "843d1bf1-6ac2-5e00-be47-4ca85a8d99b4" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD44NDNkMWJmMS02YWMyLTVlMDAtYmU0Ny00Y2E4NWE4ZDk5YjQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "ad79f67a5082e85f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "138" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNOb25VVEY4TWVzc2FnZUJvZHktc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:04 GMT" ], "X-Amzn-Requestid": [ "dbefb299-4736-5c49-8e74-e5c07779ba29" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kYmVmYjI5OS00NzM2LTVjNDktOGU3NC1lNWMwNzc3OWJhMjk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "9376c82b1f7bcce6", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "124" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljTm9uVVRGOE1lc3NhZ2VCb2R5LXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:03 GMT" ], "X-Amzn-Requestid": [ "bb318de0-1649-5b4d-81f3-dab926198cf9" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5iYjMxOGRlMC0xNjQ5LTViNGQtODFmMy1kYWI5MjYxOThjZjk8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestSendReceive.replay000066400000000000000000001136601367004507500314250ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSULKHsrkv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "6fcb813c57b4307f", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNTZW5kUmVjZWl2ZS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "332" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:59 GMT" ], "X-Amzn-Requestid": [ "10ab77aa-f528-5d1c-8811-20f3c5639e6a" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmUtdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjEwYWI3N2FhLWY1MjgtNWQxYy04ODExLTIwZjNjNTYzOWU2YTwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "616908ab5819cc6d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1NlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "345" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:00 GMT" ], "X-Amzn-Requestid": [ "a87a3230-2411-50c8-ad0a-6569145dce0a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNTZW5kUmVjZWl2ZS1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmE4N2EzMjMwLTI0MTEtNTBjOC1hZDBhLTY1NjkxNDVkY2UwYTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "ca1480809fa3f59b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1NlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "397" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:00 GMT" ], "X-Amzn-Requestid": [ "38f0f37e-65ae-5f2f-a76f-a42755e2f1ed" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjM4ZjBmMzdlLTY1YWUtNWYyZi1hNzZmLWE0Mjc1NWUyZjFlZDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "ecd538bc23cdd6a0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "663" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNTZW5kUmVjZWl2ZS1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:00 GMT" ], "X-Amzn-Requestid": [ "e3848636-6846-5046-8028-d16f580a9e84" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZTM4NDg2MzYtNjg0Ni01MDQ2LTgwMjgtZDE2ZjU4MGE5ZTg0PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "21caa287fdd3aa22", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "208" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "375" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:00 GMT" ], "X-Amzn-Requestid": [ "010b0b42-c859-5591-99cf-5c1bf81546e7" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmUtdG9wLTE6ODY2NDI2ZjYtNWVjOS00OTM0LTlmOGYtOWRiMTEzYTJkOGIzPC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjAxMGIwYjQyLWM4NTktNTU5MS05OWNmLTVjMWJmODE1NDZlNzwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "ba6f4688cd158190", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "250" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0wJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:00 GMT" ], "X-Amzn-Requestid": [ "0435697c-08fa-5d4c-ab4a-3e2538b75e3a" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjQ5NDdiZTkwLWI5N2MtNTEyYi1iNDA3LWU5Yzk4OTMxZDI1ZDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MDQzNTY5N2MtMDhmYS01ZDRjLWFiNGEtM2UyNTM4Yjc1ZTNhPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "32167cd6815312bc", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "250" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0xJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MSZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:00 GMT" ], "X-Amzn-Requestid": [ "ec1a9dda-54f2-5ba9-ae15-ca8364bf48df" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjkwNWMwMWZhLWRjMmItNWM3MC1iNmE3LTU2YTNlYzY2N2YwNjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZWMxYTlkZGEtNTRmMi01YmE5LWFlMTUtY2E4MzY0YmY0OGRmPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "a18b1b906c602fc0", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "250" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0yJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MiZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:00 GMT" ], "X-Amzn-Requestid": [ "50a2fb5c-7401-5887-b3ef-ac05444c8bf1" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjcwZGE1ZGU0LWJkNWYtNWMwZS05NmNiLTBhYmQ4ZDEyNGY3ODwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NTBhMmZiNWMtNzQwMS01ODg3LWIzZWYtYWMwNTQ0NGM4YmYxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "5d926129031169da", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2102" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:01 GMT" ], "X-Amzn-Requestid": [ "fe3967ea-6c53-5a65-8c7c-30b35c1ea4a7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZTRiMjBkMDEtNmE0MC00ODg1LWFlYzYtNTk1NWQ2NzEzYjkxPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkIvZGJuV0ZZdG9xRXhaRklUMWVTSlZ1SGRrem1Pam1uSVZNc0lxNG1PdzdBWmlUbG9GWGJPK1ppZEdXWTdEb1NiN3JOQmNuL250c1ZPaytFbXVJci82Rzg4enAyYlUvcE5rM1NKWHBPdXY5TEJUK3ZBMGZtN1ZhWEgzNXBvb2p2WEhnMXdKRytnV0UzdnlJWXplanlsRlZiUU5kWk9DVllvWmxqYUxzYnN5ejFIcG9Fc0dNSXphQ05ZNzdMT3oxVVp2czNMbDhBZ0JwSDhWdmsxVnRIOERaL1grallIZXJaNmJXNDdRZkZ0a0dmVnBLbUZIc282OVNlS09aTDV3UFFTYnFxSTVISVRYTHc1MXM0bnVnRXVZN1NCQzFCL1FWaERMMGo3WEdRZHFPcGhRS2dEVWpwR3Q1OTVPNFlvM1o2NExqU3VmSUtqNExpQkNnNmpIZjBYOEFQWVN5NlZ6b3MxclpvQUJxTW1tN1BrYXNUQ0tSb1UwamxsYmJ4R1FEOENzQklYZ280OExKT285TlhoN3lMMWc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjAzMTEzODA2ZDIyODBjZDFmMmI3NDk5NGRkMDQ3MGZkPC9NRDVPZkJvZHk+PEJvZHk+ewogICZxdW90O1R5cGUmcXVvdDsgOiAmcXVvdDtOb3RpZmljYXRpb24mcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUlkJnF1b3Q7IDogJnF1b3Q7NzBkYTVkZTQtYmQ1Zi01YzBlLTk2Y2ItMGFiZDhkMTI0Zjc4JnF1b3Q7LAogICZxdW90O1RvcGljQXJuJnF1b3Q7IDogJnF1b3Q7YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDsyJnF1b3Q7LAogICZxdW90O1RpbWVzdGFtcCZxdW90OyA6ICZxdW90OzIwMjAtMDYtMDlUMDY6Mzc6MDEuMzc2WiZxdW90OywKICAmcXVvdDtTaWduYXR1cmVWZXJzaW9uJnF1b3Q7IDogJnF1b3Q7MSZxdW90OywKICAmcXVvdDtTaWduYXR1cmUmcXVvdDsgOiAmcXVvdDtjREJJUnZUbzBncU42WGxCN2t0OFlLb1Q5ZXlqQmRpV3ZUaTUvNUErQjcrVHIzcmdNWVI3NStPSDhvWHJQRzJsYmViRy83aEw0UzdiZ2MzZThBVW9IL2Rmd3ZWcXhVbHNYUnZsWjAzcDFDc3VHREZZMnI3S3VHRTB3TlovVHhpcUtRZ0RnNTZVUXJrbE95c2ZYdktFQlNjbHB6RTFSeGliMEYyZDE4NVlJbHFCSjM1UkJZTCtGSnBNTEpsY3NLcUM0UldOOTJiRUJSd3h3a0NFTmNMbVZBcUVmZG4wSjFURHByejVIMlhVMnk4aTU3UjJqbGlzL0RSRjNCdHkvK2xGZUxzUTc5bDlPV1VaUTcvSVRGcmxoSUlTZFBnRXJ0TjBwcDdxN1FnaHJ0ckdobGpMMERNZklGLy9SR003UHZQWXlkQzJKQTd0L3dkNmFNSFNTQmdPQnc9PSZxdW90OywKICAmcXVvdDtTaWduaW5nQ2VydFVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tL1NpbXBsZU5vdGlmaWNhdGlvblNlcnZpY2UtYTg2Y2IxMGI0ZTFmMjljOTQxNzAyZDczNzEyOGY3YjYucGVtJnF1b3Q7LAogICZxdW90O1Vuc3Vic2NyaWJlVVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1VbnN1YnNjcmliZSZhbXA7U3Vic2NyaXB0aW9uQXJuPWFybjphd3M6c25zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6U05TVG9waWNTZW5kUmVjZWl2ZS10b3AtMTo4NjY0MjZmNi01ZWM5LTQ5MzQtOWY4Zi05ZGIxMTNhMmQ4YjMmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZUF0dHJpYnV0ZXMmcXVvdDsgOiB7CiAgICAmcXVvdDthJnF1b3Q7IDogeyZxdW90O1R5cGUmcXVvdDs6JnF1b3Q7U3RyaW5nJnF1b3Q7LCZxdW90O1ZhbHVlJnF1b3Q7OiZxdW90OzImcXVvdDt9CiAgfQp9PC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZmUzOTY3ZWEtNmM1My01YTY1LThjN2MtMzBiMzVjMWVhNGE3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "b055b707f630a296", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "662" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkIlMkZkYm5XRll0b3FFeFpGSVQxZVNKVnVIZGt6bU9qbW5JVk1zSXE0bU93N0FaaVRsb0ZYYk8lMkJaaWRHV1k3RG9TYjdyTkJjbiUyRm50c1ZPayUyQkVtdUlyJTJGNkc4OHpwMmJVJTJGcE5rM1NKWHBPdXY5TEJUJTJCdkEwZm03VmFYSDM1cG9vanZYSGcxd0pHJTJCZ1dFM3Z5SVl6ZWp5bEZWYlFOZFpPQ1ZZb1psamFMc2JzeXoxSHBvRXNHTUl6YUNOWTc3TE96MVVadnMzTGw4QWdCcEg4VnZrMVZ0SDhEWiUyRlglMkJqWUhlclo2Ylc0N1FmRnRrR2ZWcEttRkhzbzY5U2VLT1pMNXdQUVNicXFJNUhJVFhMdzUxczRudWdFdVk3U0JDMUIlMkZRVmhETDBqN1hHUWRxT3BoUUtnRFVqcEd0NTk1TzRZbzNaNjRMalN1ZklLajRMaUJDZzZqSGYwWDhBUFlTeTZWem9zMXJab0FCcU1tbTdQa2FzVENLUm9VMGpsbGJieEdRRDhDc0JJWGdvNDhMSk9vOU5YaDd5TDFnJTNEJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNTZW5kUmVjZWl2ZS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:01 GMT" ], "X-Amzn-Requestid": [ "4a7f3528-f663-5a5c-b14a-6271c62e449e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NGE3ZjM1MjgtZjY2My01YTVjLWIxNGEtNjI3MWM2MmU0NDllPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "d9316d383b641cea", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2122" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:01 GMT" ], "X-Amzn-Requestid": [ "c7b7676a-455b-5786-8894-30337516e944" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NWQxYTEyNGItYjA3Mi00MWExLTgzMjAtMGI0Zjg3NmY5MjM2PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmQ5d1dCR2RTTDFaMThkOVBQelEyWE1ESGhQbkxUZWdCZ0VYVFQrWXNYZXBPSldZbXpod1JEaFkrZ1paUnRrVm1rQmhZLytEY0ZmdkhTUjQ4L3lZTi9qV1g4WDR2S0RBMUNTVmZmTFdXZ283R1BxOFdwTmg5Zk41VlRxdmw0ZXZLM0cwVk1GbkNRdi9GcldkUCtKOEVtR1Y2NEI0TGZURDUrRHI4Q3JiMTdpeG1HY0xRNjk5ak9Xb1hwQkVqeHJKSjBHSktKWVFIYXVzdnJCaGYxeXBUbFk3c1pqS2FTZVdKblpoK1VYKzY5dDNqRTlDd2pyTVpydC9ycng0UHllK2hFRE8vUXMwN0x4cEM4OVI1OU4rdE96UjRYSUJLbVp0UWczbytFQ09iQTZrQXk1Q1lJdzVmMWFPaG9zRUdualVDcHlncExKU3JqVy9Vc0FITTg4WE11QUVhZTBoL2YzcGNmQmgyMEp3TUkzcXlkdk5SZ1lvUkQvbW9lN3NLajZMM3BIZmVDSEFFMTRYYVY1QnB0QmRoTUZMWTZBZTUrZ2Z5bGQ3ci9LK1I3c3M9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+MzZiYzEyNjNkMWRmN2U4OGE5ODQ1MDZhZDNhNTk3NTg8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDs5MDVjMDFmYS1kYzJiLTVjNzAtYjZhNy01NmEzZWM2NjdmMDYmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmUtdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNzowMS4yODNaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O1M0bDRrck9nNVJxWnh1YTZiYk40WjdoWGg1NXpONFUzQ0ZCVWdBZ09YM25xRmo3RithK0IxNFUraEJ3bzRZeGNoeGVIeFRlajE3OEFOK0hxT2dZMDJwVE9MeWYrZTFoanE3ZGVHZkFGZ3ZXNm9JbGxyRER2eGxqNVZwTHpZNGxzVEJVRXVoSmNJLzdkMlJXS2pxb3g0NG9YZHkvOWcvNkVUNFA5UDRsUU8vUlNBa0FkSUVRM3UrRUNRZjJwMlVxTC9rYjJjVWJKMmdhYTVFWnk4NndGbWtaazVTcWtYeDZNbWFpYWFjVEpWY2I1VzE2aVcwdkZ6YTl4a1JNUHhEOXJIQlJRb1ZBaTV6VmdpTjBvSHhEeklhYTFWT0xHWVJSUFNDN2pQdHBscnk5N0MrYjFFNEQxcHFrM2xPU0wvSVk0SjhqUlNZNHBGcWlySUFHbVcxaU9ZQT09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xOjg2NjQyNmY2LTVlYzktNDkzNC05ZjhmLTlkYjExM2EyZDhiMyZxdW90OywKICAmcXVvdDtNZXNzYWdlQXR0cmlidXRlcyZxdW90OyA6IHsKICAgICZxdW90O2EmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MSZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5jN2I3Njc2YS00NTViLTU3ODYtODg5NC0zMDMzNzUxNmU5NDQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "65b29080a0416558", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2122" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:01 GMT" ], "X-Amzn-Requestid": [ "d7827fa2-9bdf-5fea-b2f8-28fbab92c128" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YzQxNGI2ZDAtNDQzZS00MWNlLWJkZGYtNzkxZjZjZmRlMzhjPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjRyV2phVndpNFpJdTdoRWZCLzdTS3A1bFlrb3gyVkRhOUpGTnBBenpaMGVuTnFjcHBqbE9abjd5M2RyVjIwODk5UmZPbUtRV3FEeStxVlA0bTNpSmtLNkNKakhaekcvMlZzdjR0WFVpTU05bG1JMkJtQy9ZQ3p4M09pM2VIaVMrbEJZalpqNXRjT0NrNG5KUFlLTFMvRFFhYko0cXFTTkxVb0xvUmVLa3Aza0QxdERHYk0zOHJKZTBTRjdKWWNsblhOTFAyODlqYkZCQjVseVJjVDhhaW9CMUFTQjV0MjlaK0xPZnV2NW1IT2ptSCs2STZzeStYbXo5WFFCRHpkeW16UUk2REFzcGt3eTBJbWJhb1lsbElwVGdIeVFYUkJKUUhBTkxyWklQL08rMnFKa3drMWQ3ZnM1R1JkenQxeE9PS25iTndCVERkdWI3VFRJRVJwU2s4ZXB5NlVoTFliNm5oSVRtbzE0TXlraHBZRVRRaHU5cU5lL1lzb3FIdTZCcjlKYWZnS0FJbzRSSzcwRDgwZTYyelVLMjB2OXNkZm5xZzNUM3J4RVdxTUE9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+OWUzOWM5Y2YyYmNkYzhiNGYzOTc2NmI3MjEwZTgzMTE8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDs0OTQ3YmU5MC1iOTdjLTUxMmItYjQwNy1lOWM5ODkzMWQyNWQmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmUtdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzAmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNzowMS4xOTNaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O01qOXFORC92eCs1YUp3azgzRms2NDlxRy9Fc3J1Ykg5aUZhdVFYdTR0azRzaTlMOHFhbUVQR2ZMTzgwdDFybFJvNTZnNDhNdXNERHZZRENRTDNEWlRNZnpoTXNZVkgyOEFqakZ0UjFUMzdMU3A3c0dleVN4Mm5mNjEwekxkUThsU0x2L2xYU01ZQjZycXNOc3ZQcUI5K1M3YWNBMG93VEtCWkZmcW5RNjNEWG14UkhMMEZjOFFJOXhGZWowYzlmT2tyNWdpaHkwcDcwSmFvWVN0cTlzVUkvMXhCTnQxaldKdm9vVmYxbUZCVlVSM1hyUVFDOFJEYzZnT1lwR2V5dUI0Ym9qUXFJTkhYT1NESEVZakVRMmJMQ3UzQmszOVdIRCt2QW55VHVkeFI4YzdXR0xtRjdyNnNBTjI4b003NnVzMlhkZDdNaGUyak92RHd5OGhWZHBIUT09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xOjg2NjQyNmY2LTVlYzktNDkzNC05ZjhmLTlkYjExM2EyZDhiMyZxdW90OywKICAmcXVvdDtNZXNzYWdlQXR0cmlidXRlcyZxdW90OyA6IHsKICAgICZxdW90O2EmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MCZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kNzgyN2ZhMi05YmRmLTVmZWEtYjJmOC0yOGZiYWI5MmMxMjg8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "de682180d83a0b14", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "702" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmQ5d1dCR2RTTDFaMThkOVBQelEyWE1ESGhQbkxUZWdCZ0VYVFQlMkJZc1hlcE9KV1ltemh3UkRoWSUyQmdaWlJ0a1Zta0JoWSUyRiUyQkRjRmZ2SFNSNDglMkZ5WU4lMkZqV1g4WDR2S0RBMUNTVmZmTFdXZ283R1BxOFdwTmg5Zk41VlRxdmw0ZXZLM0cwVk1GbkNRdiUyRkZyV2RQJTJCSjhFbUdWNjRCNExmVEQ1JTJCRHI4Q3JiMTdpeG1HY0xRNjk5ak9Xb1hwQkVqeHJKSjBHSktKWVFIYXVzdnJCaGYxeXBUbFk3c1pqS2FTZVdKblpoJTJCVVglMkI2OXQzakU5Q3dqck1acnQlMkZycng0UHllJTJCaEVETyUyRlFzMDdMeHBDODlSNTlOJTJCdE96UjRYSUJLbVp0UWczbyUyQkVDT2JBNmtBeTVDWUl3NWYxYU9ob3NFR25qVUNweWdwTEpTcmpXJTJGVXNBSE04OFhNdUFFYWUwaCUyRmYzcGNmQmgyMEp3TUkzcXlkdk5SZ1lvUkQlMkZtb2U3c0tqNkwzcEhmZUNIQUUxNFhhVjVCcHRCZGhNRkxZNkFlNSUyQmdmeWxkN3IlMkZLJTJCUjdzcyUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:01 GMT" ], "X-Amzn-Requestid": [ "66b59b3c-95bf-5551-9bff-cc65a5f23b93" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NjZiNTliM2MtOTViZi01NTUxLTliZmYtY2M2NWE1ZjIzYjkzPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "be108ccad77d87f7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "682" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjRyV2phVndpNFpJdTdoRWZCJTJGN1NLcDVsWWtveDJWRGE5SkZOcEF6elowZW5OcWNwcGpsT1puN3kzZHJWMjA4OTlSZk9tS1FXcUR5JTJCcVZQNG0zaUprSzZDSmpIWnpHJTJGMlZzdjR0WFVpTU05bG1JMkJtQyUyRllDengzT2kzZUhpUyUyQmxCWWpaajV0Y09DazRuSlBZS0xTJTJGRFFhYko0cXFTTkxVb0xvUmVLa3Aza0QxdERHYk0zOHJKZTBTRjdKWWNsblhOTFAyODlqYkZCQjVseVJjVDhhaW9CMUFTQjV0MjlaJTJCTE9mdXY1bUhPam1IJTJCNkk2c3klMkJYbXo5WFFCRHpkeW16UUk2REFzcGt3eTBJbWJhb1lsbElwVGdIeVFYUkJKUUhBTkxyWklQJTJGTyUyQjJxSmt3azFkN2ZzNUdSZHp0MXhPT0tuYk53QlREZHViN1RUSUVScFNrOGVweTZVaExZYjZuaElUbW8xNE15a2hwWUVUUWh1OXFOZSUyRllzb3FIdTZCcjlKYWZnS0FJbzRSSzcwRDgwZTYyelVLMjB2OXNkZm5xZzNUM3J4RVdxTUElM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1NlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:01 GMT" ], "X-Amzn-Requestid": [ "62129170-aa40-5fb7-a6bc-c6299a0d9175" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NjIxMjkxNzAtYWE0MC01ZmI3LWE2YmMtYzYyOTlhMGQ5MTc1PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "ac89191c8a9d3409", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJTNBODY2NDI2ZjYtNWVjOS00OTM0LTlmOGYtOWRiMTEzYTJkOGIzJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:01 GMT" ], "X-Amzn-Requestid": [ "3cb7e355-01f9-5891-92b1-b40c31b45be7" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4zY2I3ZTM1NS0wMWY5LTU4OTEtOTJiMS1iNDBjMzFiNDViZTc8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "7f384f3537129dc7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "131" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNTZW5kUmVjZWl2ZS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:02 GMT" ], "X-Amzn-Requestid": [ "1468700e-5b7e-560e-96b7-27576b3038cc" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4xNDY4NzAwZS01YjdlLTU2MGUtOTZiNy0yNzU3NmIzMDM4Y2M8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "e966fcc88f0e99b6", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "117" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:01 GMT" ], "X-Amzn-Requestid": [ "53cf23aa-2783-5906-b2c9-74f317cd7a70" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD41M2NmMjNhYS0yNzgzLTU5MDYtYjJjOS03NGYzMTdjZDdhNzA8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestSendReceiveJSON.replay000066400000000000000000000533741367004507500321240ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcST7IUNpvv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "8cd11e878cd86300", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "72" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNTZW5kUmVjZWl2ZUpTT04tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "336" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:43 GMT" ], "X-Amzn-Requestid": [ "79d69f15-2b0a-5e37-a7e0-c84c1b310c46" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVKU09OLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43OWQ2OWYxNS0yYjBhLTVlMzctYTdlMC1jODRjMWIzMTBjNDY8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "b28ba164000b6ab7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "77" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1NlbmRSZWNlaXZlSlNPTi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "349" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:44 GMT" ], "X-Amzn-Requestid": [ "9dbb19b7-f84f-5473-a618-4eeec873a9ee" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNTZW5kUmVjZWl2ZUpTT04tc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45ZGJiMTliNy1mODRmLTU0NzMtYTYxOC00ZWVlYzg3M2E5ZWU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "649ab633f20f061f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "167" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1NlbmRSZWNlaXZlSlNPTi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "401" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:44 GMT" ], "X-Amzn-Requestid": [ "e02c766b-c710-55e2-bc6f-2132f72c387f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlSlNPTi1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5lMDJjNzY2Yi1jNzEwLTU1ZTItYmM2Zi0yMTMyZjcyYzM4N2Y8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "07524275e13308fc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "671" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNTZW5kUmVjZWl2ZUpTT04tc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1NlbmRSZWNlaXZlSlNPTi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:44 GMT" ], "X-Amzn-Requestid": [ "656c169e-851d-57b1-ab70-41c7b5218a2c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NjU2YzE2OWUtODUxZC01N2IxLWFiNzAtNDFjN2I1MjE4YTJjPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "b9259484819920e3", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "216" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlSlNPTi1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNTZW5kUmVjZWl2ZUpTT04tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "379" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:43 GMT" ], "X-Amzn-Requestid": [ "1554e2f5-722f-5fd3-934e-b5ac42131da2" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVKU09OLXRvcC0xOjVhZjUzY2UyLTQzYTUtNDhlZi04ZjAxLTUzNzQ4Njg0YzA1NDwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4xNTU0ZTJmNS03MjJmLTVmZDMtOTM0ZS1iNWFjNDIxMzFkYTI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "8ec4bf7a9ca701d2", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "154" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0lN0IlMjJGb28lMjIlM0ErJTIyQmFyJTIyJTdEJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljU2VuZFJlY2VpdmVKU09OLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:43 GMT" ], "X-Amzn-Requestid": [ "f2f7266d-d00f-5d80-8690-7134e0330ff1" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmYwNWY2Y2U3LWM5NjktNTAzZC05NjlkLTNiYmVmOTU1NTI0YzwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZjJmNzI2NmQtZDAwZi01ZDgwLTg2OTAtNzEzNGUwMzMwZmYxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "d63af9f6795c26e0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "187" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVKU09OLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2036" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:44 GMT" ], "X-Amzn-Requestid": [ "5dc699a8-4c9c-5570-80e5-cef17ca088ed" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZDFjZGM1MzItODMzNS00MzMyLWFmN2UtYTliYTQ2OTMyZTdjPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmFvV056Rk83TFUrZWR5MEV0QUd4OEEvNzlYalZTU28vMGc4T1ZIQS9PZS9hVjd0bUxFb25RNjRSSzFKWlgrdi82ZHV0VkxIdjFVVFgrZi9WejhXelcyWkVXNHVwajRXejFOSTNPdHlyWC84MU1YM29jWG0ralREekcxNE9xMGhWTFMwd1ZSUDkwbUZ6TDlhUDAzVkhaaHJMM2Y4TE5WTUI5L1dhVXo2U3h6akRMVDdWT1F5cVZoSkxOQXJBTXdERzBubHJyaXNrcmVMcDgvOTJUT2UrbVJSTHFJdUFTVGxQWk4vcjZDbnlWaVBoVkowMXR1SGtON1BPY0tuL0ZoQlJDa2R1bXlBRmhwOUpmN1V6NFpWc0ZtcU83cHd3QUhsdmtCWGJFMjVoMjh3cytXMFI1dCtsajJLNDBhM0NoWjFXcHJPQ2lWRDBNUnRrcXBjVGhKNEV3L1hCZkVjcWZycUZmUzZPc0lxR2sydVErZzdPZzYycktoVXM3SUtPUk9PUGpKZEJVS1FiQWg0emUvQjdWaklZcDN4c1FXSXB1ZE9KVmMzMktGSW03U1E9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NDYxMGQ4MzJmYWExMTQwMmQyODUxNWY5NzdjNmRjN2E8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDtmMDVmNmNlNy1jOTY5LTUwM2QtOTY5ZC0zYmJlZjk1NTUyNGMmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVKU09OLXRvcC0xJnF1b3Q7LAogICZxdW90O01lc3NhZ2UmcXVvdDsgOiAmcXVvdDt7XCZxdW90O0Zvb1wmcXVvdDs6IFwmcXVvdDtCYXJcJnF1b3Q7fSZxdW90OywKICAmcXVvdDtUaW1lc3RhbXAmcXVvdDsgOiAmcXVvdDsyMDIwLTA2LTA5VDA2OjM2OjQ0Ljc3MFomcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlVmVyc2lvbiZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7U2lnbmF0dXJlJnF1b3Q7IDogJnF1b3Q7REFSNldITmpWUlpxMEhuOW95dWxBdHVpeHhPQWdFMEdxN1V5UHFpeFBGaW9GNGRLcjBYMkx1b1h6YW9uUGh1UVlBTlUwK1YwV1BBZDA4ZklZNVA1bU8weUJoU3pLNExGS3J1NFdKZHNEVWxMMkl4QUxDeHRmbVZIOEdlL3h6cTYxYkxrN0VhUDBRVitTeU1CZzU2Q1NCb1Q4cDRYQ1EwOVVROXdjV3hLNmx0aUdHS2l3MXVUSXBldmNrc3ZyK09ocmF4WXJMaWU0ZExoNHJYSC9uWi90UmFQbGFqM1Z3L0dwbCtJOFg4djJNSjBhWjNoOFowbk9nZ3hYQmlIby90K3paaU8wZklrYllWS2h5dTdsRHU1TUhOeVdRM0JrZkRYOVFxUWRPRFltWjJIbmZrbVhJY2ZzcldnaDVJTFovczJTZ3ZMVFNsb3ZJYkxXa1JBUnB3dzVnPT0mcXVvdDssCiAgJnF1b3Q7U2lnbmluZ0NlcnRVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS9TaW1wbGVOb3RpZmljYXRpb25TZXJ2aWNlLWE4NmNiMTBiNGUxZjI5Yzk0MTcwMmQ3MzcxMjhmN2I2LnBlbSZxdW90OywKICAmcXVvdDtVbnN1YnNjcmliZVVSTCZxdW90OyA6ICZxdW90O2h0dHBzOi8vc25zLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tLz9BY3Rpb249VW5zdWJzY3JpYmUmYW1wO1N1YnNjcmlwdGlvbkFybj1hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVKU09OLXRvcC0xOjVhZjUzY2UyLTQzYTUtNDhlZi04ZjAxLTUzNzQ4Njg0YzA1NCZxdW90Owp9PC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NWRjNjk5YTgtNGM5Yy01NTcwLTgwZTUtY2VmMTdjYTA4OGVkPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "1c57934a2000fa9a", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "704" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmFvV056Rk83TFUlMkJlZHkwRXRBR3g4QSUyRjc5WGpWU1NvJTJGMGc4T1ZIQSUyRk9lJTJGYVY3dG1MRW9uUTY0UksxSlpYJTJCdiUyRjZkdXRWTEh2MVVUWCUyQmYlMkZWejhXelcyWkVXNHVwajRXejFOSTNPdHlyWCUyRjgxTVgzb2NYbSUyQmpURHpHMTRPcTBoVkxTMHdWUlA5MG1Gekw5YVAwM1ZIWmhyTDNmOExOVk1COSUyRldhVXo2U3h6akRMVDdWT1F5cVZoSkxOQXJBTXdERzBubHJyaXNrcmVMcDglMkY5MlRPZSUyQm1SUkxxSXVBU1RsUFpOJTJGcjZDbnlWaVBoVkowMXR1SGtON1BPY0tuJTJGRmhCUkNrZHVteUFGaHA5SmY3VXo0WlZzRm1xTzdwd3dBSGx2a0JYYkUyNWgyOHdzJTJCVzBSNXQlMkJsajJLNDBhM0NoWjFXcHJPQ2lWRDBNUnRrcXBjVGhKNEV3JTJGWEJmRWNxZnJxRmZTNk9zSXFHazJ1USUyQmc3T2c2MnJLaFVzN0lLT1JPT1BqSmRCVUtRYkFoNHplJTJGQjdWaklZcDN4c1FXSXB1ZE9KVmMzMktGSW03U1ElM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1NlbmRSZWNlaXZlSlNPTi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:44 GMT" ], "X-Amzn-Requestid": [ "d110ebd4-d71d-5e0e-b5a5-bc8de721b393" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZDExMGViZDQtZDcxZC01ZTBlLWI1YTUtYmM4ZGU3MjFiMzkzPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "571bb08c88dd5825", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "167" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlSlNPTi10b3AtMSUzQTVhZjUzY2UyLTQzYTUtNDhlZi04ZjAxLTUzNzQ4Njg0YzA1NCZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:44 GMT" ], "X-Amzn-Requestid": [ "9eee861a-c07e-596d-bd1b-d143f043eb1c" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD45ZWVlODYxYS1jMDdlLTU5NmQtYmQxYi1kMTQzZjA0M2ViMWM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "7fe73f41f278a73b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "135" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNTZW5kUmVjZWl2ZUpTT04tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:45 GMT" ], "X-Amzn-Requestid": [ "feae07c7-193b-5099-adf8-509e29069d04" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5mZWFlMDdjNy0xOTNiLTUwOTktYWRmOC01MDllMjkwNjlkMDQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "760459b7c537f8ae", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "121" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljU2VuZFJlY2VpdmVKU09OLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:44 GMT" ], "X-Amzn-Requestid": [ "9d76b887-54a7-5697-b62b-efde649a94e6" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD45ZDc2Yjg4Ny01NGE3LTU2OTctYjYyYi1lZmRlNjQ5YTk0ZTY8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopic/TestSendReceiveTwo.replay000066400000000000000000002063621367004507500321210ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcST3Dns3w/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5f3d3176b8f3c3ca", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNTZW5kUmVjZWl2ZVR3by10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "335" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:39 GMT" ], "X-Amzn-Requestid": [ "6775a7c4-eb82-570f-a1b3-f09ddbba7efa" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjY3NzVhN2M0LWViODItNTcwZi1hMWIzLWYwOWRkYmJhN2VmYTwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "ef4d5378c33648ed", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "348" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:40 GMT" ], "X-Amzn-Requestid": [ "b2dc818c-a206-5e0d-ba4f-d6d5923ed18d" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmIyZGM4MThjLWEyMDYtNWUwZC1iYTRmLWQ2ZDU5MjNlZDE4ZDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "c82ec648826cc6f3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "166" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "400" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:40 GMT" ], "X-Amzn-Requestid": [ "3ee97337-606f-5edf-b923-246e5057a15f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjNlZTk3MzM3LTYwNmYtNWVkZi1iOTIzLTI0NmU1MDU3YTE1ZjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "5f09b1c21177e9a0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "669" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:40 GMT" ], "X-Amzn-Requestid": [ "5aa292a3-86a0-5aab-8e6a-c5fab698052b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NWFhMjkyYTMtODZhMC01YWFiLThlNmEtYzVmYWI2OTgwNTJiPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "e59c10742b7a62ba", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "214" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "378" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:40 GMT" ], "X-Amzn-Requestid": [ "0427727b-15e3-5d9a-b1d4-252225da846f" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTE6MDhmYTRmNjgtYzE5ZC00NDUzLWE1NTUtNjkxNzFlM2Y3YjY1PC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjA0Mjc3MjdiLTE1ZTMtNWQ5YS1iMWQ0LTI1MjIyNWRhODQ2ZjwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "32121da11ee551dd", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0yJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "348" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:41 GMT" ], "X-Amzn-Requestid": [ "30f1e94c-3678-5924-adf5-be15064176a4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMjwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjMwZjFlOTRjLTM2NzgtNTkyNC1hZGY1LWJlMTUwNjQxNzZhNDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "10b634d5d7253f93", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "166" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0yJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "400" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:41 GMT" ], "X-Amzn-Requestid": [ "e56314fe-c888-568b-8808-43a7f8b1290b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0yPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmU1NjMxNGZlLWM4ODgtNTY4Yi04ODA4LTQzYTdmOGIxMjkwYjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "57781850e34613cf", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "669" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMiUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTImVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:41 GMT" ], "X-Amzn-Requestid": [ "d35d4510-2c93-5ee3-a524-12491caab163" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZDM1ZDQ1MTAtMmM5My01ZWUzLWE1MjQtMTI0OTFjYWFiMTYzPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "1ee6f8463e9e6ddd", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "214" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0yJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "378" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:41 GMT" ], "X-Amzn-Requestid": [ "e783326b-d83e-59b5-be8a-6532e807e040" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTE6MzlkMjhhMTMtODYxMy00ODg0LWFiYjQtNzAzMzRhMTRiZjdmPC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmU3ODMzMjZiLWQ4M2UtNTliNS1iZThhLTY1MzJlODA3ZTA0MDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "bd4e5140b3a336b3", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0wJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:41 GMT" ], "X-Amzn-Requestid": [ "41f5cca8-1fb0-5fef-bf40-9bf12f89a61a" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjc1NjhiZTE4LWJjZGItNWY0Yy1iYWU2LWU5NDE4Y2UyZDZiOTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NDFmNWNjYTgtMWZiMC01ZmVmLWJmNDAtOWJmMTJmODlhNjFhPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "ebe13fd9268f1ece", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0xJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MSZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:41 GMT" ], "X-Amzn-Requestid": [ "b083a169-b02d-5c16-a84f-f630801415e3" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmUzNmFiODY3LTZhOTEtNTExOC05YzdiLWVmM2U1YWE4ZjhlZDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+YjA4M2ExNjktYjAyZC01YzE2LWE4NGYtZjYzMDgwMTQxNWUzPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "c5ba51f6282a4db2", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0yJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MiZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:41 GMT" ], "X-Amzn-Requestid": [ "1ad51820-ff4c-5a85-b601-4f79cf768370" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmM0MGI2MTYyLTIzNWYtNTlmNC05YWYyLTM2M2IxMzY1OTAwMTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MWFkNTE4MjAtZmY0Yy01YTg1LWI2MDEtNGY3OWNmNzY4MzcwPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "a72a1123b70e0d92", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2128" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "4e504e68-58ef-5fa3-b1dc-193168d59023" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZmM1YmNjODUtZTMwZi00MzM2LThkZDYtZWRjYzRkZjEzMjAzPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnlSbGVRY3JCMzZ3TWdVTGhXUXdyRm82K0hNTUFnZUkwK2hvSk5FNDhnODlpQ0o2WmZ5TGlzNjR1MkREbFdpbGVNUy9iT3djb2pCYUQ5NGRuTXlQUUozTDlGeTl4czNPbDRrK3phNlYzZSsxalB1VGQ5S3lROTBzU043dms5UmlPRWw2SWFRc0IyRlVObll1UTVXYUhDVDh2dFV4SEFZOUpkRlNKNTUyTXQ3UWd6Wkt6SGxxbHd6K3pOMERieS9nRVNoREJJZWp2b2w4QnRSdTF3dVkvd1VZaU9UeWR3V3c3c0RoTHBEZEtxUmhLWlg3cHBNaTRzTFZJSWZYR1FacjNkUjl3dUdjNGFoaTd2NlVRdVUwOUhlUmM2ZlYxUTNmczU0UXIxT3p2cVZxZE5oZWNjZ0YydS9ycGxRR2Q3eVJmOERSWERHU29uZ1FtdUhNalpkVVl2WWtSNkdQYnd3RUpJSzRWanc0RkZZRzRBYjV2ZXZJV2Vmd3BQWE5laFRQcjlDMHJiNHBWYWJOZVEvU2FTQWRycmtld2tTRk1uTGFUR0twMTZSOTc2eDQ9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+MmZjNTdkODEzODIwZDVmYWRlZWFlNjMxNWM4MzZjOTY8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDtjNDBiNjE2Mi0yMzVmLTU5ZjQtOWFmMi0zNjNiMTM2NTkwMDEmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzImcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0Mi4wMDZaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O0tyeWIvdmNMREZXRnpPRHFHTnhzcU4yUHMvVW9xenI5TCs2Q1BjdUR6NEZKQ3B3U2hJTkZTNStOdXoxdFF6WnZHRktPTGROY3JxRFgxRjYwQURJOEhEZG1iTVhtWjBuc0QwaW96Q2xlK1JSYWMyNjAxSWlYOFV4TzFWZ2VaYW9PcTQrb1pQN000eENkaERIcGhjbzRWbm9UVzM0TTRWUklYQ0drbFl1R2xOQlNMV2o2dVBSSGU2RGpjZkloajRiQUczd1JsdHg4M2xWaDRKcGxGR2RJZnAwNXJUUXNObENQS1M4RlFDellqejZXUFdReUVVZ3YzZ2ZtK2JSQXNwUFlIQkk2SHpCVUxwM0d1OHNrZ0trZnVVV0ZmNHAwdGdEdmc2eitlRkFBTnZNaVhHempXNHlhaDRXQjBiOGdYdHBiR0tNZFVqcGV0QU82NnpJM0VnRmZDZz09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xOjA4ZmE0ZjY4LWMxOWQtNDQ1My1hNTU1LTY5MTcxZTNmN2I2NSZxdW90OywKICAmcXVvdDtNZXNzYWdlQXR0cmlidXRlcyZxdW90OyA6IHsKICAgICZxdW90O2EmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MiZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD40ZTUwNGU2OC01OGVmLTVmYTMtYjFkYy0xOTMxNjhkNTkwMjM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "b439c99eacdcb3fb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "681" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnlSbGVRY3JCMzZ3TWdVTGhXUXdyRm82JTJCSE1NQWdlSTAlMkJob0pORTQ4Zzg5aUNKNlpmeUxpczY0dTJERGxXaWxlTVMlMkZiT3djb2pCYUQ5NGRuTXlQUUozTDlGeTl4czNPbDRrJTJCemE2VjNlJTJCMWpQdVRkOUt5UTkwc1NON3ZrOVJpT0VsNklhUXNCMkZVTm5ZdVE1V2FIQ1Q4dnRVeEhBWTlKZEZTSjU1Mk10N1FnelpLekhscWx3eiUyQnpOMERieSUyRmdFU2hEQkllanZvbDhCdFJ1MXd1WSUyRndVWWlPVHlkd1d3N3NEaExwRGRLcVJoS1pYN3BwTWk0c0xWSUlmWEdRWnIzZFI5d3VHYzRhaGk3djZVUXVVMDlIZVJjNmZWMVEzZnM1NFFyMU96dnFWcWROaGVjY2dGMnUlMkZycGxRR2Q3eVJmOERSWERHU29uZ1FtdUhNalpkVVl2WWtSNkdQYnd3RUpJSzRWanc0RkZZRzRBYjV2ZXZJV2Vmd3BQWE5laFRQcjlDMHJiNHBWYWJOZVElMkZTYVNBZHJya2V3a1NGTW5MYVRHS3AxNlI5NzZ4NCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "da8ea4c0-f4b9-5d3a-be65-f399c48332ba" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZGE4ZWE0YzAtZjRiOS01ZDNhLWJlNjUtZjM5OWM0ODMzMmJhPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "995dabdd62ba6095", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2128" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "de433330-859a-54ca-80fe-6469b5a09b4a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+N2M2MThjYTUtMTZlNC00MGZlLWE4ZDUtNTYzZmY2MzBlZTYyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlp1WENYMnZlS0piNVFyRHNTSlZic2x4dW53dnJIajRZSWdySExtL0lPM3gvM21BaGU0RVBmMmRUZFdDTmlnc1FwNTNiSVpXMmZyT0xDU1pkaWFxWlFhbGpMTTdDQlR0ZHFRMFpzdlE1U0FsWVNsOE9oNklHV1J1N0dPRzFJMnU4WmVOaXQ1Wm1NZ1ZjK2NYa2RqcGRzdFQ1aG40WXF3L1ZpVmsvUEpLUFgrL28yM0YralJKR3ZpNlZIMlhOam9DVTFMbEZvQzM0LzV4TWZzTTlxQVY5VTZ1OS9wRzNyMW04dEp1dm4yQm5vR2RLYWRVWXpENWxxYkx5Q2dBUnNJcmEvNXRpczR0ekRoY2dEM2p4SUczWGw1VE9NZDIwNXd0blpQMjdCRFNKNkZCcnRXdGtTbmpXeUQ5amdlK29hZlBPWTFBLytDUXdTM0QrS21xakh2WTRlYzRubDlPQnBnU0pKWWE3ekZYc0JyUjQzZXZpUkhhY0l4eTNRNmdNb09YUHcvNDVTTWVUZDVSazdqOUhRVUZ1Nk9NQ2xhY0Y0UXduZ3dpQjhpc1dKelk9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+MWY5NTg0NTQ4MGUzOTUxOGUwNzVhZDliYzA0OWU5ZTQ8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDtlMzZhYjg2Ny02YTkxLTUxMTgtOWM3Yi1lZjNlNWFhOGY4ZWQmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0MS45MTdaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O0FJTnU3QlZkbis5OEg0QStMem5mK0VmSHBqS1VabUovUWxNSnEyZHI5NUxMRXNJb2F1TzJJTlZWcWc2UXFpRXU0clBRQk1WaCt1QmduWlh1V21Za05rZjVKZnJPd3pPMVQ3d2lYNzlnaVJDdmVrVnhrM01BR01aOFc0QTFwK3c5ZlJvOHpmbmcxMUNJdTVLc1RWMXpNUnV1TUFyVG9oVFVxVWtBZDN3d0VMRGRTZ0JmRHFBN3NWYlVpb2plM0ZZU0ZlMjFScWZtZ1BId1pGb0ZwODN6Skc1WjFhNWI0NVovUDJGYnk0UGM4VUNORk1RTzQ0SjdIUmw2bzBqVW1PUDJCMUMyR1U2UStPczZOWWM4VGxXTTYwVHA1S0RLMm5jUnNpOVRDZ3RVMHh6N0U5c09JNW8zM3NQbkwzVWtMZTA3bE8wRzV3Q0R2ajkzUW9hRlk5ck13dz09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xOjA4ZmE0ZjY4LWMxOWQtNDQ1My1hNTU1LTY5MTcxZTNmN2I2NSZxdW90OywKICAmcXVvdDtNZXNzYWdlQXR0cmlidXRlcyZxdW90OyA6IHsKICAgICZxdW90O2EmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MSZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kZTQzMzMzMC04NTlhLTU0Y2EtODBmZS02NDY5YjVhMDliNGE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "a8ad175080f9bdfb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2128" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "b7508e4a-274a-5161-8d49-d9131770cee1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MGI2N2I5ZjctZDYwYi00OTdkLTkwNjMtZDFkZjEyYzIyZTY2PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQk95Y0QydGZEcTk4VHBLSGVEQWVVQVhhVUp0Q1lFWXdraTNEMG1CZUFFVlJxL2JaejBBaE5YaFlHbGtqVEZ0MEpvb0R6ZTdqWjRIcFV0aEIrSUZJdDNLUlV6Uzk1VjJyTDBRMUl0R05vYjR0eDRGcUNTR2RVV2F4KzVZYm1IN2RwVXNSRmwyZUQxcmdZVW1HdlI2dU5MUVVSSkx3Rzh3dzhYRUhSdnU1ZWRDQzM3NDZ0ZEYwOVUvYlhUSkRPWXI0UGptcjNXNFozNXZrUE5kSUJrckN3KzREL2RSdVJYSUtPbjBkcnA1REo2aTZvK1k2N2JCeXBkdVg3TEhuOTdaNkpzc1lqYWpGcy9FQXdKN2U4NHJ5bkN5YVhjTkNyeDJWMGErMExKK3RESUVVU05XZUxJZEJ3d2I3WDA1S2licTU2Njdmcm1Ucm5wTjFVTHFXTjFOUFZZVkhWTDMyZkpLdk5LVldWRkpNMFYxbmFVcXdFOVRyRjZITHgwSkZwVENvMmRzUiszM1VzbWFhamVxeHNtNXh6UmdEZVhWcEdJT3VLRzVOam1ZMmZ3NnM9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+ZjAwZjk1NmY4ZDYyOGUxZmViZGVjZTNkZmUzZmJkNWU8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDs3NTY4YmUxOC1iY2RiLTVmNGMtYmFlNi1lOTQxOGNlMmQ2YjkmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzAmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0MS44MjhaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O211T3FuK3dpWm54SkRnS09RUXgwRWtLb20veFlkUCtuOEVjckhLbnZHTlYzcHhFUTZUN0VpRGRpTHd0R0REUkRGdm5XT2JhRlhTSVhRZWhldmNxdnpmWkFvYVJCcFg4VjJPa2Z3RlpDUGpXdm5MQ2pZd1l5QUhuZUZTMVpxcXloUWJncWxoYWNUNWhCTHEzOTJaNTN3eFdkazN0L1VRa1hPSUpiNHE4OG1NSnpuR0IzUUI5VmRHck5Hb3dSYmJGYVNXeDJhejJJSkRxb1A0VkNqSFhJVFNlcDRlRmtpdnpCZkxzQ1RrMTQxaXNUR0tEUzM4RXZiQ2toWjlTaGNkU29RTlhWWUwyVGRsWHF0V2I3UHpCUVVVSkV3cG1pYSttU0t4bWtKZTJOU2NGV2d4R0JCNGR5dmFVSVVkdXYxYUdKSGwxM1FjY0l2eG9hbnJhenJ5NHZmUT09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xOjA4ZmE0ZjY4LWMxOWQtNDQ1My1hNTU1LTY5MTcxZTNmN2I2NSZxdW90OywKICAmcXVvdDtNZXNzYWdlQXR0cmlidXRlcyZxdW90OyA6IHsKICAgICZxdW90O2EmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MCZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5iNzUwOGU0YS0yNzRhLTUxNjEtOGQ0OS1kOTEzMTc3MGNlZTE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "f174e6ecc8dee5de", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "693" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlp1WENYMnZlS0piNVFyRHNTSlZic2x4dW53dnJIajRZSWdySExtJTJGSU8zeCUyRjNtQWhlNEVQZjJkVGRXQ05pZ3NRcDUzYklaVzJmck9MQ1NaZGlhcVpRYWxqTE03Q0JUdGRxUTBac3ZRNVNBbFlTbDhPaDZJR1dSdTdHT0cxSTJ1OFplTml0NVptTWdWYyUyQmNYa2RqcGRzdFQ1aG40WXF3JTJGVmlWayUyRlBKS1BYJTJCJTJGbzIzRiUyQmpSSkd2aTZWSDJYTmpvQ1UxTGxGb0MzNCUyRjV4TWZzTTlxQVY5VTZ1OSUyRnBHM3IxbTh0SnV2bjJCbm9HZEthZFVZekQ1bHFiTHlDZ0FSc0lyYSUyRjV0aXM0dHpEaGNnRDNqeElHM1hsNVRPTWQyMDV3dG5aUDI3QkRTSjZGQnJ0V3RrU25qV3lEOWpnZSUyQm9hZlBPWTFBJTJGJTJCQ1F3UzNEJTJCS21xakh2WTRlYzRubDlPQnBnU0pKWWE3ekZYc0JyUjQzZXZpUkhhY0l4eTNRNmdNb09YUHclMkY0NVNNZVRkNVJrN2o5SFFVRnU2T01DbGFjRjRRd25nd2lCOGlzV0p6WSUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "30995703-2eff-5e65-ac71-005a1ec56502" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MzA5OTU3MDMtMmVmZi01ZTY1LWFjNzEtMDA1YTFlYzU2NTAyPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "2e1899315f9d83b5", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTImVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2128" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "e4dea0ed-2f6d-50dc-b768-f7b41f57ef5c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MjE0NjhlNDctYmEyNy00ZDkxLWJiMTgtNmFjYzU5MjQwYmY0PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnFxNS9ZbnVDVUpKbnhLYkMvdzQ4NnRjb2hybksyblJOVng0dkNhb1hFeno2UFRXTFlHSTJQTDFXRlFHY0h0d1B0UnBBTFFYQUJnZllpSDVmd1ZVTi9WOUxoM1J0aUU0RjJ4QlVFa1d0UTFPMFpiYUswejhBNGJLeXk3aDU0UGpySFVhNVZYcklVY3p5bklDK0c3aTdvcUZ2bGphNGxLMjd1ZFlsbXdKazlHKy9jdndQWjVtY3VBZDVJRUNqYXZqbWVOWmRpQjAvdFRMSUZTOE5saDNmaWNxRG10M3V2VGlUWExJMldSMmMxTXZEV1d0M2pLSjFydEZDTldGZENJWXR6Vm9VWkU4cnd5djZhUG0xb21meGlxNkorVWtJOVZQRGRJSHpqMFo3K1M5Zzg5SUROaWZuMUdqZS9LbXNMTWovUzRLWW9mcVlZTzJoVnpTeitGVjE0aEtYMUZ6N0tDVEsvTUtQbkVFSjVMMlUwWG9ETlpyeGRsaE5DT1BwcGtKSXlwUWZsQU5EdkwwS3RLd1NLbkF5cEt1bFVBWHZlN0FJckZtV2FHenUrdEU9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NDQxY2QwNjFkNDI3YjY2OTk0M2QwMzU1ZTE4M2QzMDg8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDs3NTY4YmUxOC1iY2RiLTVmNGMtYmFlNi1lOTQxOGNlMmQ2YjkmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzAmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0MS44MjhaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O211T3FuK3dpWm54SkRnS09RUXgwRWtLb20veFlkUCtuOEVjckhLbnZHTlYzcHhFUTZUN0VpRGRpTHd0R0REUkRGdm5XT2JhRlhTSVhRZWhldmNxdnpmWkFvYVJCcFg4VjJPa2Z3RlpDUGpXdm5MQ2pZd1l5QUhuZUZTMVpxcXloUWJncWxoYWNUNWhCTHEzOTJaNTN3eFdkazN0L1VRa1hPSUpiNHE4OG1NSnpuR0IzUUI5VmRHck5Hb3dSYmJGYVNXeDJhejJJSkRxb1A0VkNqSFhJVFNlcDRlRmtpdnpCZkxzQ1RrMTQxaXNUR0tEUzM4RXZiQ2toWjlTaGNkU29RTlhWWUwyVGRsWHF0V2I3UHpCUVVVSkV3cG1pYSttU0t4bWtKZTJOU2NGV2d4R0JCNGR5dmFVSVVkdXYxYUdKSGwxM1FjY0l2eG9hbnJhenJ5NHZmUT09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xOjM5ZDI4YTEzLTg2MTMtNDg4NC1hYmI0LTcwMzM0YTE0YmY3ZiZxdW90OywKICAmcXVvdDtNZXNzYWdlQXR0cmlidXRlcyZxdW90OyA6IHsKICAgICZxdW90O2EmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MCZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5lNGRlYTBlZC0yZjZkLTUwZGMtYjc2OC1mN2I0MWY1N2VmNWM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "6dde9994c8301df1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "683" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQk95Y0QydGZEcTk4VHBLSGVEQWVVQVhhVUp0Q1lFWXdraTNEMG1CZUFFVlJxJTJGYlp6MEFoTlhoWUdsa2pURnQwSm9vRHplN2paNEhwVXRoQiUyQklGSXQzS1JVelM5NVYyckwwUTFJdEdOb2I0dHg0RnFDU0dkVVdheCUyQjVZYm1IN2RwVXNSRmwyZUQxcmdZVW1HdlI2dU5MUVVSSkx3Rzh3dzhYRUhSdnU1ZWRDQzM3NDZ0ZEYwOVUlMkZiWFRKRE9ZcjRQam1yM1c0WjM1dmtQTmRJQmtyQ3clMkI0RCUyRmRSdVJYSUtPbjBkcnA1REo2aTZvJTJCWTY3YkJ5cGR1WDdMSG45N1o2SnNzWWphakZzJTJGRUF3SjdlODRyeW5DeWFYY05DcngyVjBhJTJCMExKJTJCdERJRVVTTldlTElkQnd3YjdYMDVLaWJxNTY2N2ZybVRybnBOMVVMcVdOMU5QVllWSFZMMzJmSkt2TktWV1ZGSk0wVjFuYVVxd0U5VHJGNkhMeDBKRnBUQ28yZHNSJTJCMzNVc21hYWplcXhzbTV4elJnRGVYVnBHSU91S0c1TmptWTJmdzZzJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "3653af8d-6a27-5654-a346-f8d45a1dbd33" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MzY1M2FmOGQtNmEyNy01NjU0LWEzNDYtZjhkNDVhMWRiZDMzPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "d2758b246eecd408", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "689" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnFxNSUyRlludUNVSkpueEtiQyUyRnc0ODZ0Y29ocm5LMm5STlZ4NHZDYW9YRXp6NlBUV0xZR0kyUEwxV0ZRR2NIdHdQdFJwQUxRWEFCZ2ZZaUg1ZndWVU4lMkZWOUxoM1J0aUU0RjJ4QlVFa1d0UTFPMFpiYUswejhBNGJLeXk3aDU0UGpySFVhNVZYcklVY3p5bklDJTJCRzdpN29xRnZsamE0bEsyN3VkWWxtd0prOUclMkIlMkZjdndQWjVtY3VBZDVJRUNqYXZqbWVOWmRpQjAlMkZ0VExJRlM4TmxoM2ZpY3FEbXQzdXZUaVRYTEkyV1IyYzFNdkRXV3QzaktKMXJ0RkNOV0ZkQ0lZdHpWb1VaRThyd3l2NmFQbTFvbWZ4aXE2SiUyQlVrSTlWUERkSUh6ajBaNyUyQlM5Zzg5SUROaWZuMUdqZSUyRkttc0xNaiUyRlM0S1lvZnFZWU8yaFZ6U3olMkJGVjE0aEtYMUZ6N0tDVEslMkZNS1BuRUVKNUwyVTBYb0ROWnJ4ZGxoTkNPUHBwa0pJeXBRZmxBTkR2TDBLdEt3U0tuQXlwS3VsVUFYdmU3QUlyRm1XYUd6dSUyQnRFJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMiZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "f1dac6f6-2e1d-5468-a960-91af1e275be8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZjFkYWM2ZjYtMmUxZC01NDY4LWE5NjAtOTFhZjFlMjc1YmU4PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "3fa527198f62babb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTImVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2128" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "aaaf0441-836d-504c-ba9c-5318b357f069" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YTcxODIxMDYtNDU3YS00OGNmLWE1NDItMmFiZjQxZWRlNjExPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkI4aDFtdGg0T09MNjNYUE5mSEZzQkVZeGxtM252YisrT0h3Z1MyTllpZUd2azFFSWFDeEVabm5EWEhnbzhCRnB3SEIzT0lya3ZrY2k5bWZxVXVIbTlaN1VIS2tUSmRKU0pHSTZ1Wm5XL2dkQlBCTUMxQnA5T1d4N1pmRGdhRDlSVWJaK1daeEZrVDFCclNONy9iRGdLdUgwV1MxZmNnNFZSTWwycHowUUtMMm1hak51M2hCSjhwM1JWOElYeXpUZWlsOXRLRVh6bzVlMitOV21Kbno0NTJHVUF0QmhrYllTU1QzUDBIc2ZITUNTVVJ5ZUxJL092dUc4N0lkOHZBREt3T1FUdjZXRm5MWlJYRml3Z1A0WjdiNTJPTTlYd0RLUURMeStQOTdldkZjMnpVRkw3d1dMZkhMRkZ3cCt0Z0FlTUtPVVpiNEwydzhlRkQ2WThNTzRTcjhNZWhNZkkyMURHTlFoa0k2RHhETmRnUWFqZnFEVEl1eVFGSlpYd0ZkdGJaVE5QYnNaYWVqWEN5UGFBcFVTMWluMGYrSmh6VS91NWFWMU9SZkZCaDA9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+MTNjYmYyNzg4ZDIwOTUwNjc5OWM2MjM1ZmEzZTFiNTc8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDtlMzZhYjg2Ny02YTkxLTUxMTgtOWM3Yi1lZjNlNWFhOGY4ZWQmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzEmcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0MS45MTdaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O0FJTnU3QlZkbis5OEg0QStMem5mK0VmSHBqS1VabUovUWxNSnEyZHI5NUxMRXNJb2F1TzJJTlZWcWc2UXFpRXU0clBRQk1WaCt1QmduWlh1V21Za05rZjVKZnJPd3pPMVQ3d2lYNzlnaVJDdmVrVnhrM01BR01aOFc0QTFwK3c5ZlJvOHpmbmcxMUNJdTVLc1RWMXpNUnV1TUFyVG9oVFVxVWtBZDN3d0VMRGRTZ0JmRHFBN3NWYlVpb2plM0ZZU0ZlMjFScWZtZ1BId1pGb0ZwODN6Skc1WjFhNWI0NVovUDJGYnk0UGM4VUNORk1RTzQ0SjdIUmw2bzBqVW1PUDJCMUMyR1U2UStPczZOWWM4VGxXTTYwVHA1S0RLMm5jUnNpOVRDZ3RVMHh6N0U5c09JNW8zM3NQbkwzVWtMZTA3bE8wRzV3Q0R2ajkzUW9hRlk5ck13dz09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xOjM5ZDI4YTEzLTg2MTMtNDg4NC1hYmI0LTcwMzM0YTE0YmY3ZiZxdW90OywKICAmcXVvdDtNZXNzYWdlQXR0cmlidXRlcyZxdW90OyA6IHsKICAgICZxdW90O2EmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MSZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hYWFmMDQ0MS04MzZkLTUwNGMtYmE5Yy01MzE4YjM1N2YwNjk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "d76e3f7ae7a2043e", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "683" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkI4aDFtdGg0T09MNjNYUE5mSEZzQkVZeGxtM252YiUyQiUyQk9Id2dTMk5ZaWVHdmsxRUlhQ3hFWm5uRFhIZ284QkZwd0hCM09Jcmt2a2NpOW1mcVV1SG05WjdVSEtrVEpkSlNKR0k2dVpuVyUyRmdkQlBCTUMxQnA5T1d4N1pmRGdhRDlSVWJaJTJCV1p4RmtUMUJyU043JTJGYkRnS3VIMFdTMWZjZzRWUk1sMnB6MFFLTDJtYWpOdTNoQko4cDNSVjhJWHl6VGVpbDl0S0VYem81ZTIlMkJOV21Kbno0NTJHVUF0QmhrYllTU1QzUDBIc2ZITUNTVVJ5ZUxJJTJGT3Z1Rzg3SWQ4dkFES3dPUVR2NldGbkxaUlhGaXdnUDRaN2I1Mk9NOVh3REtRREx5JTJCUDk3ZXZGYzJ6VUZMN3dXTGZITEZGd3AlMkJ0Z0FlTUtPVVpiNEwydzhlRkQ2WThNTzRTcjhNZWhNZkkyMURHTlFoa0k2RHhETmRnUWFqZnFEVEl1eVFGSlpYd0ZkdGJaVE5QYnNaYWVqWEN5UGFBcFVTMWluMGYlMkJKaHpVJTJGdTVhVjFPUmZGQmgwJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMiZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "36f1409e-b5f4-5390-b1c9-17c785ce1c10" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MzZmMTQwOWUtYjVmNC01MzkwLWIxYzktMTdjNzg1Y2UxYzEwPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "78c58960c242ef8c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljU2VuZFJlY2VpdmVUd28tc3ViLTImVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2128" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "7f4c9c70-0f47-5ba3-b18e-cb293f7de0c4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZTgyZWNkZjYtNmZiYi00OTViLWFiMTUtZWM4NTY1Y2E0MTg0PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmZaMW5BRDlnNUVoZFlyREJZblBjOTlOSUZXU3RGVTZlT2paQ1hUYk1naUtWZ2c3clg0NS96K21TRXJFSERpd0NpMko2TENHYzZRdXk5SG1jQjI3clFsRXprL3pHR1JPMzV1V2JkZmZhZGw1UzI2TEpFMkpuWHVmK0s4a25VTDBhd0F5emdObDQwdExDaFVNdWk0dXY5U3FsNzUrM1dFcEJ1T0NFVzc0blhKVS85WHhsbjdUYThVVHlwa1piQ3dZbVhVbXpHeTk2dUN4aVVJYWZMcSt4OXBSTUhGT0owMjFxZzVOc2RFRDcwUVVtbXNvb3BGN2JYRnd2MG9UZ3VoaFZGb1hhMUpTSGx2TCtTK1RoOFlTRU1iQ0lIT2pGYmplSXAremRJNUxSaCtJd1poZjdmUzlweTdaN3NEbEtGSFpnR05QcWhJK3Y3UUh4Z1dpZDljbXRCQktRNVdENGJWTmVrNGpIWC9QSUV2VURXdURicElVdFNwN2JZa25ycUZkb29iVTdFVURYNTNLVzNCaTgvTWlsU1BiRnJlbUlyL2JwdEEzUE1TbGEyS289PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWU2ZmM1ZTdhYmI1NGJhN2JlNmJkNzI1OTNiYzQ2OTY8L01ENU9mQm9keT48Qm9keT57CiAgJnF1b3Q7VHlwZSZxdW90OyA6ICZxdW90O05vdGlmaWNhdGlvbiZxdW90OywKICAmcXVvdDtNZXNzYWdlSWQmcXVvdDsgOiAmcXVvdDtjNDBiNjE2Mi0yMzVmLTU5ZjQtOWFmMi0zNjNiMTM2NTkwMDEmcXVvdDssCiAgJnF1b3Q7VG9waWNBcm4mcXVvdDsgOiAmcXVvdDthcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTEmcXVvdDssCiAgJnF1b3Q7TWVzc2FnZSZxdW90OyA6ICZxdW90OzImcXVvdDssCiAgJnF1b3Q7VGltZXN0YW1wJnF1b3Q7IDogJnF1b3Q7MjAyMC0wNi0wOVQwNjozNjo0Mi4wMDZaJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZVZlcnNpb24mcXVvdDsgOiAmcXVvdDsxJnF1b3Q7LAogICZxdW90O1NpZ25hdHVyZSZxdW90OyA6ICZxdW90O0tyeWIvdmNMREZXRnpPRHFHTnhzcU4yUHMvVW9xenI5TCs2Q1BjdUR6NEZKQ3B3U2hJTkZTNStOdXoxdFF6WnZHRktPTGROY3JxRFgxRjYwQURJOEhEZG1iTVhtWjBuc0QwaW96Q2xlK1JSYWMyNjAxSWlYOFV4TzFWZ2VaYW9PcTQrb1pQN000eENkaERIcGhjbzRWbm9UVzM0TTRWUklYQ0drbFl1R2xOQlNMV2o2dVBSSGU2RGpjZkloajRiQUczd1JsdHg4M2xWaDRKcGxGR2RJZnAwNXJUUXNObENQS1M4RlFDellqejZXUFdReUVVZ3YzZ2ZtK2JSQXNwUFlIQkk2SHpCVUxwM0d1OHNrZ0trZnVVV0ZmNHAwdGdEdmc2eitlRkFBTnZNaVhHempXNHlhaDRXQjBiOGdYdHBiR0tNZFVqcGV0QU82NnpJM0VnRmZDZz09JnF1b3Q7LAogICZxdW90O1NpZ25pbmdDZXJ0VVJMJnF1b3Q7IDogJnF1b3Q7aHR0cHM6Ly9zbnMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20vU2ltcGxlTm90aWZpY2F0aW9uU2VydmljZS1hODZjYjEwYjRlMWYyOWM5NDE3MDJkNzM3MTI4ZjdiNi5wZW0mcXVvdDssCiAgJnF1b3Q7VW5zdWJzY3JpYmVVUkwmcXVvdDsgOiAmcXVvdDtodHRwczovL3Nucy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS8/QWN0aW9uPVVuc3Vic2NyaWJlJmFtcDtTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xOjM5ZDI4YTEzLTg2MTMtNDg4NC1hYmI0LTcwMzM0YTE0YmY3ZiZxdW90OywKICAmcXVvdDtNZXNzYWdlQXR0cmlidXRlcyZxdW90OyA6IHsKICAgICZxdW90O2EmcXVvdDsgOiB7JnF1b3Q7VHlwZSZxdW90OzomcXVvdDtTdHJpbmcmcXVvdDssJnF1b3Q7VmFsdWUmcXVvdDs6JnF1b3Q7MiZxdW90O30KICB9Cn08L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD43ZjRjOWM3MC0wZjQ3LTViYTMtYjE4ZS1jYjI5M2Y3ZGUwYzQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "bab70f8a86d9ad52", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "691" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmZaMW5BRDlnNUVoZFlyREJZblBjOTlOSUZXU3RGVTZlT2paQ1hUYk1naUtWZ2c3clg0NSUyRnolMkJtU0VyRUhEaXdDaTJKNkxDR2M2UXV5OUhtY0IyN3JRbEV6ayUyRnpHR1JPMzV1V2JkZmZhZGw1UzI2TEpFMkpuWHVmJTJCSzhrblVMMGF3QXl6Z05sNDB0TENoVU11aTR1djlTcWw3NSUyQjNXRXBCdU9DRVc3NG5YSlUlMkY5WHhsbjdUYThVVHlwa1piQ3dZbVhVbXpHeTk2dUN4aVVJYWZMcSUyQng5cFJNSEZPSjAyMXFnNU5zZEVENzBRVW1tc29vcEY3YlhGd3Ywb1RndWhoVkZvWGExSlNIbHZMJTJCUyUyQlRoOFlTRU1iQ0lIT2pGYmplSXAlMkJ6ZEk1TFJoJTJCSXdaaGY3ZlM5cHk3WjdzRGxLRkhaZ0dOUHFoSSUyQnY3UUh4Z1dpZDljbXRCQktRNVdENGJWTmVrNGpIWCUyRlBJRXZVRFd1RGJwSVV0U3A3YllrbnJxRmRvb2JVN0VVRFg1M0tXM0JpOCUyRk1pbFNQYkZyZW1JciUyRmJwdEEzUE1TbGEyS28lM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXN1Yi0yJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "c458c642-a453-5291-999d-911b946969f6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YzQ1OGM2NDItYTQ1My01MjkxLTk5OWQtOTExYjk0Njk2OWY2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "02703baaeee0c439", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "166" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xJTNBMzlkMjhhMTMtODYxMy00ODg0LWFiYjQtNzAzMzRhMTRiZjdmJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "8b616706-bc44-5cc7-beb1-305f8c7ec532" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD44YjYxNjcwNi1iYzQ0LTVjYzctYmViMS0zMDVmOGM3ZWM1MzI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "79002746415cf149", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "134" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMiZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:43 GMT" ], "X-Amzn-Requestid": [ "dd066252-5392-574a-9f4e-350b63a83c90" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kZDA2NjI1Mi01MzkyLTU3NGEtOWY0ZS0zNTBiNjNhODNjOTA8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "33435c12d23182b6", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "166" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1NlbmRSZWNlaXZlVHdvLXRvcC0xJTNBMDhmYTRmNjgtYzE5ZC00NDUzLWE1NTUtNjkxNzFlM2Y3YjY1JlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "60780e79-03d9-5a0b-ba18-592033e243fe" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD42MDc4MGU3OS0wM2Q5LTVhMGItYmExOC01OTIwMzNlMjQzZmU8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "7c1d8983a446bbaa", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "134" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNTZW5kUmVjZWl2ZVR3by1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:43 GMT" ], "X-Amzn-Requestid": [ "5026060c-0ae3-545e-9b9e-51553ad8bf84" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41MDI2MDYwYy0wYWUzLTU0NWUtOWI5ZS01MTU1M2FkOGJmODQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "27d291fb0852fbdc", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "120" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljU2VuZFJlY2VpdmVUd28tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:36:42 GMT" ], "X-Amzn-Requestid": [ "8cf70f30-ccbb-5d06-a20a-5869fc8064f3" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD44Y2Y3MGYzMC1jY2JiLTVkMDYtYTIwYS01ODY5ZmM4MDY0ZjM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/000077500000000000000000000000001367004507500256165ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestAs/000077500000000000000000000000001367004507500270215ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestAs/aws_test.replay000066400000000000000000000566151367004507500321050ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUwH28Qs/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e98bdf3b4548a9ec", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdBc19hd3NfdGVzdC10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "335" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:36 GMT" ], "X-Amzn-Requestid": [ "600f68a9-2a74-58f1-b90c-3ff01a046d02" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3QXNfYXdzX3Rlc3QtdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjYwMGY2OGE5LTJhNzQtNThmMS1iOTBjLTNmZjAxYTA0NmQwMjwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "d415b247fb52e386", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd0FzX2F3c190ZXN0LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "348" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "5f3427f6-eab8-53e6-8d16-70afdac9a138" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdBc19hd3NfdGVzdC1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjVmMzQyN2Y2LWVhYjgtNTNlNi04ZDE2LTcwYWZkYWM5YTEzODwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "d93df81b274851c0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "166" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0FzX2F3c190ZXN0LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "400" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "2599dcf8-0c97-517c-b830-8ba13ce6a3a2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd0FzX2F3c190ZXN0LXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjI1OTlkY2Y4LTBjOTctNTE3Yy1iODMwLThiYTEzY2U2YTNhMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "9d5e7f0cf4f9ce80", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "669" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdBc19hd3NfdGVzdC1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QXNfYXdzX3Rlc3Qtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "3536aaa0-a8d1-5ca7-b837-fdf998a0ee79" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MzUzNmFhYTAtYThkMS01Y2E3LWI4MzctZmRmOTk4YTBlZTc5PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "c18b37e2dc2feea9", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "286" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0FzX2F3c190ZXN0LXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0FzX2F3c190ZXN0LXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "378" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "53e46d8e-974f-583e-87a1-3ad7a73ebdcd" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3QXNfYXdzX3Rlc3QtdG9wLTE6NmM1ODI5NTYtNmM4Yy00MmI5LWExOTItMDJjNjc0NzNjYmYyPC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjUzZTQ2ZDhlLTk3NGYtNTgzZS04N2ExLTNhZDdhNzNlYmRjZDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "c05fc0bf1a67b31e", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "126" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT14JlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3QXNfYXdzX3Rlc3QtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "39dc100a-9cfe-5b0d-b75f-4753ac8f7efe" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjk4OGVmNjNkLThjZDItNTdiYy1hOGY4LWExNjRiY2EzNjI0ZjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MzlkYzEwMGEtOWNmZS01YjBkLWI3NWYtNDc1M2FjOGY3ZWZlPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "089684a584f52f37", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QXNfYXdzX3Rlc3Qtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "872" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "b20b0eac-2b6f-52e4-b3b2-59f51b1e003a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NTkwNzZiODQtMjUyZC00MDdjLWExNjctNzUzZjBmZTc3ZDgyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmdhUW9peVVMcHlodUFvcVlycDlTeWZwYUhUaWhKTC9MYy82UVJtR2FZV0Mybkd1SzRROGdId0xnclNITGR1dW04Rkxwc05nZGxoSmpXejh0cXE3QldGRFN3S1NhU2UrQUpUV041ZUZITDNLL0p3bGFSWEZKbzNEK2FRQlV1Zm43NzBjcktWT24vYm9RUEdhYjlaV0dCR2VGVXpveTFudzV0MXFaTzlvRHRJUWNReEo0a21RUEdjTjBXOGgweU1TOWFVWXB2a09mSG9NRmhyNHZSLzYrZmpMUWplYmRQekVvam1tcm5NeWFrK2U3SkdTT3dEM1Eza0tWVDBjbWtnelh1dnU4Ylg3RjJvOWRZYUFMaVl1bHhjbGFNRUdqSHMxNEdsQ1JHMnhEY0ppaitCVlRBdGFmRzZyaGVFV2kwWGsya2p4ZjRxUklkV2krRXhZMmJIcy9oSFloWTA4bStYVU5nNlAzUVVpRnp6cFBRQ0svNnpwV0tkWHQ4NXh3b3lrcWd3SWdrMEl1RS9reU04TzlBMDFYSm9LaUY2cG5hNWpMRHowbUY4a1pZT0U9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+OWRkNGU0NjEyNjhjODAzNGY1Yzg1NjRlMTU1YzY3YTY8L01ENU9mQm9keT48Qm9keT54PC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YjIwYjBlYWMtMmI2Zi01MmU0LWIzYjItNTlmNTFiMWUwMDNhPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "0d874c6e58c3c51c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "691" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmdhUW9peVVMcHlodUFvcVlycDlTeWZwYUhUaWhKTCUyRkxjJTJGNlFSbUdhWVdDMm5HdUs0UThnSHdMZ3JTSExkdXVtOEZMcHNOZ2RsaEpqV3o4dHFxN0JXRkRTd0tTYVNlJTJCQUpUV041ZUZITDNLJTJGSndsYVJYRkpvM0QlMkJhUUJVdWZuNzcwY3JLVk9uJTJGYm9RUEdhYjlaV0dCR2VGVXpveTFudzV0MXFaTzlvRHRJUWNReEo0a21RUEdjTjBXOGgweU1TOWFVWXB2a09mSG9NRmhyNHZSJTJGNiUyQmZqTFFqZWJkUHpFb2ptbXJuTXlhayUyQmU3SkdTT3dEM1Eza0tWVDBjbWtnelh1dnU4Ylg3RjJvOWRZYUFMaVl1bHhjbGFNRUdqSHMxNEdsQ1JHMnhEY0ppaiUyQkJWVEF0YWZHNnJoZUVXaTBYazJranhmNHFSSWRXaSUyQkV4WTJiSHMlMkZoSFloWTA4bSUyQlhVTmc2UDNRVWlGenpwUFFDSyUyRjZ6cFdLZFh0ODV4d295a3Fnd0lnazBJdUUlMkZreU04TzlBMDFYSm9LaUY2cG5hNWpMRHowbUY4a1pZT0UlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0FzX2F3c190ZXN0LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "5de6e5de-f036-5f40-8fe0-b287c0479d9e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NWRlNmU1ZGUtZjAzNi01ZjQwLThmZTAtYjI4N2MwNDc5ZDllPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "d3c3a6d933e7f72d", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "113" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0mVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBbm9uZXhpc3RlbnR0b3BpYyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "259" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "fe039cfb-6cb4-571f-8d2a-cba25cc5e2ec" ] }, "Body": "PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxFcnJvcj4KICAgIDxUeXBlPlNlbmRlcjwvVHlwZT4KICAgIDxDb2RlPk5vdEZvdW5kPC9Db2RlPgogICAgPE1lc3NhZ2U+VG9waWMgZG9lcyBub3QgZXhpc3Q8L01lc3NhZ2U+CiAgPC9FcnJvcj4KICA8UmVxdWVzdElkPmZlMDM5Y2ZiLTZjYjQtNTcxZi04ZDJhLWNiYTI1Y2M1ZTJlYzwvUmVxdWVzdElkPgo8L0Vycm9yUmVzcG9uc2U+Cg==" } }, { "ID": "ea7a21b3c381b9c7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "d6ea0886-3e22-56d8-99c9-5fdf0e538406" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD5kNmVhMDg4Ni0zZTIyLTU2ZDgtOTljOS01ZmRmMGU1Mzg0MDY8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } }, { "ID": "b593bed949c972f6", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "166" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0FzX2F3c190ZXN0LXRvcC0xJTNBNmM1ODI5NTYtNmM4Yy00MmI5LWExOTItMDJjNjc0NzNjYmYyJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "06209b74-3569-5302-808f-cc2d051b46f1" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4wNjIwOWI3NC0zNTY5LTUzMDItODA4Zi1jYzJkMDUxYjQ2ZjE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "4714385c70567b19", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "134" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdBc19hd3NfdGVzdC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:38 GMT" ], "X-Amzn-Requestid": [ "56412441-aeab-5398-9877-73189ed94146" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41NjQxMjQ0MS1hZWFiLTUzOTgtOTg3Ny03MzE4OWVkOTQxNDY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "8f65c9a4ffd1539f", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "120" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3QXNfYXdzX3Rlc3QtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "1df8fa44-0ebc-5902-aa65-ad1d3eceecf1" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4xZGY4ZmE0NC0wZWJjLTU5MDItYWE2NS1hZDFkM2VjZWVjZjE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }verify_As_returns_false_when_passed_nil.replay000066400000000000000000000603031367004507500402670ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestAs{ "Initial": "AQAAAA7WcSUyGG0qB/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "21845489b2d93539", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "102" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "366" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:37 GMT" ], "X-Amzn-Requestid": [ "db6cf6a1-4993-59b9-a772-a1f879e1a388" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3QXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5kYjZjZjZhMS00OTkzLTU5YjktYTc3Mi1hMWY4NzllMWEzODg8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "11e8e46c82f2447b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "107" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "379" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:39 GMT" ], "X-Amzn-Requestid": [ "5873fde9-46be-525e-ac0b-aab076cd733c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41ODczZmRlOS00NmJlLTUyNWUtYWMwYi1hYWIwNzZjZDczM2M8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "32d4c9060638ce34", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "197" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "431" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:39 GMT" ], "X-Amzn-Requestid": [ "3b34065f-9973-5f3e-b6d2-5106a9005e5c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zYjM0MDY1Zi05OTczLTVmM2UtYjZkMi01MTA2YTkwMDVlNWM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "001d3e00b1a66c81", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "731" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:39 GMT" ], "X-Amzn-Requestid": [ "4aa588c8-85af-531e-af96-df91b5dc427c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NGFhNTg4YzgtODVhZi01MzFlLWFmOTYtZGY5MWI1ZGM0MjdjPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "c63c599f6a5c8d3a", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "348" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "409" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:38 GMT" ], "X-Amzn-Requestid": [ "32a0a236-9d55-514b-a19b-f56fad26db7a" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3QXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xOmRkZjRlZWQ2LTk4OTItNDM2NC1iODk4LTE5ZmEwZDBjMGJlZTwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4zMmEwYTIzNi05ZDU1LTUxNGItYTE5Yi1mNTZmYWQyNmRiN2E8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "c1df85e4e82f7c4a", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "157" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT14JlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3QXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:38 GMT" ], "X-Amzn-Requestid": [ "f3c620ae-bbd5-588f-9486-77f78ba6d2be" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmZmNTNiYWY5LTJhYzktNTZkNS1iZjRhLWVkYTAxYWJhNmNlNDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZjNjNjIwYWUtYmJkNS01ODhmLTk0ODYtNzdmNzhiYTZkMmJlPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "e14bfff10cd7787e", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "217" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "916" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:39 GMT" ], "X-Amzn-Requestid": [ "0d4adc11-10f4-5c93-93c3-8b4820877df1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OGVmYjhmM2UtYzI2Zi00MzFiLTk2ZDYtNjZmMzU4OWY1MWE1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkxocjI0YWRYbzRhNE40Qi9kK05Nd1hHNFhjUmZxQVplUUUzWWNPUUs4NElDWHhHaG5vS0tDb3JXMVJxUFdDeU1TZko3V0hlbHQ2M3RZKzkrTEVRdHNUNWlRUTZMaHNtalF1ZXQ3eFBmUk91RXpQQ3hxNkhXYUIxRzVHLzFmR0lva3ZyV3dtYXJpRmg1R2E2NjN5bG50U0pCNDlGRExIZkZiMjk3enhjTktQbGhZYVJKSTdCb1h0bmRQMmZ4N2lHSXA4QWFrOG4xSzdtdzN4aWZJTVg4TnhGRUhwb0tIMWhCN0V0VjRlWExrUUNNUExOR0xGc3NrZXBOMWh1NWdod0tBeE5lZk01cGluS3FHQWY5WEs2SzV5QjNMRWoxSFIwQVdCK0NrT3lhd2dLSUZFRGgxWGZYRVowbXo1YURtbDZONm9sYzBEQzBjbm9GdWtNSzZRc1gwV3UrbnJrcThOVXR6YVVad0ZRWUg3dm1pa3htZXAvY1B2U0FYNTk3UGoyZWVXV1h4RS9oclVnR3hyWmVISWtYbS9KTWMwOE95YXZYZWl0azVVdFpCMERYbzVFc3Y3NjVpQ0ZSTHBkb1U2a3hzR2FzVCsvV21QMWthTjEvZE5nTFhRPT08L1JlY2VpcHRIYW5kbGU+PE1ENU9mQm9keT45ZGQ0ZTQ2MTI2OGM4MDM0ZjVjODU2NGUxNTVjNjdhNjwvTUQ1T2ZCb2R5PjxCb2R5Png8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4wZDRhZGMxMS0xMGY0LTVjOTMtOTNjMy04YjQ4MjA4NzdkZjE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "f3deaa9e9e450911", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "764" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkxocjI0YWRYbzRhNE40QiUyRmQlMkJOTXdYRzRYY1JmcUFaZVFFM1ljT1FLODRJQ1h4R2hub0tLQ29yVzFScVBXQ3lNU2ZKN1dIZWx0NjN0WSUyQjklMkJMRVF0c1Q1aVFRNkxoc21qUXVldDd4UGZST3VFelBDeHE2SFdhQjFHNUclMkYxZkdJb2t2cld3bWFyaUZoNUdhNjYzeWxudFNKQjQ5RkRMSGZGYjI5N3p4Y05LUGxoWWFSSkk3Qm9YdG5kUDJmeDdpR0lwOEFhazhuMUs3bXczeGlmSU1YOE54RkVIcG9LSDFoQjdFdFY0ZVhMa1FDTVBMTkdMRnNza2VwTjFodTVnaHdLQXhOZWZNNXBpbktxR0FmOVhLNks1eUIzTEVqMUhSMEFXQiUyQkNrT3lhd2dLSUZFRGgxWGZYRVowbXo1YURtbDZONm9sYzBEQzBjbm9GdWtNSzZRc1gwV3UlMkJucmtxOE5VdHphVVp3RlFZSDd2bWlreG1lcCUyRmNQdlNBWDU5N1BqMmVlV1dYeEUlMkZoclVnR3hyWmVISWtYbSUyRkpNYzA4T3lhdlhlaXRrNVV0WkIwRFhvNUVzdjc2NWlDRlJMcGRvVTZreHNHYXNUJTJCJTJGV21QMWthTjElMkZkTmdMWFElM0QlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:39 GMT" ], "X-Amzn-Requestid": [ "ec0289ff-e251-5e77-96c8-dea6d222ff15" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZWMwMjg5ZmYtZTI1MS01ZTc3LTk2YzgtZGVhNmQyMjJmZjE1PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "56ad33d3254e30ba", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "113" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0mVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBbm9uZXhpc3RlbnR0b3BpYyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "259" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:38 GMT" ], "X-Amzn-Requestid": [ "02ab21b3-e34a-5d96-8174-76ead33957a7" ] }, "Body": "PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxFcnJvcj4KICAgIDxUeXBlPlNlbmRlcjwvVHlwZT4KICAgIDxDb2RlPk5vdEZvdW5kPC9Db2RlPgogICAgPE1lc3NhZ2U+VG9waWMgZG9lcyBub3QgZXhpc3Q8L01lc3NhZ2U+CiAgPC9FcnJvcj4KICA8UmVxdWVzdElkPjAyYWIyMWIzLWUzNGEtNWQ5Ni04MTc0LTc2ZWFkMzM5NTdhNzwvUmVxdWVzdElkPgo8L0Vycm9yUmVzcG9uc2U+Cg==" } }, { "ID": "25fc12b31f53b849", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:39 GMT" ], "X-Amzn-Requestid": [ "c2cbcd1a-210c-59b3-b8c2-9a43117f08d1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD5jMmNiY2QxYS0yMTBjLTU5YjMtYjhjMi05YTQzMTE3ZjA4ZDE8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } }, { "ID": "316d038d6ff7d04e", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "197" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMSUzQWRkZjRlZWQ2LTk4OTItNDM2NC1iODk4LTE5ZmEwZDBjMGJlZSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:39 GMT" ], "X-Amzn-Requestid": [ "b0211b66-0718-57ea-b609-4c3f376ccddb" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5iMDIxMWI2Ni0wNzE4LTU3ZWEtYjYwOS00YzNmMzc2Y2NkZGI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "34da0d4cac0be4e0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "165" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:40 GMT" ], "X-Amzn-Requestid": [ "3dcc763e-aca3-5ac2-8357-21679cd77ba0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zZGNjNzYzZS1hY2EzLTVhYzItODM1Ny0yMTY3OWNkNzdiYTA8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "f11e2f7a24ac5234", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "151" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3QXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:39 GMT" ], "X-Amzn-Requestid": [ "b165c6c1-6d46-5ca3-98a3-91985d329692" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5iMTY1YzZjMS02ZDQ2LTVjYTMtOThhMy05MTk4NWQzMjk2OTI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestBatching.replay000066400000000000000000002236021367004507500314200ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSW3F04mZ/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "32a07065f4b93d19", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdCYXRjaGluZy10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "332" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:51 GMT" ], "X-Amzn-Requestid": [ "941bec1f-6f15-548e-b9e4-bb465fe2fa15" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3QmF0Y2hpbmctdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjk0MWJlYzFmLTZmMTUtNTQ4ZS1iOWU0LWJiNDY1ZmUyZmExNTwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "c05f372454619937", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd0JhdGNoaW5nLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "345" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "74254089-66be-554c-94db-17d05649860a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdCYXRjaGluZy1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjc0MjU0MDg5LTY2YmUtNTU0Yy05NGRiLTE3ZDA1NjQ5ODYwYTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "c8476f54d2b54213", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0JhdGNoaW5nLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "397" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "f24349aa-4c45-55ee-9884-1ef37cbd06a8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd0JhdGNoaW5nLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmYyNDM0OWFhLTRjNDUtNTVlZS05ODg0LTFlZjM3Y2JkMDZhODwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "48a35c71d9541f8f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "663" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdCYXRjaGluZy1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "85f2c4de-5f17-5358-964d-93876fefd01e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ODVmMmM0ZGUtNWYxNy01MzU4LTk2NGQtOTM4NzZmZWZkMDFlPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "a819484cb188beae", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "280" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "375" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:51 GMT" ], "X-Amzn-Requestid": [ "98ad2bea-2719-57e6-a3b0-7cb317e1b97d" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3QmF0Y2hpbmctdG9wLTE6MjM4OGY5MDYtZTM4ZC00NTM3LWI1NDgtMGRmMDFhMjU5OTdmPC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjk4YWQyYmVhLTI3MTktNTdlNi1hM2IwLTdjYjMxN2UxYjk3ZDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "ff68cf7c41f484d1", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:51 GMT" ], "X-Amzn-Requestid": [ "c418a895-50fa-5440-8b56-ffcc60024adb" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjZmMDM2OGFhLWYxYjAtNTM0NS04NjgxLTNmZjNjMTQ4ZmRkZTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+YzQxOGE4OTUtNTBmYS01NDQwLThiNTYtZmZjYzYwMDI0YWRiPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "18779e640688dda9", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:51 GMT" ], "X-Amzn-Requestid": [ "d743a08d-5bff-5077-8469-f7d46b071eec" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjI5Y2FiMjZhLTQyZDctNWU1YS04YzllLWU1MzM3MjJmYjBjMTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZDc0M2EwOGQtNWJmZi01MDc3LTg0NjktZjdkNDZiMDcxZWVjPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "42f342bb3ece4917", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "4135cbdb-eb29-5fcb-8c2b-9c82dbd11150" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmNlNTE3ZTE2LTJiYmMtNWIwNC1hYzIyLTI5NGYxYjQ0MjU5ZjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NDEzNWNiZGItZWIyOS01ZmNiLThjMmItOWM4MmRiZDExMTUwPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "7122e0c026d06354", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "f2cda15b-5359-54fb-b242-f60263a19a60" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjZkNGU4Yjc5LTEyMmEtNTczYS04ZTM0LWRjMjAyMmQyZTlhMTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZjJjZGExNWItNTM1OS01NGZiLWIyNDItZjYwMjYzYTE5YTYwPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "82f9661a08dcc20c", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "4a726ace-13ef-51c6-8d28-3d9723170f5d" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmYyOWUwYmViLWM2YWUtNTJmOS04NTllLTVjYjJmNjU2YmM2MjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NGE3MjZhY2UtMTNlZi01MWM2LThkMjgtM2Q5NzIzMTcwZjVkPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "721ec0d7c633aa1c", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "0f440aa6-6145-58b2-a88f-5dff51bd7629" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmIwNWNiOGEwLTU1N2MtNWQwMy05ZGM0LWVmZjk2NTg0ZTM5ODwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MGY0NDBhYTYtNjE0NS01OGIyLWE4OGYtNWRmZjUxYmQ3NjI5PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "b274f47268e48377", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "ff1e604b-77cb-5e59-8973-37124733a0c2" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjQ2Nzg0YmIxLTc1MGEtNTExMC04MjlkLTFjZTg0NWYyY2Y4YjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZmYxZTYwNGItNzdjYi01ZTU5LTg5NzMtMzcxMjQ3MzNhMGMyPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "ff84122096bb0e2e", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "80f278fa-5a05-53a8-b771-2fa36afcbd33" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjYzNjg0NjFmLTIwNTMtNTdhZS05ZjFkLTExNDYxMGFhZDkzNTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ODBmMjc4ZmEtNWEwNS01M2E4LWI3NzEtMmZhMzZhZmNiZDMzPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "cacc6215d4a52583", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "c7785624-693d-5869-9515-017d59c436f2" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjYzZTE5ZDgzLWNhOTUtNTIxZC05MjZjLWNhZGFmYTZjNWM4NjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+Yzc3ODU2MjQtNjkzZC01ODY5LTk1MTUtMDE3ZDU5YzQzNmYyPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "1f6f7f0a75e1c795", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "2741b74e-c986-5882-898b-e017f97f3619" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmI3Yjc3MWRhLTQxY2UtNTJmMi05NGQzLTI2ODM3MTM3MWM2OTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+Mjc0MWI3NGUtYzk4Ni01ODgyLTg5OGItZTAxN2Y5N2YzNjE5PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "e3d8688ce8ee4f6f", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "5fa28860-08a4-5251-ae35-df39385decca" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjc0OGYwYjBmLTg0MmQtNTJhMy05NTkzLTVjNTZiNGQ0NGMzODwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NWZhMjg4NjAtMDhhNC01MjUxLWFlMzUtZGYzOTM4NWRlY2NhPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "e16de849ed7d06e4", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:52 GMT" ], "X-Amzn-Requestid": [ "4565d471-987f-52e8-b3af-8328a8861c73" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmVkMjJlY2U2LWZjYmEtNTcwNS1hZGJjLWJiYmZjYzQzYTk5ZTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NDU2NWQ0NzEtOTg3Zi01MmU4LWIzYWYtODMyOGE4ODYxYzczPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "89fab9bbd7f24a35", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "2037d96f-ba3e-5374-a88f-8e368ac78032" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YmE3Yzg4N2UtMDI2My00NWY4LWJhMzMtZWQ3YzM2NWE3NjVlPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjFFSU94QUhwcUx5b3UvenV6eFZTc09YSnNiMHVtTEpkSFRTOFFTUUkvbG5PVXdUMjdHTFViaCttdUhBK3IzcmhNTTRxbllIbE80Ry9lbWxQNzAxWWRNbEZjSmFiSFF3VXZhb0dZd3NjSUgxSGRubWlLdzdIWExlclN4MXZqK0VoRlpxWm5JcFp4RS9JcVZ5eGs1dFB3OU93WEdVWlc4eFZFdk96ZjJlK2c5Nyt4WTd1TDdWckExclFMcXRGekJ1VzZNK2VBdkFjWXN4b2twYlhoOXVOaUF5bmxhZUpYUnVITXpjeWgwK05uWkI0bk5VQndWeUV2MVpnMkh6MWhjQldNdXBsTE5rQ1ZwQnFqd3lxTGs2ekVqOWdqUDBqKzNVbTkvQmkxVTJobWRhMjBUZ2FTQ3NMcVRacmYza1ZZc0hvdERkMEJVYTZ5THJLN3h0SU56RXNKZ2JKeEF1SXg4SVIrYUZSUHZRUHBCTitURFJPcTIrdTVJRDNCZVMremV3SnBnd0xHTy9xNGRaZTJ5ODF0bFpRNXB1WWRHM1dHT2lVZWFoeXJUcmhmT289PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjIwMzdkOTZmLWJhM2UtNTM3NC1hODhmLThlMzY4YWM3ODAzMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "04df4d2e333c0ae8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "ac068f30-b00c-547d-ab8e-d86980f5a73b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NDI2OTA2MWItMjQ2Ny00OTNhLTliY2ItZTVkZjYwYTYyODA5PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnM4eEF5cFkvRzFNOW9uOTl0RzgvMVpnRFVsbG05RzhpM1lsOXNhMFc1WlM0Ui9xSHBBYzNSeWl2ekdpaDZBck0zdkR0SzJSL2RRaHZCVjlWdzluYjN2MENUdWRvNVV4UDRYRUY2T3FyazZWdXJwU3d5eCszU1ZQS2tZbC81TzR0WGdsV3VOSVdZQTcyclpuT1R6SUpGNXd0S25zakRlamxkVi9jZXVUd0pMT0UxT3ZmM3JhY0hXY1FtTC90YzhzYjEwR1JySk5wYVhzeVZWRHB0V3Z5aytmN0FxV29obkQ2cjMwYXpZWDlDb1d3L1VFYWFud2hCOWVVSVFzcUVidjRpZGpqVkY4TTAwVkFvaW1LUGR3eGx0b3ZYKzZYc3ZFYWw2VGNqc1R5YUh6KzY4M2xCNWs0QUxreVhRYVZxa0RNYmRDcnB3dWpGaytibUZqSnVFc1lhUjg3bDNpNG9kYmxIVWZ1eE9JdlFLdGhiMXpITHpjRHJnekZHZEVPZFp6SnBIRFh6bldMcVh0N0VDNWd2TFBsOENXVC9yWUl6RVU5T2ZtY1dkcTBTUzg9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmFjMDY4ZjMwLWIwMGMtNTQ3ZC1hYjhlLWQ4Njk4MGY1YTczYjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "2f23d3809dfe1a6e", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "6f5fd6f9-affd-5011-865a-81a09f04e357" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZWUwN2ExMGQtZTU4ZS00Yjk2LThlY2EtYjA3N2UzZDRhZWNjPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmpBd2VaN1dJeVdIci9VK2I2TjlrbVA3ZVlUWTNzQVRtck5mWUhoQXlmRW9iMXA5UElkVjNKUXZUTHh6ZUNZYVFyb0F1SXI5V2MxUnhkbUhhUmVTMkQxRFV1YWxucXdvQ2Fqcm55TDlLaUtwMU5NaDZnM1ZRbkVQWXpWeDRxeUxiUFZhREQ1UWdkOFgwV3RVdVF2eklsVTdYMGVySE5ueWlsandRcThOb0lRK3hTZjNSbnBHdy85b1EyTnhqZjd3Sk9EcnRQVDFreWtiL2tCd0poaXB2NThlWTdYbHNJdzdJbWlzeUZiemtZdnF0VEs1dnVkYkFaU09iUnpqa1JhNmRMTTB6Zi9nMi80Z3VNbTI0dGdKd205TDBDME04TWRUWWt2bGYrY2JnUS9DNGZDTjcyRGxCMUNtV3B0SVFPd3UvZDJUVTBWd1h4a0dlRTJKMkVlQlBvcU9TeUFncjl6ejBkaDczZnJ6UGliOXNNWi9YWnJRS1d6LzRjNVBlK2Q1Y0o3QU0zbU11TFJQNlFxUDI0Tm02RU93c3NmaksyMDFvczNPb1ZJZXk3REk9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjZmNWZkNmY5LWFmZmQtNTAxMS04NjVhLTgxYTA5ZjA0ZTM1NzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "1b8840ec6a28e22c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "af61e2ae-aa66-5735-b5d1-b5f79a9f8473" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NGMzZGE5MDYtYzE0ZC00MmMzLWJhODgtMWRkNTYxOGNjNWU4PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQndPejZEOGVucGF5bE9zRDl6UWhuajR3Rm13NjJLdEZ3NitmLzhkOVpiQnNmZ2Fpc1ZpOWsxVUdpVEdheWM2WHhhY1RNZzVXbzE5YXNzU3lKZWpXQXhLdEVqc2tPTm83YWJUWTByYmNOd3lkUGdlN3ZyR1grRW1zQ3c3YVdyZy9GNWZpbUdEdjczR0RHMmwvYjZEZFpoNW0xc21rNzl6TmNkNXViMEtodE1NRzQrUkZmdDh3OWorQkRLN2Fud2tFVXhEcnBnZVBkQ25xOXFpMk1JM2NabFQvRUNxaTZrcndaWUYwUjJScEMzRnIrR0lRWityL0dUYURZbzk3N2NVbVJVNTBjNHZjRUdEcXlIZkE1aFhLdGZCYTZmb3JVMVNlR0tac0VUYVRneTNvWUxsa2FIR1FRMmpqMnJjSCt1V1dnTzUraVBTSFJoSkFGVENiUTU5bk43ZS8xdXRQWVcxZGw1UXkvK0hYL3VkdHpzcWdHL0p6N3IzaC8vNFNEVkdyeTg0Q2NHbGNPUDRKeWg3M3RyNFFhOWNpSFlsMi9GOFBWTFY1dkNhd0RpTUE9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmFmNjFlMmFlLWFhNjYtNTczNS1iNWQxLWI1Zjc5YTlmODQ3MzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "677c29c563e2d13d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "c037d1f9-5261-582a-8569-86a062981b6c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NTcyY2IzNzQtNzRkNC00OWY2LWFiZmMtMWZjMGE3ZWRmMmQzPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnhOVXJSRnpJTXZKSjRaNlZjQSs1ZWhjK0hiT1BEcDVsWGNQZFUrR1RGa0tIeUpvM0FwTXRTb29jNFR4NzQ0c3lmYkMvbnFsdnU2U1FhdjFKZkdVZ1NxYXVMMy9ncWpQdEFMQ0U2Vk9KRkZaeGRxWGNtV2VoUnJjeExTKzhiaU9xQmFXak5LQkhvSUhKTE1tSnFkRjlnTmdQWStiMzlzcEI1OWgvTnhWNHNOcHVXZkdQdG9WTWx3NE8zcy9LVldwOFVxMVFtWjVjdklldk9xTzRYQ010TXJwN0VyYWR6U2hBOXFPa09mSnkvYlRsZS9adWNJTXRtWTV1eVRrR0tSdmJvU0pQMGhZMGxWeWdwNERoWlppYVlzbkUwWTh6TGVWZTErK1FzU2tHN3VaVGpTUi9HV0VlYVJDZmxOZ3UvcGU4NG5NcmNSenhyTTl4T0FvYklGUnVjUTVjakI3bmwwdEowVm5mKzZKWFpWNHRxWmhiRThuNHpDNHlScmNpaldYYktWQjNXUkhibzJramVCOTlWSlFxYXplUTQrY3V5aGRuK29ZWnRQQXgzNWc9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmMwMzdkMWY5LTUyNjEtNTgyYS04NTY5LTg2YTA2Mjk4MWI2YzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "ade885dfd7ee4e98", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "29f9827b-59be-5a6e-9b1d-d52269479928" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OTczMGZkYzgtNzM1NS00MmE4LTg4NmUtZjY2M2I3ZjYyMzk5PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnZTQ0FKcklUMXFZam5ySmc3aVlVempTWEJPV1N1MWY4YkhYZ25tdURzUTVTZittZmZLWHo0dzMwNjJKVVNBTktkWHZ6YzBwUmREUXVMUC90czg2Nmtwc0lmREtIb2JublRYMmk3Z0FRSUUvZnV1SkFFYWtqaHh1UWVCNmwvWkRvZlRoaWp6TkQ3d2ZLQjY3QW9lZmtZakladzlkcitrWElmT1d6WFlrdFZJeXhFRXdOMTJSSzZMdVorSFlpYVVxdlRSRFpyVHFiSTM1aU5jejJGeVJNUzFyaTJiUDdwRktCMm1yZUdqeVlMSjdzVTN5QVV1VmZWRHJKSVZmZnhaeEZMZFcyQ3NDWHhGV3dvRlRoRDYyRE5YVUpXa1oxSkhJYitUSXJUZWQ0dExuMUpUVUZLNHYvL3hNb3RiN1hxOEZFRHJPMk1xU09OWlVNS3hVR2tET0Y4QWtzWlZoYWJpU1VOdkE1V2tkNVBrcjNyNHNPay9NVHZJNWRKZDQvR3RzN2s3WkpKL2ZyaFlEYlE4blF2ZjRZRjQveXRKZ0I4R013Z1Q4ODFKaFVuY1E9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjI5Zjk4MjdiLTU5YmUtNWE2ZS05YjFkLWQ1MjI2OTQ3OTkyODwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "e7e1c530471449c0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "985eb2ec-658c-5bb1-a7d1-e5b55575a8f7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NGFiMWFhN2QtNjY2ZS00OTM2LWE3YjAtYTU2NWUyNzcwYTkyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQk1LNitvdmJlSk81c1RlYWo1VjhMb1YveEtaelYybnpvUjlsNGFqdi90VDZPNFQwMW5BdzN2NmQ5TzZsVWhrZFlQekwrd2N1dWZJSjFtRHBKSUxNTWtJZGZKTEZDdks5NXRtbFlWOGhBZEhSWHZRTnExQXI1TW1PcXA0ZVFsNXd5cnlqamlkbks3elJIbko0b2h4RjRDRFJ5QnRIclF1LytvbVExWi9tK0FZWkZadGc2TVdXUExCeW9zVDVIWTVZZEZFVmZnMFN0UFZPeWNDK1NlbHlVVmlFWFZLSlRvQldtMEFOQy85S0w3TktBT1h0NE9qV2RUTFZVY01xRXVjNHJwNTZrZXA3aTByOTRpRzRMMVVtTUhScmZHQUJjcTdmbWtmcWhSMUxua21vZ01CQ1hNTHEyb0NGNzVNbHZPalZVRUYyTzlEa2Yvc2NxcWF1cHVZUUNJK0xXUHdHcExPZW1QOUxJSUVjYndQd25HL0tYVzFBZjd3MHdnRDMrejdseFp6UWh3dkNkMlRzN1JBMC9VRHJMekt0dUpWQTNqc2FnTXBtTklIQld4aEk9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjk4NWViMmVjLTY1OGMtNWJiMS1hN2QxLWU1YjU1NTc1YThmNzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "beda1fd95a2d3cff", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3452" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjFFSU94QUhwcUx5b3UlMkZ6dXp4VlNzT1hKc2IwdW1MSmRIVFM4UVNRSSUyRmxuT1V3VDI3R0xVYmglMkJtdUhBJTJCcjNyaE1NNHFuWUhsTzRHJTJGZW1sUDcwMVlkTWxGY0phYkhRd1V2YW9HWXdzY0lIMUhkbm1pS3c3SFhMZXJTeDF2aiUyQkVoRlpxWm5JcFp4RSUyRklxVnl4azV0UHc5T3dYR1VaVzh4VkV2T3pmMmUlMkJnOTclMkJ4WTd1TDdWckExclFMcXRGekJ1VzZNJTJCZUF2QWNZc3hva3BiWGg5dU5pQXlubGFlSlhSdUhNemN5aDAlMkJOblpCNG5OVUJ3VnlFdjFaZzJIejFoY0JXTXVwbExOa0NWcEJxand5cUxrNnpFajlnalAwaiUyQjNVbTklMkZCaTFVMmhtZGEyMFRnYVNDc0xxVFpyZjNrVllzSG90RGQwQlVhNnlMcks3eHRJTnpFc0pnYkp4QXVJeDhJUiUyQmFGUlB2UVBwQk4lMkJURFJPcTIlMkJ1NUlEM0JlUyUyQnpld0pwZ3dMR08lMkZxNGRaZTJ5ODF0bFpRNXB1WWRHM1dHT2lVZWFoeXJUcmhmT28lM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJzOHhBeXBZJTJGRzFNOW9uOTl0RzglMkYxWmdEVWxsbTlHOGkzWWw5c2EwVzVaUzRSJTJGcUhwQWMzUnlpdnpHaWg2QXJNM3ZEdEsyUiUyRmRRaHZCVjlWdzluYjN2MENUdWRvNVV4UDRYRUY2T3FyazZWdXJwU3d5eCUyQjNTVlBLa1lsJTJGNU80dFhnbFd1TklXWUE3MnJabk9UeklKRjV3dEtuc2pEZWpsZFYlMkZjZXVUd0pMT0UxT3ZmM3JhY0hXY1FtTCUyRnRjOHNiMTBHUnJKTnBhWHN5VlZEcHRXdnlrJTJCZjdBcVdvaG5ENnIzMGF6WVg5Q29XdyUyRlVFYWFud2hCOWVVSVFzcUVidjRpZGpqVkY4TTAwVkFvaW1LUGR3eGx0b3ZYJTJCNlhzdkVhbDZUY2pzVHlhSHolMkI2ODNsQjVrNEFMa3lYUWFWcWtETWJkQ3Jwd3VqRmslMkJibUZqSnVFc1lhUjg3bDNpNG9kYmxIVWZ1eE9JdlFLdGhiMXpITHpjRHJnekZHZEVPZFp6SnBIRFh6bldMcVh0N0VDNWd2TFBsOENXVCUyRnJZSXpFVTlPZm1jV2RxMFNTOCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMy5JZD0yJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4zLlJlY2VpcHRIYW5kbGU9QVFFQmpBd2VaN1dJeVdIciUyRlUlMkJiNk45a21QN2VZVFkzc0FUbXJOZllIaEF5ZkVvYjFwOVBJZFYzSlF2VEx4emVDWWFRcm9BdUlyOVdjMVJ4ZG1IYVJlUzJEMURVdWFsbnF3b0NhanJueUw5S2lLcDFOTWg2ZzNWUW5FUFl6Vng0cXlMYlBWYURENVFnZDhYMFd0VXVRdnpJbFU3WDBlckhObnlpbGp3UXE4Tm9JUSUyQnhTZjNSbnBHdyUyRjlvUTJOeGpmN3dKT0RydFBUMWt5a2IlMkZrQndKaGlwdjU4ZVk3WGxzSXc3SW1pc3lGYnprWXZxdFRLNXZ1ZGJBWlNPYlJ6amtSYTZkTE0wemYlMkZnMiUyRjRndU1tMjR0Z0p3bTlMMEMwTThNZFRZa3ZsZiUyQmNiZ1ElMkZDNGZDTjcyRGxCMUNtV3B0SVFPd3UlMkZkMlRVMFZ3WHhrR2VFMkoyRWVCUG9xT1N5QWdyOXp6MGRoNzNmcnpQaWI5c01aJTJGWFpyUUtXeiUyRjRjNVBlJTJCZDVjSjdBTTNtTXVMUlA2UXFQMjRObTZFT3dzc2ZqSzIwMW9zM09vVklleTdESSUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNC5JZD0zJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS40LlJlY2VpcHRIYW5kbGU9QVFFQndPejZEOGVucGF5bE9zRDl6UWhuajR3Rm13NjJLdEZ3NiUyQmYlMkY4ZDlaYkJzZmdhaXNWaTlrMVVHaVRHYXljNlh4YWNUTWc1V28xOWFzc1N5SmVqV0F4S3RFanNrT05vN2FiVFkwcmJjTnd5ZFBnZTd2ckdYJTJCRW1zQ3c3YVdyZyUyRkY1ZmltR0R2NzNHREcybCUyRmI2RGRaaDVtMXNtazc5ek5jZDV1YjBLaHRNTUc0JTJCUkZmdDh3OWolMkJCREs3YW53a0VVeERycGdlUGRDbnE5cWkyTUkzY1psVCUyRkVDcWk2a3J3WllGMFIyUnBDM0ZyJTJCR0lRWiUyQnIlMkZHVGFEWW85NzdjVW1SVTUwYzR2Y0VHRHF5SGZBNWhYS3RmQmE2Zm9yVTFTZUdLWnNFVGFUZ3kzb1lMbGthSEdRUTJqajJyY0glMkJ1V1dnTzUlMkJpUFNIUmhKQUZUQ2JRNTluTjdlJTJGMXV0UFlXMWRsNVF5JTJGJTJCSFglMkZ1ZHR6c3FnRyUyRkp6N3IzaCUyRiUyRjRTRFZHcnk4NENjR2xjT1A0SnloNzN0cjRRYTljaUhZbDIlMkZGOFBWTFY1dkNhd0RpTUElM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjUuSWQ9NCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNS5SZWNlaXB0SGFuZGxlPUFRRUJ4TlVyUkZ6SU12Sko0WjZWY0ElMkI1ZWhjJTJCSGJPUERwNWxYY1BkVSUyQkdURmtLSHlKbzNBcE10U29vYzRUeDc0NHN5ZmJDJTJGbnFsdnU2U1FhdjFKZkdVZ1NxYXVMMyUyRmdxalB0QUxDRTZWT0pGRlp4ZHFYY21XZWhScmN4TFMlMkI4YmlPcUJhV2pOS0JIb0lISkxNbUpxZEY5Z05nUFklMkJiMzlzcEI1OWglMkZOeFY0c05wdVdmR1B0b1ZNbHc0TzNzJTJGS1ZXcDhVcTFRbVo1Y3ZJZXZPcU80WENNdE1ycDdFcmFkelNoQTlxT2tPZkp5JTJGYlRsZSUyRlp1Y0lNdG1ZNXV5VGtHS1J2Ym9TSlAwaFkwbFZ5Z3A0RGhaWmlhWXNuRTBZOHpMZVZlMSUyQiUyQlFzU2tHN3VaVGpTUiUyRkdXRWVhUkNmbE5ndSUyRnBlODRuTXJjUnp4ck05eE9Bb2JJRlJ1Y1E1Y2pCN25sMHRKMFZuZiUyQjZKWFpWNHRxWmhiRThuNHpDNHlScmNpaldYYktWQjNXUkhibzJramVCOTlWSlFxYXplUTQlMkJjdXloZG4lMkJvWVp0UEF4MzVnJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42LklkPTUmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjYuUmVjZWlwdEhhbmRsZT1BUUVCdlNDQUpySVQxcVlqbnJKZzdpWVV6alNYQk9XU3UxZjhiSFhnbm11RHNRNVNmJTJCbWZmS1h6NHczMDYySlVTQU5LZFh2emMwcFJkRFF1TFAlMkZ0czg2Nmtwc0lmREtIb2JublRYMmk3Z0FRSUUlMkZmdXVKQUVha2poeHVRZUI2bCUyRlpEb2ZUaGlqek5EN3dmS0I2N0FvZWZrWWpJWnc5ZHIlMkJrWElmT1d6WFlrdFZJeXhFRXdOMTJSSzZMdVolMkJIWWlhVXF2VFJEWnJUcWJJMzVpTmN6MkZ5Uk1TMXJpMmJQN3BGS0IybXJlR2p5WUxKN3NVM3lBVXVWZlZEckpJVmZmeFp4RkxkVzJDc0NYeEZXd29GVGhENjJETlhVSldrWjFKSEliJTJCVElyVGVkNHRMbjFKVFVGSzR2JTJGJTJGeE1vdGI3WHE4RkVEck8yTXFTT05aVU1LeFVHa0RPRjhBa3NaVmhhYmlTVU52QTVXa2Q1UGtyM3I0c09rJTJGTVR2STVkSmQ0JTJGR3RzN2s3WkpKJTJGZnJoWURiUThuUXZmNFlGNCUyRnl0SmdCOEdNd2dUODgxSmhVbmNRJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdCYXRjaGluZy1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "716" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "43d5c298-7c61-509c-aab8-95c14c98e3da" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD40PC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+NTwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjE8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4zPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MDwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjI8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD40M2Q1YzI5OC03YzYxLTUwOWMtYWFiOC05NWMxNGM5OGUzZGE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "76c56d7b37da8b8d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:54 GMT" ], "X-Amzn-Requestid": [ "be9683d5-b217-54e3-a2ef-d48c82eda7a5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZDE3MDM3N2MtZDAyOS00NDVlLTk2NzctODNlNWYyYjI4YWE1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnFSMmRWSml6aFRJMUhxa3dFT01oWGx1VWVkYmJQZTVXQmNFdG10TUc0R1h4emw0OFk0aWQxTVB1NkNDdTFtck5PTnBWeFpxVGQrNEMvdkFPcFB1NGV3akwzeTNuVkhhUDUyQVBQakxQOHV0ZG9NK0FiVHhKejA0S3VFUkFhcGwxb2lwM3dibHpVU044K1FtZFhSWklCMFRlN3d0TVFVMis4TU1GMkFFQlowVWhSM2E2UkI4eUQ0MTVDVU5XSkdNcHBQWnFGelluNENjWldVelNra0JBMFVHekZSVUpCSGtKT053bkw3MThwTTlLTzRQOURhQ0lWbnd3anpyaG0ySTNvRS9jdXNqQTFKY0Q2SGFrUE5LaVA1cHo2ZHdrdDRVTUdJbHgwTWFqUjAzMGhHQTZvekpudGNlSm4ycE1RQ0x0OGxvUjNBVDZ3STg5MGRUY2djNGk1S1hnR2ZZZlhvNmlRSXBpL0dEZVR4Y2xNM3l0WUVWbUdlWlgwWkFqb0E0VU5heG9ackg2Y1pKelVKL1NqN3NDbDFLK3FkODJoMCtGVnNocmxzbVdKOUU9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmJlOTY4M2Q1LWIyMTctNTRlMy1hMmVmLWQ0OGM4MmVkYTdhNTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "bdf1efb29ccd779e", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:54 GMT" ], "X-Amzn-Requestid": [ "8319c8a0-e1ac-5e57-9291-9ff9d1560d11" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NTRjY2QwOWYtYTc2My00YjFkLWE1YjUtYzJmNzQ4ZGEyN2U3PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnhRV3FGWlI1eENNaUhnVUw1Vmdxb1dCdkRpczl0eURKZFZtYU14MGpvVkFWSnZiMEl0Zzc4VStHTGVpZVRzYXAxdUh6czdIcUliWVBkcFhIeTM1ZE1UVHpKNmkyVHRTdDVzY283aXFPZnh5M3kyU1pGMFN1OXdYejdNRnVuM0o0RU5uL0VNcURGYUpxbkxFZFpQWkxhSnNHTnoxUzhiZUU4M0ZSNEQ2QjBVWXNjTk42K21qN2lJT1hUNy83VkhkdFhVTCtSR0FCTVFsbTdLaTVka1lxdmlqYjRJeXN3WG5KblplNjIrd3gwRmNJbG94ZXN0T1ZwMkFJYXByZG5rQW03K2VYVXU5SldOcGk2VXpIWDVHVFdXcGdxa1ZETWVSdkNxa3NyR3hzZkdhWTdoSnpIU2xZWE1NMElkdlpqbzN2Wm9peXBLSXR5d3g3a2hScEVTYXdxNFp0dkZmWTIrRERtU0hwSVFlTWZPdVVmRTYrSTc5eFF2K0I2ODk3QnJyeC8wemhwSTlBNlJ4c1dycHgvR3E1N3haQ1ZSeGNrQWVGVG0xR05kdm8yeHM9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjgzMTljOGEwLWUxYWMtNWU1Ny05MjkxLTlmZjlkMTU2MGQxMTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "f49b918217425782", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:54 GMT" ], "X-Amzn-Requestid": [ "f9d17165-7631-5778-83fa-263c46cb9c81" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+M2Q2NmEwNTQtMDdhZi00YjIxLTk4YzEtYTA0Mzg2Y2UyYjFhPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlpmV2JQM2c5VFZBK2t6OVJXRExORkxjTXFSaFV6cGptWVl6NWU0NWI1NnhVSzYva0dCVm5BQTc3TmRPMU9CdFFmRDMvUGdLdjgydTF0ME9yVzk4SFpMb040SFpvTVNoUXMydWNtQkxqM1l5bjh6YzBiL2tUc2hCcy82aEJFUVg0R05kVU1yVk9vTUNrZGdYZmVsblRGMXRhbDJJclFuY1BhaGlkNlRQZGpIcXo1KzFuOExHdFhkL0FNTmx1YldpQ1FCYmJZME04Yitsam9xVjZKSEx4QWx4V2JzSGRBT0FDWGJvMElJMlZmQU1FcXB6ZU9rcDhSbHpQcVRDTXRPSmJjQ3l6cXNVTUtHQUtTYjg0TFY0ZGIzV3ByWFhBV05CUElrczdIaVlKN2MrUHhSNVhZVmFGWC9Tbm5QeTBMdXMram85dkxQNHlDU3N1aVhiWHZqLytYbmRRb0dySUdiQnlMYUc3RDU1eU1BYmtNV1ErY2dlT3JlSWxKVUgrYTF6MFkzWlRZWXYzVDlja3drZ1BYQlkvYm0vYTFyOXErOS9sOEdxbjZJMUZVbTQ9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmY5ZDE3MTY1LTc2MzEtNTc3OC04M2ZhLTI2M2M0NmNiOWM4MTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "f048037680cd1831", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:54 GMT" ], "X-Amzn-Requestid": [ "6495316e-bf95-5db6-b0ff-66378f6f564f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+Yzk2ODQ3ZWUtODdiOS00ZDk2LWIwMDEtOTc4ZmQ3OGQwYjQwPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlpFeE5Ia0toZ2x0RURYM2VhdEFqNENPU25ETUM1RlN2SFkxUllRZnZPdkhkcnZFYW5xSC9aditDVGNaYkcrVFVuWnVZWW85RFRIdmkyMXUra0lwdnhNWEx0WTBWdHhsdFFGdHlsUWhjWkU5Y0ZNUlI5QzFKV0lubXI5dkNxV0tNblYzaitDdDFzWmord0RUdGZEOUJqb1pVWkpXM3ZmVTlnRmxNaGhLbUtkUDg1N1RyZGJjd2g4ZDIxRlp6Q0l3UDdqNmVKSDFQTFp0YjY0ZWZRRHl5Ymt3UzViZUh0cHpVUFlYQk5YWkJqYW5TZW5tc3dkcTR2eVgxQnIyc3dSdTJjV2lSd3FXRVJqY0xhNEMvYkdqUndWTGxIZ1ZoUkg0TjRMK0NBZlhudDFwZDFYR3FjSllmWGNXWEZwTk12empoUFhjdDFPWUhjZWhwZUJsampxRWtQWXdrc0RXb1N4RGVSVUFyYUkwSFZielU3MlgreDlHVUF0R2tTRmZnR1YrL1hEazl5YWs0WmFlWnZUQnI1Uit0RUN3QlVNQS9OdEV6RU1PYnFVb2kzbmM9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjY0OTUzMTZlLWJmOTUtNWRiNi1iMGZmLTY2Mzc4ZjZmNTY0ZjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "61971be7b33ba1a4", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "882" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:54 GMT" ], "X-Amzn-Requestid": [ "9975f801-e802-5720-92f9-af58d8f8dcd9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YWM2YTI4ZTItMTAzNS00ZTU1LTgxODItNGViOTc1OGE5MjcyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnYybkJaVE5rbzFJVFF2L3FISjlRZ0E5dTVPN3A0bjRuT2QrbFI3YTBSNm9ST3NFZnJ2dnJ6L01lVDBENHVXTGJoSWNJdHNNOE5UdTQyN3pobEVaa0RMbE4xY1lhLzZ1R25VR3l1c1VUdkhyV1VKSHgxMUtjSDZWRTZXY1F1NHlxakRxZUZ3WnMvYUdzblpKT3ZGU25ZYTdHcE9kdzVmVHJ0b045MGVsMWN0MWgvRzQxbGVtVWlzRlk5aWdoNFpTMmtMQ0NUb0xpNi9YNG80MHFUZFg4Rm5jSmhoNndIN1hiN0p3dUdhZElGOE01WU1udWxzTloyRVk2QXc3dDVlZVJpelJ6MitwWEhaSUZ4VlQ3MFB5ZGcrRFpIQVRmMzdGWEF4N2x6NGFDUjhvRjVHUjltUEVNSzdSazFKdlZnM2VZK1pLWUdBc2NMS0FjenhoYnJRa2RYcEJVVXZuREtzSE4rQm54OHQydkpkNWNaakNnVTBISzlIL2ZWNm1lYmJJMXdYdWFsblYrRHh0YkpVcUxEQi9GYTVYL0oxNm4zYmxycVlxM1N6QThpeVU9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mQm9keT48Qm9keT5oZWxsbyB3b3JsZDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjk5NzVmODAxLWU4MDItNTcyMC05MmY5LWFmNThkOGY4ZGNkOTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "b6dbde190be30ecc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3426" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQk1LNiUyQm92YmVKTzVzVGVhajVWOExvViUyRnhLWnpWMm56b1I5bDRhanYlMkZ0VDZPNFQwMW5BdzN2NmQ5TzZsVWhrZFlQekwlMkJ3Y3V1ZklKMW1EcEpJTE1Na0lkZkpMRkN2Szk1dG1sWVY4aEFkSFJYdlFOcTFBcjVNbU9xcDRlUWw1d3lyeWpqaWRuSzd6UkhuSjRvaHhGNENEUnlCdEhyUXUlMkYlMkJvbVExWiUyRm0lMkJBWVpGWnRnNk1XV1BMQnlvc1Q1SFk1WWRGRVZmZzBTdFBWT3ljQyUyQlNlbHlVVmlFWFZLSlRvQldtMEFOQyUyRjlLTDdOS0FPWHQ0T2pXZFRMVlVjTXFFdWM0cnA1NmtlcDdpMHI5NGlHNEwxVW1NSFJyZkdBQmNxN2Zta2ZxaFIxTG5rbW9nTUJDWE1McTJvQ0Y3NU1sdk9qVlVFRjJPOURrZiUyRnNjcXFhdXB1WVFDSSUyQkxXUHdHcExPZW1QOUxJSUVjYndQd25HJTJGS1hXMUFmN3cwd2dEMyUyQno3bHhaelFod3ZDZDJUczdSQTAlMkZVRHJMekt0dUpWQTNqc2FnTXBtTklIQld4aEklM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJxUjJkVkppemhUSTFIcWt3RU9NaFhsdVVlZGJiUGU1V0JjRXRtdE1HNEdYeHpsNDhZNGlkMU1QdTZDQ3UxbXJOT05wVnhacVRkJTJCNEMlMkZ2QU9wUHU0ZXdqTDN5M25WSGFQNTJBUFBqTFA4dXRkb00lMkJBYlR4SnowNEt1RVJBYXBsMW9pcDN3Ymx6VVNOOCUyQlFtZFhSWklCMFRlN3d0TVFVMiUyQjhNTUYyQUVCWjBVaFIzYTZSQjh5RDQxNUNVTldKR01wcFBacUZ6WW40Q2NaV1V6U2trQkEwVUd6RlJVSkJIa0pPTnduTDcxOHBNOUtPNFA5RGFDSVZud3dqenJobTJJM29FJTJGY3VzakExSmNENkhha1BOS2lQNXB6NmR3a3Q0VU1HSWx4ME1halIwMzBoR0E2b3pKbnRjZUpuMnBNUUNMdDhsb1IzQVQ2d0k4OTBkVGNnYzRpNUtYZ0dmWWZYbzZpUUlwaSUyRkdEZVR4Y2xNM3l0WUVWbUdlWlgwWkFqb0E0VU5heG9ackg2Y1pKelVKJTJGU2o3c0NsMUslMkJxZDgyaDAlMkJGVnNocmxzbVdKOUUlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjMuSWQ9MiZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMy5SZWNlaXB0SGFuZGxlPUFRRUJ4UVdxRlpSNXhDTWlIZ1VMNVZncW9XQnZEaXM5dHlESmRWbWFNeDBqb1ZBVkp2YjBJdGc3OFUlMkJHTGVpZVRzYXAxdUh6czdIcUliWVBkcFhIeTM1ZE1UVHpKNmkyVHRTdDVzY283aXFPZnh5M3kyU1pGMFN1OXdYejdNRnVuM0o0RU5uJTJGRU1xREZhSnFuTEVkWlBaTGFKc0dOejFTOGJlRTgzRlI0RDZCMFVZc2NOTjYlMkJtajdpSU9YVDclMkY3VkhkdFhVTCUyQlJHQUJNUWxtN0tpNWRrWXF2aWpiNEl5c3dYbkpuWmU2MiUyQnd4MEZjSWxveGVzdE9WcDJBSWFwcmRua0FtNyUyQmVYVXU5SldOcGk2VXpIWDVHVFdXcGdxa1ZETWVSdkNxa3NyR3hzZkdhWTdoSnpIU2xZWE1NMElkdlpqbzN2Wm9peXBLSXR5d3g3a2hScEVTYXdxNFp0dkZmWTIlMkJERG1TSHBJUWVNZk91VWZFNiUyQkk3OXhRdiUyQkI2ODk3QnJyeCUyRjB6aHBJOUE2UnhzV3JweCUyRkdxNTd4WkNWUnhja0FlRlRtMUdOZHZvMnhzJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS40LklkPTMmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjQuUmVjZWlwdEhhbmRsZT1BUUVCWmZXYlAzZzlUVkElMkJrejlSV0RMTkZMY01xUmhVenBqbVlZejVlNDViNTZ4VUs2JTJGa0dCVm5BQTc3TmRPMU9CdFFmRDMlMkZQZ0t2ODJ1MXQwT3JXOThIWkxvTjRIWm9NU2hRczJ1Y21CTGozWXluOHpjMGIlMkZrVHNoQnMlMkY2aEJFUVg0R05kVU1yVk9vTUNrZGdYZmVsblRGMXRhbDJJclFuY1BhaGlkNlRQZGpIcXo1JTJCMW44TEd0WGQlMkZBTU5sdWJXaUNRQmJiWTBNOGIlMkJsam9xVjZKSEx4QWx4V2JzSGRBT0FDWGJvMElJMlZmQU1FcXB6ZU9rcDhSbHpQcVRDTXRPSmJjQ3l6cXNVTUtHQUtTYjg0TFY0ZGIzV3ByWFhBV05CUElrczdIaVlKN2MlMkJQeFI1WFlWYUZYJTJGU25uUHkwTHVzJTJCam85dkxQNHlDU3N1aVhiWHZqJTJGJTJCWG5kUW9HcklHYkJ5TGFHN0Q1NXlNQWJrTVdRJTJCY2dlT3JlSWxKVUglMkJhMXowWTNaVFlZdjNUOWNrd2tnUFhCWSUyRmJtJTJGYTFyOXElMkI5JTJGbDhHcW42STFGVW00JTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS41LklkPTQmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjUuUmVjZWlwdEhhbmRsZT1BUUVCWkV4TkhrS2hnbHRFRFgzZWF0QWo0Q09TbkRNQzVGU3ZIWTFSWVFmdk92SGRydkVhbnFIJTJGWnYlMkJDVGNaYkclMkJUVW5adVlZbzlEVEh2aTIxdSUyQmtJcHZ4TVhMdFkwVnR4bHRRRnR5bFFoY1pFOWNGTVJSOUMxSldJbm1yOXZDcVdLTW5WM2olMkJDdDFzWmolMkJ3RFR0ZkQ5QmpvWlVaSlczdmZVOWdGbE1oaEttS2RQODU3VHJkYmN3aDhkMjFGWnpDSXdQN2o2ZUpIMVBMWnRiNjRlZlFEeXlia3dTNWJlSHRwelVQWVhCTlhaQmphblNlbm1zd2RxNHZ5WDFCcjJzd1J1MmNXaVJ3cVdFUmpjTGE0QyUyRmJHalJ3VkxsSGdWaFJINE40TCUyQkNBZlhudDFwZDFYR3FjSllmWGNXWEZwTk12empoUFhjdDFPWUhjZWhwZUJsampxRWtQWXdrc0RXb1N4RGVSVUFyYUkwSFZielU3MlglMkJ4OUdVQXRHa1NGZmdHViUyQiUyRlhEazl5YWs0WmFlWnZUQnI1UiUyQnRFQ3dCVU1BJTJGTnRFekVNT2JxVW9pM25jJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42LklkPTUmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjYuUmVjZWlwdEhhbmRsZT1BUUVCdjJuQlpUTmtvMUlUUXYlMkZxSEo5UWdBOXU1TzdwNG40bk9kJTJCbFI3YTBSNm9ST3NFZnJ2dnJ6JTJGTWVUMEQ0dVdMYmhJY0l0c004TlR1NDI3emhsRVprRExsTjFjWWElMkY2dUduVUd5dXNVVHZIcldVSkh4MTFLY0g2VkU2V2NRdTR5cWpEcWVGd1pzJTJGYUdzblpKT3ZGU25ZYTdHcE9kdzVmVHJ0b045MGVsMWN0MWglMkZHNDFsZW1VaXNGWTlpZ2g0WlMya0xDQ1RvTGk2JTJGWDRvNDBxVGRYOEZuY0poaDZ3SDdYYjdKd3VHYWRJRjhNNVlNbnVsc05aMkVZNkF3N3Q1ZWVSaXpSejIlMkJwWEhaSUZ4VlQ3MFB5ZGclMkJEWkhBVGYzN0ZYQXg3bHo0YUNSOG9GNUdSOW1QRU1LN1JrMUp2VmczZVklMkJaS1lHQXNjTEtBY3p4aGJyUWtkWHBCVVV2bkRLc0hOJTJCQm54OHQydkpkNWNaakNnVTBISzlIJTJGZlY2bWViYkkxd1h1YWxuViUyQkR4dGJKVXFMREIlMkZGYTVYJTJGSjE2bjNibHJxWXEzU3pBOGl5VSUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3QmF0Y2hpbmctc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "716" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:54 GMT" ], "X-Amzn-Requestid": [ "e6b48eed-46e1-50c0-973a-d9b4761b6b39" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4yPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MDwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjM8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD40PC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MTwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjU8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5lNmI0OGVlZC00NmUxLTUwYzAtOTczYS1kOWI0NzYxYjZiMzk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "2f7f61d3135d08e3", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0JhdGNoaW5nLXRvcC0xJTNBMjM4OGY5MDYtZTM4ZC00NTM3LWI1NDgtMGRmMDFhMjU5OTdmJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:53 GMT" ], "X-Amzn-Requestid": [ "82a2d24e-3f99-5632-a391-85170f6378a9" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD44MmEyZDI0ZS0zZjk5LTU2MzItYTM5MS04NTE3MGY2Mzc4YTk8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "98ed576f9b5736e1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "131" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdCYXRjaGluZy1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:54 GMT" ], "X-Amzn-Requestid": [ "33f2d9e7-2d97-5afb-80af-8ebe1d6d8102" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zM2YyZDllNy0yZDk3LTVhZmItODBhZi04ZWJlMWQ2ZDgxMDI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "57628117fcbfec7d", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "117" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3QmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:39:54 GMT" ], "X-Amzn-Requestid": [ "93d20dea-07af-58ff-b36f-5ab33755a664" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD45M2QyMGRlYS0wN2FmLTU4ZmYtYjM2Zi01YWIzMzc1NWE2NjQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestCancelSendReceive.replay000066400000000000000000000341461367004507500332060ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUsK5lqZP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "4b509ee4a660a3fd", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "77" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdDYW5jZWxTZW5kUmVjZWl2ZS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "341" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:32 GMT" ], "X-Amzn-Requestid": [ "2b3f82ab-9026-52cc-ad55-d5f2a04bfd38" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3Q2FuY2VsU2VuZFJlY2VpdmUtdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjJiM2Y4MmFiLTkwMjYtNTJjYy1hZDU1LWQ1ZjJhMDRiZmQzODwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "6c3fe2a5bddd8749", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "82" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd0NhbmNlbFNlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "354" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:33 GMT" ], "X-Amzn-Requestid": [ "760405de-5530-5de2-a0c8-5287655d57a2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdDYW5jZWxTZW5kUmVjZWl2ZS1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjc2MDQwNWRlLTU1MzAtNWRlMi1hMGM4LTUyODc2NTVkNTdhMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "a921753b8bc8f397", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "172" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0NhbmNlbFNlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "406" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:33 GMT" ], "X-Amzn-Requestid": [ "30413a32-c782-579e-8e1f-6d6bf7efddde" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd0NhbmNlbFNlbmRSZWNlaXZlLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjMwNDEzYTMyLWM3ODItNTc5ZS04ZTFmLTZkNmJmN2VmZGRkZTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "990d86f3bdd6f201", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "681" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdDYW5jZWxTZW5kUmVjZWl2ZS1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3Q2FuY2VsU2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:33 GMT" ], "X-Amzn-Requestid": [ "552d46fd-3cec-59e8-9ad7-11a40c8193a8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NTUyZDQ2ZmQtM2NlYy01OWU4LTlhZDctMTFhNDBjODE5M2E4PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "0b6d908583a61476", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "298" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0NhbmNlbFNlbmRSZWNlaXZlLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0NhbmNlbFNlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "384" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:33 GMT" ], "X-Amzn-Requestid": [ "63be906c-9804-5c6b-8603-c735a869939f" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3Q2FuY2VsU2VuZFJlY2VpdmUtdG9wLTE6NDYxNmYxYjctMWYwMi00MGViLTlmN2ItN2U4NzRjOGQ1MDcwPC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjYzYmU5MDZjLTk4MDQtNWM2Yi04NjAzLWM3MzVhODY5OTM5ZjwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "c95a57707aae468f", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "172" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0NhbmNlbFNlbmRSZWNlaXZlLXRvcC0xJTNBNDYxNmYxYjctMWYwMi00MGViLTlmN2ItN2U4NzRjOGQ1MDcwJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:33 GMT" ], "X-Amzn-Requestid": [ "4ba85a3b-bf26-50b3-afee-0d628f4bbf47" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD40YmE4NWEzYi1iZjI2LTUwYjMtYWZlZS0wZDYyOGY0YmJmNDc8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "4867b74c1c8e2e0b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "140" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdDYW5jZWxTZW5kUmVjZWl2ZS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:34 GMT" ], "X-Amzn-Requestid": [ "ca21fdba-2844-53ed-8f8f-aae3182a29ad" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5jYTIxZmRiYS0yODQ0LTUzZWQtOGY4Zi1hYWUzMTgyYTI5YWQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "db675ac33e26ec23", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "126" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3Q2FuY2VsU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:33 GMT" ], "X-Amzn-Requestid": [ "77ad0005-ee67-590c-897f-575cde09a6f8" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43N2FkMDAwNS1lZTY3LTU5MGMtODk3Zi01NzVjZGUwOWE2Zjg8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestDoubleAck.replay000066400000000000000000001162331367004507500315330ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUqEGBsmP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "0ef4b42273a3070b", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "69" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdEb3VibGVBY2stdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:29 GMT" ], "X-Amzn-Requestid": [ "7a9e2d56-d95b-558b-a670-7a0fe9312c7e" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3RG91YmxlQWNrLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43YTllMmQ1Ni1kOTViLTU1OGItYTY3MC03YTBmZTkzMTJjN2U8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "3f279367fb11b19c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "74" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd0RvdWJsZUFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "346" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:30 GMT" ], "X-Amzn-Requestid": [ "68528f70-d443-52d2-af9a-d829e42982b3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdEb3VibGVBY2stc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD42ODUyOGY3MC1kNDQzLTUyZDItYWY5YS1kODI5ZTQyOTgyYjM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "ff11e64810be7f8c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "164" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0RvdWJsZUFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "398" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:31 GMT" ], "X-Amzn-Requestid": [ "1396f73c-8da4-5273-a801-a065bdcfb212" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd0RvdWJsZUFjay1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4xMzk2ZjczYy04ZGE0LTUyNzMtYTgwMS1hMDY1YmRjZmIyMTI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "64edac4fdc349134", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "665" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdEb3VibGVBY2stc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0RvdWJsZUFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:31 GMT" ], "X-Amzn-Requestid": [ "8e8c95b3-afd3-52f9-bc96-c2ea9fb8a298" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OGU4Yzk1YjMtYWZkMy01MmY5LWJjOTYtYzJlYTlmYjhhMjk4PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "c5ef08afdd783404", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "282" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0RvdWJsZUFjay1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdEb3VibGVBY2stdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "376" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:30 GMT" ], "X-Amzn-Requestid": [ "716d7a4d-654a-5864-97b5-2d1455214191" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3RG91YmxlQWNrLXRvcC0xOmE5YWM0N2M4LWJjZGMtNGYxMS04YTVlLTk1MGUxNGYzNGEwZDwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43MTZkN2E0ZC02NTRhLTU4NjQtOTdiNS0yZDE0NTUyMTQxOTE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "72b62cca8fe24d25", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "124" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0wJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3RG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:30 GMT" ], "X-Amzn-Requestid": [ "5c7aa58a-0dc5-598f-bcd9-f2d33daea07a" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjJiNTVlMDVmLWU4OWUtNTBmZS05MDgyLWI3MDZkOGY1NzkwYjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NWM3YWE1OGEtMGRjNS01OThmLWJjZDktZjJkMzNkYWVhMDdhPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "f315c083eac35bd2", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "124" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0xJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3RG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:30 GMT" ], "X-Amzn-Requestid": [ "56b4be5e-3c3c-566d-90de-e9070c57bf98" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjkxMjU4ZmUxLWM0N2UtNTI5ZS05NTdhLWQ4YjhmNDE1M2I2YjwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NTZiNGJlNWUtM2MzYy01NjZkLTkwZGUtZTkwNzBjNTdiZjk4PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "d7967e93849faeba", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "124" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0yJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3RG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:31 GMT" ], "X-Amzn-Requestid": [ "34dac22f-c54e-5b13-8e37-9576f525d2e6" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmU3OTcwOTVlLTU4NWQtNTg2MS05YmUyLTVlMDc2ODM2ZDE5NDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MzRkYWMyMmYtYzU0ZS01YjEzLThlMzctOTU3NmY1MjVkMmU2PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "53ef267631ba4f9d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "184" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MyZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3RG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "872" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:31 GMT" ], "X-Amzn-Requestid": [ "9026cc8a-4480-5d9c-9da6-9bd374eb8dfd" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YzAxMWY1NjAtYTVkNi00ZGVlLWE2ZDgtYzAxMzA5NzMyODJmPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjBSVGw3Q1lyeDhpUzZicDJzTkJpMWpiYVdBNmFYTUd3TEdkQldObzBhZU5hd3hjUGpRbEp3QmdsV3pDMDE4d09wK3dhZitHTS8wTnFDay9xWXprd1RnaFlyL1B1NXZQeFpRMjhZcy85Sklqb2dtVmdTY3lXZ0tPK1NEZVd6MUVKQjFyZjA4bjVEak5mWU95Y1Y2NHNoeWlwYkdaNk9abGVXUUU1Q3VXRC9LQUxiOGJja3Y0Q1NSNHBUS3JhTnpQbnNXb3lMRHJuQlRkMGFLY2tQY2lPdWtCWnlUK29JTFM4NTVoRGh4bENyMzcvU0FNc2l4ZngrdTlmcXFPOEtyczg1NE81WEIvdncwc0I4TVRQSWZIVjBQMkZEYklPMkNiK1ZIenR5UmpDMGJydnlMMXFSVXJ0dlhCTXExMzRmZ1B4aExacmhBOEg4NEVtdWw4Mm43S2NMOHFIbVZwZ000SU9TSkpLZG5jNnZhMEhBS1VRcTNaV2VuWXBrdkpBeXNMcXN1ZitWSjRCOEU3ZHlFSG9UWi95QlB3aHk4SU5tc3lBUW1UMUR4Q2dudHc9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI8L01ENU9mQm9keT48Qm9keT4xPC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OTAyNmNjOGEtNDQ4MC01ZDljLTlkYTYtOWJkMzc0ZWI4ZGZkPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "1c842dec7bf99ef5", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "184" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MyZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3RG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "872" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:31 GMT" ], "X-Amzn-Requestid": [ "e3771ce6-487a-5dc3-99b1-4bbf7811eda2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZTc3NDgzMDQtOTI2Zi00NTViLTg1NWEtNDRlZTdlODNkYWYzPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnhEK0ZSTi82R0VWYkl6WXpMdXd5Tmx2WDkvU3VSbmZXV1dML0JWMUZBanVteEwrSGh5YWQzZGtSU2pnN09NRVhlZkh6U212S3MyY3ZvWGtuTE1HNHo3MGdFZDV1cGJ4anRsVGZVWjZSQ2RpY0NNQjdBanpNSjdmeGNaYnhINmp6VUc2VFZsVTdlSXM2c0VlcStCUFdFMENXM3J3dStBS09MaVdoeVR5Ny91bWlBVG9ZV3pHZ1ZzeHlMWmFuZ0U3Q0N1R2lXcUFyQlByUWkvT3RoZmYzVTI3a21ubWFtZXNLZnZYcGRONWdhMG1PSE9jNWF2N3hzSityamt0TGo3SmEvZnF3cGNTR1QrY0FJdWpGaGUxSVhWTVhCbUZ5dVZSVU0yY3ZubnpHTUhsekYrSzl6cm1iZ3haWjZBOWNuYmZjOHdwN0E4OUlhcTEzRmUyQkNXamFyNGJLQ1ExdC9IdHZuYnhUd0J5ZkZDUGdiUEs5aFErM294WEpMSE1DVGVKN0U3a3ByREQwbTl3Nit2SkRkSlRIdnVpdCtkUWVVWlJXV3YrQjdHMFZtczg9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+Y2ZjZDIwODQ5NWQ1NjVlZjY2ZTdkZmY5Zjk4NzY0ZGE8L01ENU9mQm9keT48Qm9keT4wPC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZTM3NzFjZTYtNDg3YS01ZGMzLTk5YjEtNGJiZjc4MTFlZGEyPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "6318c4010220cc53", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "184" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MyZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3RG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "872" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:31 GMT" ], "X-Amzn-Requestid": [ "8ffa9386-7100-586a-b1a0-c4df416ba80b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZWUxMGEyOTgtYjEzMy00YjIxLWI5MDAtZTRlZGMxNWNhODRiPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnZwMU5YS0RBTW82d0p6cGNVS29razQrWHhYY0E4b2V1WXVkZURDbi9odjVRLzc5VUlaK0g0OFk3bzN0eWgxSjlwV2VxZUM0dkV4SDJLVUtpOWNjMXVTMDJYdlMyVEcyYitPajJkWkJHbzBqYlBEQ2JXWmxMRFByc05semQvd0Nmd05wVFUyUFFUWFNJWHpnd2JzWFdUenJFQmdwTWRPalhWWGRoT0p3QlpnM1pDa05ZVG5JVEpvd3V5Y3FyL09RZHVxaHNtV0YrVXc2ZFprUWh1RVR5dG94MmZKTVZwRDhsdng1bityMWtOMVdIWnd1VzN3OEF2R3RIUEp6UWF6emZWdXhSN2ZqczFuMC8vQnZNR3dnZSt1SEVUbzBSN1VlRTdrTGF5bHFpWHpPeUJaejBLdFRpZWlZdWNBd1d5VXhTYWs2WEhZbVpjSkhQRWlJbS9UZ29nR3VUTzNCd3ZFMVY4dGtBUlRrN2MvK29ZMTRBa05VeGorSzBJUW1TSFFoZk1BVWo0OGludXkvL3pZZG45QTVQcTFqOG83V3BSTDR4NDcxek1ibkFabFU9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzgxZTcyOGQ5ZDRjMmY2MzZmMDY3Zjg5Y2MxNDg2MmM8L01ENU9mQm9keT48Qm9keT4yPC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OGZmYTkzODYtNzEwMC01ODZhLWIxYTAtYzRkZjQxNmJhODBiPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "81ff534a08b13be1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1245" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjBSVGw3Q1lyeDhpUzZicDJzTkJpMWpiYVdBNmFYTUd3TEdkQldObzBhZU5hd3hjUGpRbEp3QmdsV3pDMDE4d09wJTJCd2FmJTJCR00lMkYwTnFDayUyRnFZemt3VGdoWXIlMkZQdTV2UHhaUTI4WXMlMkY5Sklqb2dtVmdTY3lXZ0tPJTJCU0RlV3oxRUpCMXJmMDhuNURqTmZZT3ljVjY0c2h5aXBiR1o2T1psZVdRRTVDdVdEJTJGS0FMYjhiY2t2NENTUjRwVEtyYU56UG5zV295TERybkJUZDBhS2NrUGNpT3VrQlp5VCUyQm9JTFM4NTVoRGh4bENyMzclMkZTQU1zaXhmeCUyQnU5ZnFxTzhLcnM4NTRPNVhCJTJGdncwc0I4TVRQSWZIVjBQMkZEYklPMkNiJTJCVkh6dHlSakMwYnJ2eUwxcVJVcnR2WEJNcTEzNGZnUHhoTFpyaEE4SDg0RW11bDgybjdLY0w4cUhtVnBnTTRJT1NKSktkbmM2dmEwSEFLVVFxM1pXZW5ZcGt2SkF5c0xxc3VmJTJCVko0QjhFN2R5RUhvVFolMkZ5QlB3aHk4SU5tc3lBUW1UMUR4Q2dudHclM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJ4RCUyQkZSTiUyRjZHRVZiSXpZekx1d3lObHZYOSUyRlN1Um5mV1dXTCUyRkJWMUZBanVteEwlMkJIaHlhZDNka1JTamc3T01FWGVmSHpTbXZLczJjdm9Ya25MTUc0ejcwZ0VkNXVwYnhqdGxUZlVaNlJDZGljQ01CN0Fqek1KN2Z4Y1pieEg2anpVRzZUVmxVN2VJczZzRWVxJTJCQlBXRTBDVzNyd3UlMkJBS09MaVdoeVR5NyUyRnVtaUFUb1lXekdnVnN4eUxaYW5nRTdDQ3VHaVdxQXJCUHJRaSUyRk90aGZmM1UyN2ttbm1hbWVzS2Z2WHBkTjVnYTBtT0hPYzVhdjd4c0olMkJyamt0TGo3SmElMkZmcXdwY1NHVCUyQmNBSXVqRmhlMUlYVk1YQm1GeXVWUlVNMmN2bm56R01IbHpGJTJCSzl6cm1iZ3haWjZBOWNuYmZjOHdwN0E4OUlhcTEzRmUyQkNXamFyNGJLQ1ExdCUyRkh0dm5ieFR3QnlmRkNQZ2JQSzloUSUyQjNveFhKTEhNQ1RlSjdFN2twckREMG05dzYlMkJ2SkRkSlRIdnVpdCUyQmRRZVVaUldXdiUyQkI3RzBWbXM4JTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdEb3VibGVBY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "424" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:32 GMT" ], "X-Amzn-Requestid": [ "4d31ed24-d8fb-589d-ae95-ba7de89768fc" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MTwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjRkMzFlZDI0LWQ4ZmItNTg5ZC1hZTk1LWJhN2RlODk3NjhmYzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlPg==" } }, { "ID": "61bddd3d60dd1900", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1245" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjBSVGw3Q1lyeDhpUzZicDJzTkJpMWpiYVdBNmFYTUd3TEdkQldObzBhZU5hd3hjUGpRbEp3QmdsV3pDMDE4d09wJTJCd2FmJTJCR00lMkYwTnFDayUyRnFZemt3VGdoWXIlMkZQdTV2UHhaUTI4WXMlMkY5Sklqb2dtVmdTY3lXZ0tPJTJCU0RlV3oxRUpCMXJmMDhuNURqTmZZT3ljVjY0c2h5aXBiR1o2T1psZVdRRTVDdVdEJTJGS0FMYjhiY2t2NENTUjRwVEtyYU56UG5zV295TERybkJUZDBhS2NrUGNpT3VrQlp5VCUyQm9JTFM4NTVoRGh4bENyMzclMkZTQU1zaXhmeCUyQnU5ZnFxTzhLcnM4NTRPNVhCJTJGdncwc0I4TVRQSWZIVjBQMkZEYklPMkNiJTJCVkh6dHlSakMwYnJ2eUwxcVJVcnR2WEJNcTEzNGZnUHhoTFpyaEE4SDg0RW11bDgybjdLY0w4cUhtVnBnTTRJT1NKSktkbmM2dmEwSEFLVVFxM1pXZW5ZcGt2SkF5c0xxc3VmJTJCVko0QjhFN2R5RUhvVFolMkZ5QlB3aHk4SU5tc3lBUW1UMUR4Q2dudHclM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJ4RCUyQkZSTiUyRjZHRVZiSXpZekx1d3lObHZYOSUyRlN1Um5mV1dXTCUyRkJWMUZBanVteEwlMkJIaHlhZDNka1JTamc3T01FWGVmSHpTbXZLczJjdm9Ya25MTUc0ejcwZ0VkNXVwYnhqdGxUZlVaNlJDZGljQ01CN0Fqek1KN2Z4Y1pieEg2anpVRzZUVmxVN2VJczZzRWVxJTJCQlBXRTBDVzNyd3UlMkJBS09MaVdoeVR5NyUyRnVtaUFUb1lXekdnVnN4eUxaYW5nRTdDQ3VHaVdxQXJCUHJRaSUyRk90aGZmM1UyN2ttbm1hbWVzS2Z2WHBkTjVnYTBtT0hPYzVhdjd4c0olMkJyamt0TGo3SmElMkZmcXdwY1NHVCUyQmNBSXVqRmhlMUlYVk1YQm1GeXVWUlVNMmN2bm56R01IbHpGJTJCSzl6cm1iZ3haWjZBOWNuYmZjOHdwN0E4OUlhcTEzRmUyQkNXamFyNGJLQ1ExdCUyRkh0dm5ieFR3QnlmRkNQZ2JQSzloUSUyQjNveFhKTEhNQ1RlSjdFN2twckREMG05dzYlMkJ2SkRkSlRIdnVpdCUyQmRRZVVaUldXdiUyQkI3RzBWbXM4JTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdEb3VibGVBY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "424" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:32 GMT" ], "X-Amzn-Requestid": [ "48a6fcdf-b3f1-5362-936b-ab86839d8303" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MTwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjQ4YTZmY2RmLWIzZjEtNTM2Mi05MzZiLWFiODY4MzlkODMwMzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlPg==" } }, { "ID": "f15e162aa99761fb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "2060" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjBSVGw3Q1lyeDhpUzZicDJzTkJpMWpiYVdBNmFYTUd3TEdkQldObzBhZU5hd3hjUGpRbEp3QmdsV3pDMDE4d09wJTJCd2FmJTJCR00lMkYwTnFDayUyRnFZemt3VGdoWXIlMkZQdTV2UHhaUTI4WXMlMkY5Sklqb2dtVmdTY3lXZ0tPJTJCU0RlV3oxRUpCMXJmMDhuNURqTmZZT3ljVjY0c2h5aXBiR1o2T1psZVdRRTVDdVdEJTJGS0FMYjhiY2t2NENTUjRwVEtyYU56UG5zV295TERybkJUZDBhS2NrUGNpT3VrQlp5VCUyQm9JTFM4NTVoRGh4bENyMzclMkZTQU1zaXhmeCUyQnU5ZnFxTzhLcnM4NTRPNVhCJTJGdncwc0I4TVRQSWZIVjBQMkZEYklPMkNiJTJCVkh6dHlSakMwYnJ2eUwxcVJVcnR2WEJNcTEzNGZnUHhoTFpyaEE4SDg0RW11bDgybjdLY0w4cUhtVnBnTTRJT1NKSktkbmM2dmEwSEFLVVFxM1pXZW5ZcGt2SkF5c0xxc3VmJTJCVko0QjhFN2R5RUhvVFolMkZ5QlB3aHk4SU5tc3lBUW1UMUR4Q2dudHclM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlZpc2liaWxpdHlUaW1lb3V0PTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4yLklkPTEmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4yLlJlY2VpcHRIYW5kbGU9QVFFQnhEJTJCRlJOJTJGNkdFVmJJell6THV3eU5sdlg5JTJGU3VSbmZXV1dMJTJGQlYxRkFqdW14TCUyQkhoeWFkM2RrUlNqZzdPTUVYZWZIelNtdktzMmN2b1hrbkxNRzR6NzBnRWQ1dXBieGp0bFRmVVo2UkNkaWNDTUI3QWp6TUo3ZnhjWmJ4SDZqelVHNlRWbFU3ZUlzNnNFZXElMkJCUFdFMENXM3J3dSUyQkFLT0xpV2h5VHk3JTJGdW1pQVRvWVd6R2dWc3h5TFphbmdFN0NDdUdpV3FBckJQclFpJTJGT3RoZmYzVTI3a21ubWFtZXNLZnZYcGRONWdhMG1PSE9jNWF2N3hzSiUyQnJqa3RMajdKYSUyRmZxd3BjU0dUJTJCY0FJdWpGaGUxSVhWTVhCbUZ5dVZSVU0yY3ZubnpHTUhsekYlMkJLOXpybWJneFpaNkE5Y25iZmM4d3A3QTg5SWFxMTNGZTJCQ1dqYXI0YktDUTF0JTJGSHR2bmJ4VHdCeWZGQ1BnYlBLOWhRJTJCM294WEpMSE1DVGVKN0U3a3ByREQwbTl3NiUyQnZKRGRKVEh2dWl0JTJCZFFlVVpSV1d2JTJCQjdHMFZtczglM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4yLlZpc2liaWxpdHlUaW1lb3V0PTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4zLklkPTImQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4zLlJlY2VpcHRIYW5kbGU9QVFFQnZwMU5YS0RBTW82d0p6cGNVS29razQlMkJYeFhjQThvZXVZdWRlRENuJTJGaHY1USUyRjc5VUlaJTJCSDQ4WTdvM3R5aDFKOXBXZXFlQzR2RXhIMktVS2k5Y2MxdVMwMlh2UzJURzJiJTJCT2oyZFpCR28wamJQRENiV1psTERQcnNObHpkJTJGd0Nmd05wVFUyUFFUWFNJWHpnd2JzWFdUenJFQmdwTWRPalhWWGRoT0p3QlpnM1pDa05ZVG5JVEpvd3V5Y3FyJTJGT1FkdXFoc21XRiUyQlV3NmRaa1FodUVUeXRveDJmSk1WcEQ4bHZ4NW4lMkJyMWtOMVdIWnd1VzN3OEF2R3RIUEp6UWF6emZWdXhSN2ZqczFuMCUyRiUyRkJ2TUd3Z2UlMkJ1SEVUbzBSN1VlRTdrTGF5bHFpWHpPeUJaejBLdFRpZWlZdWNBd1d5VXhTYWs2WEhZbVpjSkhQRWlJbSUyRlRnb2dHdVRPM0J3dkUxVjh0a0FSVGs3YyUyRiUyQm9ZMTRBa05VeGolMkJLMElRbVNIUWhmTUFVajQ4aW51eSUyRiUyRnpZZG45QTVQcTFqOG83V3BSTDR4NDcxek1ibkFabFUlM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4zLlZpc2liaWxpdHlUaW1lb3V0PTAmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0RvdWJsZUFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "839" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:32 GMT" ], "X-Amzn-Requestid": [ "88728492-594e-5c7d-a6a1-d3cb69226c1c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4yPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48QmF0Y2hSZXN1bHRFcnJvckVudHJ5PjxJZD4wPC9JZD48Q29kZT5SZWNlaXB0SGFuZGxlSXNJbnZhbGlkPC9Db2RlPjxNZXNzYWdlPk1lc3NhZ2UgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGF2YWlsYWJsZSBmb3IgdmlzaWJpbGl0eSB0aW1lb3V0IGNoYW5nZTwvTWVzc2FnZT48U2VuZGVyRmF1bHQ+dHJ1ZTwvU2VuZGVyRmF1bHQ+PC9CYXRjaFJlc3VsdEVycm9yRW50cnk+PEJhdGNoUmVzdWx0RXJyb3JFbnRyeT48SWQ+MTwvSWQ+PENvZGU+UmVjZWlwdEhhbmRsZUlzSW52YWxpZDwvQ29kZT48TWVzc2FnZT5NZXNzYWdlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhdmFpbGFibGUgZm9yIHZpc2liaWxpdHkgdGltZW91dCBjaGFuZ2U8L01lc3NhZ2U+PFNlbmRlckZhdWx0PnRydWU8L1NlbmRlckZhdWx0PjwvQmF0Y2hSZXN1bHRFcnJvckVudHJ5PjwvQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjg4NzI4NDkyLTU5NGUtNWM3ZC1hNmExLWQzY2I2OTIyNmMxYzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZT4=" } }, { "ID": "390768679ccd5f36", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "184" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3RG91YmxlQWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "872" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:32 GMT" ], "X-Amzn-Requestid": [ "ac2e94a0-e4da-5fdb-bd07-c3f9d4b69fba" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZWUxMGEyOTgtYjEzMy00YjIxLWI5MDAtZTRlZGMxNWNhODRiPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnAzL253WHE0b01NWkJ3Z0l1SHNaVmxXSmhFRUpyMzdQMTdhTk1URHhKNVVJMDVpQldFTytmR2UwcVF3Rmh4VkdxTlZROGxOZDV4d2hoTkVqN0pEVE9Kck0rNngyQklwaDF5UFNFVzYzMzIvc1VyNWtUZkZxYmxZblNPbEx3UzdDbk1ha1Q2a1hNQTdiZHZET3V1dXMzcEcrYkF3cU1pOVNqNC9ab1picUlTcXpESnlpRjgyT21CRDlqTkxvSWRZZmcvNGdKaHZXKzcrRVB1YWhrQlorVFltMkJsKzg1QVE1UTlOZytBNW5xYWFBVjlGNlZlVnA4SzBwSW5xUVh3SkNBZlVPdTRFRGZrbC96VE5xeWZqOGNEMGEzc1pCMXhKYmxUMDhqdkpORmdOTTFaV3BEb2xrTXpTbUZKUDlwN2pCdzgzYmxjZVdZaU5pZVNYQUVPM1ZsMWhWd2V6YkVROC8yK3Q2aEpoZ0Y4Z05EbjZZYnY4VlVZc0xtajhGcFpOU0ZoT281RHhrVWhmdlV6NlRNTXErL3JwMWlzaVZzY2x4bUVmazducEVZK009PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzgxZTcyOGQ5ZDRjMmY2MzZmMDY3Zjg5Y2MxNDg2MmM8L01ENU9mQm9keT48Qm9keT4yPC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YWMyZTk0YTAtZTRkYS01ZmRiLWJkMDctYzNmOWQ0YjY5ZmJhPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "d863990f43c83d4b", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "164" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0RvdWJsZUFjay10b3AtMSUzQWE5YWM0N2M4LWJjZGMtNGYxMS04YTVlLTk1MGUxNGYzNGEwZCZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:31 GMT" ], "X-Amzn-Requestid": [ "5dd1940e-1455-5b94-8802-c3572439a261" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD41ZGQxOTQwZS0xNDU1LTViOTQtODgwMi1jMzU3MjQzOWEyNjE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "cd7538614291d13a", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "132" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdEb3VibGVBY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:32 GMT" ], "X-Amzn-Requestid": [ "3c11afc0-3aad-5658-852c-f8990ac1d639" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zYzExYWZjMC0zYWFkLTU2NTgtODUyYy1mODk5MGFjMWQ2Mzk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "057968cc9758707e", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "118" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3RG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:32 GMT" ], "X-Amzn-Requestid": [ "19a23e76-d3c0-5854-8a22-692fe3ac31a1" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4xOWEyM2U3Ni1kM2MwLTU4NTQtOGEyMi02OTJmZTNhYzMxYTE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }TestErrorOnReceiveFromClosedSubscription.replay000066400000000000000000000347071367004507500371040ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw{ "Initial": "AQAAAA7WcSUiGku3zf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "f432ef83938a7b82", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "96" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "360" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:22 GMT" ], "X-Amzn-Requestid": [ "663f5277-725a-50ec-9a85-052e4238ff7a" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3RXJyb3JPblJlY2VpdmVGcm9tQ2xvc2VkU3Vic2NyaXB0aW9uLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD42NjNmNTI3Ny03MjVhLTUwZWMtOWE4NS0wNTJlNDIzOGZmN2E8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "39c1f5f6ba941ca0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "101" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "373" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:23 GMT" ], "X-Amzn-Requestid": [ "bd64a293-962e-5d1f-b8bd-f5caa64dd663" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5iZDY0YTI5My05NjJlLTVkMWYtYjhiZC1mNWNhYTY0ZGQ2NjM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "1910f673542e3be0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "191" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "425" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:23 GMT" ], "X-Amzn-Requestid": [ "6383876d-f5d6-5ef9-89c6-d034c5b5b585" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD42MzgzODc2ZC1mNWQ2LTVlZjktODljNi1kMDM0YzViNWI1ODU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "82bd066247a835b8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "719" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:23 GMT" ], "X-Amzn-Requestid": [ "4f767489-69fb-59ae-9193-23d0599842d2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NGY3Njc0ODktNjlmYi01OWFlLTkxOTMtMjNkMDU5OTg0MmQyPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "60b201af545a5764", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "336" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "403" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:23 GMT" ], "X-Amzn-Requestid": [ "d5546209-0c0c-59d5-a8c2-35503c6f9643" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3RXJyb3JPblJlY2VpdmVGcm9tQ2xvc2VkU3Vic2NyaXB0aW9uLXRvcC0xOmE0YmY1NWZjLTliZTEtNGY5Yy1iZDMyLWIxYmIyMDNjODRhNzwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5kNTU0NjIwOS0wYzBjLTU5ZDUtYThjMi0zNTUwM2M2Zjk2NDM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "cfdc874b12aae9b3", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "191" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi10b3AtMSUzQWE0YmY1NWZjLTliZTEtNGY5Yy1iZDMyLWIxYmIyMDNjODRhNyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:23 GMT" ], "X-Amzn-Requestid": [ "3baae243-383a-5b98-922e-b51a0859540e" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4zYmFhZTI0My0zODNhLTViOTgtOTIyZS1iNTFhMDg1OTU0MGU8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "7725f6fa2454cb1b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "159" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:23 GMT" ], "X-Amzn-Requestid": [ "bc8e4496-e9b0-5098-b21c-13cfd9d36be4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5iYzhlNDQ5Ni1lOWIwLTUwOTgtYjIxYy0xM2NmZDlkMzZiZTQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "6e5345aa83771c22", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "145" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3RXJyb3JPblJlY2VpdmVGcm9tQ2xvc2VkU3Vic2NyaXB0aW9uLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:23 GMT" ], "X-Amzn-Requestid": [ "865005d6-ccfa-526e-ad24-528ffc998df8" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD44NjUwMDVkNi1jY2ZhLTUyNmUtYWQyNC01MjhmZmM5OThkZjg8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }TestErrorOnSendToClosedTopic.replay000066400000000000000000000075251367004507500344620ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw{ "Initial": "AQAAAA7WcSUhN9Y/yv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "628515456f2316a5", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "84" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdFcnJvck9uU2VuZFRvQ2xvc2VkVG9waWMtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "348" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "e2da15eb-ef1c-5278-8507-42b2df7e2ca2" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3RXJyb3JPblNlbmRUb0Nsb3NlZFRvcGljLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5lMmRhMTVlYi1lZjFjLTUyNzgtODUwNy00MmIyZGY3ZTJjYTI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "0c35213e5a9addf0", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "133" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3RXJyb3JPblNlbmRUb0Nsb3NlZFRvcGljLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "a4d17a3b-a403-55ea-b9e4-2d6294619b30" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5hNGQxN2EzYi1hNDAzLTU1ZWEtYjllNC0yZDYyOTQ2MTliMzA8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestMetadata.replay000066400000000000000000001103141367004507500314140ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUYGEIHtv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "ddf9b922d77fb693", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "68" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdNZXRhZGF0YS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "332" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:11 GMT" ], "X-Amzn-Requestid": [ "ea4071ce-f18d-595c-9c58-2697c1d553c0" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3TWV0YWRhdGEtdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmVhNDA3MWNlLWYxOGQtNTk1Yy05YzU4LTI2OTdjMWQ1NTNjMDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "0e3925bf31242702", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd01ldGFkYXRhLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "345" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "44468084-14fd-5e66-8e9a-d7dd24a49f7b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdNZXRhZGF0YS1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjQ0NDY4MDg0LTE0ZmQtNWU2Ni04ZTlhLWQ3ZGQyNGE0OWY3YjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "5607d8648ceb2a9d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd01ldGFkYXRhLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "397" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "3fcbc14d-99f5-51d9-bdb8-9614a9ac70c4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd01ldGFkYXRhLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjNmY2JjMTRkLTk5ZjUtNTFkOS1iZGI4LTk2MTRhOWFjNzBjNDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "1ebd45de39ad01b4", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "663" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdNZXRhZGF0YS1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TWV0YWRhdGEtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "5a070d0f-50c4-53f0-8e0a-5a56609d72ed" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NWEwNzBkMGYtNTBjNC01M2YwLThlMGEtNWE1NjYwOWQ3MmVkPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "fea2cd5616ef4f41", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "280" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd01ldGFkYXRhLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd01ldGFkYXRhLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "375" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:12 GMT" ], "X-Amzn-Requestid": [ "c6b6673c-8661-54ed-9113-3065b6383e71" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3TWV0YWRhdGEtdG9wLTE6MDUwZmNkMzYtZjg3Ni00NTE3LWEwYzItMGRkYjJiMTlhNjQ2PC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmM2YjY2NzNjLTg2NjEtNTRlZC05MTEzLTMwNjViNjM4M2U3MTwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "54b8088dfeeddf04", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "2571" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4xLk5hbWU9MTIzNDUmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuMS5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuMS5WYWx1ZS5TdHJpbmdWYWx1ZT0xMjM0NSZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4xMC5OYW1lPV9fMHg1Yl9fX18weDVjX19fXzB4NWRfX19fMHg1ZV9fXyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4xMC5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuMTAuVmFsdWUuU3RyaW5nVmFsdWU9JTI1NUIlMjU1QyUyNTVEJTI1NUVfJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjIuTmFtZT1fXzB4MF9fX18weDFfX19fMHgyX19fXzB4M19fX18weDRfX19fMHg1X19fXzB4Nl9fX18weDdfX19fMHg4X19fXzB4OV9fX18weGFfX19fMHhiX19fXzB4Y19fX18weGRfX19fMHhlX19fXzB4Zl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjIuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjIuVmFsdWUuU3RyaW5nVmFsdWU9JTI1MDAlMjUwMSUyNTAyJTI1MDMlMjUwNCUyNTA1JTI1MDYlMjUwNyUyNTA4JTI1MDklMjUwQSUyNTBCJTI1MEMlMjUwRCUyNTBFJTI1MEYmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuMy5OYW1lPV9fMHgxMF9fX18weDExX19fXzB4MTJfX19fMHgxM19fX18weDE0X19fXzB4MTVfX19fMHgxNl9fX18weDE3X19fXzB4MThfX19fMHgxOV9fX18weDFhX19fXzB4MWJfX19fMHgxY19fX18weDFkX19fXzB4MWVfX19fMHgxZl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuVmFsdWUuU3RyaW5nVmFsdWU9JTI1MTAlMjUxMSUyNTEyJTI1MTMlMjUxNCUyNTE1JTI1MTYlMjUxNyUyNTE4JTI1MTklMjUxQSUyNTFCJTI1MUMlMjUxRCUyNTFFJTI1MUYmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNC5OYW1lPV9fMHgyMF9fX18weDIxX19fXzB4MjJfX19fMHgyM19fX18weDI0X19fXzB4MjVfX19fMHgyNl9fX18weDI3X19fXzB4MjhfX19fMHgyOV9fX18weDJhX19fXzB4MmJfX19fMHgyY19fLS5fXzB4MmZfXyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS40LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS40LlZhbHVlLlN0cmluZ1ZhbHVlPSUyNTIwJTI1MjElMjUyMiUyNTIzJTI0JTI1MjUlMjYlMjUyNyUyNTI4JTI1MjklMjUyQSUyQiUyNTJDLS4lMjUyRiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS41Lk5hbWU9X18weDJlX19fXzB4MmVfX19fMHgyZl9fZm9vX18weDJmX18uX18weDJlX19fXzB4MmZfX2Jhcl9fMHgyZl9fLl9fMHgyZV9fX18weDJmX18uX18weDJlX19fXzB4MmZfX2Jhei5fXzB4MmVfX19fMHgyZl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjUuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjUuVmFsdWUuU3RyaW5nVmFsdWU9Li4lMjUyRmZvbyUyNTJGLi4lMjUyRmJhciUyNTJGLi4lMjUyRi4uJTI1MkZiYXouLiUyNTJGJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjYuTmFtZT1fXzB4MmVfX19fMHgyZV9fX18weDVjX19mb29fXzB4NWNfXy5fXzB4MmVfX19fMHg1Y19fYmFyX18weDVjX18uX18weDJlX19fXzB4NWNfXy5fXzB4MmVfX19fMHg1Y19fYmF6Ll9fMHgyZV9fX18weDVjX18mTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5WYWx1ZS5TdHJpbmdWYWx1ZT0uLiUyNTVDZm9vJTI1NUMuLiUyNTVDYmFyJTI1NUMuLiUyNTVDLi4lMjU1Q2Jhei4uJTI1NUMmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNy5OYW1lPV9fMHgyZV9fX18weDJlX19fXzB4NWNfX2Zvb19fMHg1Y19fX18weDVjX19iYXJfXzB4NWNfX19fMHg1Y19fX18weDVjX19iYXomTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNy5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNy5WYWx1ZS5TdHJpbmdWYWx1ZT0uLiUyNTVDZm9vJTI1NUMlMjU1Q2JhciUyNTVDJTI1NUMlMjU1Q2JheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS44Lk5hbWU9X18weDNhX19fXzB4M2JfX19fMHgzY19fX18weDNkX19fXzB4M2VfX19fMHgzZl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjguVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjguVmFsdWUuU3RyaW5nVmFsdWU9JTNBJTI1M0IlMjUzQyUzRCUyNTNFJTI1M0YmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuOS5OYW1lPV9fMHg0MF9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjkuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjkuVmFsdWUuU3RyaW5nVmFsdWU9JTQwJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3TWV0YWRhdGEtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:12 GMT" ], "X-Amzn-Requestid": [ "58226885-6cb1-5618-adfb-3fdc5ce8ec84" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjY1ODU4MWVmLTllMTAtNWUxZC05ZWE2LWQ2YjZhZTQ5NjQ4MTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NTgyMjY4ODUtNmNiMS01NjE4LWFkZmItM2ZkYzVjZThlYzg0PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "98401b03450c1afc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TWV0YWRhdGEtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "3168" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "1cbec42a-a892-5229-808f-937398cb6334" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZmQ3Yzk5MGUtYjYxYy00ZTIxLTg0OTQtOGVmZjkwYjFiYjEyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkZhdW8xQzQyNXE1dXh5TlRaRE5rbndmdlh6ZXRPbFVBSjZBTGtmdFpSSFlGMVBwTXpja0lINHh6cUlYTitETlphb2w4WHp1NXkvZm1GWGJGb0h2aHNqNm44ZEgrMGVQdnZNMjdXckxVbkM1S2lucEhzVXFVZzV5YWE2MFpBeU5lK1NQbW9wQlVoaGthbUZaZGEra2NPc0tKOGNOVFp4L2NTeVlIWW05cjZZUk1zejNsRkZuMlVoaUo5S0lSeXZNcFlCK29IWHBHUTRlMnA0M21ieWdVODF6ZVUxUTR5SXc4SXpKKzR5TUhwdnAvb1ltWFVJUXcwOWhqblZrZlJPSzlVOVNTaExwVTFUaUFxN2hWZU90S1pOLzJHTEVIenA3UEJtNEFkZ3ZwV0lLUFBaQTNxTEIyM3NtK2doNU1VUm5TM3gvRC9IamszMm0xcGdxWkVrSDRobnhER091U05LcXdjQTlTMm8xZ2U2WUd0YzZxNjR6akRNanFGeDB4akVnV1QzU0tkZ1UveGx2Z1VQaUtCUjFTeFE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+ZjNmYmZkZTFlODI1MjRkZWMwOGU0YjVmNjYwYTEwNmM8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+MTIzNDU8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4xMjM0NTwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDBfX19fMHgxX19fXzB4Ml9fX18weDNfX19fMHg0X19fXzB4NV9fX18weDZfX19fMHg3X19fXzB4OF9fX18weDlfX19fMHhhX19fXzB4Yl9fX18weGNfX19fMHhkX19fXzB4ZV9fX18weGZfXzwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPiUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOSUwQSUwQiUwQyUwRCUwRSUwRjwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX188L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4lMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUY8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPl9fMHgyMF9fX18weDIxX19fXzB4MjJfX19fMHgyM19fX18weDI0X19fXzB4MjVfX19fMHgyNl9fX18weDI3X19fXzB4MjhfX19fMHgyOV9fX18weDJhX19fXzB4MmJfX19fMHgyY19fLS5fXzB4MmZfXzwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPiUyMCUyMSUyMiUyMyQlMjUmYW1wOyUyNyUyOCUyOSUyQSslMkMtLiUyRjwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDJlX19fXzB4MmVfX19fMHgyZl9fZm9vX18weDJmX18uX18weDJlX19fXzB4MmZfX2Jhcl9fMHgyZl9fLl9fMHgyZV9fX18weDJmX18uX18weDJlX19fXzB4MmZfX2Jhei5fXzB4MmVfX19fMHgyZl9fPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+Li4lMkZmb28lMkYuLiUyRmJhciUyRi4uJTJGLi4lMkZiYXouLiUyRjwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDJlX19fXzB4MmVfX19fMHg1Y19fZm9vX18weDVjX18uX18weDJlX19fXzB4NWNfX2Jhcl9fMHg1Y19fLl9fMHgyZV9fX18weDVjX18uX18weDJlX19fXzB4NWNfX2Jhei5fXzB4MmVfX19fMHg1Y19fPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+Li4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1QzwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDJlX19fXzB4MmVfX19fMHg1Y19fZm9vX18weDVjX19fXzB4NWNfX2Jhcl9fMHg1Y19fX18weDVjX19fXzB4NWNfX2JhejwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPi4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6PC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5fXzB4M2FfX19fMHgzYl9fX18weDNjX19fXzB4M2RfX19fMHgzZV9fX18weDNmX188L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT46JTNCJTNDPSUzRSUzRjwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDQwX188L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5APC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5fXzB4NWJfX19fMHg1Y19fX18weDVkX19fXzB4NWVfX188L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4lNUIlNUMlNUQlNUVfPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjFjYmVjNDJhLWE4OTItNTIyOS04MDhmLTkzNzM5OGNiNjMzNDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "f02235ea3e7f3c9b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "668" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkZhdW8xQzQyNXE1dXh5TlRaRE5rbndmdlh6ZXRPbFVBSjZBTGtmdFpSSFlGMVBwTXpja0lINHh6cUlYTiUyQkROWmFvbDhYenU1eSUyRmZtRlhiRm9IdmhzajZuOGRIJTJCMGVQdnZNMjdXckxVbkM1S2lucEhzVXFVZzV5YWE2MFpBeU5lJTJCU1Btb3BCVWhoa2FtRlpkYSUyQmtjT3NLSjhjTlRaeCUyRmNTeVlIWW05cjZZUk1zejNsRkZuMlVoaUo5S0lSeXZNcFlCJTJCb0hYcEdRNGUycDQzbWJ5Z1U4MXplVTFRNHlJdzhJekolMkI0eU1IcHZwJTJGb1ltWFVJUXcwOWhqblZrZlJPSzlVOVNTaExwVTFUaUFxN2hWZU90S1pOJTJGMkdMRUh6cDdQQm00QWRndnBXSUtQUFpBM3FMQjIzc20lMkJnaDVNVVJuUzN4JTJGRCUyRkhqazMybTFwZ3FaRWtINGhueERHT3VTTktxd2NBOVMybzFnZTZZR3RjNnE2NHpqRE1qcUZ4MHhqRWdXVDNTS2RnVSUyRnhsdmdVUGlLQlIxU3hRJTNEJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdNZXRhZGF0YS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "20234b51-6dcd-5332-a5c7-1c085d94922f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MjAyMzRiNTEtNmRjZC01MzMyLWE1YzctMWMwODVkOTQ5MjJmPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "ac0f255763d2537f", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1541" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1oZWxsbyt3b3JsZCZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4xLk5hbWU9X18weDI2M2FfX19fMHgyNjNhX19fXzB4MjYzYV9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9JTI1RTIlMjU5OCUyNUJBJTI1RTIlMjU5OCUyNUJBJTI1RTIlMjU5OCUyNUJBJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjIuTmFtZT1fXzB4NjBfXyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4yLlZhbHVlLkRhdGFUeXBlPVN0cmluZyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS4yLlZhbHVlLlN0cmluZ1ZhbHVlPSUyNTYwJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuTmFtZT1fXzB4N2JfX19fMHg3Y19fX18weDdkX19fXzB4N2VfX19fMHg3Zl9fJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjMuVmFsdWUuU3RyaW5nVmFsdWU9JTI1N0IlMjU3QyUyNTdEfiUyNTdGJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjQuTmFtZT1mb29fXzB4MjBfX2Jhcl9fMHgyMF9fYmF6Jk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjQuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjQuVmFsdWUuU3RyaW5nVmFsdWU9Zm9vJTI1MjBiYXIlMjUyMGJheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS41Lk5hbWU9Zm9vX18weDIyX19iYXJfXzB4MjJfX2JheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS41LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS41LlZhbHVlLlN0cmluZ1ZhbHVlPWZvbyUyNTIyYmFyJTI1MjJiYXomTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5OYW1lPWZvb19fMHgyZl9fX18weDJmX19iYXJfXzB4MmZfX19fMHgyZl9fX18weDJmX19iYXomTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmTWVzc2FnZUF0dHJpYnV0ZXMuZW50cnkuNi5WYWx1ZS5TdHJpbmdWYWx1ZT1mb28lMjUyRiUyNTJGYmFyJTI1MkYlMjUyRiUyNTJGYmF6Jk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjcuTmFtZT1mb29fXzB4MmZfX2Jhcl9fMHgyZl9fYmF6Jk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjcuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjcuVmFsdWUuU3RyaW5nVmFsdWU9Zm9vJTI1MkZiYXIlMjUyRmJheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS44Lk5hbWU9Zm9vX18weDVjX19iYXJfXzB4NWNfX2JheiZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS44LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZNZXNzYWdlQXR0cmlidXRlcy5lbnRyeS44LlZhbHVlLlN0cmluZ1ZhbHVlPWZvbyUyNTVDYmFyJTI1NUNiYXomVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdNZXRhZGF0YS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:12 GMT" ], "X-Amzn-Requestid": [ "d046df5a-b26a-578d-ab80-880382337d11" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmY4MGQ2MDdlLWVhNTMtNTFhOS04NGI3LTM3MjdkYTBhYWIzNTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZDA0NmRmNWEtYjI2YS01NzhkLWFiODAtODgwMzgyMzM3ZDExPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "680618a1edf19fe3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TWV0YWRhdGEtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2249" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "291172c8-66df-5c09-adac-259156864d14" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YzMyZDc0ZTUtYTM0NC00YmZhLWI4MDUtNjBjMmY5MTViMWQzPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmhDWG9TUktPbzNpaVpNbGZ3VDRLUGRicG03dXZ2Z3J4NGUvVjVRNTJ0OGRXaDNVM056a0VaT1dOUDU1ckphRU1iQTFHQjY4bXVGZm1lVThqTGxXY25QOGxzb0hpMDVlN2U4NkI1TFpTZUVrMVc2eHJ5cFV2aEduSlpESlZSekMvU0tYNkFxTE9KNnloUWsvRi9uSEhOUnJKV0l3bm9NY1NLbi91NjVVN293QkJXRGwvOVFnS0hCUWJhOEtuRURkZkFMWWtxQVRmTTdVYVk3N2o4TUUrcmdXQnp6QmhtbEZOZ3NoeFhPbk1rWTJkaDY4bDRrR0hEdWx3eU94ZXFDV2h4U0ZSU2NYWVN1QmlSVWlmS0VOQ2htMjV2c2x2SjUyRWNlVmxJYTBaQXNrSU1NQWc0eXU1TGJ2NFk2ZHcrUC9NRmJaN21EWmNEamNxd3d1Q2pVcEdnNWpJSld3a01OYTBtNzRiR3dXRXpIU25zVEphRUkvL1dJR0ZwVVVkN05qYldnVDArbnA1TTQvOCsvWlJUaWtHNHc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+ZGU4YmE3MGUyOTA3NjljYTE4NTQzZGE5MjQwZGUwMjU8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDI2M2FfX19fMHgyNjNhX19fXzB4MjYzYV9fPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+JUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5fXzB4NjBfXzwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPiU2MDwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDdiX19fXzB4N2NfX19fMHg3ZF9fX18weDdlX19fXzB4N2ZfXzwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPiU3QiU3QyU3RH4lN0Y8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHgyMF9fYmFyX18weDIwX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lMjBiYXIlMjBiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHgyMl9fYmFyX18weDIyX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lMjJiYXIlMjJiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHgyZl9fX18weDJmX19iYXJfXzB4MmZfX19fMHgyZl9fX18weDJmX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lMkYlMkZiYXIlMkYlMkYlMkZiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHgyZl9fYmFyX18weDJmX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lMkZiYXIlMkZiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHg1Y19fYmFyX18weDVjX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lNUNiYXIlNUNiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MjkxMTcyYzgtNjZkZi01YzA5LWFkYWMtMjU5MTU2ODY0ZDE0PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "4b7a49c7546217df", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "670" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmhDWG9TUktPbzNpaVpNbGZ3VDRLUGRicG03dXZ2Z3J4NGUlMkZWNVE1MnQ4ZFdoM1UzTnprRVpPV05QNTVySmFFTWJBMUdCNjhtdUZmbWVVOGpMbFdjblA4bHNvSGkwNWU3ZTg2QjVMWlNlRWsxVzZ4cnlwVXZoR25KWkRKVlJ6QyUyRlNLWDZBcUxPSjZ5aFFrJTJGRiUyRm5ISE5SckpXSXdub01jU0tuJTJGdTY1VTdvd0JCV0RsJTJGOVFnS0hCUWJhOEtuRURkZkFMWWtxQVRmTTdVYVk3N2o4TUUlMkJyZ1dCenpCaG1sRk5nc2h4WE9uTWtZMmRoNjhsNGtHSER1bHd5T3hlcUNXaHhTRlJTY1hZU3VCaVJVaWZLRU5DaG0yNXZzbHZKNTJFY2VWbElhMFpBc2tJTU1BZzR5dTVMYnY0WTZkdyUyQlAlMkZNRmJaN21EWmNEamNxd3d1Q2pVcEdnNWpJSld3a01OYTBtNzRiR3dXRXpIU25zVEphRUklMkYlMkZXSUdGcFVVZDdOamJXZ1QwJTJCbnA1TTQlMkY4JTJCJTJGWlJUaWtHNHclM0QlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd01ldGFkYXRhLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "ddba4d62-1464-5dcc-8c72-1a3b243d0cd1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZGRiYTRkNjItMTQ2NC01ZGNjLThjNzItMWEzYjI0M2QwY2QxPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "74b06a1c51a5be44", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd01ldGFkYXRhLXRvcC0xJTNBMDUwZmNkMzYtZjg3Ni00NTE3LWEwYzItMGRkYjJiMTlhNjQ2JlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "76717e15-d65b-5d64-8cc4-294ce60127f8" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43NjcxN2UxNS1kNjViLTVkNjQtOGNjNC0yOTRjZTYwMTI3Zjg8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "369c3e595ab4687f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "131" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdNZXRhZGF0YS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:14 GMT" ], "X-Amzn-Requestid": [ "9bde7e2d-a269-53a7-9539-2974923312ba" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45YmRlN2UyZC1hMjY5LTUzYTctOTUzOS0yOTc0OTIzMzEyYmE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "a0cd8abfae57bae1", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "117" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3TWV0YWRhdGEtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:13 GMT" ], "X-Amzn-Requestid": [ "5b288d23-83ee-578f-baee-da7ab3b47d13" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD41YjI4OGQyMy04M2VlLTU3OGYtYmFlZS1kYTdhYjNiNDdkMTM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestNack.replay000066400000000000000000001124341367004507500305550ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUfIMHCiv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "14cd780cb90b04ad", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "64" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdOYWNrLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "328" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:19 GMT" ], "X-Amzn-Requestid": [ "5d637f55-c435-556a-a401-280cf46a371b" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3TmFjay10b3AtMTwvVG9waWNBcm4+CiAgPC9DcmVhdGVUb3BpY1Jlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NWQ2MzdmNTUtYzQzNS01NTZhLWE0MDEtMjgwY2Y0NmEzNzFiPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L0NyZWF0ZVRvcGljUmVzcG9uc2U+Cg==" } }, { "ID": "bcaeb4f639abc59c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "69" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd05hY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "341" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:20 GMT" ], "X-Amzn-Requestid": [ "58a156f5-7aee-589b-8d9f-01ac4a8efebf" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdOYWNrLXN1Yi0xPC9RdWV1ZVVybD48L0NyZWF0ZVF1ZXVlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NThhMTU2ZjUtN2FlZS01ODliLThkOWYtMDFhYzRhOGVmZWJmPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvQ3JlYXRlUXVldWVSZXNwb25zZT4=" } }, { "ID": "b20c2349dc3c5032", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "159" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd05hY2stc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "393" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:20 GMT" ], "X-Amzn-Requestid": [ "6d563cb0-8b9b-52e4-be16-6be9bbfbd4c0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd05hY2stc3ViLTE8L1ZhbHVlPjwvQXR0cmlidXRlPjwvR2V0UXVldWVBdHRyaWJ1dGVzUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NmQ1NjNjYjAtOGI5Yi01MmU0LWJlMTYtNmJlOWJiZmJkNGMwPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvR2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "4bdbf5789a021e6f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "655" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdOYWNrLXN1Yi0xJTIyJTBBJTA5JTA5JTdEJTBBJTA5JTA5JTVEJTBBJTA5JTA5JTdEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdOYWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:20 GMT" ], "X-Amzn-Requestid": [ "01388e86-0517-5082-a6b0-d9df3577a6a6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MDEzODhlODYtMDUxNy01MDgyLWE2YjAtZDlkZjM1NzdhNmE2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "e0683e143c5d384c", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "272" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd05hY2stc3ViLTEmUHJvdG9jb2w9c3FzJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3TmFjay10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "371" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:20 GMT" ], "X-Amzn-Requestid": [ "60bdf239-9f8d-50e8-8ef7-a560afed7299" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3TmFjay10b3AtMToxMDRkMjIzMS0zMmY5LTQzMjEtOTQwYi00NWY5MDVjOTRmYzk8L1N1YnNjcmlwdGlvbkFybj4KICA8L1N1YnNjcmliZVJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NjBiZGYyMzktOWY4ZC01MGU4LThlZjctYTU2MGFmZWQ3Mjk5PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1N1YnNjcmliZVJlc3BvbnNlPgo=" } }, { "ID": "27ea37c443080381", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0wJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd05hY2stdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:20 GMT" ], "X-Amzn-Requestid": [ "3e3742de-8231-563b-b446-1587b251e44a" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPmMwOTc2NTMzLWZkNzgtNTkxMi04NjVlLTMyNmFjZDE4OGI2MzwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+M2UzNzQyZGUtODIzMS01NjNiLWI0NDYtMTU4N2IyNTFlNDRhPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "5c22d4e831c70c43", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "246" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0xJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MSZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd05hY2stdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:20 GMT" ], "X-Amzn-Requestid": [ "643b83b1-17e6-5fea-9b69-d4e827861d9b" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjJlNWIzODZhLWU3YjYtNTdiZi04OTM1LTZmMzNkN2Q2ZDVjZTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NjQzYjgzYjEtMTdlNi01ZmVhLTliNjktZDRlODI3ODYxZDliPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "946ac25e2bcf94d3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "179" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1054" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:20 GMT" ], "X-Amzn-Requestid": [ "e99ff4f7-531a-551b-a7c6-a3ae637a333f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZDEzMGRkY2UtMjU1MS00ZDQzLTk5OWMtZDdiYzQwMWQ1YjdlPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnpqYXV6Y0l2aEVUY296UzZhOEZiblZZdDV0aU9VSy9uOFYxQ2FJUkZvWXlPM3dsa2xSWVMrWEc4OFdRWkZnK3ZUTmtJQkM1bkdJVWVBNEtDYkV0Z3JyUld5ZlJ6L2NGZ3A1WHVGSU0wNTJSMldDaDYzTzJJWGFuNWZHQjlCU1Zjc3BYd2EwSTl6QUY1NlpDZENsVFdyQ2xoNi9GZlVJZDE0U1IrNjArWUJLaGtBM3NJaDkzOXl4VnJUN2JjY2JIblJOSnR2dzJqNldtYkxGeHh4OUlleWZiZEFlOG43dUYrR1RlRGpNeEE5UFpiYURGSmpiWlJ1UDc0eE9iVnJtblUyUkpCNDAvZ2QralRQd2MrU1lBWUFjdjgrcmhySDZCeURVQzRjWXdyTGprNXJkQjBCUTRQbU1mZldwUFpaSmoxWGIvOUsrenF1YWEzelJKSVFoOWQzYVZvQ2FBVWZITHY3MnNhYVdtK2dqVUc4TmlUVTFKTmlQMU9ycWxFQWZFazV2WUcweW80KzRnR2pjTzg1NWpNdUE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+OWFhNDY4N2M4Yjc1NjdiYWEzODBkOWYzMDBmZTI4M2E8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+MDwvQm9keT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5hPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+MDwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5lOTlmZjRmNy01MzFhLTU1MWItYTdjNi1hM2FlNjM3YTMzM2Y8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "a1707d29fe23f650", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "179" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1054" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "661bbd93-eb34-5d32-884b-eacadb557b16" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZjFiZjIwZDYtNDk5OS00YjQzLWFiMmItNmNhYTFmMGJlN2M1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjd5LzFNSEFDMG9sRko3THpiU1FFb0d0eVlHakZscU9TWjJpRUozaWl0RkZiN20yTlJ2clZxZmVVM3NLbExMd3RJQk9SM2ZPZURaS2c5SURBcThjMGhXU2l4eG4xWkgxZndsQ0FHU3Fib0hOMXRhV01JcVVZM0o1QUNLZzZpektWK1lJUFlVTExRcGR5dUszRHErNGhWTVlubEZQREVIOGQ2cW1WQWJUMFZsT3NLTklYMmdDY0k0TkYwQms5cU12cnpwSHAwckNBTU80Wmt0V2tmVDAxaE52YlVLSlN6c1lyVFAzeWxyUzh0eXQwczlNTi9uOHFTbXlGSEVJTnBxTko3ZkNmVmQxNk5McW9SbEFiekN6c3lyWjZTQVVSekRkNlc0Z2NDT1h4eFpDdllUbjRuM2VUekpKWW05Vm8va2ZCdEJOa0ZBOUxjQkdabURMMzdYM0pyWlowS0p1QlJKZmpBQjNtamdGbjQxN2s4VGtONWxSL1gwWjlZbS9DVndoeFpnTUs2NVl2aGNrN2F4bEJNZGZ6Znc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmM0Y2E0MjM4YTBiOTIzODIwZGNjNTA5YTZmNzU4NDliPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+MzE0Yzc3YjI0OTg5M2M2YjNjNzY1YTQyY2MwOGIyNDU8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+MTwvQm9keT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5hPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+MTwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD42NjFiYmQ5My1lYjM0LTVkMzItODg0Yi1lYWNhZGI1NTdiMTY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "879dc40306237786", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "761" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnpqYXV6Y0l2aEVUY296UzZhOEZiblZZdDV0aU9VSyUyRm44VjFDYUlSRm9ZeU8zd2xrbFJZUyUyQlhHODhXUVpGZyUyQnZUTmtJQkM1bkdJVWVBNEtDYkV0Z3JyUld5ZlJ6JTJGY0ZncDVYdUZJTTA1MlIyV0NoNjNPMklYYW41ZkdCOUJTVmNzcFh3YTBJOXpBRjU2WkNkQ2xUV3JDbGg2JTJGRmZVSWQxNFNSJTJCNjAlMkJZQktoa0Ezc0loOTM5eXhWclQ3YmNjYkhuUk5KdHZ3Mmo2V21iTEZ4eHg5SWV5ZmJkQWU4bjd1RiUyQkdUZURqTXhBOVBaYmFERkpqYlpSdVA3NHhPYlZybW5VMlJKQjQwJTJGZ2QlMkJqVFB3YyUyQlNZQVlBY3Y4JTJCcmhySDZCeURVQzRjWXdyTGprNXJkQjBCUTRQbU1mZldwUFpaSmoxWGIlMkY5SyUyQnpxdWFhM3pSSklRaDlkM2FWb0NhQVVmSEx2NzJzYWFXbSUyQmdqVUc4TmlUVTFKTmlQMU9ycWxFQWZFazV2WUcweW80JTJCNGdHamNPODU1ak11QSUzRCUzRCZDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVxdWVzdEVudHJ5LjEuVmlzaWJpbGl0eVRpbWVvdXQ9MCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "411" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "5891535c-3bdb-53d9-9eec-04050bbac5fd" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41ODkxNTM1Yy0zYmRiLTUzZDktOWVlYy0wNDA1MGJiYWM1ZmQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVzcG9uc2U+" } }, { "ID": "e9fa5d6481c6f66c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "179" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1054" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "4e3a7b13-a005-5d22-a015-2c4a90649b06" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZDEzMGRkY2UtMjU1MS00ZDQzLTk5OWMtZDdiYzQwMWQ1YjdlPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkQ5QWJvZDY5UUgvS1lmYkxjbjQ4N09CdVNlVHk0b3Jwano4TjZmY0hjb1NHMkZrVW00QSt5V1FJNm9zUkg2Q2cwMC9leThXYjEwRlh0Tk1FbzBwVkVaL3FEV0U2UERmSDY0eElUM0Nod0ZDaXpzTU56c3didWhmZ2Z4YUN5c1owSlNnZnRKZTlxZ2pyVlFSdW9yWXVKd25qelRDS1ZoOW1DOHh4MDkzcUVLVjYyWFN5UzNIZUloei9IZ0VKa3JPaW9PN1RSckRlQjFvcXZibXdqZ0FDV1IyK2I3L1FDSUJNZzU5VktiY0p4eWQ4cDgvZWpqQzc2akM5S3pqS2lHbEFSeFE2SnAwMEFzS0dXb1VxT2czbHpZQ2dLZ21zdEszVWxxbUZHK2RDdjNjdzJQMk9HbHJiTTlGZDYwbFZkcEpFQkRRa0dKT213LzlxUDF0YjdGZTJuWmJhYldncGpjVkJWZXFsTlBLWEVjOUlxTDIyV1dma0U0SnF5aVNyZDlYVkVjanlmUUhMbnRmbmp1RDlHOG1mYWc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+OWFhNDY4N2M4Yjc1NjdiYWEzODBkOWYzMDBmZTI4M2E8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+MDwvQm9keT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5hPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+MDwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD40ZTNhN2IxMy1hMDA1LTVkMjItYTAxNS0yYzRhOTA2NDliMDY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "cb3abe1edaf87476", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "743" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjd5JTJGMU1IQUMwb2xGSjdMemJTUUVvR3R5WUdqRmxxT1NaMmlFSjNpaXRGRmI3bTJOUnZyVnFmZVUzc0tsTEx3dElCT1IzZk9lRFpLZzlJREFxOGMwaFdTaXh4bjFaSDFmd2xDQUdTcWJvSE4xdGFXTUlxVVkzSjVBQ0tnNml6S1YlMkJZSVBZVUxMUXBkeXVLM0RxJTJCNGhWTVlubEZQREVIOGQ2cW1WQWJUMFZsT3NLTklYMmdDY0k0TkYwQms5cU12cnpwSHAwckNBTU80Wmt0V2tmVDAxaE52YlVLSlN6c1lyVFAzeWxyUzh0eXQwczlNTiUyRm44cVNteUZIRUlOcHFOSjdmQ2ZWZDE2Tkxxb1JsQWJ6Q3pzeXJaNlNBVVJ6RGQ2VzRnY0NPWHh4WkN2WVRuNG4zZVR6SkpZbTlWbyUyRmtmQnRCTmtGQTlMY0JHWm1ETDM3WDNKclpaMEtKdUJSSmZqQUIzbWpnRm40MTdrOFRrTjVsUiUyRlgwWjlZbSUyRkNWd2h4WmdNSzY1WXZoY2s3YXhsQk1kZnpmdyUzRCUzRCZDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVxdWVzdEVudHJ5LjEuVmlzaWJpbGl0eVRpbWVvdXQ9MCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "411" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "3cce50de-90a9-567a-9ad6-0787a0c8705e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zY2NlNTBkZS05MGE5LTU2N2EtOWFkNi0wNzg3YTBjODcwNWU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVzcG9uc2U+" } }, { "ID": "8e0e46a316ff94f5", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "179" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1054" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "9b7c5e26-f829-5f82-b4b3-097fc8482fa7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZjFiZjIwZDYtNDk5OS00YjQzLWFiMmItNmNhYTFmMGJlN2M1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmI2NjZVNnJRUXhUQ0lpMjVMYmVYMTZJK3JGTkM1dUNMSENtTEplNC9GQnFMUktOSXdZMm1rN1FDMXFXcGtrRENzNmpSbUE3RHVqT0RJSWlpN21RbDZvSzJKTzJyYzd0TVBhRHFtQmR4N2tFK1ZEWlVxY20zdUk2M0RBQU11UzhhNkk2M1R2RjN1Uzh4c3U0enJ3d0MzdnRqdU4yNkZLY3ExT2pyRzZFVzdBVFAvd0lhUmxHZVE3QkpUelFmUStVVXlFdUpWbjhHSktxMnlpZEFNR3RhOExWdVNVbVZFYXFJeFpLdVhZbFd1dngvUWdHVHptRVVIM2h5ck93ayt5SFpGcmQyZ2oxWnlsaUtBTDFGcHZYelFRVUNKYmJ6TkIxWElyMXVKcnNLYVJObjBZQ3dZMzFpODR3ODhoK3MwYmpLMDFDVjFDeG1VRUJSMFZEMktXa1JMT2ErYWJOWmttSWJxS2V1LzVyUWdlemZNS3BVSGFxUWk3U01ja2FSOWM1T2hxZXJhSFo1Mnd3V3ZmUDh6UnlzcUE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmM0Y2E0MjM4YTBiOTIzODIwZGNjNTA5YTZmNzU4NDliPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+MzE0Yzc3YjI0OTg5M2M2YjNjNzY1YTQyY2MwOGIyNDU8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+MTwvQm9keT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5hPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+MTwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45YjdjNWUyNi1mODI5LTVmODItYjRiMy0wOTdmYzg0ODJmYTc8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "6ccc356d0cd5e3c6", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "656" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkQ5QWJvZDY5UUglMkZLWWZiTGNuNDg3T0J1U2VUeTRvcnBqejhONmZjSGNvU0cyRmtVbTRBJTJCeVdRSTZvc1JINkNnMDAlMkZleThXYjEwRlh0Tk1FbzBwVkVaJTJGcURXRTZQRGZINjR4SVQzQ2h3RkNpenNNTnpzd2J1aGZnZnhhQ3lzWjBKU2dmdEplOXFnanJWUVJ1b3JZdUp3bmp6VENLVmg5bUM4eHgwOTNxRUtWNjJYU3lTM0hlSWh6JTJGSGdFSmtyT2lvTzdUUnJEZUIxb3F2Ym13amdBQ1dSMiUyQmI3JTJGUUNJQk1nNTlWS2JjSnh5ZDhwOCUyRmVqakM3NmpDOUt6aktpR2xBUnhRNkpwMDBBc0tHV29VcU9nM2x6WUNnS2dtc3RLM1VscW1GRyUyQmRDdjNjdzJQMk9HbHJiTTlGZDYwbFZkcEpFQkRRa0dKT213JTJGOXFQMXRiN0ZlMm5aYmFiV2dwamNWQlZlcWxOUEtYRWM5SXFMMjJXV2ZrRTRKcXlpU3JkOVhWRWNqeWZRSExudGZuanVEOUc4bWZhZyUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "bf1c47d9-02c2-5832-976c-108032a3ee16" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YmYxYzQ3ZDktMDJjMi01ODMyLTk3NmMtMTA4MDMyYTNlZTE2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "8b2c2ac1be7aeade", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "656" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmI2NjZVNnJRUXhUQ0lpMjVMYmVYMTZJJTJCckZOQzV1Q0xIQ21MSmU0JTJGRkJxTFJLTkl3WTJtazdRQzFxV3Bra0RDczZqUm1BN0R1ak9ESUlpaTdtUWw2b0sySk8ycmM3dE1QYURxbUJkeDdrRSUyQlZEWlVxY20zdUk2M0RBQU11UzhhNkk2M1R2RjN1Uzh4c3U0enJ3d0MzdnRqdU4yNkZLY3ExT2pyRzZFVzdBVFAlMkZ3SWFSbEdlUTdCSlR6UWZRJTJCVVV5RXVKVm44R0pLcTJ5aWRBTUd0YThMVnVTVW1WRWFxSXhaS3VYWWxXdXZ4JTJGUWdHVHptRVVIM2h5ck93ayUyQnlIWkZyZDJnajFaeWxpS0FMMUZwdlh6UVFVQ0piYnpOQjFYSXIxdUpyc0thUk5uMFlDd1kzMWk4NHc4OGglMkJzMGJqSzAxQ1YxQ3htVUVCUjBWRDJLV2tSTE9hJTJCYWJOWmttSWJxS2V1JTJGNXJRZ2V6Zk1LcFVIYXFRaTdTTWNrYVI5YzVPaHFlcmFIWjUyd3dXdmZQOHpSeXNxQSUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3TmFjay1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "31fe0b79-ba80-5162-83ac-5c208ae1bf06" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MzFmZTBiNzktYmE4MC01MTYyLTgzYWMtNWMyMDhhZTFiZjA2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "58da3023382d1142", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "159" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd05hY2stdG9wLTElM0ExMDRkMjIzMS0zMmY5LTQzMjEtOTQwYi00NWY5MDVjOTRmYzkmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "7b2796a3-56b8-59af-9c74-c1fa66d91bde" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD43YjI3OTZhMy01NmI4LTU5YWYtOWM3NC1jMWZhNjZkOTFiZGU8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "8899416f3b8f97b1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "127" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdOYWNrLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "58c8e19d-062f-5371-b78f-b6c4364e2458" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41OGM4ZTE5ZC0wNjJmLTUzNzEtYjc4Zi1iNmM0MzY0ZTI0NTg8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "543ae1eeb89f077c", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "113" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3TmFjay10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:21 GMT" ], "X-Amzn-Requestid": [ "b0c55c7b-59f7-583d-8b65-0b226996da4c" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5iMGM1NWM3Yi01OWY3LTU4M2QtOGI2NS0wYjIyNjk5NmRhNGM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }TestNonExistentSubscriptionSucceedsOnOpenButFailsOnReceive.replay000066400000000000000000000050131367004507500425270ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw{ "Initial": "AQAAAA7WcSUkAlOdHv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "96c38289368a71fd", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:24 GMT" ], "X-Amzn-Requestid": [ "fa0590aa-1009-5452-ab26-c7f3206d42b0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD5mYTA1OTBhYS0xMDA5LTU0NTItYWIyNi1jN2YzMjA2ZDQyYjA8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } } ] }TestNonExistentTopicSucceedsOnOpenButFailsOnSend.replay000066400000000000000000000045231367004507500404350ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw{ "Initial": "AQAAAA7WcSUuE3AC6/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "4fa83ff4015f3481", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "113" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0mVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBbm9uZXhpc3RlbnR0b3BpYyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 404, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "259" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:34 GMT" ], "X-Amzn-Requestid": [ "2327b1eb-36d1-5d0c-b47c-e6b206bf58bb" ] }, "Body": "PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxFcnJvcj4KICAgIDxUeXBlPlNlbmRlcjwvVHlwZT4KICAgIDxDb2RlPk5vdEZvdW5kPC9Db2RlPgogICAgPE1lc3NhZ2U+VG9waWMgZG9lcyBub3QgZXhpc3Q8L01lc3NhZ2U+CiAgPC9FcnJvcj4KICA8UmVxdWVzdElkPjIzMjdiMWViLTM2ZDEtNWQwYy1iNDdjLWU2YjIwNmJmNThiYjwvUmVxdWVzdElkPgo8L0Vycm9yUmVzcG9uc2U+Cg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestNonUTF8MessageBody.replay000066400000000000000000000531401367004507500332230ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUuJw4Ssf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "859ec45e448e0910", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "78" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdOb25VVEY4TWVzc2FnZUJvZHktdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "342" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:34 GMT" ], "X-Amzn-Requestid": [ "6300a38d-b0ec-50e2-89de-f4d480824d95" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3Tm9uVVRGOE1lc3NhZ2VCb2R5LXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD42MzAwYTM4ZC1iMGVjLTUwZTItODlkZS1mNGQ0ODA4MjRkOTU8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "8f5861cbf287a2d1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "83" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd05vblVURjhNZXNzYWdlQm9keS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "355" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:35 GMT" ], "X-Amzn-Requestid": [ "e079f862-3ac4-54ba-a9ed-af3b0aabffa4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdOb25VVEY4TWVzc2FnZUJvZHktc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5lMDc5Zjg2Mi0zYWM0LTU0YmEtYTllZC1hZjNiMGFhYmZmYTQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "4a2010346cc84c42", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "173" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd05vblVURjhNZXNzYWdlQm9keS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "407" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:35 GMT" ], "X-Amzn-Requestid": [ "1b5a1ccf-4254-57fd-95ec-4b96723bcce3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd05vblVURjhNZXNzYWdlQm9keS1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4xYjVhMWNjZi00MjU0LTU3ZmQtOTVlYy00Yjk2NzIzYmNjZTM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "eea3d3964783aeae", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "683" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdOb25VVEY4TWVzc2FnZUJvZHktc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd05vblVURjhNZXNzYWdlQm9keS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:35 GMT" ], "X-Amzn-Requestid": [ "2b9037b3-3852-517d-bf90-60ea083dba63" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MmI5MDM3YjMtMzg1Mi01MTdkLWJmOTAtNjBlYTA4M2RiYTYzPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "b62c3b666a71e034", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "300" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd05vblVURjhNZXNzYWdlQm9keS1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdOb25VVEY4TWVzc2FnZUJvZHktdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "385" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:35 GMT" ], "X-Amzn-Requestid": [ "cfc69794-1bae-5acd-a174-c0cd2bc1b7ba" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3Tm9uVVRGOE1lc3NhZ2VCb2R5LXRvcC0xOmUxOTIwMmQ0LWZhNTktNDg1MC05MzIzLWQwZDg3OTdlMjdlNzwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5jZmM2OTc5NC0xYmFlLTVhY2QtYTE3NC1jMGNkMmJjMWI3YmE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "61f059c0c02bdd09", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "560" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT1BQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2T2pzOFBUNCUyRlFGdGNYVjVmWUh0OGZYNSUyRlptOXZYR0poY2x4aVlYb3VMbHhtYjI5Y0xpNWNZbUZ5WEM0dVhDNHVYR0poZWk0dVhDNHVMMlp2Ynk4dUxpOWlZWEl2TGk0dkxpNHZZbUY2TGk0dlptOXZMMkpoY2k5aVlYcG1iMjhpWW1GeUltSmhlaTR1WEdadmIxeGNZbUZ5WEZ4Y1ltRjZabTl2THk5aVlYSXZMeTlpWVhwbWIyOGdZbUZ5SUdKaGVqRXlNelExNHBpNjRwaTY0cGk2dmJJJTNEJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1iYXNlNjRlbmNvZGVkJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9dHJ1ZSZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd05vblVURjhNZXNzYWdlQm9keS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:35 GMT" ], "X-Amzn-Requestid": [ "e1d9e76c-d5ae-5a75-96a4-b035e5c17702" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjNmMmY2Y2Q1LTUxOTktNWViYS1iNWNjLTNiOGM2MWY2ZTNjZDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZTFkOWU3NmMtZDVhZS01YTc1LTk2YTQtYjAzNWU1YzE3NzAyPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "3d486c51f8f2643d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "193" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3Tm9uVVRGOE1lc3NhZ2VCb2R5LXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1368" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:35 GMT" ], "X-Amzn-Requestid": [ "e2024d71-b224-5772-98f9-1a28824b7c6c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+M2FmNTkyNDgtYmEwZi00N2I1LThkNTYtMTU2MjcwMjZiYzU4PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjA5UFl5Nk90QXBWSCtxZVdmdjZ0OW5MMnMyZzNjZ2NTV01ja2tSeEhNZWF5ZmZIUFczbjVwU1NseWtnQURNZ3N6NkduWE5JWUpCeFFsaklVN2JXZ2J6d1pVMTdKaW5rS3UyT1Jla2pQelJqZ05kRm9ON2prTnlNREd0V3V5bXAyazYyeGJlV3VYTnRFb2xZWlBJbU5qVkFzek8zanpIbUIrZHJmNDdpRlRFTURsN0swNm11bEVlb0tZaVFJNGJ3NmQvZG1uMXNpUUhqbGs3THlFN1hQd1E4bTFnZURGbEpqMDFRYmpvQnR1c012QUtKbWJpdlIzczdYVUpHV2oyL0lpYTFvMFI0bzRhbDVGanAwRkJUQk1HKzZ6c2lWZmxlZkFZMWZKU2dKRzl5QWR4MkNOSHJxM0g4RUZhNTVHVnRiWi9acURhTzU2WEdrQ2lIeEtleDEzbmNaaVFZQklXdWdxUEVBL0JEd0xqcWoyM1NjSkxmUUJiazVYRGVVRmF3UEhpQnNLRzZYL3dlb2pQL3dlUnZuLzFuZGFRWU13K0JuZGlIMmJVVjloYzQ9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+MDBhYjg5OTZlODAxMWE3YTE0ZmI2ZmI5YWQ4M2M4MjA8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz5kOTYyOTZhYzY3N2E5YWNhMDVkNDlhZTA5OWM2NTZjMDwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT5BQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2T2pzOFBUNC9RRnRjWFY1ZllIdDhmWDUvWm05dlhHSmhjbHhpWVhvdUxseG1iMjljTGk1Y1ltRnlYQzR1WEM0dVhHSmhlaTR1WEM0dUwyWnZieTh1TGk5aVlYSXZMaTR2TGk0dlltRjZMaTR2Wm05dkwySmhjaTlpWVhwbWIyOGlZbUZ5SW1KaGVpNHVYR1p2YjF4Y1ltRnlYRnhjWW1GNlptOXZMeTlpWVhJdkx5OWlZWHBtYjI4Z1ltRnlJR0poZWpFeU16UTE0cGk2NHBpNjRwaTZ2Ykk9PC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmJhc2U2NGVuY29kZWQ8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT50cnVlPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmUyMDI0ZDcxLWIyMjQtNTc3Mi05OGY5LTFhMjg4MjRiN2M2YzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "8275fd24bf0732bc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "690" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjA5UFl5Nk90QXBWSCUyQnFlV2Z2NnQ5bkwyczJnM2NnY1NXTWNra1J4SE1lYXlmZkhQVzNuNXBTU2x5a2dBRE1nc3o2R25YTklZSkJ4UWxqSVU3YldnYnp3WlUxN0ppbmtLdTJPUmVralB6UmpnTmRGb043amtOeU1ER3RXdXltcDJrNjJ4YmVXdVhOdEVvbFlaUEltTmpWQXN6TzNqekhtQiUyQmRyZjQ3aUZURU1EbDdLMDZtdWxFZW9LWWlRSTRidzZkJTJGZG1uMXNpUUhqbGs3THlFN1hQd1E4bTFnZURGbEpqMDFRYmpvQnR1c012QUtKbWJpdlIzczdYVUpHV2oyJTJGSWlhMW8wUjRvNGFsNUZqcDBGQlRCTUclMkI2enNpVmZsZWZBWTFmSlNnSkc5eUFkeDJDTkhycTNIOEVGYTU1R1Z0YlolMkZacURhTzU2WEdrQ2lIeEtleDEzbmNaaVFZQklXdWdxUEVBJTJGQkR3TGpxajIzU2NKTGZRQmJrNVhEZVVGYXdQSGlCc0tHNlglMkZ3ZW9qUCUyRndlUnZuJTJGMW5kYVFZTXclMkJCbmRpSDJiVVY5aGM0JTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdOb25VVEY4TWVzc2FnZUJvZHktc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:36 GMT" ], "X-Amzn-Requestid": [ "37d1787a-2729-5fd9-a41c-2f231759d4c7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MzdkMTc4N2EtMjcyOS01ZmQ5LWE0MWMtMmYyMzE3NTlkNGM3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "eebbf71ac9bd0364", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "173" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd05vblVURjhNZXNzYWdlQm9keS10b3AtMSUzQWUxOTIwMmQ0LWZhNTktNDg1MC05MzIzLWQwZDg3OTdlMjdlNyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:35 GMT" ], "X-Amzn-Requestid": [ "1eb8704e-95d6-542d-ac77-2717a5a6d95a" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4xZWI4NzA0ZS05NWQ2LTU0MmQtYWM3Ny0yNzE3YTVhNmQ5NWE8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "8c1f5b37e6479665", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "141" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdOb25VVEY4TWVzc2FnZUJvZHktc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:36 GMT" ], "X-Amzn-Requestid": [ "3483cc3f-0992-546e-822d-9b6639e20f70" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zNDgzY2MzZi0wOTkyLTU0NmUtODIyZC05YjY2MzllMjBmNzA8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "1886b95c2112dd72", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "127" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3Tm9uVVRGOE1lc3NhZ2VCb2R5LXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:35 GMT" ], "X-Amzn-Requestid": [ "389d51c0-fbee-5850-a869-0699cb9e8527" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4zODlkNTFjMC1mYmVlLTU4NTAtYTg2OS0wNjk5Y2I5ZTg1Mjc8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestSendReceive.replay000066400000000000000000001041041367004507500320700ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUkFU+NMf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "756884e2031bfcba", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdTZW5kUmVjZWl2ZS10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "335" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:24 GMT" ], "X-Amzn-Requestid": [ "465541a9-5400-5a11-86c6-16f064641ae8" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3U2VuZFJlY2VpdmUtdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjQ2NTU0MWE5LTU0MDAtNWExMS04NmM2LTE2ZjA2NDY0MWFlODwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "3804fec0c0791e21", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "76" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "348" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "3866ddf3-36f1-5669-9839-8aaa06957e2a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdTZW5kUmVjZWl2ZS1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjM4NjZkZGYzLTM2ZjEtNTY2OS05ODM5LThhYWEwNjk1N2UyYTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "8dfc1a1522c7b907", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "166" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "400" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "a0604a7f-2178-5dd4-9425-1d26111d2597" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmEwNjA0YTdmLTIxNzgtNWRkNC05NDI1LTFkMjYxMTFkMjU5NzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "2665055a843d9f73", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "669" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdTZW5kUmVjZWl2ZS1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "25c3da14-0e74-5fd4-912f-8d4d3e113797" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MjVjM2RhMTQtMGU3NC01ZmQ0LTkxMmYtOGQ0ZDNlMTEzNzk3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "e347b1ee4a8493a4", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "286" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "378" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "992d359d-b768-574d-9a6e-62c4870d87b4" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3U2VuZFJlY2VpdmUtdG9wLTE6MThjNjRiYzEtZjc0ZS00NWUyLWE1ZGUtZGYwMTQ4OTVlZDQ2PC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPjk5MmQzNTlkLWI3NjgtNTc0ZC05YTZlLTYyYzQ4NzBkODdiNDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "691be9931807d065", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0wJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "8f928665-ff39-5a3b-aecd-d13ccf5ceac2" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjg3MzEwMzg0LWFkNjItNTg3MS1hOTRjLTU0ZGQ5ZDA3MDg4ODwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+OGY5Mjg2NjUtZmYzOS01YTNiLWFlY2QtZDEzY2NmNWNlYWMyPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "1341b0ac2e95d35c", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0xJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MSZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "6329b0a7-2821-5938-b000-e7fe1844b9c1" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjMzNDlhYjI4LTdhZjctNTU4MS1hNjljLWZjNzE0YTkyZTU3ODwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NjMyOWIwYTctMjgyMS01OTM4LWIwMDAtZTdmZTE4NDRiOWMxPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "9cb46d86f183a572", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0yJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MiZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "38f4ccc3-3b40-585a-a196-9b9a0b25b8a3" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjcwOTNiNzRlLTAyYWYtNWUxZC04N2Y1LWUwMTczMmNhOGVlNDwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+MzhmNGNjYzMtM2I0MC01ODVhLWExOTYtOWI5YTBiMjViOGEzPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "a5e4ec0e4e27eb67", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "105d7ec9-07bf-5e64-a615-299037dab627" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YTM3MWZmZGUtNGEyMi00MDYxLWIwMzYtNGFjYmIyMmM0ODNlPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmpHcElBR1pYTUhQZkVkRkNRUUJXTlViWVVkMHV2QjdDZ2FmM2NCWGhVdmpWWGMwdHNLcHNmd2oxR09iR0tQM29vd2RYa2xZcTFOdXVjWlpuUjRlUExjRURFY3BCQ01oRFRyc2xUUTAwa0RGL3lZRTdKeU0wYTdJSTZOT3gvR3ZpYS82K0xBL1J0dFVmVUxvbGVXVDN4dFZ3V3p3b0hUc3FKcy9IeXp2akpzOU9uVi9Kcis2SEluQXhQdmhXYXgwai9wa2FYd0VpMDBGZURkc2EvVHIvZ3pvNVlPYjVwUWg2L00vNUUvMXVicFg5bDM0ZUZPUFNzdGx0Wk9wYWRqSkNRQWNMSy9WaU40cFZRVUhqaGN6cnlSL0ZBWGFMVUgxWmk3NytUZE9YR1Z3U2RheEVxb1ozNmZLeW9nWHZhek1oT2hzUlVhUFhzSVluditKanlRakdoNzR3OWlUQmdYd3MyeE1JdEE2L1h5Umh0VEI4bmVVcTVwNS9EOHZscDhwSkxkSHJRTFRnd3JJeHg2Sms2YXRTN25pTUFxZjhOdHM3U0pGcUtNNTAvRG89PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz4zMTRjNzdiMjQ5ODkzYzZiM2M3NjVhNDJjYzA4YjI0NTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4xPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4xPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjEwNWQ3ZWM5LTA3YmYtNWU2NC1hNjE1LTI5OTAzN2RhYjYyNzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "30af212835414d73", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "703" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmpHcElBR1pYTUhQZkVkRkNRUUJXTlViWVVkMHV2QjdDZ2FmM2NCWGhVdmpWWGMwdHNLcHNmd2oxR09iR0tQM29vd2RYa2xZcTFOdXVjWlpuUjRlUExjRURFY3BCQ01oRFRyc2xUUTAwa0RGJTJGeVlFN0p5TTBhN0lJNk5PeCUyRkd2aWElMkY2JTJCTEElMkZSdHRVZlVMb2xlV1QzeHRWd1d6d29IVHNxSnMlMkZIeXp2akpzOU9uViUyRkpyJTJCNkhJbkF4UHZoV2F4MGolMkZwa2FYd0VpMDBGZURkc2ElMkZUciUyRmd6bzVZT2I1cFFoNiUyRk0lMkY1RSUyRjF1YnBYOWwzNGVGT1BTc3RsdFpPcGFkakpDUUFjTEslMkZWaU40cFZRVUhqaGN6cnlSJTJGRkFYYUxVSDFaaTc3JTJCVGRPWEdWd1NkYXhFcW9aMzZmS3lvZ1h2YXpNaE9oc1JVYVBYc0lZbnYlMkJKanlRakdoNzR3OWlUQmdYd3MyeE1JdEE2JTJGWHlSaHRUQjhuZVVxNXA1JTJGRDh2bHA4cEpMZEhyUUxUZ3dySXh4NkprNmF0UzduaU1BcWY4TnRzN1NKRnFLTTUwJTJGRG8lM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "76c22696-14cb-5085-b4b7-71cf24aed8c6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NzZjMjI2OTYtMTRjYi01MDg1LWI0YjctNzFjZjI0YWVkOGM2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "f417360645c52c7f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "f7d5b558-1818-5372-97d1-e201287d7b31" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NDU2ZDIxMWQtNjE0NC00NTM0LWE5MWQtMGM2ZmMyOTU1OTlhPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQk16cTNGRm1ITG84SnFlYjBXM1FuanNwUm1aR2tsSlc1ZlY4OEYzcjdOL2ZrUHRLbmczZ1NNQm1hTDhpemVVR3NkTkJQWk4yYk1CZ1Q1OGdmMWpBNnFLQ05OaDFQVjVUUlRvTUJ4cGhTenBwN1E2aGY2YThmZFpzeFM5ZC9OUjlibThla1J5bVAvOE1JZDZ0a0RCZlVEemhFeEJjZmMvQ0JmUUdmckpHODAwRnIrdVozaXY5bUxmQzUrUXdBRnVib3JscWdEWW01U0ZmcnpDYmV5K2ExTWpETXQ5RldDL3JRNTY3bnR3UFlvcCtsNnJ3a3d6enNRdFZnL01uTm9iWktiK2Z3WkUzQkgrbnZGOW4yZlVoMDU2YU5kczk1L0s5dktuT1ZVNHhvaWZJWSs0NHZaOEwvMVFkZFZ0VGRKaW83ZExuVXExUHZSazBnRytLWnJlZEJWbUpwM3lIZ2MzUG5rdDcvbXRuRWNydkdiNUJGNi82bnF5bzIwNmJlMlJTZ3k0bHVJNTJuTWhpQUpCR0hHcy9KTHZ6QXBLekV3TTZGTVpEQW1ZZ3UxSzg9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzgxZTcyOGQ5ZDRjMmY2MzZmMDY3Zjg5Y2MxNDg2MmM8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz5iNzJlMTQwZTcyNjllYmNlOTEwN2JhZjFlZjI0MGJhZTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4yPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4yPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmY3ZDViNTU4LTE4MTgtNTM3Mi05N2QxLWUyMDEyODdkN2IzMTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "ffff4f6cca54e6f8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "186" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:25 GMT" ], "X-Amzn-Requestid": [ "019eb26e-b666-5235-9d5f-e5378603ca76" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NmExZWU2YmQtODgxZC00NzhiLTkzZGUtZWEwYzQ4MDg4YzEzPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQk13SHh0d3ZhbjBDUFgxeTZaMVc3ODA2SGZURndEdnk1eFZWdUlUZWdPZHBoTkhEMnZQS2ZrRXpxSGdHMWN4RGpadjhwbXBNRitrQnJjNEZ5dXZqNm5FRklrVlY0Wm43TWlkMmpaeHVrRUJmTDRVMzZteGNDOHlPeWhOWkJKQStuZVJEeVBVellOdkdOb1ZnSmdKLytSaCtObW1LOU0yS0pwandzVVU0NS80cmxScHplSmY2VDRaMUpJRXZkUGdvN3JJNVgyWGxOdVJuWXVsUEIyVTVyNTlacWhhY1RVR2lGejVGNUFnT1dyYWxiUGtCN2tWY21od2FHaHd1c3duVnp0NmNMVGw1d201cktDbllCclVxNWJXTFhmZllZeWFVMjNvL056bTMyN051ZHo2akdHREEybldwMlhsZFQrYXVEZTdCdGhJZXdzbmZxbHBRZUpwQmNKTGorUUttdm1oTENTU0ZxaEFMT2NDM3hib0VMWTFPMkNjb1g3T3FIeVc4SGlrQXNkMm1NeWJxUzE2STF0UkM3SDc2NForZmVyamF1WGRQazFTa1VPaEU9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+Y2ZjZDIwODQ5NWQ1NjVlZjY2ZTdkZmY5Zjk4NzY0ZGE8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz45YWE0Njg3YzhiNzU2N2JhYTM4MGQ5ZjMwMGZlMjgzYTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4wPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4wPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjAxOWViMjZlLWI2NjYtNTIzNS05ZDVmLWU1Mzc4NjAzY2E3NjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "9f3f7e69e9cad7c8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "699" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQk16cTNGRm1ITG84SnFlYjBXM1FuanNwUm1aR2tsSlc1ZlY4OEYzcjdOJTJGZmtQdEtuZzNnU01CbWFMOGl6ZVVHc2ROQlBaTjJiTUJnVDU4Z2YxakE2cUtDTk5oMVBWNVRSVG9NQnhwaFN6cHA3UTZoZjZhOGZkWnN4UzlkJTJGTlI5Ym04ZWtSeW1QJTJGOE1JZDZ0a0RCZlVEemhFeEJjZmMlMkZDQmZRR2ZySkc4MDBGciUyQnVaM2l2OW1MZkM1JTJCUXdBRnVib3JscWdEWW01U0ZmcnpDYmV5JTJCYTFNakRNdDlGV0MlMkZyUTU2N250d1BZb3AlMkJsNnJ3a3d6enNRdFZnJTJGTW5Ob2JaS2IlMkJmd1pFM0JIJTJCbnZGOW4yZlVoMDU2YU5kczk1JTJGSzl2S25PVlU0eG9pZklZJTJCNDR2WjhMJTJGMVFkZFZ0VGRKaW83ZExuVXExUHZSazBnRyUyQktacmVkQlZtSnAzeUhnYzNQbmt0NyUyRm10bkVjcnZHYjVCRjYlMkY2bnF5bzIwNmJlMlJTZ3k0bHVJNTJuTWhpQUpCR0hHcyUyRkpMdnpBcEt6RXdNNkZNWkRBbVlndTFLOCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:26 GMT" ], "X-Amzn-Requestid": [ "b153b82a-6d12-5253-9fee-ef735d749a10" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YjE1M2I4MmEtNmQxMi01MjUzLTlmZWUtZWY3MzVkNzQ5YTEwPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "bb2873fc765c1044", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "681" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQk13SHh0d3ZhbjBDUFgxeTZaMVc3ODA2SGZURndEdnk1eFZWdUlUZWdPZHBoTkhEMnZQS2ZrRXpxSGdHMWN4RGpadjhwbXBNRiUyQmtCcmM0Rnl1dmo2bkVGSWtWVjRabjdNaWQyalp4dWtFQmZMNFUzNm14Y0M4eU95aE5aQkpBJTJCbmVSRHlQVXpZTnZHTm9WZ0pnSiUyRiUyQlJoJTJCTm1tSzlNMktKcGp3c1VVNDUlMkY0cmxScHplSmY2VDRaMUpJRXZkUGdvN3JJNVgyWGxOdVJuWXVsUEIyVTVyNTlacWhhY1RVR2lGejVGNUFnT1dyYWxiUGtCN2tWY21od2FHaHd1c3duVnp0NmNMVGw1d201cktDbllCclVxNWJXTFhmZllZeWFVMjNvJTJGTnptMzI3TnVkejZqR0dEQTJuV3AyWGxkVCUyQmF1RGU3QnRoSWV3c25mcWxwUWVKcEJjSkxqJTJCUUttdm1oTENTU0ZxaEFMT2NDM3hib0VMWTFPMkNjb1g3T3FIeVc4SGlrQXNkMm1NeWJxUzE2STF0UkM3SDc2NFolMkJmZXJqYXVYZFBrMVNrVU9oRSUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmUtc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:26 GMT" ], "X-Amzn-Requestid": [ "abb028fa-7e5f-504a-9a3a-7fa34e39b809" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YWJiMDI4ZmEtN2U1Zi01MDRhLTlhM2EtN2ZhMzRlMzliODA5PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "87aedf3332d4b145", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "166" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlLXRvcC0xJTNBMThjNjRiYzEtZjc0ZS00NWUyLWE1ZGUtZGYwMTQ4OTVlZDQ2JlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:26 GMT" ], "X-Amzn-Requestid": [ "bb7a1228-98a1-5499-8b14-4571a8c7e460" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5iYjdhMTIyOC05OGExLTU0OTktOGIxNC00NTcxYThjN2U0NjA8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "b4fc543598a9ad08", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "134" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdTZW5kUmVjZWl2ZS1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:26 GMT" ], "X-Amzn-Requestid": [ "73432dbe-acb5-5088-b555-7ae79cd318cb" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD43MzQzMmRiZS1hY2I1LTUwODgtYjU1NS03YWU3OWNkMzE4Y2I8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "37ed36818ac916a8", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "120" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3U2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:26 GMT" ], "X-Amzn-Requestid": [ "fb39433f-eb83-531d-b1d5-1466dbe5e3e4" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5mYjM5NDMzZi1lYjgzLTUzMWQtYjFkNS0xNDY2ZGJlNWUzZTQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestSendReceiveJSON.replay000066400000000000000000000506371367004507500325750ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUdKkwerv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5aa6e745a6af4b53", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "75" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdTZW5kUmVjZWl2ZUpTT04tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "339" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:17 GMT" ], "X-Amzn-Requestid": [ "3bf0815c-5d62-524b-9f3a-d6056d3f6712" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3U2VuZFJlY2VpdmVKU09OLXRvcC0xPC9Ub3BpY0Fybj4KICA8L0NyZWF0ZVRvcGljUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4zYmYwODE1Yy01ZDYyLTUyNGItOWYzYS1kNjA1NmQzZjY3MTI8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvQ3JlYXRlVG9waWNSZXNwb25zZT4K" } }, { "ID": "0b3956308fd56450", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "80" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd1NlbmRSZWNlaXZlSlNPTi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "352" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:18 GMT" ], "X-Amzn-Requestid": [ "051935b8-ae23-54f2-8207-62e19e7d7210" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdTZW5kUmVjZWl2ZUpTT04tc3ViLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4wNTE5MzViOC1hZTIzLTU0ZjItODIwNy02MmUxOWU3ZDcyMTA8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "efad8e78abaefd49", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "170" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlSlNPTi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "404" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:18 GMT" ], "X-Amzn-Requestid": [ "c5206323-b71e-5891-ab19-347a87408e73" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlSlNPTi1zdWItMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5jNTIwNjMyMy1iNzFlLTU4OTEtYWIxOS0zNDdhODc0MDhlNzM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "906075824c966d67", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "677" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdTZW5kUmVjZWl2ZUpTT04tc3ViLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlSlNPTi1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:18 GMT" ], "X-Amzn-Requestid": [ "d01fcbfa-3894-533c-b086-9ca308ca15de" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZDAxZmNiZmEtMzg5NC01MzNjLWIwODYtOWNhMzA4Y2ExNWRlPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "e2d397e6bda4e42b", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "294" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlSlNPTi1zdWItMSZQcm90b2NvbD1zcXMmVG9waWNBcm49YXJuJTNBYXdzJTNBc25zJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdTZW5kUmVjZWl2ZUpTT04tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "382" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:18 GMT" ], "X-Amzn-Requestid": [ "5c1923e9-8ef3-54c7-8bc2-74b0bead319e" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3U2VuZFJlY2VpdmVKU09OLXRvcC0xOjE5NmU3ZGUzLTliNjEtNDExNC1hM2NhLWNmNzAyYzA0ZjNjMzwvU3Vic2NyaXB0aW9uQXJuPgogIDwvU3Vic2NyaWJlUmVzdWx0PgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD41YzE5MjNlOS04ZWYzLTU0YzctOGJjMi03NGIwYmVhZDMxOWU8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvU3Vic2NyaWJlUmVzcG9uc2U+Cg==" } }, { "ID": "225dd2a01e03ece9", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "157" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0lN0IlMjJGb28lMjIlM0ErJTIyQmFyJTIyJTdEJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3U2VuZFJlY2VpdmVKU09OLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:18 GMT" ], "X-Amzn-Requestid": [ "3f46d857-9c76-58d7-910b-8f0eac289d8e" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjA0Zjk4MjM2LTdhZWYtNThlYy1iNGVhLWQ1NmY0YWIxZmRiNTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+M2Y0NmQ4NTctOWM3Ni01OGQ3LTkxMGItOGYwZWFjMjg5ZDhlPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "6adf220a1256a03d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVKU09OLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "905" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:18 GMT" ], "X-Amzn-Requestid": [ "ab3fbb1b-4c39-5a64-9f56-ec427c674c86" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YjNjZjUxNjItNWU1Yy00NDM3LThmYzgtZmU5MjIwN2YwMmU1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjRBTEwxYjNVOE50WEJFZHJkM1lnSXZiRXM5eVdIZDB0STVpMklXU0hRRWRwdUM1Yjk3M1FBcXpnTi9SYjdMcTBkTTE0cy9tZGtZbHp2c0t5TVJyVXBVVFVyUjhacDU3aUpkOUtSRFBRay9pNitRVHV4Z2JTZXpDRXRmZTNwOE5hR2tGQytMZzRocVI0YlV4bjBaTVBwMkx0bVQzOTdnelFZR0NjQnQzTG0zSzJFWHpUZkZvY0JmbXNOUStsZzNaVXl0ZG0xa0phbE5MQmt1L1NDOUsycmtuRWZKcFZnaUhmNjMraW9wNFk4QUVTM1lHRENXRHVvUWlValM0bnFUTHo0QWQ4QlJmcWw2N296UDBVTW9BS0pNRUZtbTFEOTlibG9QWWFCaUsxRHEzZTgxOWtIbjBDSU9xblZEZFpHcDRtaGYxN1dZOWM2SjZPWkxlVGlVYmFramUvOXluOS80VGZPYWRtbCtGZjJHVlVVZDdPa2F5OGdlTVVmbWxzejZ3WlNYdk95Wm5sSk9TOXJjc011WkllZHZycGdPaG5BU1h4RnY0cmZaejZEWGc9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+MzMzMzk5YmEyYjc2YTE5NjQzMjYwN2YyM2IzZWNiOTU8L01ENU9mQm9keT48Qm9keT57JnF1b3Q7Rm9vJnF1b3Q7OiAmcXVvdDtCYXImcXVvdDt9PC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YWIzZmJiMWItNGMzOS01YTY0LTlmNTYtZWM0MjdjNjc0Yzg2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "89ff1f90d2011492", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "687" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjRBTEwxYjNVOE50WEJFZHJkM1lnSXZiRXM5eVdIZDB0STVpMklXU0hRRWRwdUM1Yjk3M1FBcXpnTiUyRlJiN0xxMGRNMTRzJTJGbWRrWWx6dnNLeU1SclVwVVRVclI4WnA1N2lKZDlLUkRQUWslMkZpNiUyQlFUdXhnYlNlekNFdGZlM3A4TmFHa0ZDJTJCTGc0aHFSNGJVeG4wWk1QcDJMdG1UMzk3Z3pRWUdDY0J0M0xtM0syRVh6VGZGb2NCZm1zTlElMkJsZzNaVXl0ZG0xa0phbE5MQmt1JTJGU0M5SzJya25FZkpwVmdpSGY2MyUyQmlvcDRZOEFFUzNZR0RDV0R1b1FpVWpTNG5xVEx6NEFkOEJSZnFsNjdvelAwVU1vQUtKTUVGbW0xRDk5YmxvUFlhQmlLMURxM2U4MTlrSG4wQ0lPcW5WRGRaR3A0bWhmMTdXWTljNko2T1pMZVRpVWJha2plJTJGOXluOSUyRjRUZk9hZG1sJTJCRmYyR1ZVVWQ3T2theThnZU1VZm1sc3o2d1pTWHZPeVpubEpPUzlyY3NNdVpJZWR2cnBnT2huQVNYeEZ2NHJmWno2RFhnJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdTZW5kUmVjZWl2ZUpTT04tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:19 GMT" ], "X-Amzn-Requestid": [ "c46c1e2a-8f59-5484-8f00-4973bf065266" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YzQ2YzFlMmEtOGY1OS01NDg0LThmMDAtNDk3M2JmMDY1MjY2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "afe311ea2512193e", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "170" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlSlNPTi10b3AtMSUzQTE5NmU3ZGUzLTliNjEtNDExNC1hM2NhLWNmNzAyYzA0ZjNjMyZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:18 GMT" ], "X-Amzn-Requestid": [ "03723b5a-2079-5819-bfd9-6c0310267d40" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4wMzcyM2I1YS0yMDc5LTU4MTktYmZkOS02YzAzMTAyNjdkNDA8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "a7bf367964cdb3fc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "138" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdTZW5kUmVjZWl2ZUpTT04tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:19 GMT" ], "X-Amzn-Requestid": [ "53061c31-9b54-5077-849f-4b68ab0b4695" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41MzA2MWMzMS05YjU0LTUwNzctODQ5Zi00YjY4YWIwYjQ2OTU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "e35a8e571825e72d", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "124" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3U2VuZFJlY2VpdmVKU09OLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:18 GMT" ], "X-Amzn-Requestid": [ "b5e7a711-9c0f-5215-854b-f048ac50874c" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5iNWU3YTcxMS05YzBmLTUyMTUtODU0Yi1mMDQ4YWM1MDg3NGM8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSNSTopicRaw/TestSendReceiveTwo.replay000066400000000000000000001665561367004507500326050ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSUaGb/oh/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "6015607be6286782", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "74" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVRvcGljJk5hbWU9U05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by10b3AtMSZWZXJzaW9uPTIwMTAtMDMtMzE=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "338" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:14 GMT" ], "X-Amzn-Requestid": [ "dc5c3c29-632c-516f-a763-6b705376e6b9" ] }, "Body": "PENyZWF0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxDcmVhdGVUb3BpY1Jlc3VsdD4KICAgIDxUb3BpY0Fybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tdG9wLTE8L1RvcGljQXJuPgogIDwvQ3JlYXRlVG9waWNSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmRjNWMzYzI5LTYzMmMtNTE2Zi1hNzYzLTZiNzA1Mzc2ZTZiOTwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9DcmVhdGVUb3BpY1Jlc3BvbnNlPgo=" } }, { "ID": "37cfd8da2c92ba58", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "79" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "27a6eb04-617b-5655-81c2-bc5d5120a296" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by1zdWItMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjI3YTZlYjA0LTYxN2ItNTY1NS04MWMyLWJjNWQ1MTIwYTI5NjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "43cfa3550c9b76c3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "169" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "403" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "9b2fb174-aa28-58f6-891e-e62d9a73cc35" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjliMmZiMTc0LWFhMjgtNThmNi04OTFlLWU2MmQ5YTczY2MzNTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "d5ba37445b83854f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "675" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by1zdWItMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "d667756b-f19c-5ccc-8016-2232c1c7880f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZDY2Nzc1NmItZjE5Yy01Y2NjLTgwMTYtMjIzMmMxYzc4ODBmPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "a5f982187d805501", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "292" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "381" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "d1a3a4fa-0daf-56cb-af03-f3a33df4911d" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tdG9wLTE6YzAwZDMxMzUtY2I0My00OGIxLWExNDMtYjU1MDMzOWE4MjU5PC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmQxYTNhNGZhLTBkYWYtNTZjYi1hZjAzLWYzYTMzZGY0OTExZDwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "d4ad538cdc4e79fb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "79" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0yJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "e82e7596-26aa-5709-8694-22cf16f1b3ca" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by1zdWItMjwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmU4MmU3NTk2LTI2YWEtNTcwOS04Njk0LTIyY2YxNmYxYjNjYTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "c2fa823b90ef390b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "169" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0yJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "403" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "085f81de-ab67-539f-bdc2-d6879b3ce75c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0yPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjA4NWY4MWRlLWFiNjctNTM5Zi1iZGMyLWQ2ODc5YjNjZTc1YzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "28aba733de5fd908", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "675" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by1zdWItMiUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tc3ViLTImVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "83209337-5072-5819-abbf-c46e60298cda" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ODMyMDkzMzctNTA3Mi01ODE5LWFiYmYtYzQ2ZTYwMjk4Y2RhPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "7600fdcc2d181e71", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "292" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVN1YnNjcmliZSZBdHRyaWJ1dGVzLmVudHJ5LjEua2V5PVJhd01lc3NhZ2VEZWxpdmVyeSZBdHRyaWJ1dGVzLmVudHJ5LjEudmFsdWU9dHJ1ZSZFbmRwb2ludD1hcm4lM0Fhd3MlM0FzcXMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0yJlByb3RvY29sPXNxcyZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "381" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "db80e072-21ce-582c-baa8-b72b11959ffa" ] }, "Body": "PFN1YnNjcmliZVJlc3BvbnNlIHhtbG5zPSJodHRwOi8vc25zLmFtYXpvbmF3cy5jb20vZG9jLzIwMTAtMDMtMzEvIj4KICA8U3Vic2NyaWJlUmVzdWx0PgogICAgPFN1YnNjcmlwdGlvbkFybj5hcm46YXdzOnNuczp1cy1lYXN0LTI6NDYyMzgwMjI1NzIyOlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tdG9wLTE6ODE3NmIwZTEtMzE1MC00YmZjLTg5MmEtZmUwYjliOTAzMzQxPC9TdWJzY3JpcHRpb25Bcm4+CiAgPC9TdWJzY3JpYmVSZXN1bHQ+CiAgPFJlc3BvbnNlTWV0YWRhdGE+CiAgICA8UmVxdWVzdElkPmRiODBlMDcyLTIxY2UtNTgyYy1iYWE4LWI3MmIxMTk1OWZmYTwvUmVxdWVzdElkPgogIDwvUmVzcG9uc2VNZXRhZGF0YT4KPC9TdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "d4bc84368df6e548", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "256" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0wJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MCZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "f49d935b-9cde-527e-82f2-c402ac82c5a8" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjJjMDhiOGI4LTY2MTgtNTUwZS1hMWM3LWVmZTE1NjQ0NjJkODwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+ZjQ5ZDkzNWItOWNkZS01MjdlLTgyZjItYzQwMmFjODJjNWE4PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "030cd38ed960c7be", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "256" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0xJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MSZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "926831cd-529e-5a4f-814f-669462c24d99" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjE1OTk0NTM5LWU0ZWQtNWZjZi1iZTlkLTEyNjBkNGIxNDgxOTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+OTI2ODMxY2QtNTI5ZS01YTRmLTgxNGYtNjY5NDYyYzI0ZDk5PC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "4ea247c78c921685", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "256" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVB1Ymxpc2gmTWVzc2FnZT0yJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuTmFtZT1hJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJk1lc3NhZ2VBdHRyaWJ1dGVzLmVudHJ5LjEuVmFsdWUuU3RyaW5nVmFsdWU9MiZUb3BpY0Fybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXRvcC0xJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "294" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:15 GMT" ], "X-Amzn-Requestid": [ "4013e18e-f702-5c98-b412-b6d7c75e1b4e" ] }, "Body": "PFB1Ymxpc2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3Nucy5hbWF6b25hd3MuY29tL2RvYy8yMDEwLTAzLTMxLyI+CiAgPFB1Ymxpc2hSZXN1bHQ+CiAgICA8TWVzc2FnZUlkPjBjNTA1ZmZhLTJkOGEtNTlhNy1iYThlLTA4YTMxZGQ2YWU3MTwvTWVzc2FnZUlkPgogIDwvUHVibGlzaFJlc3VsdD4KICA8UmVzcG9uc2VNZXRhZGF0YT4KICAgIDxSZXF1ZXN0SWQ+NDAxM2UxOGUtZjcwMi01Yzk4LWI0MTItYjZkN2M3NWUxYjRlPC9SZXF1ZXN0SWQ+CiAgPC9SZXNwb25zZU1ldGFkYXRhPgo8L1B1Ymxpc2hSZXNwb25zZT4K" } }, { "ID": "ff52fd24bbada8d9", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "189" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "2508450b-5491-59b8-b83f-125264cdad7b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NmQ5ZGJkOTEtZGU4YS00NTk1LWJlNzUtY2NmNjc4MmM1NWUwPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlJITGIzSWFsenM5dWE4ZTlzamQyd3Myc0ZzZWtPQ1RrRW9wMXlPcnVqTW5HSkpCSlAwSUt6UGcxYlR5b21ET3N4c1U3T2wvSGdScG42eVUvcmpmSjQycW4xVG5ZT2kxWlZReXpVMVJPNDFwaXBoODNra1pmWkIyc1BBWVUrN3M4N2tHT29rZFVTWVlRZjB4WUxVY3FoOHY0SkNnY28ydkhzSXZJajNudUI0MVZuRmV1T3VWK1ZXL1Z3ZUM5T0lpTGJwUjJMbnpwN0NsMndDMy9YeENwZXBhR3lCRlZWWGQrUVdrVDBCUVgyT09RM2FzK0FRS1Q5b1NzbVFqVFhXb1U5bklaVnozaE8xcEFMUE9JTHVzR2l0U2ZjMjFRaGVSbWJyNVFEVzIzRERZbVprcGZjWHpXZ0xCY2ZGM0FjZlZVWjlTbXR2U1lpY2RUaThSb2tiNXZLNUNhcTZxUWFXUG9DTC9ybzV5SG10eGtMOGU2TDdPZkp6SVR2UzlES2RqdWNSTDFidU9qQm53d2VBRWVGbkdUemFVTEwwSk9VWXhWcUpzdnlUSjNlZ1U9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz4zMTRjNzdiMjQ5ODkzYzZiM2M3NjVhNDJjYzA4YjI0NTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4xPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4xPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjI1MDg0NTBiLTU0OTEtNTliOC1iODNmLTEyNTI2NGNkYWQ3YjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "835f3c26de289c58", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "189" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "6918ea80-311b-5635-a7bf-bdd9014752f6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OGNmYTEyZTktM2IwMC00ZjVmLWJmMTAtM2E3YTQxYTNmMTkyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmJLVWczcnJ5T3ZDb0Y1VEpZOVVYVHBQd2Jyb1ZpVDdoM3dvZVlvem5zVG41TzY3S2ZCRXY0Y0lNSjhtcGlNWWlSUUltdmlNNk11UU1hSWtVbUlpSFFBUThnVC84NW5xaWZDTHN6WHFGeGRlNnE2dXRxSnlHcUo1YUhKTXVHODhiL1ROL29KclFCZ2hkMWI1eHpoTmQ1SndHTUpDR2NlaXc5d2JOL2RUTWUxaXpINWNtQXpEbk85VEIzUDVQdXhSQjVaRmdwYlNUSWxnTUovY1F3ZytreHphbHFJeTRGdVBuaUcyRkpCenZpUzF0MDQ0VVN3SW1EUEhXcmVLdDhUQXFSa1hoOXFvZlpRbURaVVE0dGdJalAzWUg1djkxZ0NmOGlvSG5QYWIvL1dIZ20wVmxONTN4S20yR0RSSDQ0c1BJT0ZuNm5RbmozanZaS0gvUWRSdHVWTnJkbE45bU54N1ZUWDg0NWhaMmV5Ti9iOXcvUHpZWHlOcmNzLzVGZk9qQVRHWnFXdm5aVEVGckFNdFJKNzQxVnRQM2tTb1RJMGtNcVh5YngySllKdXM9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+Y2ZjZDIwODQ5NWQ1NjVlZjY2ZTdkZmY5Zjk4NzY0ZGE8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz45YWE0Njg3YzhiNzU2N2JhYTM4MGQ5ZjMwMGZlMjgzYTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4wPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4wPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjY5MThlYTgwLTMxMWItNTYzNS1hN2JmLWJkZDkwMTQ3NTJmNjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "96e6cffaa068fadd", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "682" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlJITGIzSWFsenM5dWE4ZTlzamQyd3Myc0ZzZWtPQ1RrRW9wMXlPcnVqTW5HSkpCSlAwSUt6UGcxYlR5b21ET3N4c1U3T2wlMkZIZ1JwbjZ5VSUyRnJqZko0MnFuMVRuWU9pMVpWUXl6VTFSTzQxcGlwaDgza2taZlpCMnNQQVlVJTJCN3M4N2tHT29rZFVTWVlRZjB4WUxVY3FoOHY0SkNnY28ydkhzSXZJajNudUI0MVZuRmV1T3VWJTJCVlclMkZWd2VDOU9JaUxicFIyTG56cDdDbDJ3QzMlMkZYeENwZXBhR3lCRlZWWGQlMkJRV2tUMEJRWDJPT1EzYXMlMkJBUUtUOW9Tc21RalRYV29VOW5JWlZ6M2hPMXBBTFBPSUx1c0dpdFNmYzIxUWhlUm1icjVRRFcyM0REWW1aa3BmY1h6V2dMQmNmRjNBY2ZWVVo5U210dlNZaWNkVGk4Um9rYjV2SzVDYXE2cVFhV1BvQ0wlMkZybzV5SG10eGtMOGU2TDdPZkp6SVR2UzlES2RqdWNSTDFidU9qQm53d2VBRWVGbkdUemFVTEwwSk9VWXhWcUpzdnlUSjNlZ1UlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "fe13e8d3-0bf5-57db-be0b-bf8a3ba95318" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZmUxM2U4ZDMtMGJmNS01N2RiLWJlMGItYmY4YTNiYTk1MzE4PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "68b5a15c708cc605", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "189" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tc3ViLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "0f4ee713-477f-542d-9c00-b04a772370ee" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZTJmYzQ4NDEtNDQ5OC00NWE0LThjNmQtZTkxZTQwMzY4ODFjPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjk3RXE4Z0lxVk9IZzlCL2JmQkRwK0tWMmYwQkZ1Qm5XQ1RjTU96R2hhbm9GNVE0M3BlcW1TOVJGaFROaVc4Qm50TlRqUWhVQTdPSHZwUGdocnpSL1VUcUVHTzZxVE9QS3BqbVBNYjdLc1NZdGsrODhDMUZydUFsZEIrWElXbjdmWW9KT2I3dDZ5Snk3S01QK0tnNjNkeXhINHRqNnJCWDdzSFhwVzVmMlNTTWM2VW04ZGFGVDZ4eWd0YWcxcC9TaVZMbzVzbGhmZXZsbTBqYklUWXRBTzlORUg3VjRvUms5T2FuOHlGNTdyN1JJK3ZMaldUbUQxbFFIM09keW5MaVovVC91aDFycUE5Rm82TUpmSHJxQjNXTzVsaitoam1VSDEvdDQ2YUlRYTVDUFFaY2Qva2dLMXFDeXpDQmVYckN4aDMyVWV3K0gvSmRaWHZMemlhZk82NnZremtNcmM0NUhwMzloOHRZYmRzSkFNaVZ2RzViNEhrNVhpcnEvT2hMcUd1Nk5SK3UwQko4aUJRYzRSQVUzYktsQjlpOUhrT2kvNDJWNDdjM3BoRHc9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzgxZTcyOGQ5ZDRjMmY2MzZmMDY3Zjg5Y2MxNDg2MmM8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz5iNzJlMTQwZTcyNjllYmNlOTEwN2JhZjFlZjI0MGJhZTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4yPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4yPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjBmNGVlNzEzLTQ3N2YtNTQyZC05YzAwLWIwNGE3NzIzNzBlZTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "5344bfad8f9cb8c0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "688" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmJLVWczcnJ5T3ZDb0Y1VEpZOVVYVHBQd2Jyb1ZpVDdoM3dvZVlvem5zVG41TzY3S2ZCRXY0Y0lNSjhtcGlNWWlSUUltdmlNNk11UU1hSWtVbUlpSFFBUThnVCUyRjg1bnFpZkNMc3pYcUZ4ZGU2cTZ1dHFKeUdxSjVhSEpNdUc4OGIlMkZUTiUyRm9KclFCZ2hkMWI1eHpoTmQ1SndHTUpDR2NlaXc5d2JOJTJGZFRNZTFpekg1Y21BekRuTzlUQjNQNVB1eFJCNVpGZ3BiU1RJbGdNSiUyRmNRd2clMkJreHphbHFJeTRGdVBuaUcyRkpCenZpUzF0MDQ0VVN3SW1EUEhXcmVLdDhUQXFSa1hoOXFvZlpRbURaVVE0dGdJalAzWUg1djkxZ0NmOGlvSG5QYWIlMkYlMkZXSGdtMFZsTjUzeEttMkdEUkg0NHNQSU9GbjZuUW5qM2p2WktIJTJGUWRSdHVWTnJkbE45bU54N1ZUWDg0NWhaMmV5TiUyRmI5dyUyRlB6WVh5TnJjcyUyRjVGZk9qQVRHWnFXdm5aVEVGckFNdFJKNzQxVnRQM2tTb1RJMGtNcVh5YngySllKdXMlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "5877436b-db1c-5ca8-a835-1432eb4005d7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NTg3NzQzNmItZGIxYy01Y2E4LWE4MzUtMTQzMmViNDAwNWQ3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "ed319dd9020b7567", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "189" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tc3ViLTImVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "8e4064a0-4439-5531-bf3f-33f97465b1f2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZjJlOWFkMTYtNTUwNS00MWZlLWEwMTUtZDM4YzA1MzBiZGZiPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjkrbXlkRkVSaE1hSWNLVWhxZHRIcm1uVGxiblVwckluQzdlS1JTZUhIdStLVWlrNTliSlgvb2xZTVQ4Y0ZmbFBHTnNTenNGTmdacVNWT2hYYkxLSm4rdWdseWlpOWNEL1pLb0FNVE1ZOVNBQ3lnSVZqaFVBOS9PSFZrb285NStMaEhvU3ZpZ0w4dTNNS0s3TUVWZHN3b25ERzkwS2NFSHYwcE1NWVlxTHJSSDZIcVV0aG1wNlVVV05sNkdGYldBL0RPWmkrT0RGY1d4WDNjcU80TFRjNFNEOWxyUGRXYmJUUjhYR1NYSFdBbmZSK2ltdXZ1dEhFODkxZTZqUXRaZG5HYXMzZHUxakl3b2tyMkk1ZTA2YzRxZ1hSVUVSUVBMRFR2NmxURVh0anpSb0trTUhQRm5SdXFEYk8rcGJFektWWm5jUXJIZHNuNldNd01jQU5kc0JITjRyKzRMcmxqZERhdkNEQVlJSTBCbS91OHJISlo5UDhTc3lzaW9HM1ZwNlpYQWEwMDM1Q0dsajk0TlhOWHFFMFNhOFJIOE1tckZGZ3c0RFdMZi81Mnc9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+Y2ZjZDIwODQ5NWQ1NjVlZjY2ZTdkZmY5Zjk4NzY0ZGE8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz45YWE0Njg3YzhiNzU2N2JhYTM4MGQ5ZjMwMGZlMjgzYTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4wPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4wPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjhlNDA2NGEwLTQ0MzktNTUzMS1iZjNmLTMzZjk3NDY1YjFmMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "2cd0c6ab53aafc7f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "700" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjk3RXE4Z0lxVk9IZzlCJTJGYmZCRHAlMkJLVjJmMEJGdUJuV0NUY01PekdoYW5vRjVRNDNwZXFtUzlSRmhUTmlXOEJudE5UalFoVUE3T0h2cFBnaHJ6UiUyRlVUcUVHTzZxVE9QS3BqbVBNYjdLc1NZdGslMkI4OEMxRnJ1QWxkQiUyQlhJV243ZllvSk9iN3Q2eUp5N0tNUCUyQktnNjNkeXhINHRqNnJCWDdzSFhwVzVmMlNTTWM2VW04ZGFGVDZ4eWd0YWcxcCUyRlNpVkxvNXNsaGZldmxtMGpiSVRZdEFPOU5FSDdWNG9SazlPYW44eUY1N3I3UkklMkJ2TGpXVG1EMWxRSDNPZHluTGlaJTJGVCUyRnVoMXJxQTlGbzZNSmZIcnFCM1dPNWxqJTJCaGptVUgxJTJGdDQ2YUlRYTVDUFFaY2QlMkZrZ0sxcUN5ekNCZVhyQ3hoMzJVZXclMkJIJTJGSmRaWHZMemlhZk82NnZremtNcmM0NUhwMzloOHRZYmRzSkFNaVZ2RzViNEhrNVhpcnElMkZPaExxR3U2TlIlMkJ1MEJKOGlCUWM0UkFVM2JLbEI5aTlIa09pJTJGNDJWNDdjM3BoRHclM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "bf4e6008-cff3-5da8-83c1-3751ffafe4d7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YmY0ZTYwMDgtY2ZmMy01ZGE4LTgzYzEtMzc1MWZmYWZlNGQ3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "212ca603cb52b364", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "692" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjklMkJteWRGRVJoTWFJY0tVaHFkdEhybW5UbGJuVXBySW5DN2VLUlNlSEh1JTJCS1VpazU5YkpYJTJGb2xZTVQ4Y0ZmbFBHTnNTenNGTmdacVNWT2hYYkxLSm4lMkJ1Z2x5aWk5Y0QlMkZaS29BTVRNWTlTQUN5Z0lWamhVQTklMkZPSFZrb285NSUyQkxoSG9TdmlnTDh1M01LSzdNRVZkc3dvbkRHOTBLY0VIdjBwTU1ZWXFMclJINkhxVXRobXA2VVVXTmw2R0ZiV0ElMkZET1ppJTJCT0RGY1d4WDNjcU80TFRjNFNEOWxyUGRXYmJUUjhYR1NYSFdBbmZSJTJCaW11dnV0SEU4OTFlNmpRdFpkbkdhczNkdTFqSXdva3IySTVlMDZjNHFnWFJVRVJRUExEVHY2bFRFWHRqelJvS2tNSFBGblJ1cURiTyUyQnBiRXpLVlpuY1FySGRzbjZXTXdNY0FOZHNCSE40ciUyQjRMcmxqZERhdkNEQVlJSTBCbSUyRnU4ckhKWjlQOFNzeXNpb0czVnA2WlhBYTAwMzVDR2xqOTROWE5YcUUwU2E4Ukg4TW1yRkZndzREV0xmJTJGNTJ3JTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by1zdWItMiZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "62f3ca36-bd76-5dad-85e5-9d6f8d2a796e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NjJmM2NhMzYtYmQ3Ni01ZGFkLTg1ZTUtOWQ2ZjhkMmE3OTZlPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "70c6b9381f441d06", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "189" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tc3ViLTImVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "9a17eb95-14f1-5679-8e6a-bccc24adbfc4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+Nzg0YTVmY2QtMTAzZC00ZTI0LWFjOWMtNzM2M2ExODczNGE3PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkpVTlJwbkd4RW1LanlhbjVqeTl0azF0Sk41K0tDd2g3akZ0MXYwc002U3ZGV2JlY1ZocVJnSmtZRUE3UjVpSGE1Wm83WTBDRm5mcGRVWVBzWnBNY2s4bnRPMTc1ZGxINUhkeTgvOXBHSG1EZENLV1lpTm95NU1uMUhGMi9KMFRVV1NZQW1La0V4UlF3dDduRXlCOURsS01kTDJTWmZyci96Y2J2WDg4MVdFSUxSQXAra1RVR3NaQkRsVFRsVW5IZjFzM3V4dzdkK0krRzVWMnkrS1E2cEU3MDR0VTVobmc0MWpNRTUxOHE2a2hmRWVzdW5Td20yc3ZuSnUxSjVlMW44UjZzYlNZaDFEY1dud0RKZzlZZ21rZ01pdXBIVVd2WlZPR0JocmNGTGFjeTB3VVR1aHJuY1FTNG5uQVlBazhUeXdZQkxMUXNQdWFqQzQvT0tVQy8yLzJhSTRUenZNRzRneVZoOG9jTHNkbWh2Q3NZK3FvS3VZT2Y0VU1PK3ZGYUp0cEVBZEhXdjFGY1JZUnBNSFpmTDMrdEFsVFFCbWx0cEx4V2FvOVhBUVU9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz4zMTRjNzdiMjQ5ODkzYzZiM2M3NjVhNDJjYzA4YjI0NTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4xPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4xPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjlhMTdlYjk1LTE0ZjEtNTY3OS04ZTZhLWJjY2MyNGFkYmZjNDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "e752af3b53d28c28", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "189" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tc3ViLTImVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "9232e5f4-e804-5428-9310-b2add8583d57" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OWQ5NzUzMDQtYWI0MC00ZDljLThkZjgtODQ2MzBmMTRjNjQ1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlRrUzRTamljRHJuZGNGTENDUlIxdG9ucHNUcG1MRE1kaHZzNnNmYStST0lnTVdWb1RoaE42K1pHN0hXeW81cGdpRXZ3MklMWFlMd0U0ZkhYZnhnL21GWGxzSklMcTRVWUladVdoRWcvbTZXK0tNTFNqNWovSGhKWGtUTTNlSzJtOE5LVjdmQ3ZOcmNVWlBrSjY1eS9CZWxSTmV4L3ZQNVVyODBMUmhXT2ZWS0JSOTl2aXdpRkFmblRyRnpRMzIvOFBQUC8ybUF3c3I5ZVVsaVZZQno4QW9sUkh4aU50MnBXTW96dVZRTVd2TlZ4V0t6YnBnZSs4d3doenVYKzNUblVDMUFNK2x4RWZtTDB1WGIwMTVtSkFqanc0eTVheTdDTkJvMHdDK01vQzh4SUNKMEs3c3RaQm1haEMvYmx2VGY1U0RFYm5sM1NkZzhEcURxUGxpVHBiMVJaK2FFMjJXTVF1aGlsb0FaNk5hZXRWb3F3aWJTNEkvbXlRZ0VYcms1STIzbEI3TnVvTFplYmZmUDQ0K1Y0RENiMExrM1RSeWQwczlWRlVqbGVFQ1U9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzgxZTcyOGQ5ZDRjMmY2MzZmMDY3Zjg5Y2MxNDg2MmM8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz5iNzJlMTQwZTcyNjllYmNlOTEwN2JhZjFlZjI0MGJhZTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4yPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4yPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjkyMzJlNWY0LWU4MDQtNTQyOC05MzEwLWIyYWRkODU4M2Q1NzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "cdeedf2699c6f96f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "692" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkpVTlJwbkd4RW1LanlhbjVqeTl0azF0Sk41JTJCS0N3aDdqRnQxdjBzTTZTdkZXYmVjVmhxUmdKa1lFQTdSNWlIYTVabzdZMENGbmZwZFVZUHNacE1jazhudE8xNzVkbEg1SGR5OCUyRjlwR0htRGRDS1dZaU5veTVNbjFIRjIlMkZKMFRVV1NZQW1La0V4UlF3dDduRXlCOURsS01kTDJTWmZyciUyRnpjYnZYODgxV0VJTFJBcCUyQmtUVUdzWkJEbFRUbFVuSGYxczN1eHc3ZCUyQkklMkJHNVYyeSUyQktRNnBFNzA0dFU1aG5nNDFqTUU1MThxNmtoZkVlc3VuU3dtMnN2bkp1MUo1ZTFuOFI2c2JTWWgxRGNXbndESmc5WWdta2dNaXVwSFVXdlpWT0dCaHJjRkxhY3kwd1VUdWhybmNRUzRubkFZQWs4VHl3WUJMTFFzUHVhakM0JTJGT0tVQyUyRjIlMkYyYUk0VHp2TUc0Z3lWaDhvY0xzZG1odkNzWSUyQnFvS3VZT2Y0VU1PJTJCdkZhSnRwRUFkSFd2MUZjUllScE1IWmZMMyUyQnRBbFRRQm1sdHBMeFdhbzlYQVFVJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by1zdWItMiZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "137844ed-e2ff-5891-8f19-13b4d2a3d30f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MTM3ODQ0ZWQtZTJmZi01ODkxLThmMTktMTNiNGQyYTNkMzBmPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "4d36e490575a944d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "700" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlRrUzRTamljRHJuZGNGTENDUlIxdG9ucHNUcG1MRE1kaHZzNnNmYSUyQlJPSWdNV1ZvVGhoTjYlMkJaRzdIV3lvNXBnaUV2dzJJTFhZTHdFNGZIWGZ4ZyUyRm1GWGxzSklMcTRVWUladVdoRWclMkZtNlclMkJLTUxTajVqJTJGSGhKWGtUTTNlSzJtOE5LVjdmQ3ZOcmNVWlBrSjY1eSUyRkJlbFJOZXglMkZ2UDVVcjgwTFJoV09mVktCUjk5dml3aUZBZm5UckZ6UTMyJTJGOFBQUCUyRjJtQXdzcjllVWxpVllCejhBb2xSSHhpTnQycFdNb3p1VlFNV3ZOVnhXS3picGdlJTJCOHd3aHp1WCUyQjNUblVDMUFNJTJCbHhFZm1MMHVYYjAxNW1KQWpqdzR5NWF5N0NOQm8wd0MlMkJNb0M4eElDSjBLN3N0WkJtYWhDJTJGYmx2VGY1U0RFYm5sM1NkZzhEcURxUGxpVHBiMVJaJTJCYUUyMldNUXVoaWxvQVo2TmFldFZvcXdpYlM0SSUyRm15UWdFWHJrNUkyM2xCN051b0xaZWJmZlA0NCUyQlY0RENiMExrM1RSeWQwczlWRlVqbGVFQ1UlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXN1Yi0yJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "6d87be04-11f4-5248-afb0-e95d21a8cb37" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NmQ4N2JlMDQtMTFmNC01MjQ4LWFmYjAtZTk1ZDIxYThjYjM3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "73c350d82edd81f8", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "169" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXRvcC0xJTNBODE3NmIwZTEtMzE1MC00YmZjLTg5MmEtZmUwYjliOTAzMzQxJlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "b506edf9-7bb4-5222-8f98-baa04be9e5f4" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5iNTA2ZWRmOS03YmI0LTUyMjItOGY5OC1iYWEwNGJlOWU1ZjQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "5845dee0c67fc4d0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "137" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by1zdWItMiZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:17 GMT" ], "X-Amzn-Requestid": [ "4bbe23a5-580a-542a-8f0d-74fc6857ad55" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD40YmJlMjNhNS01ODBhLTU0MmEtOGYwZC03NGZjNjg1N2FkNTU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "13595e601dfc9736", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "169" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVVuc3Vic2NyaWJlJlN1YnNjcmlwdGlvbkFybj1hcm4lM0Fhd3MlM0FzbnMlM0F1cy1lYXN0LTIlM0E0NjIzODAyMjU3MjIlM0FTTlNUb3BpY1Jhd1NlbmRSZWNlaXZlVHdvLXRvcC0xJTNBYzAwZDMxMzUtY2I0My00OGIxLWExNDMtYjU1MDMzOWE4MjU5JlZlcnNpb249MjAxMC0wMy0zMQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:16 GMT" ], "X-Amzn-Requestid": [ "1fbf89fa-3588-53db-b784-dea305d5840d" ] }, "Body": "PFVuc3Vic2NyaWJlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD4xZmJmODlmYS0zNTg4LTUzZGItYjc4NC1kZWEzMDVkNTg0MGQ8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvVW5zdWJzY3JpYmVSZXNwb25zZT4K" } }, { "ID": "5f6155da9109f03e", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "137" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU05TVG9waWNSYXdTZW5kUmVjZWl2ZVR3by1zdWItMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:17 GMT" ], "X-Amzn-Requestid": [ "752e1469-48cb-5721-bb67-433078968e5e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD43NTJlMTQ2OS00OGNiLTU3MjEtYmI2Ny00MzMwNzg5NjhlNWU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "de39879c02653d74", "Request": { "Method": "POST", "URL": "https://sns.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "123" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVRvcGljJlRvcGljQXJuPWFybiUzQWF3cyUzQXNucyUzQXVzLWVhc3QtMiUzQTQ2MjM4MDIyNTcyMiUzQVNOU1RvcGljUmF3U2VuZFJlY2VpdmVUd28tdG9wLTEmVmVyc2lvbj0yMDEwLTAzLTMx" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "201" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:17 GMT" ], "X-Amzn-Requestid": [ "ae7a659a-e195-541d-bd35-32c3d1c833cb" ] }, "Body": "PERlbGV0ZVRvcGljUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9zbnMuYW1hem9uYXdzLmNvbS9kb2MvMjAxMC0wMy0zMS8iPgogIDxSZXNwb25zZU1ldGFkYXRhPgogICAgPFJlcXVlc3RJZD5hZTdhNjU5YS1lMTk1LTU0MWQtYmQzNS0zMmMzZDFjODMzY2I8L1JlcXVlc3RJZD4KICA8L1Jlc3BvbnNlTWV0YWRhdGE+CjwvRGVsZXRlVG9waWNSZXNwb25zZT4K" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/000077500000000000000000000000001367004507500251475ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestAs/000077500000000000000000000000001367004507500263525ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestAs/aws_test.replay000066400000000000000000000431261367004507500314270ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSVAJZYXwv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "4d2b697abbe1234f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY0FzX2F3c190ZXN0LXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "345" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:52 GMT" ], "X-Amzn-Requestid": [ "7a00f72c-87ca-55ae-98f2-a075b74af453" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNBc19hd3NfdGVzdC10b3AtMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjdhMDBmNzJjLTg3Y2EtNTVhZS05OGYyLWEwNzViNzRhZjQ1MzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "58eb30d3d8f39b84", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0FzX2F3c190ZXN0LXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "397" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:53 GMT" ], "X-Amzn-Requestid": [ "67efa7d5-ea0d-5c77-afef-f08cda8c9d8a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY0FzX2F3c190ZXN0LXRvcC0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjY3ZWZhN2Q1LWVhMGQtNWM3Ny1hZmVmLWYwOGNkYThjOWQ4YTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "2eff22d4f5ed7b81", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "663" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNBc19hd3NfdGVzdC10b3AtMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQXNfYXdzX3Rlc3QtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:53 GMT" ], "X-Amzn-Requestid": [ "a9e89ff6-4549-56d0-b910-c8af75c8e72d" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YTllODlmZjYtNDU0OS01NmQwLWI5MTAtYzhhZjc1YzhlNzJkPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "d1f5237d3299a112", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "217" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0FzX2F3c190ZXN0LXRvcC0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQm9keT14JlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "467" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:53 GMT" ], "X-Amzn-Requestid": [ "9d857ce9-d90a-5bf7-bb2b-2bb0e98bba0a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjM1YTg1YmE1LTI1ZmItNDBjZS1iMTg1LTBlNzc5OWIwZjYyZDwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjlkZDRlNDYxMjY4YzgwMzRmNWM4NTY0ZTE1NWM2N2E2PC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjlkODU3Y2U5LWQ5MGEtNWJmNy1iYjJiLTJiYjBlOThiYmEwYTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "cee406006176e024", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQXNfYXdzX3Rlc3QtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "852" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:53 GMT" ], "X-Amzn-Requestid": [ "64f6ef09-86fd-5f65-b4d8-b850b67c5e98" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MzVhODViYTUtMjVmYi00MGNlLWIxODUtMGU3Nzk5YjBmNjJkPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjIxb0UzSTFEajlCZzgwbVBTZVEzbmpxaG1kaVdpZGIxU0NWWVVBWERCVFY3M1hsbm1XTy90R24waWdWT2hycHY3UTAwd09jMk5QR0xaNEtEWXNlYTJ1R0FsdjRjNmxDT3I5MXJvVHB5WDRpZXJmMUJPM1I5dkxOM0dlQ1A0NWY1dGwxd2hXYXlOMWxxb0w1d2dZTTRyMjhPSWJTNE52VHJYdEpCVWFxLzFuWS92TnU3U3NXWklZMkgxaTRGOUswaHhpb1I2MWtlTU1nVlhmcE5kZXZGTG1BTWxqaGVTQ2I2N0JTVy80QmVCc2pJdWJTaXVjSXBvQzQ0Y1JmZzE0Qkd2cnNUU01sb1RwbE5pRjUrYUhGSDhSZE91aStzSVBXV29PQWNlRVRpU1ZQSTJPVE45NVQ2OW1RSFpPVTdWRmdCb0E1eTV3cVpaWEtEdTE5M05UUW9pVllsS1JjbzMzMUVyU01RNUJQck5GeURkRERFR3VHYlpRMkFScy9YMTkwMFR3UEdsK25wRE5GQkErSXFEWTAvRFE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjlkZDRlNDYxMjY4YzgwMzRmNWM4NTY0ZTE1NWM2N2E2PC9NRDVPZkJvZHk+PEJvZHk+eDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjY0ZjZlZjA5LTg2ZmQtNWY2NS1iNGQ4LWI4NTBiNjdjNWU5ODwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "87b651b7599f1182", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "660" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjIxb0UzSTFEajlCZzgwbVBTZVEzbmpxaG1kaVdpZGIxU0NWWVVBWERCVFY3M1hsbm1XTyUyRnRHbjBpZ1ZPaHJwdjdRMDB3T2MyTlBHTFo0S0RZc2VhMnVHQWx2NGM2bENPcjkxcm9UcHlYNGllcmYxQk8zUjl2TE4zR2VDUDQ1ZjV0bDF3aFdheU4xbHFvTDV3Z1lNNHIyOE9JYlM0TnZUclh0SkJVYXElMkYxblklMkZ2TnU3U3NXWklZMkgxaTRGOUswaHhpb1I2MWtlTU1nVlhmcE5kZXZGTG1BTWxqaGVTQ2I2N0JTVyUyRjRCZUJzakl1YlNpdWNJcG9DNDRjUmZnMTRCR3Zyc1RTTWxvVHBsTmlGNSUyQmFIRkg4UmRPdWklMkJzSVBXV29PQWNlRVRpU1ZQSTJPVE45NVQ2OW1RSFpPVTdWRmdCb0E1eTV3cVpaWEtEdTE5M05UUW9pVllsS1JjbzMzMUVyU01RNUJQck5GeURkRERFR3VHYlpRMkFScyUyRlgxOTAwVHdQR2wlMkJucERORkJBJTJCSXFEWTAlMkZEUSUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQXNfYXdzX3Rlc3QtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:53 GMT" ], "X-Amzn-Requestid": [ "2646e3c4-f3f0-520a-9451-b49dc37143f7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MjY0NmUzYzQtZjNmMC01MjBhLTk0NTEtYjQ5ZGMzNzE0M2Y3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "833ec2518cba72f2", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "204" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZ1cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRm5vbmV4aXN0ZW50LXF1ZXVlJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQm9keT0mVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:53 GMT" ], "X-Amzn-Requestid": [ "01e6e78a-816a-5446-9ef2-b0d3b1eb55bb" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD4wMWU2ZTc4YS04MTZhLTU0NDYtOWVmMi1iMGQzYjFlYjU1YmI8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } }, { "ID": "d1086a3cf37b5413", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:53 GMT" ], "X-Amzn-Requestid": [ "5738393a-b010-5238-9c93-6e63809143c5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD41NzM4MzkzYS1iMDEwLTUyMzgtOWM5My02ZTYzODA5MTQzYzU8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } }, { "ID": "eb6471fd39ef1c6e", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "131" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNBc19hd3NfdGVzdC10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:53 GMT" ], "X-Amzn-Requestid": [ "6b2cf079-017f-5b5e-80cd-a72031fedaa3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD42YjJjZjA3OS0wMTdmLTViNWUtODBjZC1hNzIwMzFmZWRhYTM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }verify_As_returns_false_when_passed_nil.replay000066400000000000000000000441431367004507500376240ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestAs{ "Initial": "AQAAAA7WcSVBK7pumf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "cddce5ce31338f75", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "104" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "376" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "04031d10-150f-59ac-ada2-4a49258e7455" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtdG9wLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4wNDAzMWQxMC0xNTBmLTU5YWMtYWRhMi00YTQ5MjU4ZTc0NTU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "700dce612fcfb7be", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "194" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "428" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "69e7f4fd-a70d-5715-adb8-a3a4978f6aec" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD42OWU3ZjRmZC1hNzBkLTU3MTUtYWRiOC1hM2E0OTc4ZjZhZWM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "772bffcd4fa4f865", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "725" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtdG9wLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "5e7066be-5448-5358-ae7d-31e764ca5ea1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NWU3MDY2YmUtNTQ0OC01MzU4LWFlN2QtMzFlNzY0Y2E1ZWExPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "6f827c208ca1fd35", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "248" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuSWQ9MCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9eCZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "467" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "06372af9-e451-50dd-957a-7da0d4d30d24" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPmNiZjllMzliLWZjOGQtNDczZS1hY2U5LTdmMDExY2Q5YTI1NzwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjlkZDRlNDYxMjY4YzgwMzRmNWM4NTY0ZTE1NWM2N2E2PC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjA2MzcyYWY5LWU0NTEtNTBkZC05NTdhLTdkYTBkNGQzMGQyNDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "f73ea4e045b0f1c5", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "214" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQXNfdmVyaWZ5X0FzX3JldHVybnNfZmFsc2Vfd2hlbl9wYXNzZWRfbmlsLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "892" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "dab66149-479d-5c90-a4fe-3610771fa169" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+Y2JmOWUzOWItZmM4ZC00NzNlLWFjZTktN2YwMTFjZDlhMjU3PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnpidi9GN0hjWndWMC9lNERPVEt2TTIyaE1mcXNieEMrSjIzTElWakZCdDFQMmZONWRVNHo3QXBZTlZzV3JmVVJMZ1NYelQzSVVQMk5acG5FSWFmMEdJcENzTkxISDVNK2hTUTZpZDQ3K3VsRWFsSVRSVHh0eXc3ZjVkaHVxeFovNGNvOWNuRENzeW1TSERhOWErMjZqM0tqR2ZwVzl5eE5BY3haMWVQTzdxblk5V2VlbGIzVUVWSGUyMy9NOUhvcTFTeVlzaEs5YkhWeWYxMFdmZGZwVVA4NTdpZ0tYOTVjSzloclVQSTdlZmR3WTVuS0NsUUJCeUxPMTk5Q2E2aDBUa2FuUHJjeVFHT0cyeThIaGZXZmUrVkZhREtvN1VWNDhwMkdoMTg5d2h3Q3owR0ExVm44aDZlRjRSUTB0TUNiVGVNamk5NzFHS2lBS3BmQ3ZadjBxY2VEcGQyWXBTL3RlWXAxZ05NWTVCUXlUSUZaNktOSkRQYkpCZ2hDTGFwT1AvTVJPSGEyRXZXd2pWZHh2SVdPenRZK0VmUnhobWVrOWtrM2lmRDlSdmVvUEJNNE9aYkdGVkZ3WjBXOUlGRTM8L1JlY2VpcHRIYW5kbGU+PE1ENU9mQm9keT45ZGQ0ZTQ2MTI2OGM4MDM0ZjVjODU2NGUxNTVjNjdhNjwvTUQ1T2ZCb2R5PjxCb2R5Png8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kYWI2NjE0OS00NzlkLTVjOTAtYTRmZS0zNjEwNzcxZmExNjk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "79abb6ba164d0fe5", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "731" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnpidiUyRkY3SGNad1YwJTJGZTRET1RLdk0yMmhNZnFzYnhDJTJCSjIzTElWakZCdDFQMmZONWRVNHo3QXBZTlZzV3JmVVJMZ1NYelQzSVVQMk5acG5FSWFmMEdJcENzTkxISDVNJTJCaFNRNmlkNDclMkJ1bEVhbElUUlR4dHl3N2Y1ZGh1cXhaJTJGNGNvOWNuRENzeW1TSERhOWElMkIyNmozS2pHZnBXOXl4TkFjeFoxZVBPN3FuWTlXZWVsYjNVRVZIZTIzJTJGTTlIb3ExU3lZc2hLOWJIVnlmMTBXZmRmcFVQODU3aWdLWDk1Y0s5aHJVUEk3ZWZkd1k1bktDbFFCQnlMTzE5OUNhNmgwVGthblByY3lRR09HMnk4SGhmV2ZlJTJCVkZhREtvN1VWNDhwMkdoMTg5d2h3Q3owR0ExVm44aDZlRjRSUTB0TUNiVGVNamk5NzFHS2lBS3BmQ3ZadjBxY2VEcGQyWXBTJTJGdGVZcDFnTk1ZNUJReVRJRlo2S05KRFBiSkJnaENMYXBPUCUyRk1ST0hhMkV2V3dqVmR4dklXT3p0WSUyQkVmUnhobWVrOWtrM2lmRDlSdmVvUEJNNE9aYkdGVkZ3WjBXOUlGRTMmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0FzX3ZlcmlmeV9Bc19yZXR1cm5zX2ZhbHNlX3doZW5fcGFzc2VkX25pbC10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "3ac5d790-fb90-5496-8e6a-80c9cb12896f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+M2FjNWQ3OTAtZmI5MC01NDk2LThlNmEtODBjOWNiMTI4OTZmPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "286d3169b964299f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "204" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZ1cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRm5vbmV4aXN0ZW50LXF1ZXVlJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQm9keT0mVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "d388079e-4144-5773-9b01-50c771c64a8a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD5kMzg4MDc5ZS00MTQ0LTU3NzMtOWIwMS01MGM3NzFjNjRhOGE8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } }, { "ID": "5b56a08ace3539bc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "ff373a2a-8d29-5a1b-9fb9-6d73bdab77e2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD5mZjM3M2EyYS04ZDI5LTVhMWItOWZiOS02ZDczYmRhYjc3ZTI8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } }, { "ID": "05a0d10ce8a3c7c0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "162" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNBc192ZXJpZnlfQXNfcmV0dXJuc19mYWxzZV93aGVuX3Bhc3NlZF9uaWwtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:54 GMT" ], "X-Amzn-Requestid": [ "8f524e1b-56cf-5c6c-909e-1942664d4195" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD44ZjUyNGUxYi01NmNmLTVjNmMtOTA5ZS0xOTQyNjY0ZDQxOTU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestBatching.replay000066400000000000000000001575371367004507500307660ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU9OuD8vP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "97b6cd42e87f422d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "342" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "0f9ab2f7-87f5-5067-9443-e5aeb78b8687" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNCYXRjaGluZy10b3AtMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjBmOWFiMmY3LTg3ZjUtNTA2Ny05NDQzLWU1YWViNzhiODY4NzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "38f0eaeba5dd64ba", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "160" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "394" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "94f2103e-4863-5f5c-b88e-4767781d19bc" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY0JhdGNoaW5nLXRvcC0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjk0ZjIxMDNlLTQ4NjMtNWY1Yy1iODhlLTQ3Njc3ODFkMTliYzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "cc686bc1b211cd55", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "657" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNCYXRjaGluZy10b3AtMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "7f565b26-7ad0-5749-a79b-0c7f4aae01a9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+N2Y1NjViMjYtN2FkMC01NzQ5LWE3OWItMGM3ZjRhYWUwMWE5PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "9746d4b290f83ea0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "679" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0JhdGNoaW5nLXRvcC0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQm9keT1oZWxsbyt3b3JsZCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuTWVzc2FnZUJvZHk9aGVsbG8rd29ybGQmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4zLklkPTImU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4zLk1lc3NhZ2VCb2R5PWhlbGxvK3dvcmxkJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNC5JZD0zJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNC5NZXNzYWdlQm9keT1oZWxsbyt3b3JsZCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjUuSWQ9NCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjUuTWVzc2FnZUJvZHk9aGVsbG8rd29ybGQmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42LklkPTUmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42Lk1lc3NhZ2VCb2R5PWhlbGxvK3dvcmxkJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1452" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "328b2d0a-ae76-5776-a245-7a539e082196" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPmZmZTJmYWI4LTRkNGItNDcxMC1iNWExLTQ5YmY1MjM1YWExZTwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxTZW5kTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjE8L0lkPjxNZXNzYWdlSWQ+OTE4ZTA0MTktNWU1MS00YWU5LWIzYTktNDkzMTQ0MzYyMGJmPC9NZXNzYWdlSWQ+PE1ENU9mTWVzc2FnZUJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mTWVzc2FnZUJvZHk+PC9TZW5kTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PFNlbmRNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MjwvSWQ+PE1lc3NhZ2VJZD5mYzZiZWUzYi1mZjMxLTQzMmUtYmUxOS04OTRlMTcxMzhmNzI8L01lc3NhZ2VJZD48TUQ1T2ZNZXNzYWdlQm9keT41ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMzwvTUQ1T2ZNZXNzYWdlQm9keT48L1NlbmRNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4zPC9JZD48TWVzc2FnZUlkPmM0NGQ4NjA1LTJmMmItNDI4Ny1iMWU3LWQ4YTAyNzU5MGExOTwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxTZW5kTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjQ8L0lkPjxNZXNzYWdlSWQ+MWFlNmQ3MTYtMjMyNi00NGUyLTkxNmYtYThkZjZlYzU0ZGM1PC9NZXNzYWdlSWQ+PE1ENU9mTWVzc2FnZUJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mTWVzc2FnZUJvZHk+PC9TZW5kTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PFNlbmRNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+NTwvSWQ+PE1lc3NhZ2VJZD45NDcxMGFkNy1jMDQ0LTRlYTAtODdhZi1mMDdkMGVlYjRkNjg8L01lc3NhZ2VJZD48TUQ1T2ZNZXNzYWdlQm9keT41ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMzwvTUQ1T2ZNZXNzYWdlQm9keT48L1NlbmRNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48L1NlbmRNZXNzYWdlQmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zMjhiMmQwYS1hZTc2LTU3NzYtYTI0NS03YTUzOWUwODIxOTY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9TZW5kTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "cc38b5bcfb500ccc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "679" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0JhdGNoaW5nLXRvcC0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQm9keT1oZWxsbyt3b3JsZCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuTWVzc2FnZUJvZHk9aGVsbG8rd29ybGQmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4zLklkPTImU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4zLk1lc3NhZ2VCb2R5PWhlbGxvK3dvcmxkJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNC5JZD0zJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNC5NZXNzYWdlQm9keT1oZWxsbyt3b3JsZCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjUuSWQ9NCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjUuTWVzc2FnZUJvZHk9aGVsbG8rd29ybGQmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42LklkPTUmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42Lk1lc3NhZ2VCb2R5PWhlbGxvK3dvcmxkJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1452" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "6f6acf08-092f-55f9-93e5-985139519319" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjMwOTBjYmVkLTM4ZjEtNDAyNS1hZDRkLWZkZmExODY5OTZjYjwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxTZW5kTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjE8L0lkPjxNZXNzYWdlSWQ+MzdkNDdiYzItMGVkMy00MmYzLWI4MGUtZjBmZTQ3ODE4MzQwPC9NZXNzYWdlSWQ+PE1ENU9mTWVzc2FnZUJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mTWVzc2FnZUJvZHk+PC9TZW5kTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PFNlbmRNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MjwvSWQ+PE1lc3NhZ2VJZD41YWU0NmJjNC1iYzI4LTQ1YjMtODYzMi0yOTlkOWY3MTU2OTc8L01lc3NhZ2VJZD48TUQ1T2ZNZXNzYWdlQm9keT41ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMzwvTUQ1T2ZNZXNzYWdlQm9keT48L1NlbmRNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4zPC9JZD48TWVzc2FnZUlkPjBhZmZhMzNlLTc5N2QtNDViNi05NjNmLTUwNzkyMDQ3ZTRlZDwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxTZW5kTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjQ8L0lkPjxNZXNzYWdlSWQ+NzNmMjlkMWQtNmNhYi00ZmU1LTg3ZTYtMWRlNThlMDhkMDU1PC9NZXNzYWdlSWQ+PE1ENU9mTWVzc2FnZUJvZHk+NWViNjNiYmJlMDFlZWVkMDkzY2IyMmJiOGY1YWNkYzM8L01ENU9mTWVzc2FnZUJvZHk+PC9TZW5kTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PFNlbmRNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+NTwvSWQ+PE1lc3NhZ2VJZD43NjdiYWMyYS00ZGJkLTQyZjQtYmY4NC02MTZlNThiNzBlNzY8L01lc3NhZ2VJZD48TUQ1T2ZNZXNzYWdlQm9keT41ZWI2M2JiYmUwMWVlZWQwOTNjYjIyYmI4ZjVhY2RjMzwvTUQ1T2ZNZXNzYWdlQm9keT48L1NlbmRNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48L1NlbmRNZXNzYWdlQmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD42ZjZhY2YwOC0wOTJmLTU1ZjktOTNlNS05ODUxMzk1MTkzMTk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9TZW5kTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "68fdf10d6cd73e63", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "5c0e73c4-603d-5aba-b395-249d5043dc5a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MzA5MGNiZWQtMzhmMS00MDI1LWFkNGQtZmRmYTE4Njk5NmNiPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmJTS2dGQW5Vb2RkTEo1Ums3eitLQWtDZW1USEE0MW1uQlNzYTlSTk1pMVp3dm1Pa28rSkxCYXBMMnNpYlU5R0VuQVNUK2R0VFAwWUt5N2o3QkNWVGJTOHZQZitoUllHT3M0T3NudzRabnlOcW1adjR6ZlgxVVNDNnBER0hiQThhWDJWeUtjTnpIRG9hczQzb1V5ejUvaWJwcWZONWdMQTdJU1hkd0ZqemM5TWFEQU50b3V2b0ZCRS82VmJhY0ZLeTcvUmkrSFlCbktZNlpzOUxDU0huVEs3L2Q1aEhFUlhjUStDR2RpVk9nV0V4L2hjYXFoYlRBZzBBVTljR2xJWEUrc1N6bWdPRDhmaUJjb0Y4QnA5STVjVzNqdjBHUktqM3ppMXYrWlMwL2M4aWlYM1BjMHhsNThwMEUvRll6ZG5jbWdZSTY2SUJvV0FtVWhCdmNnRVdrMEgyNFZTOG9PK1l3TnNiMzhURHhZQU8xUVFGY2FlTm5JNmN2QmwvNDRTeWxCdUxFZllyQlhBZk5xQnp2ZHBpZlE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41YzBlNzNjNC02MDNkLTVhYmEtYjM5NS0yNDlkNTA0M2RjNWE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "6702e6108359ea97", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "87dce427-f650-5b97-a58e-b37ec62efd77" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MWFlNmQ3MTYtMjMyNi00NGUyLTkxNmYtYThkZjZlYzU0ZGM1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQk5Lb1ZOZ0twUXY4V1hiUlVkQ0NweGJPVld3bm9wYWgzUk1SSmVXNEFWVHdKanErdGo1ZWcxM3VBOU5wNVFwZjg3Rno4UHV1cGNxdGt3R0M5dXpESzZVV1lyRk5iVy9WSnlhYW8zbzBkL2srVTg2Q1lwTSs2bGlxVllIeVl0TUhZUjFGR1RHNHFyN1dHUzE5YjhQR0VrSGtpNGp2SlR3ZnNGOWxlUm9mc2lFV090U01zdjQ0eG5GaFBDRlh5ZERvYytXMmc4TzkxMkxVY3pHTG1QWWpFVnZ2T0tzbHFicnhqZ0w2ZDJ3a0h6NEdZdithdXN2bC9BUDVnWUdEQmhMSG85T0NNRnVUNGc1WWNucVBwTFJTOUp3WVltWHpjR0x1U2hMNXp2eUxRZjJYUlZtYVA0ZzV6Qm9SRVlxSHpzUzBtRGxRVVJ0cHA4Tm5nV0FaWERxNkNmWjFjWmp6eWp1eGlaOGhueXhtRW1BbEdCUi9vR2FWKzNlM3NSUElNTERycG80Vm1PT1QweDFnQ25PdktWeFNSUlE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD44N2RjZTQyNy1mNjUwLTViOTctYTU4ZS1iMzdlYzYyZWZkNzc8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "799bcd94c02021ea", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "5f8bad81-e05e-5386-9730-fad8d0206566" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZmM2YmVlM2ItZmYzMS00MzJlLWJlMTktODk0ZTE3MTM4ZjcyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkxsVFZXdVppSEJSNHVXeEdGUThDZ29HL0E5V1pqVitPVFJvTlFOZkJGam03R1lvcVVlcjJxVEF4VGRCM2p3b3hUT0RiVWtlWncvM2lhaG52OFk1UUhjNXlDSk84Tm1zRy9lUmswRU50VWFsY0Q1bFpuMkdtS2Fiem95d2JVcURLYWFvWFJ2TGVFc0xNZmVJWldLZk8xOXI3WWVUMENFaHdGRHE1MTdyaGFhc01jR1NUQUhOU0VyZWs5M04waDFqRUk5aHIrQXBKdnZzSHNjV3hPTk5YMEJJbkF3TnRkSnBoMGhoNStod0pDMUJKcytzc0Q5Y3BkZVBocGdIWVVIYmRtODlnUHBVaW1yM0ZOMHB1MVpSV3BTZnduaDhrRGplQnczMTBoUGdGV0VWUG5ES1NKOVhoQXVhend2NWh0QVBXblREb3dhbFViZHl0VjVRZnNiNkozUmRHWko1V293cUFZK3hUVVU1QXhGL0xNVnV4ZXhZNWhNOGtJcTlHb1NLajhXZ1N6Ri9hZjlkV2N2WkV2bzg1S3c9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41ZjhiYWQ4MS1lMDVlLTUzODYtOTczMC1mYWQ4ZDAyMDY1NjY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "e723b52ef3d15bd9", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:50 GMT" ], "X-Amzn-Requestid": [ "3d153dc7-996f-5e26-b4dd-6a9ea91158c6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZmZlMmZhYjgtNGQ0Yi00NzEwLWI1YTEtNDliZjUyMzVhYTFlPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQit1aGlOS1g3SmltQ0NLV1kvaE5mTTJOdXIvUjRsTWExWk1saTBtb2Q0ZHBqNGlRS3k3RTJWdksxWWo3aWZ3NWFsTFVHeTRDZnNiYUloWlRTbVBZUHRXVmUzbmVuYk5ta0dsNzFtSGhJZGlTcG1NN1ZJeHFVWktUWnBodzhYZ2o5Y01BQ0VpUGppSHFvbVRMdklzeW40bm9CYUJwNS9UTlFWdDZPend6UU00eGJ3alcxYU01Zm5mYlFDSXdHSk5IOXhZTWM1a0k3VGlKYmpIZHo1R1MxZG1wbmxLMW9xQTFTaUdrYnY3VW4yWWJZQ3kvcmw0M254OHlNL1l5NVR2b29GZVA0dUNQTXJ0YkNpZHNCVFJ3UStkWWZURC9CdjdWYTl2L1M0SVo5TVB6T0NKK0ZkcGNZd1NHQ3FHNTJISy9KNXpmYStMempWUnliWG5kYjN1Qzg0MC95aGRISTBqeVV4ZkpUQUhiYk1SVUx0UzQyREo2U3BlTWRDTWsySXp0L0dDM3hiYk0vQnVnZnRPTXBLRTdRZlE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zZDE1M2RjNy05OTZmLTVlMjYtYjRkZC02YTllYTkxMTU4YzY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "882a365387308521", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "4ac236a9-9921-52d6-b53f-61f0a95e1436" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OTQ3MTBhZDctYzA0NC00ZWEwLTg3YWYtZjA3ZDBlZWI0ZDY4PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQm1qSEZGbkt6ZFhoYjFVWGZJMDFVMFZ2cEcrUWM2OTBiZUg4NWJBTjhRNmVEVERkVjFIb1hZam1lNng5SzY5QTFVOEl2cEtQNHVsRlBOTk80ZG44Z3hnVHlLLzBlTkgwUDQxOC9aM0ZxdVFuSktaTmNmZTFPUDFmSzdYRU1rd1FkejQ4WHlhTmhtdUlBV3JVT0xaUGc3dXJJTnFwSjBVTEtUcDlCV0hrNnNGeVhRSVBHYzhZSXU2dGVLc2l1blg3Rm5VeGQ1T24vcGY5Ym1JYUduQmdERnJ1Wkc0TXc2Mnc2ZGl4NGM4V0VwUFRBWjNIKzM4T0hYdUpBZ1FoZkRSaHQrUGRBS0ZYTng3OE14OFYyNUdsTG1pNnFoRmMwNVRNeW5ZaUtTaHlWWjBiSysrbkVZMmZZejZJTnhsN0dsVVJQZzAydlNEd0d0cndoSm95R0R1dFh0SWdQMzVoVENaTEFydEptb0twc3BCR005QlpJVzc2MDFwY2RXbHJyU1FpYitDQk45N0hWN2FBRzRHOEhOaHdLY1E9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD40YWMyMzZhOS05OTIxLTUyZDYtYjUzZi02MWYwYTk1ZTE0MzY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "867a036be8d493b2", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "a21005e6-2c0f-5ccd-8e57-52bf1c704a2d" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MzdkNDdiYzItMGVkMy00MmYzLWI4MGUtZjBmZTQ3ODE4MzQwPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjFjaTJIZ3BHQjRZOWVHNWtQNk1Ob05xMjd3cmdpN1pwVWxKNno0NDdCdElpWTNNZHZMSWRlSTJJNGpMeVlZdlhJWUxTcXl2ajFCTHlRMlBQN2xETTFGWG1Sc0xic2pCT3lJbUphZ1pENCtpRVVienF6SWJoSGNRRjh3OUpBVFhHM2NmWDlGY0NQTTFOZUVqRjNTR0RGTjZ2WlZxSlo3emZuQ0N0SlVDSk5oNFpmdzFyaDlwbGFjUk1vVnkvelZoTmozR2paRHdQbThwQ25qZFBIQWMzOXJBRWZFSGlrRThoNFduZ0FBQTlRWGpVYndma0NFN3hZcHZ3dGdXOHlVSi9tNlpIVWF1ZVI5UEJlRlg5R2tWc2hkVU9BMldlT0w3S2tIeGRIYzFUSnRlT3RJbElhYnh4U3V6QVVaUEc1QlFKMWFrTnhSQTZDRFUrN3FnTjcxUnVjOURpV0dFNWJqdkEzVmo1OWxxVEdiSWNnNXU0dDBWRm1zSlJ3YStBajQzZlloMTAwMktocFV1d00yNjA3MzJaanc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hMjEwMDVlNi0yYzBmLTVjY2QtOGU1Ny01MmJmMWM3MDRhMmQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "b4922df39b02a74a", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "12343c3a-27a2-5cbb-a745-6b6317ddfa5b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+OTE4ZTA0MTktNWU1MS00YWU5LWIzYTktNDkzMTQ0MzYyMGJmPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjkxbzg3VmZrc1A4RlhGSHgzeWFQc09XemlYWkhPdm5LbmFFK2UwaEo2ZmhqM1BEOHB5MjdlUW9wV2owanhjWGZVQWpWMHpNM1FFSGhTVjdPdXRyanZLelJ0L0tER0tlcWFDc1ZnRWhXNmNnS21ucEszZ3RISUxYS2FndmFWNkNxc2pOeEhXc1hWOHJGWTd6RmdIK1ltL0x3MEhZM1lPcjE4ZzRqZXpibkZGZmw4MHFJN3RBU1RCNmRiTy80cmR2LzI2eFlFWm55RnBTVWpTY3BtaEZRT1JRZFhZZEVaQlNWNEIzdDZFYis0M3ZEaDR0NmRXOEg1bDZPK0pkYzd6L1FIWXphNW5kRi96d1V2S3RsaCtneDZWKzlwdk96Ni92ampxTlROL1NHenlDbnk4Q29mbzRRMUVkdkFvbDVvblltMVhObmh2WFduVGpXbmdYZzd0dW1mNmpKUHF1dExsYkl2OXo0WGFqc0h1WUlmeXQyOHRrTTZuS0pkdWZsRE5lYkE1MjNtQ0Zvelo1TjRoMUUxQ3dVN0E9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4xMjM0M2MzYS0yN2EyLTVjYmItYTc0NS02YjYzMTdkZGZhNWI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "5a4746996aae6dd4", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3279" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmJTS2dGQW5Vb2RkTEo1Ums3eiUyQktBa0NlbVRIQTQxbW5CU3NhOVJOTWkxWnd2bU9rbyUyQkpMQmFwTDJzaWJVOUdFbkFTVCUyQmR0VFAwWUt5N2o3QkNWVGJTOHZQZiUyQmhSWUdPczRPc253NFpueU5xbVp2NHpmWDFVU0M2cERHSGJBOGFYMlZ5S2NOekhEb2FzNDNvVXl6NSUyRmlicHFmTjVnTEE3SVNYZHdGanpjOU1hREFOdG91dm9GQkUlMkY2VmJhY0ZLeTclMkZSaSUyQkhZQm5LWTZaczlMQ1NIblRLNyUyRmQ1aEhFUlhjUSUyQkNHZGlWT2dXRXglMkZoY2FxaGJUQWcwQVU5Y0dsSVhFJTJCc1N6bWdPRDhmaUJjb0Y4QnA5STVjVzNqdjBHUktqM3ppMXYlMkJaUzAlMkZjOGlpWDNQYzB4bDU4cDBFJTJGRll6ZG5jbWdZSTY2SUJvV0FtVWhCdmNnRVdrMEgyNFZTOG9PJTJCWXdOc2IzOFREeFlBTzFRUUZjYWVObkk2Y3ZCbCUyRjQ0U3lsQnVMRWZZckJYQWZOcUJ6dmRwaWZRJTNEJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4yLklkPTEmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuUmVjZWlwdEhhbmRsZT1BUUVCTktvVk5nS3BRdjhXWGJSVWRDQ3B4Yk9WV3dub3BhaDNSTVJKZVc0QVZUd0pqcSUyQnRqNWVnMTN1QTlOcDVRcGY4N0Z6OFB1dXBjcXRrd0dDOXV6REs2VVdZckZOYlclMkZWSnlhYW8zbzBkJTJGayUyQlU4NkNZcE0lMkI2bGlxVllIeVl0TUhZUjFGR1RHNHFyN1dHUzE5YjhQR0VrSGtpNGp2SlR3ZnNGOWxlUm9mc2lFV090U01zdjQ0eG5GaFBDRlh5ZERvYyUyQlcyZzhPOTEyTFVjekdMbVBZakVWdnZPS3NscWJyeGpnTDZkMndrSHo0R1l2JTJCYXVzdmwlMkZBUDVnWUdEQmhMSG85T0NNRnVUNGc1WWNucVBwTFJTOUp3WVltWHpjR0x1U2hMNXp2eUxRZjJYUlZtYVA0ZzV6Qm9SRVlxSHpzUzBtRGxRVVJ0cHA4Tm5nV0FaWERxNkNmWjFjWmp6eWp1eGlaOGhueXhtRW1BbEdCUiUyRm9HYVYlMkIzZTNzUlBJTUxEcnBvNFZtT09UMHgxZ0NuT3ZLVnhTUlJRJTNEJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4zLklkPTImRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjMuUmVjZWlwdEhhbmRsZT1BUUVCTGxUVld1WmlIQlI0dVd4R0ZROENnb0clMkZBOVdaalYlMkJPVFJvTlFOZkJGam03R1lvcVVlcjJxVEF4VGRCM2p3b3hUT0RiVWtlWnclMkYzaWFobnY4WTVRSGM1eUNKTzhObXNHJTJGZVJrMEVOdFVhbGNENWxabjJHbUthYnpveXdiVXFES2Fhb1hSdkxlRXNMTWZlSVpXS2ZPMTlyN1llVDBDRWh3RkRxNTE3cmhhYXNNY0dTVEFITlNFcmVrOTNOMGgxakVJOWhyJTJCQXBKdnZzSHNjV3hPTk5YMEJJbkF3TnRkSnBoMGhoNSUyQmh3SkMxQkpzJTJCc3NEOWNwZGVQaHBnSFlVSGJkbTg5Z1BwVWltcjNGTjBwdTFaUldwU2Z3bmg4a0RqZUJ3MzEwaFBnRldFVlBuREtTSjlYaEF1YXp3djVodEFQV25URG93YWxVYmR5dFY1UWZzYjZKM1JkR1pKNVdvd3FBWSUyQnhUVVU1QXhGJTJGTE1WdXhleFk1aE04a0lxOUdvU0tqOFdnU3pGJTJGYWY5ZFdjdlpFdm84NUt3JTNEJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS40LklkPTMmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjQuUmVjZWlwdEhhbmRsZT1BUUVCJTJCdWhpTktYN0ppbUNDS1dZJTJGaE5mTTJOdXIlMkZSNGxNYTFaTWxpMG1vZDRkcGo0aVFLeTdFMlZ2SzFZajdpZnc1YWxMVUd5NENmc2JhSWhaVFNtUFlQdFdWZTNuZW5iTm1rR2w3MW1IaElkaVNwbU03Vkl4cVVaS1RacGh3OFhnajljTUFDRWlQamlIcW9tVEx2SXN5bjRub0JhQnA1JTJGVE5RVnQ2T3p3elFNNHhid2pXMWFNNWZuZmJRQ0l3R0pOSDl4WU1jNWtJN1RpSmJqSGR6NUdTMWRtcG5sSzFvcUExU2lHa2J2N1VuMlliWUN5JTJGcmw0M254OHlNJTJGWXk1VHZvb0ZlUDR1Q1BNcnRiQ2lkc0JUUndRJTJCZFlmVEQlMkZCdjdWYTl2JTJGUzRJWjlNUHpPQ0olMkJGZHBjWXdTR0NxRzUySEslMkZKNXpmYSUyQkx6alZSeWJYbmRiM3VDODQwJTJGeWhkSEkwanlVeGZKVEFIYmJNUlVMdFM0MkRKNlNwZU1kQ01rMkl6dCUyRkdDM3hiYk0lMkZCdWdmdE9NcEtFN1FmUSUzRCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNS5JZD00JkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS41LlJlY2VpcHRIYW5kbGU9QVFFQm1qSEZGbkt6ZFhoYjFVWGZJMDFVMFZ2cEclMkJRYzY5MGJlSDg1YkFOOFE2ZURURGRWMUhvWFlqbWU2eDlLNjlBMVU4SXZwS1A0dWxGUE5OTzRkbjhneGdUeUslMkYwZU5IMFA0MTglMkZaM0ZxdVFuSktaTmNmZTFPUDFmSzdYRU1rd1FkejQ4WHlhTmhtdUlBV3JVT0xaUGc3dXJJTnFwSjBVTEtUcDlCV0hrNnNGeVhRSVBHYzhZSXU2dGVLc2l1blg3Rm5VeGQ1T24lMkZwZjlibUlhR25CZ0RGcnVaRzRNdzYydzZkaXg0YzhXRXBQVEFaM0glMkIzOE9IWHVKQWdRaGZEUmh0JTJCUGRBS0ZYTng3OE14OFYyNUdsTG1pNnFoRmMwNVRNeW5ZaUtTaHlWWjBiSyUyQiUyQm5FWTJmWXo2SU54bDdHbFVSUGcwMnZTRHdHdHJ3aEpveUdEdXRYdElnUDM1aFRDWkxBcnRKbW9LcHNwQkdNOUJaSVc3NjAxcGNkV2xyclNRaWIlMkJDQk45N0hWN2FBRzRHOEhOaHdLY1ElM0QlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjYuSWQ9NSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNi5SZWNlaXB0SGFuZGxlPUFRRUIxY2kySGdwR0I0WTllRzVrUDZNTm9OcTI3d3JnaTdacFVsSjZ6NDQ3QnRJaVkzTWR2TElkZUkySTRqTHlZWXZYSVlMU3F5dmoxQkx5UTJQUDdsRE0xRlhtUnNMYnNqQk95SW1KYWdaRDQlMkJpRVVienF6SWJoSGNRRjh3OUpBVFhHM2NmWDlGY0NQTTFOZUVqRjNTR0RGTjZ2WlZxSlo3emZuQ0N0SlVDSk5oNFpmdzFyaDlwbGFjUk1vVnklMkZ6VmhOajNHalpEd1BtOHBDbmpkUEhBYzM5ckFFZkVIaWtFOGg0V25nQUFBOVFYalVid2ZrQ0U3eFlwdnd0Z1c4eVVKJTJGbTZaSFVhdWVSOVBCZUZYOUdrVnNoZFVPQTJXZU9MN0trSHhkSGMxVEp0ZU90SWxJYWJ4eFN1ekFVWlBHNUJRSjFha054UkE2Q0RVJTJCN3FnTjcxUnVjOURpV0dFNWJqdkEzVmo1OWxxVEdiSWNnNXU0dDBWRm1zSlJ3YSUyQkFqNDNmWWgxMDAyS2hwVXV3TTI2MDczMlpqdyUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "716" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "912723ac-6c8e-5b4f-a09c-74f55cf1cdaf" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4xPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+NDwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjI8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4zPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MDwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjU8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45MTI3MjNhYy02YzhlLTViNGYtYTA5Yy03NGY1NWNmMWNkYWY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "990a8fa80a2e92eb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "a77ba2ba-f536-55e9-b257-f5e3c5495309" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NWFlNDZiYzQtYmMyOC00NWIzLTg2MzItMjk5ZDlmNzE1Njk3PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlNUM1RKcVR0eS82dFBmKytYcmdyL3M3S3VhVjVoZ05Hdy9ndTZramQwczNRK3pycm5oYUx5dWcwS1hmZGtkSmh3V1hENU85cnR1SVNXSjJWdzVVeXdUQVhmaHdlQU8rWHRNYjc4K2tad2NyNG9wbmp1Z1hZRGlRd09mN0JUQldBZ1FnNUhWN0Jrb0x1N2xIM0E1MTZ5QXV3TU5KOVBrVnp5S0hwZmtyL1FOWXNwQ0hZbDVhWUtJZTFlYkkwa1VJZGFqQUN2YlVVY3JqelFvSlNpRXFpclB2SWlBYUc3aFg2SzduNmlteVFTbDU3R0dUcUJIQ0hmeG5KL2FwMjBPVklPZkxwNGxFbXV5ZjdXWW1uTlV0WlNVZXVxS0pINnBFa2JQYW9jd3RFUkNpOE8vcVU1TjdmeDRZTXlPK01Dc3l3Q2RMcjc4WGRFL0hMMk54TmpYbStlTU54eEMwdU5DQ3h3K041RjQ5MURNdEt2V0h0bU82YmQ1RE1lUHdGSzNKVEhHM0VZMzlRcVcwcnRmYmd1TDJ0T1E9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hNzdiYTJiYS1mNTM2LTU1ZTktYjI1Ny1mNWUzYzU0OTUzMDk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "014583d1dfd20443", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "a9f42741-eb4c-5031-b38f-7018db33f6d1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YzQ0ZDg2MDUtMmYyYi00Mjg3LWIxZTctZDhhMDI3NTkwYTE5PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkg1SWdWVmdhU2JrM0Iwck40YkxNcE1WZGRUaHFnY0MyL1UwV0FOTFhWaDdwYW10NHM3ZndsK3QydklremhTZDVEREpPamtyRWI0dEJHRlZtbkZQUUtsQ2hYRTlrN2xPUTUwcEpqYVdCRTZGcmZKYVhPYTN4SEdTWjNsMm5Za0I4bXYrVjludkIrUnpVbk1qU051Z2RjenR2N0V0bkJSd2FmVlZLT2U3K2JMV3dKQ3pkTW1ETHRBdThEVlRla3ZhQVljaFlRaUVGcFdjU092VHlsWjNwQXJtZ0ZIdmx1OFczL3ljT2JaL2VQTmhrb2RZZnY5L1lYbHZodk9penh0dmZ2LzJpekpTSlFrK0tEUEFWSE94eFlLQzgvQXdic09QbFVXenF6UHZWUzJTOEJwLzR0MlpxMFlRUitpWkJ0SGxBZmNWazh3QmMwd2N3TUgyQ0ZkVm50ZnRMNVBkMlQrRXhNeUpIOXZvNzB2dU9NVUxyWkNXRWdQR2JzODZ6N2xJc0VkbGViSlErVjNIK3dzS09ENy9tWHc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hOWY0Mjc0MS1lYjRjLTUwMzEtYjM4Zi03MDE4ZGIzM2Y2ZDE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "20291fca522d0f23", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "3eb6db54-436a-5cd1-b1f2-8c0d73159072" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NzNmMjlkMWQtNmNhYi00ZmU1LTg3ZTYtMWRlNThlMDhkMDU1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmtnb3lkb1RSUzV1bC83enBSZ1dqdjhyZzlDak5wS29HQWZpbHlGcmJDU0txZU9TODA2aW9aaFM3d2FZVmJxeExYWFIyYVBsc0tnUG9HM0NtR1hvN08wMG95TEVHL3dIZ2Fna1RQZEZWSTcxT1ZTZmkvMGxkWlZ1RnpDSlJGN3ljRFM5RkQ3Y2kxbUZQbTU4b0JsOG5vNm9DbVhxdXVldHE2WUJkREpLRGFacVE1cE85aWpNVFBpSXNUa2pvQS9yVFdOTlhjYXFob1BYWThka1MvRUlVYkdjTzJBcCtVSmt5S0FFL01uYmR3S25XVEEwVVR1Titob3pqaitiVXBmelB1bHduSTJlRGs4Q0xaaGRCdkMxLzNkclRVZWxBSE9KZmQyMzNqYjlGcW5PSmR4TDBaL1o5RHpJUnV5a2xkWVZiakptMG01aFlFbGt0N1Rpb0R1ZjllN3lXTGlPQ3EzaEtZVVcybkJKWFZxUnN2UE1aUDR2RHBMUjd4WngyQk1zdnBQNDQvanJGSUlhbGxDUXJ0NzN0d3c9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zZWI2ZGI1NC00MzZhLTVjZDEtYjFmMi04YzBkNzMxNTkwNzI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "4ab35a7f94d349fb", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "248d3e86-b487-509c-aecc-69df84f8dc3f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NzY3YmFjMmEtNGRiZC00MmY0LWJmODQtNjE2ZTU4YjcwZTc2PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkJCZVBjbk5UMk1OK0JjRW5QZTZLRms3d0h2TU1jdU5CRXg2R3RVVUp1UVRPNnY4NWxVeGl1cWFnd3RseVUzODdCOVlUWlhubEV3YTVEMWt0SVpHN2twNFVxR0d5TFFDd1BEQnZCL2R2N3dHQlgvQUtneWpZUlVVcDNjVElzbktTYy8wT2hOcE53akVtQVdRSW05NHhmUjNxWFArUmlVZVFtTkVhMUNJWk1oRGEzM09nRHhBM3hsS2J1MkdkVGRRVmNLb1FFWWRLWXhjczJYT3kxSTJGRnFYU1RvMTFTSjNOdTE0NXo2SnZ1UHdUb0hLeEl4SGgzeXR0NVkvRWgvUzVieVJDait3QjVmWDdlbHNTckl5NkpRWXdMa2FDYVpSUHBubHhEaGZNUUVDVmJEZDZZS29sVHhreWREbmswQ3RNc3Z3MVovaThDRk4wbmtGZWQ1RmZkNDBtNDJkVFdyVkpVN3lIVS9UcGRHVThyYWlWbkdIMzVKU0dlN2c3Z2JWcjNmaVMyVnA3Zm10blVPNFJ1RGkzOWc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4yNDhkM2U4Ni1iNDg3LTUwOWMtYWVjYy02OWRmODRmOGRjM2Y8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "3410f9ee7a9bc757", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQmF0Y2hpbmctdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "862" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "77701b34-9000-56a5-9c8d-4c6da07fba06" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MGFmZmEzM2UtNzk3ZC00NWI2LTk2M2YtNTA3OTIwNDdlNGVkPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjZ5bElnNXdqSDY3emFxWk04STZDc0dxdEF6aVc1NFRWN3JoQ3pBbUJMVGtVQ0xNcGo5WTZGU0RQNmtRN2t4TjlzZ3k2YUlvNHJqRzJ3TUE0YjlHaTFqbSs3RnE4dS9rMEJ6Vzl0ZTNNbXFQdEtjNk9lWGN4WW5ndDVBV1h0SmV5S2hxRlVFSVJkN21aSWpUZk9EdzRONVFUSDJpeDhCUzVXYzdlQjU2cHJ3NzdSdDlWVUttcHlvMk5tclpIQ2kvbWJicmV3RWtmVHlVUkRGZXkrYjhheWxKQXZ0Mk16MDltODRXUFk1Rlk3cktJT0hwMXlIaUpob3hUNm9GbnlnZndvcmxSamRIZHBscWZHTkcvWjNGQmpMM3BvL3o5OTZpaWhZMmdoQS9DTFhPTHZORWkzUm9vaGUySkg1azBqSHVOYjJlS0FzcWFLaFF5WFl5bldUK09qMlJ2VEJadUZ1V1Z4eVg5RW1kQXZHNXd2bEFyV0sxOFkxaEh2UFU1ZHhpSUJGSk45eURqWUw2VnorZjhmOEp0M0E9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD43NzcwMWIzNC05MDAwLTU2YTUtOWM4ZC00YzZkYTA3ZmJhMDY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "ceb517b6f090559f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3301" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjkxbzg3VmZrc1A4RlhGSHgzeWFQc09XemlYWkhPdm5LbmFFJTJCZTBoSjZmaGozUEQ4cHkyN2VRb3BXajBqeGNYZlVBalYwek0zUUVIaFNWN091dHJqdkt6UnQlMkZLREdLZXFhQ3NWZ0VoVzZjZ0ttbnBLM2d0SElMWEthZ3ZhVjZDcXNqTnhIV3NYVjhyRlk3ekZnSCUyQlltJTJGTHcwSFkzWU9yMThnNGplemJuRkZmbDgwcUk3dEFTVEI2ZGJPJTJGNHJkdiUyRjI2eFlFWm55RnBTVWpTY3BtaEZRT1JRZFhZZEVaQlNWNEIzdDZFYiUyQjQzdkRoNHQ2ZFc4SDVsNk8lMkJKZGM3eiUyRlFIWXphNW5kRiUyRnp3VXZLdGxoJTJCZ3g2ViUyQjlwdk96NiUyRnZqanFOVE4lMkZTR3p5Q255OENvZm80UTFFZHZBb2w1b25ZbTFYTm5odlhXblRqV25nWGc3dHVtZjZqSlBxdXRMbGJJdjl6NFhhanNIdVlJZnl0Mjh0a002bktKZHVmbEROZWJBNTIzbUNGb3paNU40aDFFMUN3VTdBJTNEJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4yLklkPTEmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuUmVjZWlwdEhhbmRsZT1BUUVCU1QzVEpxVHR5JTJGNnRQZiUyQiUyQlhyZ3IlMkZzN0t1YVY1aGdOR3clMkZndTZramQwczNRJTJCenJybmhhTHl1ZzBLWGZka2RKaHdXWEQ1TzlydHVJU1dKMlZ3NVV5d1RBWGZod2VBTyUyQlh0TWI3OCUyQmtad2NyNG9wbmp1Z1hZRGlRd09mN0JUQldBZ1FnNUhWN0Jrb0x1N2xIM0E1MTZ5QXV3TU5KOVBrVnp5S0hwZmtyJTJGUU5Zc3BDSFlsNWFZS0llMWViSTBrVUlkYWpBQ3ZiVVVjcmp6UW9KU2lFcWlyUHZJaUFhRzdoWDZLN242aW15UVNsNTdHR1RxQkhDSGZ4bkolMkZhcDIwT1ZJT2ZMcDRsRW11eWY3V1ltbk5VdFpTVWV1cUtKSDZwRWtiUGFvY3d0RVJDaThPJTJGcVU1TjdmeDRZTXlPJTJCTUNzeXdDZExyNzhYZEUlMkZITDJOeE5qWG0lMkJlTU54eEMwdU5DQ3h3JTJCTjVGNDkxRE10S3ZXSHRtTzZiZDVETWVQd0ZLM0pUSEczRVkzOVFxVzBydGZiZ3VMMnRPUSUzRCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMy5JZD0yJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4zLlJlY2VpcHRIYW5kbGU9QVFFQkg1SWdWVmdhU2JrM0Iwck40YkxNcE1WZGRUaHFnY0MyJTJGVTBXQU5MWFZoN3BhbXQ0czdmd2wlMkJ0MnZJa3poU2Q1RERKT2prckViNHRCR0ZWbW5GUFFLbENoWEU5azdsT1E1MHBKamFXQkU2RnJmSmFYT2EzeEhHU1ozbDJuWWtCOG12JTJCVjludkIlMkJSelVuTWpTTnVnZGN6dHY3RXRuQlJ3YWZWVktPZTclMkJiTFd3SkN6ZE1tREx0QXU4RFZUZWt2YUFZY2hZUWlFRnBXY1NPdlR5bFozcEFybWdGSHZsdThXMyUyRnljT2JaJTJGZVBOaGtvZFlmdjklMkZZWGx2aHZPaXp4dHZmdiUyRjJpekpTSlFrJTJCS0RQQVZIT3h4WUtDOCUyRkF3YnNPUGxVV3pxelB2VlMyUzhCcCUyRjR0MlpxMFlRUiUyQmlaQnRIbEFmY1ZrOHdCYzB3Y3dNSDJDRmRWbnRmdEw1UGQyVCUyQkV4TXlKSDl2bzcwdnVPTVVMclpDV0VnUEdiczg2ejdsSXNFZGxlYkpRJTJCVjNIJTJCd3NLT0Q3JTJGbVh3JTNEJTNEJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS40LklkPTMmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjQuUmVjZWlwdEhhbmRsZT1BUUVCa2dveWRvVFJTNXVsJTJGN3pwUmdXanY4cmc5Q2pOcEtvR0FmaWx5RnJiQ1NLcWVPUzgwNmlvWmhTN3dhWVZicXhMWFhSMmFQbHNLZ1BvRzNDbUdYbzdPMDBveUxFRyUyRndIZ2Fna1RQZEZWSTcxT1ZTZmklMkYwbGRaVnVGekNKUkY3eWNEUzlGRDdjaTFtRlBtNThvQmw4bm82b0NtWHF1dWV0cTZZQmRESktEYVpxUTVwTzlpak1UUGlJc1Rram9BJTJGclRXTk5YY2FxaG9QWFk4ZGtTJTJGRUlVYkdjTzJBcCUyQlVKa3lLQUUlMkZNbmJkd0tuV1RBMFVUdU4lMkJob3pqaiUyQmJVcGZ6UHVsd25JMmVEazhDTFpoZEJ2QzElMkYzZHJUVWVsQUhPSmZkMjMzamI5RnFuT0pkeEwwWiUyRlo5RHpJUnV5a2xkWVZiakptMG01aFlFbGt0N1Rpb0R1ZjllN3lXTGlPQ3EzaEtZVVcybkJKWFZxUnN2UE1aUDR2RHBMUjd4WngyQk1zdnBQNDQlMkZqckZJSWFsbENRcnQ3M3R3dyUzRCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNS5JZD00JkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS41LlJlY2VpcHRIYW5kbGU9QVFFQkJCZVBjbk5UMk1OJTJCQmNFblBlNktGazd3SHZNTWN1TkJFeDZHdFVVSnVRVE82djg1bFV4aXVxYWd3dGx5VTM4N0I5WVRaWG5sRXdhNUQxa3RJWkc3a3A0VXFHR3lMUUN3UERCdkIlMkZkdjd3R0JYJTJGQUtneWpZUlVVcDNjVElzbktTYyUyRjBPaE5wTndqRW1BV1FJbTk0eGZSM3FYUCUyQlJpVWVRbU5FYTFDSVpNaERhMzNPZ0R4QTN4bEtidTJHZFRkUVZjS29RRVlkS1l4Y3MyWE95MUkyRkZxWFNUbzExU0ozTnUxNDV6Nkp2dVB3VG9IS3hJeEhoM3l0dDVZJTJGRWglMkZTNWJ5UkNqJTJCd0I1Zlg3ZWxzU3JJeTZKUVl3TGthQ2FaUlBwbmx4RGhmTVFFQ1ZiRGQ2WUtvbFR4a3lkRG5rMEN0TXN2dzFaJTJGaThDRk4wbmtGZWQ1RmZkNDBtNDJkVFdyVkpVN3lIVSUyRlRwZEdVOHJhaVZuR0gzNUpTR2U3ZzdnYlZyM2ZpUzJWcDdmbXRuVU80UnVEaTM5ZyUzRCUzRCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuNi5JZD01JkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS42LlJlY2VpcHRIYW5kbGU9QVFFQjZ5bElnNXdqSDY3emFxWk04STZDc0dxdEF6aVc1NFRWN3JoQ3pBbUJMVGtVQ0xNcGo5WTZGU0RQNmtRN2t4TjlzZ3k2YUlvNHJqRzJ3TUE0YjlHaTFqbSUyQjdGcTh1JTJGazBCelc5dGUzTW1xUHRLYzZPZVhjeFluZ3Q1QVdYdEpleUtocUZVRUlSZDdtWklqVGZPRHc0TjVRVEgyaXg4QlM1V2M3ZUI1NnBydzc3UnQ5VlVLbXB5bzJObXJaSENpJTJGbWJicmV3RWtmVHlVUkRGZXklMkJiOGF5bEpBdnQyTXowOW04NFdQWTVGWTdyS0lPSHAxeUhpSmhveFQ2b0ZueWdmd29ybFJqZEhkcGxxZkdORyUyRlozRkJqTDNwbyUyRno5OTZpaWhZMmdoQSUyRkNMWE9Mdk5FaTNSb29oZTJKSDVrMGpIdU5iMmVLQXNxYUtoUXlYWXluV1QlMkJPajJSdlRCWnVGdVdWeHlYOUVtZEF2RzV3dmxBcldLMThZMWhIdlBVNWR4aUlCRkpOOXlEallMNlZ6JTJCZjhmOEp0M0ElM0QlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0JhdGNoaW5nLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "716" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "27488fd6-ac60-5330-b2ea-d88f9c1f6f93" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4yPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MDwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjE8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD41PC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MzwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48RGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PElkPjQ8L0lkPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0RW50cnk+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4yNzQ4OGZkNi1hYzYwLTUzMzAtYjJlYS1kODhmOWMxZjZmOTM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "6b0814a44d6faca9", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "128" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNCYXRjaGluZy10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:51 GMT" ], "X-Amzn-Requestid": [ "831c6718-aade-525c-ab7a-30419aa11eff" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD44MzFjNjcxOC1hYWRlLTUyNWMtYWI3YS0zMDQxOWFhMTFlZmY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestCancelSendReceive.replay000066400000000000000000000174071367004507500325400ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU6KL0tZv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "21191454625bf2e1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "79" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:46 GMT" ], "X-Amzn-Requestid": [ "e88ed25d-1c3b-56ca-83e2-85042c416414" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNDYW5jZWxTZW5kUmVjZWl2ZS10b3AtMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmU4OGVkMjVkLTFjM2ItNTZjYS04M2UyLTg1MDQyYzQxNjQxNDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "73641b5c43b5968d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "169" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "403" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:47 GMT" ], "X-Amzn-Requestid": [ "60829eb9-0091-55dc-9728-c9e030ea1702" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY0NhbmNlbFNlbmRSZWNlaXZlLXRvcC0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjYwODI5ZWI5LTAwOTEtNTVkYy05NzI4LWM5ZTAzMGVhMTcwMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "171ea5f5feef8994", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "675" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNDYW5jZWxTZW5kUmVjZWl2ZS10b3AtMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljQ2FuY2VsU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:47 GMT" ], "X-Amzn-Requestid": [ "770f2c5b-a369-5a0e-9af9-7b02931248d0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NzcwZjJjNWItYTM2OS01YTBlLTlhZjktN2IwMjkzMTI0OGQwPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "a5c171de86db4b99", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "137" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNDYW5jZWxTZW5kUmVjZWl2ZS10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:47 GMT" ], "X-Amzn-Requestid": [ "ea472662-4264-560f-87db-713b721fc4d1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5lYTQ3MjY2Mi00MjY0LTU2MGYtODdkYi03MTNiNzIxZmM0ZDE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestDoubleAck.replay000066400000000000000000000777021367004507500310730ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU4JzUad/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "2a1fc100179f3ad3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "71" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY0RvdWJsZUFjay10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "343" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:44 GMT" ], "X-Amzn-Requestid": [ "a946dcfe-a62e-550a-a7a9-8ba79656f116" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNEb3VibGVBY2stdG9wLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hOTQ2ZGNmZS1hNjJlLTU1MGEtYTdhOS04YmE3OTY1NmYxMTY8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "e8944c338223f822", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "161" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0RvdWJsZUFjay10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "395" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "9a1d6e42-a606-535e-a59c-391b967f3742" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY0RvdWJsZUFjay10b3AtMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45YTFkNmU0Mi1hNjA2LTUzNWUtYTU5Yy0zOTFiOTY3ZjM3NDI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "12e741ab68d0d59a", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "659" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNEb3VibGVBY2stdG9wLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0RvdWJsZUFjay10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "a1f18922-c5a0-59f7-97c8-de7bf5d94deb" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YTFmMTg5MjItYzVhMC01OWY3LTk3YzgtZGU3YmY1ZDk0ZGViPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "a0e3efae24d227ff", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0RvdWJsZUFjay10b3AtMSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuSWQ9MCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9MCZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "467" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "54b9df0a-8271-5ebe-a7f0-8853b2082aa2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjVjMjFlM2IxLWM4NjYtNGMzMy05MTFkLTU3ZmZjZmNmNGMwODwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjU0YjlkZjBhLTgyNzEtNWViZS1hN2YwLTg4NTNiMjA4MmFhMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "47b085269d79e064", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0RvdWJsZUFjay10b3AtMSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuSWQ9MCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9MSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "467" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "59a4ac4e-0015-5dc4-b6a2-fb17306ce9d8" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjI1NjNhZGI1LTI5YWMtNGU2Mi1iOTFiLWFmOGE2NzIyNzBhNjwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PmM0Y2E0MjM4YTBiOTIzODIwZGNjNTA5YTZmNzU4NDliPC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjU5YTRhYzRlLTAwMTUtNWRjNC1iNmEyLWZiMTczMDZjZTlkODwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "3d009d694cfa1b8d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "215" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0RvdWJsZUFjay10b3AtMSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuSWQ9MCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9MiZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "467" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "970cf036-a193-5cf5-a214-a76f91ea78e9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjRhOGNlNjk1LWYzMmEtNGYwOS1iZmIxLTNiMDQxZTQ3ZjEwOTwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PmM4MWU3MjhkOWQ0YzJmNjM2ZjA2N2Y4OWNjMTQ4NjJjPC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjk3MGNmMDM2LWExOTMtNWNmNS1hMjE0LWE3NmY5MWVhNzhlOTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "6a167e3f768c4ce3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "181" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MyZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljRG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1442" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "7eee15e6-256f-5385-821f-42bf15165799" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MjU2M2FkYjUtMjlhYy00ZTYyLWI5MWItYWY4YTY3MjI3MGE2PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQk1CS1ZlS0JGZTlhdkFBZlhYbjFnNnBSbTQyT3laZVhpVkVVMzFpTHVSMENZeUR5b1dPQmJwR2xZRjhuaXZKcWZFSkFQTXNCb0xhYXZ1cFUwOE5oVWRFa2N4LzZBSXRORXRhd3Y2QWUxZytRUTFmRCtUMmZLU3B4enJ4OVlJUmMydENuNVI5amxqb0FpSFFrNGU4MWljUUtrOXoycTdKbGQ0cnhDWldiM2cyeVlsRnJBamdCT1dMdEVSRVhqR2ZjZkFaWEt2UnBURWhWVVYyZDl3UEFrajVFUUxqY2dGUzNzK3BxdzYxeUcwNkYraFdVUEFJQzI1MGRIYmJyK2QyNEMwK3dZRlNoOStQbitCYlBPc0I5dTlTbGNlcXV5RzhLaWNualFpdGpsRDdRSENIakZJQ3VIK3VySmk3UEo4VFBKUW1sLzRYdDFBT2lXaVAwZ3JOeW1NcXpkb2R3NXI2ajcwZkRPZzlCa25GcU5uTW50Q1lqZktxU0t0Q3RrT1lpRTBzZ29FdWI5VTFrRWMvMHBudHdXenc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmM0Y2E0MjM4YTBiOTIzODIwZGNjNTA5YTZmNzU4NDliPC9NRDVPZkJvZHk+PEJvZHk+MTwvQm9keT48L01lc3NhZ2U+PE1lc3NhZ2U+PE1lc3NhZ2VJZD40YThjZTY5NS1mMzJhLTRmMDktYmZiMS0zYjA0MWU0N2YxMDk8L01lc3NhZ2VJZD48UmVjZWlwdEhhbmRsZT5BUUVCdUJDQjJrbDEyYTB6STVudS9udEc4SDBSZENaVTNhdzVZYW5CT0Nkb0Rlcm1JMUZxN0l2VklwWGp4OW5zN1N1TnpVUGV3aWlseTdzVW1jNUo1WGxhK1c4aGFleno0OEJQRkNYYVNzUTg3SGQzSDlhTHBRc2h3VWZuc3VzNDRRMzJYZWZodDZXUXpYb2VkdVhkOW5RMW1nVnB6VjFsSCtzMEprbW1SVjlOMm1UQlgvbjRjOTdDaHJoR3dyZGpXZFQ3ZU53N3hsdHFHbS9jYVJMZnpxMVdjcDM2VUxKeVY0VXkwOWFWWXlXbWhSM3AxNTVaUm91OW85N0NMUzFuSFdGRzRLQ1RvQnlPM0NFQnVTYmhETzJYREZTNlVYd1pJNUlka0FsVmhnakVWMDRhekd6ZFhRVUxPUWdjS3ArckVySGQ2ellIYThtMzQ1T25PWmxwMTFGdHBITXQ4cE1ZalQ1Z0k1WWUrcU8wVkFiOEwxeERZcXYvR1htTi9yY0xiVGd1eGt2TnBiRlFqVnREb1ZPY1RBZHNpUT09PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzgxZTcyOGQ5ZDRjMmY2MzZmMDY3Zjg5Y2MxNDg2MmM8L01ENU9mQm9keT48Qm9keT4yPC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+N2VlZTE1ZTYtMjU2Zi01Mzg1LTgyMWYtNDJiZjE1MTY1Nzk5PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "777c7dfe5a3e6472", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "181" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MyZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljRG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "852" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "82b4a19f-a8e2-5e42-9512-f6c6989baa5e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NWMyMWUzYjEtYzg2Ni00YzMzLTkxMWQtNTdmZmNmY2Y0YzA4PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnRvV2ZKU2xCTXh0a090emlIbUN0aHRPdWNMWEh5dlZjMFlUNTZVdjVtcno0VHFQUEwzWjh1WFlYQ1lmNnEzeHVZdGNZeW52alIvRzBqeWd0eUVuQjdrL0gzWkNpN0ovb3V4d3pPZzNUOFBpU2x5NjM1aVlNWmlhUE0yc29NQjFTYXdjWndTbWZidHcrUUszakw1OUxicXlLQnFtZk4zcy9xRk52bG1OWExZNXZTMHJyVHczOGw2dGoyMGdLdGFDMjhCVFpPbk1Ya0o1YWErc1NCK1FNQUVHaVl2ekN1MGFUT2ZTc3VFZmdnK1U4RFpHR3NEY2ZQQk1oQXJ3VE1ERmkreGdzZEU4TkRSZkF6UXBvUjd1VnhkbnN5OWxLK2wvSnJpbHUySXBiZ3diVENKS3dlVnp5YVJ5VitqRGswWE9ycExKVHlSVEJxRU1TUkJxc2txU2xQZGo2QVFEczRLakdTMWtKK0tGdTlPcHFYakxsZ2NoeUNjbk9nUGExdEtpMTVZVXlzVWVVcVc5dy9Jc21XT296OHc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZkJvZHk+PEJvZHk+MDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjgyYjRhMTlmLWE4ZTItNWU0Mi05NTEyLWY2YzY5ODliYWE1ZTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "aedfe4315f8c07a4", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1182" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQk1CS1ZlS0JGZTlhdkFBZlhYbjFnNnBSbTQyT3laZVhpVkVVMzFpTHVSMENZeUR5b1dPQmJwR2xZRjhuaXZKcWZFSkFQTXNCb0xhYXZ1cFUwOE5oVWRFa2N4JTJGNkFJdE5FdGF3djZBZTFnJTJCUVExZkQlMkJUMmZLU3B4enJ4OVlJUmMydENuNVI5amxqb0FpSFFrNGU4MWljUUtrOXoycTdKbGQ0cnhDWldiM2cyeVlsRnJBamdCT1dMdEVSRVhqR2ZjZkFaWEt2UnBURWhWVVYyZDl3UEFrajVFUUxqY2dGUzNzJTJCcHF3NjF5RzA2RiUyQmhXVVBBSUMyNTBkSGJiciUyQmQyNEMwJTJCd1lGU2g5JTJCUG4lMkJCYlBPc0I5dTlTbGNlcXV5RzhLaWNualFpdGpsRDdRSENIakZJQ3VIJTJCdXJKaTdQSjhUUEpRbWwlMkY0WHQxQU9pV2lQMGdyTnltTXF6ZG9kdzVyNmo3MGZET2c5QmtuRnFObk1udENZamZLcVNLdEN0a09ZaUUwc2dvRXViOVUxa0VjJTJGMHBudHdXenclM0QlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJ1QkNCMmtsMTJhMHpJNW51JTJGbnRHOEgwUmRDWlUzYXc1WWFuQk9DZG9EZXJtSTFGcTdJdlZJcFhqeDluczdTdU56VVBld2lpbHk3c1VtYzVKNVhsYSUyQlc4aGFleno0OEJQRkNYYVNzUTg3SGQzSDlhTHBRc2h3VWZuc3VzNDRRMzJYZWZodDZXUXpYb2VkdVhkOW5RMW1nVnB6VjFsSCUyQnMwSmttbVJWOU4ybVRCWCUyRm40Yzk3Q2hyaEd3cmRqV2RUN2VOdzd4bHRxR20lMkZjYVJMZnpxMVdjcDM2VUxKeVY0VXkwOWFWWXlXbWhSM3AxNTVaUm91OW85N0NMUzFuSFdGRzRLQ1RvQnlPM0NFQnVTYmhETzJYREZTNlVYd1pJNUlka0FsVmhnakVWMDRhekd6ZFhRVUxPUWdjS3AlMkJyRXJIZDZ6WUhhOG0zNDVPbk9abHAxMUZ0cEhNdDhwTVlqVDVnSTVZZSUyQnFPMFZBYjhMMXhEWXF2JTJGR1htTiUyRnJjTGJUZ3V4a3ZOcGJGUWpWdERvVk9jVEFkc2lRJTNEJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNEb3VibGVBY2stdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "424" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "d77b2d78-d3b6-5c14-86dd-7a21e3cfa808" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MTwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmQ3N2IyZDc4LWQzYjYtNWMxNC04NmRkLTdhMjFlM2NmYTgwODwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlPg==" } }, { "ID": "1aa778eee187b7fc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1182" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQk1CS1ZlS0JGZTlhdkFBZlhYbjFnNnBSbTQyT3laZVhpVkVVMzFpTHVSMENZeUR5b1dPQmJwR2xZRjhuaXZKcWZFSkFQTXNCb0xhYXZ1cFUwOE5oVWRFa2N4JTJGNkFJdE5FdGF3djZBZTFnJTJCUVExZkQlMkJUMmZLU3B4enJ4OVlJUmMydENuNVI5amxqb0FpSFFrNGU4MWljUUtrOXoycTdKbGQ0cnhDWldiM2cyeVlsRnJBamdCT1dMdEVSRVhqR2ZjZkFaWEt2UnBURWhWVVYyZDl3UEFrajVFUUxqY2dGUzNzJTJCcHF3NjF5RzA2RiUyQmhXVVBBSUMyNTBkSGJiciUyQmQyNEMwJTJCd1lGU2g5JTJCUG4lMkJCYlBPc0I5dTlTbGNlcXV5RzhLaWNualFpdGpsRDdRSENIakZJQ3VIJTJCdXJKaTdQSjhUUEpRbWwlMkY0WHQxQU9pV2lQMGdyTnltTXF6ZG9kdzVyNmo3MGZET2c5QmtuRnFObk1udENZamZLcVNLdEN0a09ZaUUwc2dvRXViOVUxa0VjJTJGMHBudHdXenclM0QlM0QmRGVsZXRlTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjIuSWQ9MSZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMi5SZWNlaXB0SGFuZGxlPUFRRUJ1QkNCMmtsMTJhMHpJNW51JTJGbnRHOEgwUmRDWlUzYXc1WWFuQk9DZG9EZXJtSTFGcTdJdlZJcFhqeDluczdTdU56VVBld2lpbHk3c1VtYzVKNVhsYSUyQlc4aGFleno0OEJQRkNYYVNzUTg3SGQzSDlhTHBRc2h3VWZuc3VzNDRRMzJYZWZodDZXUXpYb2VkdVhkOW5RMW1nVnB6VjFsSCUyQnMwSmttbVJWOU4ybVRCWCUyRm40Yzk3Q2hyaEd3cmRqV2RUN2VOdzd4bHRxR20lMkZjYVJMZnpxMVdjcDM2VUxKeVY0VXkwOWFWWXlXbWhSM3AxNTVaUm91OW85N0NMUzFuSFdGRzRLQ1RvQnlPM0NFQnVTYmhETzJYREZTNlVYd1pJNUlka0FsVmhnakVWMDRhekd6ZFhRVUxPUWdjS3AlMkJyRXJIZDZ6WUhhOG0zNDVPbk9abHAxMUZ0cEhNdDhwTVlqVDVnSTVZZSUyQnFPMFZBYjhMMXhEWXF2JTJGR1htTiUyRnJjTGJUZ3V4a3ZOcGJGUWpWdERvVk9jVEFkc2lRJTNEJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNEb3VibGVBY2stdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "424" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "e7eee76b-4990-5883-beb6-b03279e9ec9f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48SWQ+MTwvSWQ+PC9EZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHRFbnRyeT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmU3ZWVlNzZiLTQ5OTAtNTg4My1iZWI2LWIwMzI3OWU5ZWM5ZjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlPg==" } }, { "ID": "d26566addc6f7a41", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "1971" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQk1CS1ZlS0JGZTlhdkFBZlhYbjFnNnBSbTQyT3laZVhpVkVVMzFpTHVSMENZeUR5b1dPQmJwR2xZRjhuaXZKcWZFSkFQTXNCb0xhYXZ1cFUwOE5oVWRFa2N4JTJGNkFJdE5FdGF3djZBZTFnJTJCUVExZkQlMkJUMmZLU3B4enJ4OVlJUmMydENuNVI5amxqb0FpSFFrNGU4MWljUUtrOXoycTdKbGQ0cnhDWldiM2cyeVlsRnJBamdCT1dMdEVSRVhqR2ZjZkFaWEt2UnBURWhWVVYyZDl3UEFrajVFUUxqY2dGUzNzJTJCcHF3NjF5RzA2RiUyQmhXVVBBSUMyNTBkSGJiciUyQmQyNEMwJTJCd1lGU2g5JTJCUG4lMkJCYlBPc0I5dTlTbGNlcXV5RzhLaWNualFpdGpsRDdRSENIakZJQ3VIJTJCdXJKaTdQSjhUUEpRbWwlMkY0WHQxQU9pV2lQMGdyTnltTXF6ZG9kdzVyNmo3MGZET2c5QmtuRnFObk1udENZamZLcVNLdEN0a09ZaUUwc2dvRXViOVUxa0VjJTJGMHBudHdXenclM0QlM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlZpc2liaWxpdHlUaW1lb3V0PTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4yLklkPTEmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4yLlJlY2VpcHRIYW5kbGU9QVFFQnVCQ0Iya2wxMmEwekk1bnUlMkZudEc4SDBSZENaVTNhdzVZYW5CT0Nkb0Rlcm1JMUZxN0l2VklwWGp4OW5zN1N1TnpVUGV3aWlseTdzVW1jNUo1WGxhJTJCVzhoYWV6ejQ4QlBGQ1hhU3NRODdIZDNIOWFMcFFzaHdVZm5zdXM0NFEzMlhlZmh0NldRelhvZWR1WGQ5blExbWdWcHpWMWxIJTJCczBKa21tUlY5TjJtVEJYJTJGbjRjOTdDaHJoR3dyZGpXZFQ3ZU53N3hsdHFHbSUyRmNhUkxmenExV2NwMzZVTEp5VjRVeTA5YVZZeVdtaFIzcDE1NVpSb3U5bzk3Q0xTMW5IV0ZHNEtDVG9CeU8zQ0VCdVNiaERPMlhERlM2VVh3Wkk1SWRrQWxWaGdqRVYwNGF6R3pkWFFVTE9RZ2NLcCUyQnJFckhkNnpZSGE4bTM0NU9uT1pscDExRnRwSE10OHBNWWpUNWdJNVllJTJCcU8wVkFiOEwxeERZcXYlMkZHWG1OJTJGcmNMYlRndXhrdk5wYkZRalZ0RG9WT2NUQWRzaVElM0QlM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4yLlZpc2liaWxpdHlUaW1lb3V0PTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4zLklkPTImQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4zLlJlY2VpcHRIYW5kbGU9QVFFQnRvV2ZKU2xCTXh0a090emlIbUN0aHRPdWNMWEh5dlZjMFlUNTZVdjVtcno0VHFQUEwzWjh1WFlYQ1lmNnEzeHVZdGNZeW52alIlMkZHMGp5Z3R5RW5CN2slMkZIM1pDaTdKJTJGb3V4d3pPZzNUOFBpU2x5NjM1aVlNWmlhUE0yc29NQjFTYXdjWndTbWZidHclMkJRSzNqTDU5TGJxeUtCcW1mTjNzJTJGcUZOdmxtTlhMWTV2UzByclR3MzhsNnRqMjBnS3RhQzI4QlRaT25NWGtKNWFhJTJCc1NCJTJCUU1BRUdpWXZ6Q3UwYVRPZlNzdUVmZ2clMkJVOERaR0dzRGNmUEJNaEFyd1RNREZpJTJCeGdzZEU4TkRSZkF6UXBvUjd1VnhkbnN5OWxLJTJCbCUyRkpyaWx1MklwYmd3YlRDSkt3ZVZ6eWFSeVYlMkJqRGswWE9ycExKVHlSVEJxRU1TUkJxc2txU2xQZGo2QVFEczRLakdTMWtKJTJCS0Z1OU9wcVhqTGxnY2h5Q2NuT2dQYTF0S2kxNVlVeXNVZVVxVzl3JTJGSXNtV09vejh3JTNEJTNEJkNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXF1ZXN0RW50cnkuMy5WaXNpYmlsaXR5VGltZW91dD0wJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNEb3VibGVBY2stdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "839" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "31e66baa-f2f1-5887-8dc7-3cf3c288ec9b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4yPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48QmF0Y2hSZXN1bHRFcnJvckVudHJ5PjxJZD4wPC9JZD48Q29kZT5SZWNlaXB0SGFuZGxlSXNJbnZhbGlkPC9Db2RlPjxNZXNzYWdlPk1lc3NhZ2UgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGF2YWlsYWJsZSBmb3IgdmlzaWJpbGl0eSB0aW1lb3V0IGNoYW5nZTwvTWVzc2FnZT48U2VuZGVyRmF1bHQ+dHJ1ZTwvU2VuZGVyRmF1bHQ+PC9CYXRjaFJlc3VsdEVycm9yRW50cnk+PEJhdGNoUmVzdWx0RXJyb3JFbnRyeT48SWQ+MTwvSWQ+PENvZGU+UmVjZWlwdEhhbmRsZUlzSW52YWxpZDwvQ29kZT48TWVzc2FnZT5NZXNzYWdlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhdmFpbGFibGUgZm9yIHZpc2liaWxpdHkgdGltZW91dCBjaGFuZ2U8L01lc3NhZ2U+PFNlbmRlckZhdWx0PnRydWU8L1NlbmRlckZhdWx0PjwvQmF0Y2hSZXN1bHRFcnJvckVudHJ5PjwvQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjMxZTY2YmFhLWYyZjEtNTg4Ny04ZGM3LTNjZjNjMjg4ZWM5YjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZT4=" } }, { "ID": "8729499b48c5c168", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "181" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljRG91YmxlQWNrLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "852" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "dda70b09-7119-597f-ba24-5c5041604d63" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NWMyMWUzYjEtYzg2Ni00YzMzLTkxMWQtNTdmZmNmY2Y0YzA4PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmlCR1VkWlN4bE9yZnZZQ2ZCMkpXNFY1MWlXemVHVU1laDlFaWNJRFozNHNIS1l2UkxUS2ZTUUFlMnQzbTNrYWJlUjJWL2h6MVlQTnZjbDhTZ1hpTTM2dlBoUjE0TWsxcnFWRnNpaVR6YXBwSktvTXIrWE5idndUUHVBc0tDTDZSTG0vSDZ0QitvWGJ0cHZ2dXAvZkZpY0VmekNLRG0rYzlBdUZkQkpFS2pGNWZvZERZY2UreTNDZGxYc0ozdUZHQzV0VzRYVDVFZURGL0ZSUGJEMGQxZ203ZzdQY1EwMUV6K1hIWXZxaDE5aitvUk1saEx0clp2WEFYc2lXYjJqVlRSdWcvZ1IxcVNKb1MwRnFsT0ZuNHpTc1JVMGJOb0IycHQxaVd2amFGbjQyK3NoNEllTi9ON1VBYVZad3B6Q1hUTUFuMEpPVHJiWWcwU2NScDYxWC9vdWVDWndlK1VDdEZYelB4TzlGb2NqcGhwK0NTWEZnSGRPeDFiSkh1OUZUeS9DQ3FTcnRzVFFTZkZnd21zVEpoa3c9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZkJvZHk+PEJvZHk+MDwvQm9keT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmRkYTcwYjA5LTcxMTktNTk3Zi1iYTI0LTVjNTA0MTYwNGQ2MzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "accb432e39d2bbc7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "129" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNEb3VibGVBY2stdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:45 GMT" ], "X-Amzn-Requestid": [ "18933a6d-0869-5a15-96e5-6d343810ce09" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4xODkzM2E2ZC0wODY5LTVhMTUtOTZlNS02ZDM0MzgxMGNlMDk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }TestErrorOnReceiveFromClosedSubscription.replay000066400000000000000000000176671367004507500364430ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic{ "Initial": "AQAAAA7WcSU/OqzfJf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "594184b850d4e2dd", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "98" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "370" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:52 GMT" ], "X-Amzn-Requestid": [ "c067fc9c-436b-5147-807e-abc573eb477e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tdG9wLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5jMDY3ZmM5Yy00MzZiLTUxNDctODA3ZS1hYmM1NzNlYjQ3N2U8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "99f48b53932de3f8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "188" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "422" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:52 GMT" ], "X-Amzn-Requestid": [ "02c7fb7d-f4b0-55b9-a155-ac24c4306380" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi10b3AtMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4wMmM3ZmI3ZC1mNGIwLTU1YjktYTE1NS1hYzI0YzQzMDYzODA8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "8d7ea7deea492fe6", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "713" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tdG9wLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0Vycm9yT25SZWNlaXZlRnJvbUNsb3NlZFN1YnNjcmlwdGlvbi10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:52 GMT" ], "X-Amzn-Requestid": [ "48f5f797-8771-5a8e-b288-a0ceb7f1bcb7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NDhmNWY3OTctODc3MS01YThlLWIyODgtYTBjZWI3ZjFiY2I3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "4bc580f798eabf6c", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "156" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNFcnJvck9uUmVjZWl2ZUZyb21DbG9zZWRTdWJzY3JpcHRpb24tdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:52 GMT" ], "X-Amzn-Requestid": [ "78329453-dd27-5aa1-bd6b-c30aeda75c98" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD43ODMyOTQ1My1kZDI3LTVhYTEtYmQ2Yi1jMzBhZWRhNzVjOTg8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }TestErrorOnSendToClosedTopic.replay000066400000000000000000000175071367004507500340140ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic{ "Initial": "AQAAAA7WcSU6Azq+uf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "1c1ba8c4ff50337e", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "86" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY0Vycm9yT25TZW5kVG9DbG9zZWRUb3BpYy10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "358" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:46 GMT" ], "X-Amzn-Requestid": [ "de317d15-2dcf-52e8-a168-2a4c1db5ff75" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNFcnJvck9uU2VuZFRvQ2xvc2VkVG9waWMtdG9wLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kZTMxN2QxNS0yZGNmLTUyZTgtYTE2OC0yYTRjMWRiNWZmNzU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "72c0a7ead2794605", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0Vycm9yT25TZW5kVG9DbG9zZWRUb3BpYy10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "410" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:46 GMT" ], "X-Amzn-Requestid": [ "bdd4d521-3e87-5bca-a6e7-82780efd7657" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY0Vycm9yT25TZW5kVG9DbG9zZWRUb3BpYy10b3AtMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5iZGQ0ZDUyMS0zZTg3LTViY2EtYTZlNy04Mjc4MGVmZDc2NTc8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "87a05aef41ffca94", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "689" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNFcnJvck9uU2VuZFRvQ2xvc2VkVG9waWMtdG9wLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY0Vycm9yT25TZW5kVG9DbG9zZWRUb3BpYy10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:46 GMT" ], "X-Amzn-Requestid": [ "a380b9c6-3cc6-5e8b-8a8b-ee9f0cbc4316" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YTM4MGI5YzYtM2NjNi01ZThiLThhOGItZWU5ZjBjYmM0MzE2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "73d3a62748158215", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "144" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNFcnJvck9uU2VuZFRvQ2xvc2VkVG9waWMtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:46 GMT" ], "X-Amzn-Requestid": [ "9b20d56c-4146-50e2-9f15-8235713c6d7f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45YjIwZDU2Yy00MTQ2LTUwZTItOWYxNS04MjM1NzEzYzZkN2Y8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestMetadata.replay000066400000000000000000001010211367004507500307400ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU7E8vOjv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "8bbb9d456c74426f", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "70" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY01ldGFkYXRhLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "342" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:47 GMT" ], "X-Amzn-Requestid": [ "513edee2-5276-5535-97ae-89bb620d058a" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNNZXRhZGF0YS10b3AtMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjUxM2VkZWUyLTUyNzYtNTUzNS05N2FlLTg5YmI2MjBkMDU4YTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "c85b08158a1173db", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "160" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY01ldGFkYXRhLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "394" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:47 GMT" ], "X-Amzn-Requestid": [ "d8bbb339-2dc5-5436-bc17-e4601dbe8489" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY01ldGFkYXRhLXRvcC0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmQ4YmJiMzM5LTJkYzUtNTQzNi1iYzE3LWU0NjAxZGJlODQ4OTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "b9871f46fd4e6516", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "657" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNNZXRhZGF0YS10b3AtMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTWV0YWRhdGEtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:47 GMT" ], "X-Amzn-Requestid": [ "591e862b-8c04-599c-acb4-d172bc7fd923" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NTkxZTg2MmItOGMwNC01OTljLWFjYjQtZDE3MmJjN2ZkOTIzPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "3980d1d66cf046dc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "3382" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY01ldGFkYXRhLXRvcC0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuTmFtZT0xMjM0NSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS4xLlZhbHVlLkRhdGFUeXBlPVN0cmluZyZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS4xLlZhbHVlLlN0cmluZ1ZhbHVlPTEyMzQ1JlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEwLk5hbWU9X18weDViX19fXzB4NWNfX19fMHg1ZF9fX18weDVlX19fJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEwLlZhbHVlLkRhdGFUeXBlPVN0cmluZyZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS4xMC5WYWx1ZS5TdHJpbmdWYWx1ZT0lMjU1QiUyNTVDJTI1NUQlMjU1RV8mU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMi5OYW1lPV9fMHgwX19fXzB4MV9fX18weDJfX19fMHgzX19fXzB4NF9fX18weDVfX19fMHg2X19fXzB4N19fX18weDhfX19fMHg5X19fXzB4YV9fX18weGJfX19fMHhjX19fXzB4ZF9fX18weGVfX19fMHhmX18mU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMi5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMi5WYWx1ZS5TdHJpbmdWYWx1ZT0lMjUwMCUyNTAxJTI1MDIlMjUwMyUyNTA0JTI1MDUlMjUwNiUyNTA3JTI1MDglMjUwOSUyNTBBJTI1MEIlMjUwQyUyNTBEJTI1MEUlMjUwRiZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS4zLk5hbWU9X18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX18mU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMy5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMy5WYWx1ZS5TdHJpbmdWYWx1ZT0lMjUxMCUyNTExJTI1MTIlMjUxMyUyNTE0JTI1MTUlMjUxNiUyNTE3JTI1MTglMjUxOSUyNTFBJTI1MUIlMjUxQyUyNTFEJTI1MUUlMjUxRiZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS40Lk5hbWU9X18weDIwX19fXzB4MjFfX19fMHgyMl9fX18weDIzX19fXzB4MjRfX19fMHgyNV9fX18weDI2X19fXzB4MjdfX19fMHgyOF9fX18weDI5X19fXzB4MmFfX19fMHgyYl9fX18weDJjX18tLl9fMHgyZl9fJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjQuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjQuVmFsdWUuU3RyaW5nVmFsdWU9JTI1MjAlMjUyMSUyNTIyJTI1MjMlMjQlMjUyNSUyNiUyNTI3JTI1MjglMjUyOSUyNTJBJTJCJTI1MkMtLiUyNTJGJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjUuTmFtZT1fXzB4MmVfX19fMHgyZV9fX18weDJmX19mb29fXzB4MmZfXy5fXzB4MmVfX19fMHgyZl9fYmFyX18weDJmX18uX18weDJlX19fXzB4MmZfXy5fXzB4MmVfX19fMHgyZl9fYmF6Ll9fMHgyZV9fX18weDJmX18mU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNS5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNS5WYWx1ZS5TdHJpbmdWYWx1ZT0uLiUyNTJGZm9vJTI1MkYuLiUyNTJGYmFyJTI1MkYuLiUyNTJGLi4lMjUyRmJhei4uJTI1MkYmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNi5OYW1lPV9fMHgyZV9fX18weDJlX19fXzB4NWNfX2Zvb19fMHg1Y19fLl9fMHgyZV9fX18weDVjX19iYXJfXzB4NWNfXy5fXzB4MmVfX19fMHg1Y19fLl9fMHgyZV9fX18weDVjX19iYXouX18weDJlX19fXzB4NWNfXyZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS42LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS42LlZhbHVlLlN0cmluZ1ZhbHVlPS4uJTI1NUNmb28lMjU1Qy4uJTI1NUNiYXIlMjU1Qy4uJTI1NUMuLiUyNTVDYmF6Li4lMjU1QyZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS43Lk5hbWU9X18weDJlX19fXzB4MmVfX19fMHg1Y19fZm9vX18weDVjX19fXzB4NWNfX2Jhcl9fMHg1Y19fX18weDVjX19fXzB4NWNfX2JheiZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS43LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS43LlZhbHVlLlN0cmluZ1ZhbHVlPS4uJTI1NUNmb28lMjU1QyUyNTVDYmFyJTI1NUMlMjU1QyUyNTVDYmF6JlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjguTmFtZT1fXzB4M2FfX19fMHgzYl9fX18weDNjX19fXzB4M2RfX19fMHgzZV9fX18weDNmX18mU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuOC5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuOC5WYWx1ZS5TdHJpbmdWYWx1ZT0lM0ElMjUzQiUyNTNDJTNEJTI1M0UlMjUzRiZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS45Lk5hbWU9X18weDQwX18mU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuOS5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuOS5WYWx1ZS5TdHJpbmdWYWx1ZT0lNDAmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VCb2R5PWhlbGxvK3dvcmxkJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:47 GMT" ], "X-Amzn-Requestid": [ "75b0b59f-ab3b-594d-9f5a-e2c69b40b9f2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjZiODQxNjM5LWVhMmUtNGMxNi1hZDY3LTZlNGQzNTRiZjQ2YzwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZk1lc3NhZ2VCb2R5PjxNRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPmYzZmJmZGUxZTgyNTI0ZGVjMDhlNGI1ZjY2MGExMDZjPC9NRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjc1YjBiNTlmLWFiM2ItNTk0ZC05ZjVhLWUyYzY5YjQwYjlmMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "0439a4c1082b9323", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTWV0YWRhdGEtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "3168" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:47 GMT" ], "X-Amzn-Requestid": [ "5745ce96-77e9-59d4-8a39-99cf4792196b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NmI4NDE2MzktZWEyZS00YzE2LWFkNjctNmU0ZDM1NGJmNDZjPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlJGdGpxbktDY0hUampsNWc2K0xGZFlCR3FZdnZ1UXFQejQvNnNlN3AzZzBkL214cWREY2FSL2NXMThvaEVKRTJYZG40N3U4ajV6anBJK0NKS0RoVjVrbnZNZk03bnNWZHdIS3lFZU5DcmxhUXYwR1NQRzlYZVlzQXdDY2VzbjBNdUlWMU4zQXhEZmxNcnNFY1BZdG5GY3VRY2NKemYreFVKVG1ka0llemJURUE2c0lFWnpzL0RqRENaZnc3L3NpSnlvTHNCUmV6NGk1bDU1YUFLRDdYV2g1L3BWeDBLK2pGaDI1by8xTUd4TzFXRWhaejVkTWNDREg5YXpxOHhVRHBvdHJmR3NZYjRQWW5PN1hrNW5XS3dKU2d4NHVYNGUxeXRuQlNoSTJhWFltT2xLamFybjkrZDNISkt3UDBCdmFsWmVHaTNxaTBXKzFsUnRiOTdBZXdQc1kySlhoYUFsVCt0WFI0bDhFVHUvdHhacjIyVnZOYmNMdHhPQ3VzaU1RM3luNFl0Rk5rd1Y5WVVMd1NqcUZUZ1E9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+ZjNmYmZkZTFlODI1MjRkZWMwOGU0YjVmNjYwYTEwNmM8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+MTIzNDU8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4xMjM0NTwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDBfX19fMHgxX19fXzB4Ml9fX18weDNfX19fMHg0X19fXzB4NV9fX18weDZfX19fMHg3X19fXzB4OF9fX18weDlfX19fMHhhX19fXzB4Yl9fX18weGNfX19fMHhkX19fXzB4ZV9fX18weGZfXzwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPiUwMCUwMSUwMiUwMyUwNCUwNSUwNiUwNyUwOCUwOSUwQSUwQiUwQyUwRCUwRSUwRjwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDEwX19fXzB4MTFfX19fMHgxMl9fX18weDEzX19fXzB4MTRfX19fMHgxNV9fX18weDE2X19fXzB4MTdfX19fMHgxOF9fX18weDE5X19fXzB4MWFfX19fMHgxYl9fX18weDFjX19fXzB4MWRfX19fMHgxZV9fX18weDFmX188L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4lMTAlMTElMTIlMTMlMTQlMTUlMTYlMTclMTglMTklMUElMUIlMUMlMUQlMUUlMUY8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPl9fMHgyMF9fX18weDIxX19fXzB4MjJfX19fMHgyM19fX18weDI0X19fXzB4MjVfX19fMHgyNl9fX18weDI3X19fXzB4MjhfX19fMHgyOV9fX18weDJhX19fXzB4MmJfX19fMHgyY19fLS5fXzB4MmZfXzwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPiUyMCUyMSUyMiUyMyQlMjUmYW1wOyUyNyUyOCUyOSUyQSslMkMtLiUyRjwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDJlX19fXzB4MmVfX19fMHgyZl9fZm9vX18weDJmX18uX18weDJlX19fXzB4MmZfX2Jhcl9fMHgyZl9fLl9fMHgyZV9fX18weDJmX18uX18weDJlX19fXzB4MmZfX2Jhei5fXzB4MmVfX19fMHgyZl9fPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+Li4lMkZmb28lMkYuLiUyRmJhciUyRi4uJTJGLi4lMkZiYXouLiUyRjwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDJlX19fXzB4MmVfX19fMHg1Y19fZm9vX18weDVjX18uX18weDJlX19fXzB4NWNfX2Jhcl9fMHg1Y19fLl9fMHgyZV9fX18weDVjX18uX18weDJlX19fXzB4NWNfX2Jhei5fXzB4MmVfX19fMHg1Y19fPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+Li4lNUNmb28lNUMuLiU1Q2JhciU1Qy4uJTVDLi4lNUNiYXouLiU1QzwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDJlX19fXzB4MmVfX19fMHg1Y19fZm9vX18weDVjX19fXzB4NWNfX2Jhcl9fMHg1Y19fX18weDVjX19fXzB4NWNfX2JhejwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPi4uJTVDZm9vJTVDJTVDYmFyJTVDJTVDJTVDYmF6PC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5fXzB4M2FfX19fMHgzYl9fX18weDNjX19fXzB4M2RfX19fMHgzZV9fX18weDNmX188L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT46JTNCJTNDPSUzRSUzRjwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDQwX188L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5APC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5fXzB4NWJfX19fMHg1Y19fX18weDVkX19fXzB4NWVfX188L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4lNUIlNUMlNUQlNUVfPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjU3NDVjZTk2LTc3ZTktNTlkNC04YTM5LTk5Y2Y0NzkyMTk2YjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "7467af0b01f5a6fc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "667" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlJGdGpxbktDY0hUampsNWc2JTJCTEZkWUJHcVl2dnVRcVB6NCUyRjZzZTdwM2cwZCUyRm14cWREY2FSJTJGY1cxOG9oRUpFMlhkbjQ3dThqNXpqcEklMkJDSktEaFY1a252TWZNN25zVmR3SEt5RWVOQ3JsYVF2MEdTUEc5WGVZc0F3Q2Nlc24wTXVJVjFOM0F4RGZsTXJzRWNQWXRuRmN1UWNjSnpmJTJCeFVKVG1ka0llemJURUE2c0lFWnpzJTJGRGpEQ1pmdzclMkZzaUp5b0xzQlJlejRpNWw1NWFBS0Q3WFdoNSUyRnBWeDBLJTJCakZoMjVvJTJGMU1HeE8xV0VoWno1ZE1jQ0RIOWF6cTh4VURwb3RyZkdzWWI0UFluTzdYazVuV0t3SlNneDR1WDRlMXl0bkJTaEkyYVhZbU9sS2phcm45JTJCZDNISkt3UDBCdmFsWmVHaTNxaTBXJTJCMWxSdGI5N0Fld1BzWTJKWGhhQWxUJTJCdFhSNGw4RVR1JTJGdHhacjIyVnZOYmNMdHhPQ3VzaU1RM3luNFl0Rk5rd1Y5WVVMd1NqcUZUZ1ElM0QlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY01ldGFkYXRhLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:48 GMT" ], "X-Amzn-Requestid": [ "959b84ab-faec-5205-8237-d3f2ca9052ba" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OTU5Yjg0YWItZmFlYy01MjA1LTgyMzctZDNmMmNhOTA1MmJhPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "d67c5705bdc83888", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "2208" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY01ldGFkYXRhLXRvcC0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuTmFtZT1fXzB4MjYzYV9fX18weDI2M2FfX19fMHgyNjNhX18mU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMS5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMS5WYWx1ZS5TdHJpbmdWYWx1ZT0lMjVFMiUyNTk4JTI1QkElMjVFMiUyNTk4JTI1QkElMjVFMiUyNTk4JTI1QkEmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMi5OYW1lPV9fMHg2MF9fJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjIuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjIuVmFsdWUuU3RyaW5nVmFsdWU9JTI1NjAmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMy5OYW1lPV9fMHg3Yl9fX18weDdjX19fXzB4N2RfX19fMHg3ZV9fX18weDdmX18mU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMy5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMy5WYWx1ZS5TdHJpbmdWYWx1ZT0lMjU3QiUyNTdDJTI1N0R+JTI1N0YmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNC5OYW1lPWZvb19fMHgyMF9fYmFyX18weDIwX19iYXomU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNC5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNC5WYWx1ZS5TdHJpbmdWYWx1ZT1mb28lMjUyMGJhciUyNTIwYmF6JlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjUuTmFtZT1mb29fXzB4MjJfX2Jhcl9fMHgyMl9fYmF6JlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjUuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjUuVmFsdWUuU3RyaW5nVmFsdWU9Zm9vJTI1MjJiYXIlMjUyMmJheiZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS42Lk5hbWU9Zm9vX18weDJmX19fXzB4MmZfX2Jhcl9fMHgyZl9fX18weDJmX19fXzB4MmZfX2JheiZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS42LlZhbHVlLkRhdGFUeXBlPVN0cmluZyZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS42LlZhbHVlLlN0cmluZ1ZhbHVlPWZvbyUyNTJGJTI1MkZiYXIlMjUyRiUyNTJGJTI1MkZiYXomU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNy5OYW1lPWZvb19fMHgyZl9fYmFyX18weDJmX19iYXomU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNy5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuNy5WYWx1ZS5TdHJpbmdWYWx1ZT1mb28lMjUyRmJhciUyNTJGYmF6JlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjguTmFtZT1mb29fXzB4NWNfX2Jhcl9fMHg1Y19fYmF6JlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjguVmFsdWUuRGF0YVR5cGU9U3RyaW5nJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjguVmFsdWUuU3RyaW5nVmFsdWU9Zm9vJTI1NUNiYXIlMjU1Q2JheiZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9aGVsbG8rd29ybGQmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:48 GMT" ], "X-Amzn-Requestid": [ "d57be50c-7178-5c9c-9109-b25541045c23" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPmIxMDYzOWJlLTQzNzAtNGJmNi04NGRkLWMzNDAzYjIwMjJkMjwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZk1lc3NhZ2VCb2R5PjxNRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPmRlOGJhNzBlMjkwNzY5Y2ExODU0M2RhOTI0MGRlMDI1PC9NRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmQ1N2JlNTBjLTcxNzgtNWM5Yy05MTA5LWIyNTU0MTA0NWMyMzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "7e0d850036230852", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTWV0YWRhdGEtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "2249" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:48 GMT" ], "X-Amzn-Requestid": [ "8e1a900d-e285-5fba-a776-c754d2f93f05" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+YjEwNjM5YmUtNDM3MC00YmY2LTg0ZGQtYzM0MDNiMjAyMmQyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjNtYXJIdC93NjVLWExoK21jYndCQ0lsT3MvbUFQUzZDbTJ2N0JNWGQwMVUxZksxaUxEL0tyeXY3ZU50SWRnamx2OEN5UWRydHlLTjNWUUlQR3lrMU5XQmRGU1hHS04vck9zNlFZWWtVZHZtM2sxaVlWNWh0US9JZVRuaERocWNRZSswWFhoT1R5VlJldGRHVHUzeFdieng2VnVLZkUxdURGT1ZMMjNVVllHK2RFM0wxYVR3a2E2cElQbnBibThIZmJVdmljZmRPdW1kVWRXdy9KKytydmZWajlCdzF2WEZQQXAzSVBPOWZVeGFyMWNUVTJFaFlDdFpnejBaTkxxRm5jWVh6bWM1TVN2ZmZ5TkEwVFpUak9YY044NUJ2a3g5Ni9lUVJ0aGZXeFdKZGlZSlprd0Fuc1A3R25WWGtMekxsSFRIdVpvZFRqNVBhS1hEcmpidEdDYVg3OE04cFhwKy9iTkhmWjhXUVY2Y2JtRjdERGJmcVl0eDdvamJNbDFFWnQzdVl2THMxelNrTS9ldmpvRy9QZlE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PjVlYjYzYmJiZTAxZWVlZDA5M2NiMjJiYjhmNWFjZGMzPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+ZGU4YmE3MGUyOTA3NjljYTE4NTQzZGE5MjQwZGUwMjU8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+aGVsbG8gd29ybGQ8L0JvZHk+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDI2M2FfX19fMHgyNjNhX19fXzB4MjYzYV9fPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+JUUyJTk4JUJBJUUyJTk4JUJBJUUyJTk4JUJBPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5fXzB4NjBfXzwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPiU2MDwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PE1lc3NhZ2VBdHRyaWJ1dGU+PE5hbWU+X18weDdiX19fXzB4N2NfX19fMHg3ZF9fX18weDdlX19fXzB4N2ZfXzwvTmFtZT48VmFsdWU+PFN0cmluZ1ZhbHVlPiU3QiU3QyU3RH4lN0Y8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHgyMF9fYmFyX18weDIwX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lMjBiYXIlMjBiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHgyMl9fYmFyX18weDIyX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lMjJiYXIlMjJiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHgyZl9fX18weDJmX19iYXJfXzB4MmZfX19fMHgyZl9fX18weDJmX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lMkYlMkZiYXIlMkYlMkYlMkZiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHgyZl9fYmFyX18weDJmX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lMkZiYXIlMkZiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmZvb19fMHg1Y19fYmFyX18weDVjX19iYXo8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT5mb28lNUNiYXIlNUNiYXo8L1N0cmluZ1ZhbHVlPjxEYXRhVHlwZT5TdHJpbmc8L0RhdGFUeXBlPjwvVmFsdWU+PC9NZXNzYWdlQXR0cmlidXRlPjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OGUxYTkwMGQtZTI4NS01ZmJhLWE3NzYtYzc1NGQyZjkzZjA1PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "ae55c5e94b227f72", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "669" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjNtYXJIdCUyRnc2NUtYTGglMkJtY2J3QkNJbE9zJTJGbUFQUzZDbTJ2N0JNWGQwMVUxZksxaUxEJTJGS3J5djdlTnRJZGdqbHY4Q3lRZHJ0eUtOM1ZRSVBHeWsxTldCZEZTWEdLTiUyRnJPczZRWVlrVWR2bTNrMWlZVjVodFElMkZJZVRuaERocWNRZSUyQjBYWGhPVHlWUmV0ZEdUdTN4V2J6eDZWdUtmRTF1REZPVkwyM1VWWUclMkJkRTNMMWFUd2thNnBJUG5wYm04SGZiVXZpY2ZkT3VtZFVkV3clMkZKJTJCJTJCcnZmVmo5QncxdlhGUEFwM0lQTzlmVXhhcjFjVFUyRWhZQ3RaZ3owWk5McUZuY1lYem1jNU1TdmZmeU5BMFRaVGpPWGNOODVCdmt4OTYlMkZlUVJ0aGZXeFdKZGlZSlprd0Fuc1A3R25WWGtMekxsSFRIdVpvZFRqNVBhS1hEcmpidEdDYVg3OE04cFhwJTJCJTJGYk5IZlo4V1FWNmNibUY3RERiZnFZdHg3b2piTWwxRVp0M3VZdkxzMXpTa00lMkZldmpvRyUyRlBmUSUzRCUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTWV0YWRhdGEtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:48 GMT" ], "X-Amzn-Requestid": [ "e5531ab0-b814-5be0-9535-4de988680b5f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZTU1MzFhYjAtYjgxNC01YmUwLTk1MzUtNGRlOTg4NjgwYjVmPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "936c586ed569e72d", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "128" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNNZXRhZGF0YS10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:48 GMT" ], "X-Amzn-Requestid": [ "30c761ce-f1c2-5c96-98a0-3697c1befc29" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zMGM3NjFjZS1mMWMyLTVjOTYtOThhMC0zNjk3YzFiZWZjMjk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestNack.replay000066400000000000000000001001511367004507500300770ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU8H4jfgv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "3ee432c0ba129a99", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "66" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY05hY2stdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "338" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:48 GMT" ], "X-Amzn-Requestid": [ "c9983d2a-5242-5fc2-ab8c-6a73623ee827" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNOYWNrLXRvcC0xPC9RdWV1ZVVybD48L0NyZWF0ZVF1ZXVlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+Yzk5ODNkMmEtNTI0Mi01ZmMyLWFiOGMtNmE3MzYyM2VlODI3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvQ3JlYXRlUXVldWVSZXNwb25zZT4=" } }, { "ID": "5d4f8b72e3648689", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "156" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05hY2stdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "390" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:48 GMT" ], "X-Amzn-Requestid": [ "1e8a10db-fb8a-5f23-9e7d-4782cbf688c6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY05hY2stdG9wLTE8L1ZhbHVlPjwvQXR0cmlidXRlPjwvR2V0UXVldWVBdHRyaWJ1dGVzUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MWU4YTEwZGItZmI4YS01ZjIzLTllN2QtNDc4MmNiZjY4OGM2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvR2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "cfd0d05aac393c9a", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "649" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNOYWNrLXRvcC0xJTIyJTBBJTA5JTA5JTdEJTBBJTA5JTA5JTVEJTBBJTA5JTA5JTdEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNOYWNrLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "1bbff355-90a3-5946-845f-a40ca0de4ea3" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MWJiZmYzNTUtOTBhMy01OTQ2LTg0NWYtYTQwY2EwZGU0ZWEzPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "cd3610c3795d519b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "409" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05hY2stdG9wLTEmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMS5OYW1lPWEmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMS5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMS5WYWx1ZS5TdHJpbmdWYWx1ZT0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQm9keT0wJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "f889ba5b-f44c-55e7-9c26-ed02c431a202" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjdmODIwMWVjLTQ1NmEtNGFjNC04OTk3LWJkMGFkZTY3YzEzZTwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZk1lc3NhZ2VCb2R5PjxNRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjlhYTQ2ODdjOGI3NTY3YmFhMzgwZDlmMzAwZmUyODNhPC9NRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmY4ODliYTViLWY0NGMtNTVlNy05YzI2LWVkMDJjNDMxYTIwMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "9c5315e361db65ce", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "409" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05hY2stdG9wLTEmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMS5OYW1lPWEmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMS5WYWx1ZS5EYXRhVHlwZT1TdHJpbmcmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VBdHRyaWJ1dGUuMS5WYWx1ZS5TdHJpbmdWYWx1ZT0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQm9keT0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "14fe7508-6289-53a5-95c6-225152f4e440" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjM1MmIyNzQ0LWJiOTctNDZmNi1iOWRmLTU4NmYwMDQ3Y2Y1NTwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PmM0Y2E0MjM4YTBiOTIzODIwZGNjNTA5YTZmNzU4NDliPC9NRDVPZk1lc3NhZ2VCb2R5PjxNRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjMxNGM3N2IyNDk4OTNjNmIzYzc2NWE0MmNjMDhiMjQ1PC9NRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjE0ZmU3NTA4LTYyODktNTNhNS05NWM2LTIyNTE1MmY0ZTQ0MDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "f407d66523e9dada", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTmFjay10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1054" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "fa56942a-6ee2-525f-8a3a-c3735e9fe5ba" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+N2Y4MjAxZWMtNDU2YS00YWM0LTg5OTctYmQwYWRlNjdjMTNlPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjFRY3poUFNqQUNMbFp4SnNBZmM2M1BVOGY5MlIxK3IvRHlzUndsNlJLS1dzVWNsN0taVzFwSVlvZnBOY0VZNE1XT3NxbWVTQ2llUTBOUTdaQ3A2S3Fqbk8rVjl1Z0s0dEhWTk1VTEs0SHc4bzNrU3d4NS9oUlZLeWpXRGpVUWp2ZzNnZm8vMUNneDUzc1IxUTJobVJLdFJzdmgyOXhnYzcwelNpVnZZTmtndHFQZEozS2R0eS9wbm1CbDlnRzk5QVFVdXcrdzg4VmhGY29jRWlSWDFOT2c3V1BBUDcwNUdZSmNUaXd3STY1czFLMXF1aFFmM0lXVTlFbEE3dnFXOFJkOTBtY1ltUU8vcXZzdDZydXBBc3lObURvbWlnNlE1VFIxM01oUWJ5QnpIM0xwNHNpMTZtUzN5b3pDblpHNmd6R2x3L3VHV3JYQ0pVWWY4ZUcrN09lQ05hMys4TE9EekdQSjl0MU9XbUpKZ3FtQWd4NER5ZEVudlh6VjJsY1ZZK05EUG1tQWE3VUhCWTFJR3lHVTVZZEE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+OWFhNDY4N2M4Yjc1NjdiYWEzODBkOWYzMDBmZTI4M2E8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+MDwvQm9keT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5hPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+MDwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5mYTU2OTQyYS02ZWUyLTUyNWYtOGEzYS1jMzczNWU5ZmU1YmE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "66441fe161185383", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTmFjay10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1054" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "dccafdb5-b43a-55ee-8881-aaec8447720b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MzUyYjI3NDQtYmI5Ny00NmY2LWI5ZGYtNTg2ZjAwNDdjZjU1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlFRRXBQamhDaERXUktCY2VFdWJnMmQ4b3VPU0NjM01wMHBaS0trd2czdndsNUlNNWsvSU02U1hKVGpNTFNYcDA4U1VDTXJQQ0RqOGljd1RhT0Y3bVpGSmo4UXpLRHdiNDdNTzBTejd6TDJDM0JSRThJVlM3cGJRN3dHWVdvZ0hadW52UnFrTHp6N0hSb1pIYncwaktyRlU0YlhOWFljSXVVR2dkYU8wQ25PQjZJS0dOT1ZBNGJ2MXJKb0RLZDZSaW5pcGJBSG9DUTNxemJXemxHN2ZwSkgwUDdrMy9kOVFyZEhZQTg4U2FtUTNHS1ZJbkhCb21CWWJKUUVaUS9vTzZQRDhXRmhJMVpMTkpCWmV2VzgzTG5ZTXRWWFdQYmJ0UUFpV0xiVjdjQTNhMnNCV2FjTHRNVXdtdmtJeVUxZTZlczBkMXcyRkV0cDdHMDdUbEVqeXBFYmIvUjkxVkRwM1VVZ0o5WEgwQ0V3T2I2Y1pQNm12MHVtakwwVjF0YTR5dEh0SXVqMENSRlo4ZEw5d2Z4cUtWSHc9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmM0Y2E0MjM4YTBiOTIzODIwZGNjNTA5YTZmNzU4NDliPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+MzE0Yzc3YjI0OTg5M2M2YjNjNzY1YTQyY2MwOGIyNDU8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+MTwvQm9keT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5hPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+MTwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5kY2NhZmRiNS1iNDNhLTU1ZWUtODg4MS1hYWVjODQ0NzcyMGI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "c72497991b912c79", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "750" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjFRY3poUFNqQUNMbFp4SnNBZmM2M1BVOGY5MlIxJTJCciUyRkR5c1J3bDZSS0tXc1VjbDdLWlcxcElZb2ZwTmNFWTRNV09zcW1lU0NpZVEwTlE3WkNwNktxam5PJTJCVjl1Z0s0dEhWTk1VTEs0SHc4bzNrU3d4NSUyRmhSVkt5aldEalVRanZnM2dmbyUyRjFDZ3g1M3NSMVEyaG1SS3RSc3ZoMjl4Z2M3MHpTaVZ2WU5rZ3RxUGRKM0tkdHklMkZwbm1CbDlnRzk5QVFVdXclMkJ3ODhWaEZjb2NFaVJYMU5PZzdXUEFQNzA1R1lKY1Rpd3dJNjVzMUsxcXVoUWYzSVdVOUVsQTd2cVc4UmQ5MG1jWW1RTyUyRnF2c3Q2cnVwQXN5Tm1Eb21pZzZRNVRSMTNNaFFieUJ6SDNMcDRzaTE2bVMzeW96Q25aRzZnekdsdyUyRnVHV3JYQ0pVWWY4ZUclMkI3T2VDTmEzJTJCOExPRHpHUEo5dDFPV21KSmdxbUFneDREeWRFbnZYelYybGNWWSUyQk5EUG1tQWE3VUhCWTFJR3lHVTVZZEElM0QlM0QmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlZpc2liaWxpdHlUaW1lb3V0PTAmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05hY2stdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "411" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "f3faabf0-2f75-5d4e-b53d-fca91f08aaab" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5mM2ZhYWJmMC0yZjc1LTVkNGUtYjUzZC1mY2E5MWYwOGFhYWI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVzcG9uc2U+" } }, { "ID": "5ba4996060dc2a97", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTmFjay10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1054" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "815364c8-ffd3-568d-a518-3391cfaed168" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+N2Y4MjAxZWMtNDU2YS00YWM0LTg5OTctYmQwYWRlNjdjMTNlPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQkhoWFhRVjV0TWxHWlVrNUFOSHoyUHJRdytJbDVBbENYR2lTZjZvOGhrVWJJWTFKZC9YT3FFQmE5SjMrdld4eXBGTzVUWXlUSklmclc2UCs4NzNMcVFobDN4R0VtMmhIZ1NmOUFMQUl6SExremlpOTJMbVNOVDd5OGZyNG5YdmxnZUZrdnd0SzJXRFZjMzlPa0dncVQ4c2tyVmRGSzdjMElsTlpZMTlpY1l0WHUzZTgrT3FWRnBRY1FxUndsU2hZdENrNU5VTFFYYVlTZVVtU0xHaUJYUmVMRjk5QWhnMnZ0OGY3NFVJVHJnUm9HQkJtR0ZiZ2ZaZHl6SnkrcURvTDI5YzdDRXZHRk50Ky92ZVJSSGN1NkNiUmFQL3F3WDhaOU82SUFoNDFUSjN1dEtxTGpYNmo5eExqcjZoc1JQOU9pdlFsVnNEa01OQUNUR2ZVekVCekFkcGJ2U25RUTBvb1drdkZLSGZ4RUNDWVpWUGp3TFpmckxRMDBCZER6eGFDTFpudkVJam9iV00xUFdIZTRZczIyT2c9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+OWFhNDY4N2M4Yjc1NjdiYWEzODBkOWYzMDBmZTI4M2E8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+MDwvQm9keT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5hPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+MDwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD44MTUzNjRjOC1mZmQzLTU2OGQtYTUxOC0zMzkxY2ZhZWQxNjg8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "2df818968add37ef", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "734" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2gmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLklkPTAmQ2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlFRRXBQamhDaERXUktCY2VFdWJnMmQ4b3VPU0NjM01wMHBaS0trd2czdndsNUlNNWslMkZJTTZTWEpUak1MU1hwMDhTVUNNclBDRGo4aWN3VGFPRjdtWkZKajhRektEd2I0N01PMFN6N3pMMkMzQlJFOElWUzdwYlE3d0dZV29nSFp1bnZScWtMeno3SFJvWkhidzBqS3JGVTRiWE5YWWNJdVVHZ2RhTzBDbk9CNklLR05PVkE0YnYxckpvREtkNlJpbmlwYkFIb0NRM3F6Yld6bEc3ZnBKSDBQN2szJTJGZDlRcmRIWUE4OFNhbVEzR0tWSW5IQm9tQlliSlFFWlElMkZvTzZQRDhXRmhJMVpMTkpCWmV2VzgzTG5ZTXRWWFdQYmJ0UUFpV0xiVjdjQTNhMnNCV2FjTHRNVXdtdmtJeVUxZTZlczBkMXcyRkV0cDdHMDdUbEVqeXBFYmIlMkZSOTFWRHAzVVVnSjlYSDBDRXdPYjZjWlA2bXYwdW1qTDBWMXRhNHl0SHRJdWowQ1JGWjhkTDl3ZnhxS1ZIdyUzRCUzRCZDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVxdWVzdEVudHJ5LjEuVmlzaWJpbGl0eVRpbWVvdXQ9MCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTmFjay10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "411" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "f018c388-a960-5bd6-9c55-94d1991dbc33" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdD48Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHRFbnRyeT48L0NoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5QmF0Y2hSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5mMDE4YzM4OC1hOTYwLTViZDYtOWM1NS05NGQxOTkxZGJjMzM8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eUJhdGNoUmVzcG9uc2U+" } }, { "ID": "9decc2a161f44ece", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "176" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTmFjay10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1054" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "1305d546-2c49-583c-bac8-821f1c345fd9" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+MzUyYjI3NDQtYmI5Ny00NmY2LWI5ZGYtNTg2ZjAwNDdjZjU1PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQmZ5dkM2M1NFclMxZ3VxSlZyV2Z6NVd0aCtjYnJmTzFiMHhycHpsWmRvWTF0N1IwSElSRWdkYzl0YmUzcnp5VUZnUE1zMERWeWNQNENjbGRYaHc0SGE2QXJtcFZrVDdDS0dsMk0zYjF4NVN5VGlac2k3N0g1ak9NSG0yZmRVaTUrY29UUmx1T1RwektoL3BCcVBHWXY3dG5HWjlMZHc2RlV6RE1jRnNZLytmSkR6OGFuOXRhQks2UVkyMWdzd0V3SHp4L2tic0JnWDlSK2dtckFzUzRZZ2taNk5ibmd1bis4VncrZmR6eWdVVjBjU1FaKzVnd0dvalB2SWNpQVJwOXMrbVVNVmg1UHRqOUR1ZDNkWXpvaEszc2ZITWYwbUxUcUZEM0tOUVVpMFd0b3g3a0VHYktRY0p6Zit1Sit1WjFzZXRES2xQRERWSEg5SEtKajNOMnNaemtLcWNnQlh4RjV6dERsWWQzeW1xUDZqYlYxVHpHcWVET3VLV0dNRFRBUk81TnVTZG5kMmUxWndZVWRMK3UzaFE9PTwvUmVjZWlwdEhhbmRsZT48TUQ1T2ZCb2R5PmM0Y2E0MjM4YTBiOTIzODIwZGNjNTA5YTZmNzU4NDliPC9NRDVPZkJvZHk+PE1ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+MzE0Yzc3YjI0OTg5M2M2YjNjNzY1YTQyY2MwOGIyNDU8L01ENU9mTWVzc2FnZUF0dHJpYnV0ZXM+PEJvZHk+MTwvQm9keT48TWVzc2FnZUF0dHJpYnV0ZT48TmFtZT5hPC9OYW1lPjxWYWx1ZT48U3RyaW5nVmFsdWU+MTwvU3RyaW5nVmFsdWU+PERhdGFUeXBlPlN0cmluZzwvRGF0YVR5cGU+PC9WYWx1ZT48L01lc3NhZ2VBdHRyaWJ1dGU+PC9NZXNzYWdlPjwvUmVjZWl2ZU1lc3NhZ2VSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4xMzA1ZDU0Ni0yYzQ5LTU4M2MtYmFjOC04MjFmMWMzNDVmZDk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9SZWNlaXZlTWVzc2FnZVJlc3BvbnNlPg==" } }, { "ID": "7d669c800c21bfe6", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "651" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQkhoWFhRVjV0TWxHWlVrNUFOSHoyUHJRdyUyQklsNUFsQ1hHaVNmNm84aGtVYklZMUpkJTJGWE9xRUJhOUozJTJCdld4eXBGTzVUWXlUSklmclc2UCUyQjg3M0xxUWhsM3hHRW0yaEhnU2Y5QUxBSXpITGt6aWk5MkxtU05UN3k4ZnI0blh2bGdlRmt2d3RLMldEVmMzOU9rR2dxVDhza3JWZEZLN2MwSWxOWlkxOWljWXRYdTNlOCUyQk9xVkZwUWNRcVJ3bFNoWXRDazVOVUxRWGFZU2VVbVNMR2lCWFJlTEY5OUFoZzJ2dDhmNzRVSVRyZ1JvR0JCbUdGYmdmWmR5ekp5JTJCcURvTDI5YzdDRXZHRk50JTJCJTJGdmVSUkhjdTZDYlJhUCUyRnF3WDhaOU82SUFoNDFUSjN1dEtxTGpYNmo5eExqcjZoc1JQOU9pdlFsVnNEa01OQUNUR2ZVekVCekFkcGJ2U25RUTBvb1drdkZLSGZ4RUNDWVpWUGp3TFpmckxRMDBCZER6eGFDTFpudkVJam9iV00xUFdIZTRZczIyT2clM0QlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05hY2stdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "8b339f82-fd7e-5df0-9993-c8dbcd03824c" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OGIzMzlmODItZmQ3ZS01ZGYwLTk5OTMtYzhkYmNkMDM4MjRjPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "873248fa7b59ddc1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "661" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQmZ5dkM2M1NFclMxZ3VxSlZyV2Z6NVd0aCUyQmNicmZPMWIweHJwemxaZG9ZMXQ3UjBISVJFZ2RjOXRiZTNyenlVRmdQTXMwRFZ5Y1A0Q2NsZFhodzRIYTZBcm1wVmtUN0NLR2wyTTNiMXg1U3lUaVpzaTc3SDVqT01IbTJmZFVpNSUyQmNvVFJsdU9UcHpLaCUyRnBCcVBHWXY3dG5HWjlMZHc2RlV6RE1jRnNZJTJGJTJCZkpEejhhbjl0YUJLNlFZMjFnc3dFd0h6eCUyRmtic0JnWDlSJTJCZ21yQXNTNFlna1o2TmJuZ3VuJTJCOFZ3JTJCZmR6eWdVVjBjU1FaJTJCNWd3R29qUHZJY2lBUnA5cyUyQm1VTVZoNVB0ajlEdWQzZFl6b2hLM3NmSE1mMG1MVHFGRDNLTlFVaTBXdG94N2tFR2JLUWNKemYlMkJ1SiUyQnVaMXNldERLbFBERFZISDlIS0pqM04yc1p6a0txY2dCWHhGNXp0RGxZZDN5bXFQNmpiVjFUekdxZURPdUtXR01EVEFSTzVOdVNkbmQyZTFad1lVZEwlMkJ1M2hRJTNEJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNOYWNrLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "fb561c64-4e3a-5522-a6dd-4b3d7e4752c7" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZmI1NjFjNjQtNGUzYS01NTIyLWE2ZGQtNGIzZDdlNDc1MmM3PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "97f8b0025d5f1523", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "124" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNOYWNrLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:49 GMT" ], "X-Amzn-Requestid": [ "5faab154-3837-5d1b-8eda-e60d084a4dcd" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD41ZmFhYjE1NC0zODM3LTVkMWItOGVkYS1lNjBkMDg0YTRkY2Q8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }TestNonExistentSubscriptionSucceedsOnOpenButFailsOnReceive.replay000066400000000000000000000050131367004507500420600ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic{ "Initial": "AQAAAA7WcSU0MBhkQP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "d640ac6bdee404c8", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGbm9uZXhpc3RlbnQtc3Vic2NyaXB0aW9uJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:41 GMT" ], "X-Amzn-Requestid": [ "aa28e950-5109-56cb-b841-be09617c8ab4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD5hYTI4ZTk1MC01MTA5LTU2Y2ItYjg0MS1iZTA5NjE3YzhhYjQ8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } } ] }TestNonExistentTopicSucceedsOnOpenButFailsOnSend.replay000066400000000000000000000050531367004507500377650ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic{ "Initial": "AQAAAA7WcSU0GYXhQf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "b807e79ce998c226", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "204" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZ1cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRm5vbmV4aXN0ZW50LXF1ZXVlJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQm9keT0mVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "333" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:40 GMT" ], "X-Amzn-Requestid": [ "075f7003-82d2-50fb-9da4-275ab2a68886" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEVycm9yUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PEVycm9yPjxUeXBlPlNlbmRlcjwvVHlwZT48Q29kZT5BV1MuU2ltcGxlUXVldWVTZXJ2aWNlLk5vbkV4aXN0ZW50UXVldWU8L0NvZGU+PE1lc3NhZ2U+VGhlIHNwZWNpZmllZCBxdWV1ZSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB3c2RsIHZlcnNpb24uPC9NZXNzYWdlPjxEZXRhaWwvPjwvRXJyb3I+PFJlcXVlc3RJZD4wNzVmNzAwMy04MmQyLTUwZmItOWRhNC0yNzVhYjJhNjg4ODY8L1JlcXVlc3RJZD48L0Vycm9yUmVzcG9uc2U+" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestNonUTF8MessageBody.replay000066400000000000000000000374311367004507500325610ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU1Bo+wVf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "f2ab3b8674b4192e", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "80" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY05vblVURjhNZXNzYWdlQm9keS10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "352" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:41 GMT" ], "X-Amzn-Requestid": [ "0d171405-b90b-5ac7-9f8d-435c897e8c9b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNOb25VVEY4TWVzc2FnZUJvZHktdG9wLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4wZDE3MTQwNS1iOTBiLTVhYzctOWY4ZC00MzVjODk3ZThjOWI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "6dcc60c3940f3ea7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "170" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05vblVURjhNZXNzYWdlQm9keS10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "404" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:41 GMT" ], "X-Amzn-Requestid": [ "4dd86dc0-4d67-56bc-8b0c-3a997d1270e0" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY05vblVURjhNZXNzYWdlQm9keS10b3AtMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD40ZGQ4NmRjMC00ZDY3LTU2YmMtOGIwYy0zYTk5N2QxMjcwZTA8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "07daaed06cbd588b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "677" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNOb25VVEY4TWVzc2FnZUJvZHktdG9wLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05vblVURjhNZXNzYWdlQm9keS10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:41 GMT" ], "X-Amzn-Requestid": [ "e11687ec-162c-5177-83b1-d0b52659a72b" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZTExNjg3ZWMtMTYyYy01MTc3LTgzYjEtZDBiNTI2NTlhNzJiPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "b17408aff9bb1541", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "723" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05vblVURjhNZXNzYWdlQm9keS10b3AtMSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuSWQ9MCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS4xLk5hbWU9YmFzZTY0ZW5jb2RlZCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS4xLlZhbHVlLkRhdGFUeXBlPVN0cmluZyZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUF0dHJpYnV0ZS4xLlZhbHVlLlN0cmluZ1ZhbHVlPXRydWUmU2VuZE1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLk1lc3NhZ2VCb2R5PUFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2RIaDhnSVNJakpDVW1KeWdwS2lzc0xTNHZPanM4UFQ0JTJGUUZ0Y1hWNWZZSHQ4Zlg1JTJGWm05dlhHSmhjbHhpWVhvdUxseG1iMjljTGk1Y1ltRnlYQzR1WEM0dVhHSmhlaTR1WEM0dUwyWnZieTh1TGk5aVlYSXZMaTR2TGk0dlltRjZMaTR2Wm05dkwySmhjaTlpWVhwbWIyOGlZbUZ5SW1KaGVpNHVYR1p2YjF4Y1ltRnlYRnhjWW1GNlptOXZMeTlpWVhJdkx5OWlZWHBtYjI4Z1ltRnlJR0poZWpFeU16UTE0cGk2NHBpNjRwaTZ2YkklM0QmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:41 GMT" ], "X-Amzn-Requestid": [ "e9ecb3d1-44ec-5e86-9a98-e488749998da" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPmU5Mjg2ZjMxLWFlYWYtNDI5Ny1iMTQyLWMyM2I0NDk4NDNlMjwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjAwYWI4OTk2ZTgwMTFhN2ExNGZiNmZiOWFkODNjODIwPC9NRDVPZk1lc3NhZ2VCb2R5PjxNRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPmQ5NjI5NmFjNjc3YTlhY2EwNWQ0OWFlMDk5YzY1NmMwPC9NRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmU5ZWNiM2QxLTQ0ZWMtNWU4Ni05YTk4LWU0ODg3NDk5OThkYTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "6f32d1f9e3fccfb3", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljTm9uVVRGOE1lc3NhZ2VCb2R5LXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1368" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:41 GMT" ], "X-Amzn-Requestid": [ "9aa23434-ae82-599e-a17b-636d9ef79fc2" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZTkyODZmMzEtYWVhZi00Mjk3LWIxNDItYzIzYjQ0OTg0M2UyPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjFrUDZXT0JSbjRsWjlYcElGTWF2ZXlHRzZscHZHVVB4VW5jN2NSZDdZOXA1SDcwTEpPZ2dwVThicmNOT3lKdjVQeFFUNVV6RmVRNHR4Z0NRRXRBYU1sMzhoL0hLNlVsMzZBbnBkMHFTR3RnQUNpNi9McnJoMjZpVEFVQ2tMakdUam9KVmVlclJCVVFEQU1NNUExU1o3RWxzWnVOemtka0JBejBWYlozYkFFODFnd1pEY3JZRklSUE13SlFxYTBadG5QeUx4OUVVYlplL3MxbEp6T0hvbHFjdWxNbTZpN1hHaFhyaDVWM1F5SUROL3Q5RDNGeG1RdFNZMXpTMmdlL3FqN24zTW95YTRVbVpIRlhHVlpvY244L1FGZU01bHFxQW5hWGMyQXJmcmpMcjE3WHFIYVNUV3NsR0t2SW1XelRpSmpoSUVMejNpbmhMUGJHcnJSdHFlNlN3SytLZitHeG5ZYzRDVWVVWG1nV2FkVkc1dkJNK3RwMGpoNWljUEJxeE5UOURtbDJrTllBbDFCR3Y3S1hEZmRpUHh0b290QlBZcjM5WW5odXBvVnM9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+MDBhYjg5OTZlODAxMWE3YTE0ZmI2ZmI5YWQ4M2M4MjA8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz5kOTYyOTZhYzY3N2E5YWNhMDVkNDlhZTA5OWM2NTZjMDwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT5BQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4Z0lTSWpKQ1VtSnlncEtpc3NMUzR2T2pzOFBUNC9RRnRjWFY1ZllIdDhmWDUvWm05dlhHSmhjbHhpWVhvdUxseG1iMjljTGk1Y1ltRnlYQzR1WEM0dVhHSmhlaTR1WEM0dUwyWnZieTh1TGk5aVlYSXZMaTR2TGk0dlltRjZMaTR2Wm05dkwySmhjaTlpWVhwbWIyOGlZbUZ5SW1KaGVpNHVYR1p2YjF4Y1ltRnlYRnhjWW1GNlptOXZMeTlpWVhJdkx5OWlZWHBtYjI4Z1ltRnlJR0poZWpFeU16UTE0cGk2NHBpNjRwaTZ2Ykk9PC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmJhc2U2NGVuY29kZWQ8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT50cnVlPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjlhYTIzNDM0LWFlODItNTk5ZS1hMTdiLTYzNmQ5ZWY3OWZjMjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "72133949d240ea8a", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "683" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjFrUDZXT0JSbjRsWjlYcElGTWF2ZXlHRzZscHZHVVB4VW5jN2NSZDdZOXA1SDcwTEpPZ2dwVThicmNOT3lKdjVQeFFUNVV6RmVRNHR4Z0NRRXRBYU1sMzhoJTJGSEs2VWwzNkFucGQwcVNHdGdBQ2k2JTJGTHJyaDI2aVRBVUNrTGpHVGpvSlZlZXJSQlVRREFNTTVBMVNaN0Vsc1p1TnprZGtCQXowVmJaM2JBRTgxZ3daRGNyWUZJUlBNd0pRcWEwWnRuUHlMeDlFVWJaZSUyRnMxbEp6T0hvbHFjdWxNbTZpN1hHaFhyaDVWM1F5SUROJTJGdDlEM0Z4bVF0U1kxelMyZ2UlMkZxajduM01veWE0VW1aSEZYR1Zab2NuOCUyRlFGZU01bHFxQW5hWGMyQXJmcmpMcjE3WHFIYVNUV3NsR0t2SW1XelRpSmpoSUVMejNpbmhMUGJHcnJSdHFlNlN3SyUyQktmJTJCR3huWWM0Q1VlVVhtZ1dhZFZHNXZCTSUyQnRwMGpoNWljUEJxeE5UOURtbDJrTllBbDFCR3Y3S1hEZmRpUHh0b290QlBZcjM5WW5odXBvVnMlM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY05vblVURjhNZXNzYWdlQm9keS10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:41 GMT" ], "X-Amzn-Requestid": [ "2ab52620-d04a-5b23-85b9-7179e03f4d7f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MmFiNTI2MjAtZDA0YS01YjIzLTg1YjktNzE3OWUwM2Y0ZDdmPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "0d2719cd2def0958", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "138" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNOb25VVEY4TWVzc2FnZUJvZHktdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:42 GMT" ], "X-Amzn-Requestid": [ "35b6fdb2-6f35-54d1-a0df-aaeb5f40c28d" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD4zNWI2ZmRiMi02ZjM1LTU0ZDEtYTBkZi1hYWViNWY0MGMyOGQ8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestSendReceive.replay000066400000000000000000000725451367004507500314360ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU2A6n6aP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "4b80bb7a688122d1", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "345" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:42 GMT" ], "X-Amzn-Requestid": [ "275cd080-5b2f-58b6-ac2f-87d96b596dcb" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNTZW5kUmVjZWl2ZS10b3AtMTwvUXVldWVVcmw+PC9DcmVhdGVRdWV1ZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjI3NWNkMDgwLTViMmYtNThiNi1hYzJmLTg3ZDk2YjU5NmRjYjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0NyZWF0ZVF1ZXVlUmVzcG9uc2U+" } }, { "ID": "ac098acf3fd064f6", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "163" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "397" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:42 GMT" ], "X-Amzn-Requestid": [ "2cbb30aa-5ff4-51ac-ae84-67f36f8214d1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xPC9WYWx1ZT48L0F0dHJpYnV0ZT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjJjYmIzMGFhLTVmZjQtNTFhYy1hZTg0LTY3ZjM2ZjgyMTRkMTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L0dldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlPg==" } }, { "ID": "2d4e052268c675a7", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "663" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNTZW5kUmVjZWl2ZS10b3AtMSUyMiUwQSUwOSUwOSU3RCUwQSUwOSUwOSU1RCUwQSUwOSUwOSU3RCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:42 GMT" ], "X-Amzn-Requestid": [ "9c4b8f45-fbd1-5a49-b4bc-d81ccba79f34" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+OWM0YjhmNDUtZmJkMS01YTQ5LWI0YmMtZDgxY2NiYTc5ZjM0PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "3bb08243f1dc16dc", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "416" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuTmFtZT1hJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuVmFsdWUuU3RyaW5nVmFsdWU9MCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9MCZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:42 GMT" ], "X-Amzn-Requestid": [ "f28eeb18-4bd6-5b79-b410-bc417ba06e04" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPmRiMzM0NjIzLWI2NTktNDZkOC1hMTdkLTU1ZGQwMDdjYzNkNDwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PmNmY2QyMDg0OTVkNTY1ZWY2NmU3ZGZmOWY5ODc2NGRhPC9NRDVPZk1lc3NhZ2VCb2R5PjxNRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjlhYTQ2ODdjOGI3NTY3YmFhMzgwZDlmMzAwZmUyODNhPC9NRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmYyOGVlYjE4LTRiZDYtNWI3OS1iNDEwLWJjNDE3YmEwNmUwNDwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "49087f0aa26262e2", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "416" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuTmFtZT1hJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuVmFsdWUuU3RyaW5nVmFsdWU9MSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9MSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:42 GMT" ], "X-Amzn-Requestid": [ "3950a531-5818-53a6-b0fb-f268686e66db" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjU1ZDExNTJlLTM0OGYtNGU0ZC1hYjEzLWE1YmE3NTkzNWZhNDwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PmM0Y2E0MjM4YTBiOTIzODIwZGNjNTA5YTZmNzU4NDliPC9NRDVPZk1lc3NhZ2VCb2R5PjxNRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjMxNGM3N2IyNDk4OTNjNmIzYzc2NWE0MmNjMDhiMjQ1PC9NRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjM5NTBhNTMxLTU4MTgtNTNhNi1iMGZiLWYyNjg2ODZlNjZkYjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "2fc313d7c72b29d6", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "416" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuTmFtZT1hJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuVmFsdWUuRGF0YVR5cGU9U3RyaW5nJlNlbmRNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5NZXNzYWdlQXR0cmlidXRlLjEuVmFsdWUuU3RyaW5nVmFsdWU9MiZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9MiZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "548" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:42 GMT" ], "X-Amzn-Requestid": [ "f285cf23-4e26-5502-9668-987a7e50707f" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPjVhYjAyMzE5LWMwNDMtNDYwOS1iOGI1LTM3MDViYWY3NDk0ZDwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PmM4MWU3MjhkOWQ0YzJmNjM2ZjA2N2Y4OWNjMTQ4NjJjPC9NRDVPZk1lc3NhZ2VCb2R5PjxNRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPmI3MmUxNDBlNzI2OWViY2U5MTA3YmFmMWVmMjQwYmFlPC9NRDVPZk1lc3NhZ2VBdHRyaWJ1dGVzPjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPmYyODVjZjIzLTRlMjYtNTUwMi05NjY4LTk4N2E3ZTUwNzA3ZjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "c7fbb88bd7f120a9", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:42 GMT" ], "X-Amzn-Requestid": [ "64437d71-9172-5c96-b632-2a28a104f9eb" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZGIzMzQ2MjMtYjY1OS00NmQ4LWExN2QtNTVkZDAwN2NjM2Q0PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQllObXJWUGdrRC96WWFsNFhBRWxPWkJrOWdiOEJLd0pjU0gybUpCUlU4Ymhxd1ZTOTk3UW12YnM1OHNXNHlIYTRaUXcvMUFyNUlzM3hxZnNHYSt6eksvUitWQzAwbzdNZWk0UytOemc4U0hrY1hoc3RydDAreHZBQzJnMjBvMEluM3JmWEZvRTQ3Qmk1dE1xbWYxRndaMzR6STNSS1B2SHFBeTBoU1Y0WXpZM1BqRzZGTXQ2alFQdTNSWG1ZWG5vcm50NjlpZFlJbnFwaDhoVnJ2YWZwRGRIUXlJM1lwV0FPZzVKYkpldzZ5Q2w4eEFrV0JiUzNzaUdRYW1qUHRiTmU1YUIyWGhJajFWVnlWVlU4TEhIYzlNZjQ3YmFNSzBMS3pCeWE1SS94clNhNW94NmxGRnd3NllYYXhpNDQ4M1lTMUdnMnlXUzZGVzZibVRGK0Q1cGFCM0pteUFBMWJlYzVRLzJxR0QwTmFtTGp4N1UxN2JEdE1paWU3UGZrTytnaFBPc2swNU4vNWtLVmFtN1FKNHFUdXMvK0FQUHdib2hyRFNzWjRBRCtXYjg9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+Y2ZjZDIwODQ5NWQ1NjVlZjY2ZTdkZmY5Zjk4NzY0ZGE8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz45YWE0Njg3YzhiNzU2N2JhYTM4MGQ5ZjMwMGZlMjgzYTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4wPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4wPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjY0NDM3ZDcxLTkxNzItNWM5Ni1iNjMyLTJhMjhhMTA0ZjllYjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "cb3ea09ba0ebbc65", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "688" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQllObXJWUGdrRCUyRnpZYWw0WEFFbE9aQms5Z2I4Qkt3SmNTSDJtSkJSVThiaHF3VlM5OTdRbXZiczU4c1c0eUhhNFpRdyUyRjFBcjVJczN4cWZzR2ElMkJ6ekslMkZSJTJCVkMwMG83TWVpNFMlMkJOemc4U0hrY1hoc3RydDAlMkJ4dkFDMmcyMG8wSW4zcmZYRm9FNDdCaTV0TXFtZjFGd1ozNHpJM1JLUHZIcUF5MGhTVjRZelkzUGpHNkZNdDZqUVB1M1JYbVlYbm9ybnQ2OWlkWUlucXBoOGhWcnZhZnBEZEhReUkzWXBXQU9nNUpiSmV3NnlDbDh4QWtXQmJTM3NpR1FhbWpQdGJOZTVhQjJYaElqMVZWeVZWVThMSEhjOU1mNDdiYU1LMExLekJ5YTVJJTJGeHJTYTVveDZsRkZ3dzZZWGF4aTQ0ODNZUzFHZzJ5V1M2Rlc2Ym1URiUyQkQ1cGFCM0pteUFBMWJlYzVRJTJGMnFHRDBOYW1Mang3VTE3YkR0TWlpZTdQZmtPJTJCZ2hQT3NrMDVOJTJGNWtLVmFtN1FKNHFUdXMlMkYlMkJBUFB3Ym9ockRTc1o0QUQlMkJXYjglM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:43 GMT" ], "X-Amzn-Requestid": [ "a0eb799b-cef2-5a1b-82b9-2ec2fe85cf66" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YTBlYjc5OWItY2VmMi01YTFiLTgyYjktMmVjMmZlODVjZjY2PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "ecece9a742c7210b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:43 GMT" ], "X-Amzn-Requestid": [ "33af51b8-95ff-5edb-949e-06e1a5884ba6" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NTVkMTE1MmUtMzQ4Zi00ZTRkLWFiMTMtYTViYTc1OTM1ZmE0PC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQjVTQ3lvbXdKVDR4NThkajA1cXM5YVFpbjBtMHBYb25tK2pxdlVFbzRLc2RISGo2eEJCd3RtUk95SFdmOXRtZExHaVlYdUVRZVc0TmZSckNxVVlVSHora2Y0cWNwN1Y1dk9PMXNoVW95VTdTUENvV1RkbTVHSTR3MkxnQzgwRFlHY0QrZUNYVTJBamxPa1prTWRyZ3JlaVJJQXhDblpQMFo2V25tZzhyNnRkM21kL1NxZWxITFNlS2hpWW5JVWx4Z1V4bjZ2ZlVYVnArRHNicExyWHl0UTk5ZDRweUR3RjFuWC9OOFBVM1VqMUtZSGdiUGRQRkU2MTA2NE1VV1BXSGlCYzBheDVORUZBTko1WEUxQzRMUHRZV2x0dFZFNnU2TFNDQWQzN0lQMXBkb2NIM1lsd2Y2aUNDSWFROHhnYXI0RUR5bFFkUllRL0JvRXpzZFk2djZUOVcwaVhidXljSUhhYzJWRDZNaWFoNnpDamtuWmxiNnJKRzJWRE1JMnBoS2JoRE42eTZRcHJGZkQ4ak52dlF0bk9WSkJwMmthdDhheEpmMXpjamVMWXc9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz4zMTRjNzdiMjQ5ODkzYzZiM2M3NjVhNDJjYzA4YjI0NTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4xPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4xPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjMzYWY1MWI4LTk1ZmYtNWVkYi05NDllLTA2ZTFhNTg4NGJhNjwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "92e330b0dc9a4c0b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "672" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQjVTQ3lvbXdKVDR4NThkajA1cXM5YVFpbjBtMHBYb25tJTJCanF2VUVvNEtzZEhIajZ4QkJ3dG1ST3lIV2Y5dG1kTEdpWVh1RVFlVzROZlJyQ3FVWVVIeiUyQmtmNHFjcDdWNXZPTzFzaFVveVU3U1BDb1dUZG01R0k0dzJMZ0M4MERZR2NEJTJCZUNYVTJBamxPa1prTWRyZ3JlaVJJQXhDblpQMFo2V25tZzhyNnRkM21kJTJGU3FlbEhMU2VLaGlZbklVbHhnVXhuNnZmVVhWcCUyQkRzYnBMclh5dFE5OWQ0cHlEd0YxblglMkZOOFBVM1VqMUtZSGdiUGRQRkU2MTA2NE1VV1BXSGlCYzBheDVORUZBTko1WEUxQzRMUHRZV2x0dFZFNnU2TFNDQWQzN0lQMXBkb2NIM1lsd2Y2aUNDSWFROHhnYXI0RUR5bFFkUllRJTJGQm9FenNkWTZ2NlQ5VzBpWGJ1eWNJSGFjMlZENk1pYWg2ekNqa25abGI2ckpHMlZETUkycGhLYmhETjZ5NlFwckZmRDhqTnZ2UXRuT1ZKQnAya2F0OGF4SmYxemNqZUxZdyUzRCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:43 GMT" ], "X-Amzn-Requestid": [ "af076350-8002-5b83-8113-3409b0750efe" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+YWYwNzYzNTAtODAwMi01YjgzLTgxMTMtMzQwOWIwNzUwZWZlPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "fabf73ed055b4b4b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "183" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljU2VuZFJlY2VpdmUtdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "1074" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:43 GMT" ], "X-Amzn-Requestid": [ "44317159-679c-52c8-bbcc-260057ebd7b5" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+NWFiMDIzMTktYzA0My00NjA5LWI4YjUtMzcwNWJhZjc0OTRkPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQnc4dmkvaHFJaEV1cGo0eGdGVzI0WVZoQkordFR4U0RRZ0Z1UWx0dVR4dFFZODFSaHY1dUEzd0orL3Y0SHFhRFFhWDlHVjFTNVdRc25nK2xIT0Q2RUNaSm96MjZOK2g4NmRONE9nYXNvcGlXRVV5UlhqUkNmWFVpd0pGeDlJZEpkYyt2L1ZpTE9iRVhIY3NzUzBPVGJpS0lUejNJRFQvTHpXSTY5VVh6NkN5aFR0VEo1aldXNktud21jcFExVjBMVFc3bzR1ZWlOeFRyYnJiRjk1blM5THBhdWtuMGxMdCtrTytnTGtTaUNJV0Y2UU1ZOVlNQ3ZuYTYzcnIycFcxNGRIWlhpUlI3QkhHZ1YyZmo2YllxS3o2ZGUwQVFSNVo2Nk4vTVBVc09kcEdLa2hHWU1wYTN0eS9rd25zODdlYVdRY2pCMkdjNWVjOUtLdlRZQ25oUDE1WWw2Y3hpTUltN2JnNkdQQk9kSEVwUElpTGlpVWlkVUlzTmt4Uk16MzlsL3RacFQ5bU5aaFhqZTZnTzNtbUh3U2FUd3R5UHZuYUVwb0xzcDNSc0lWUlk9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+YzgxZTcyOGQ5ZDRjMmY2MzZmMDY3Zjg5Y2MxNDg2MmM8L01ENU9mQm9keT48TUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz5iNzJlMTQwZTcyNjllYmNlOTEwN2JhZjFlZjI0MGJhZTwvTUQ1T2ZNZXNzYWdlQXR0cmlidXRlcz48Qm9keT4yPC9Cb2R5PjxNZXNzYWdlQXR0cmlidXRlPjxOYW1lPmE8L05hbWU+PFZhbHVlPjxTdHJpbmdWYWx1ZT4yPC9TdHJpbmdWYWx1ZT48RGF0YVR5cGU+U3RyaW5nPC9EYXRhVHlwZT48L1ZhbHVlPjwvTWVzc2FnZUF0dHJpYnV0ZT48L01lc3NhZ2U+PC9SZWNlaXZlTWVzc2FnZVJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjQ0MzE3MTU5LTY3OWMtNTJjOC1iYmNjLTI2MDA1N2ViZDdiNTwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1JlY2VpdmVNZXNzYWdlUmVzcG9uc2U+" } }, { "ID": "0a5835ec119d83f4", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "686" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQnc4dmklMkZocUloRXVwajR4Z0ZXMjRZVmhCSiUyQnRUeFNEUWdGdVFsdHVUeHRRWTgxUmh2NXVBM3dKJTJCJTJGdjRIcWFEUWFYOUdWMVM1V1FzbmclMkJsSE9ENkVDWkpvejI2TiUyQmg4NmRONE9nYXNvcGlXRVV5UlhqUkNmWFVpd0pGeDlJZEpkYyUyQnYlMkZWaUxPYkVYSGNzc1MwT1RiaUtJVHozSURUJTJGTHpXSTY5VVh6NkN5aFR0VEo1aldXNktud21jcFExVjBMVFc3bzR1ZWlOeFRyYnJiRjk1blM5THBhdWtuMGxMdCUyQmtPJTJCZ0xrU2lDSVdGNlFNWTlZTUN2bmE2M3JyMnBXMTRkSFpYaVJSN0JIR2dWMmZqNmJZcUt6NmRlMEFRUjVaNjZOJTJGTVBVc09kcEdLa2hHWU1wYTN0eSUyRmt3bnM4N2VhV1FjakIyR2M1ZWM5S0t2VFlDbmhQMTVZbDZjeGlNSW03Ymc2R1BCT2RIRXBQSWlMaWlVaWRVSXNOa3hSTXozOWwlMkZ0WnBUOW1OWmhYamU2Z08zbW1Id1NhVHd0eVB2bmFFcG9Mc3AzUnNJVlJZJTNEJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNTZW5kUmVjZWl2ZS10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:43 GMT" ], "X-Amzn-Requestid": [ "f8dbf9d0-8ab7-5059-ad18-ae89bac01524" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+ZjhkYmY5ZDAtOGFiNy01MDU5LWFkMTgtYWU4OWJhYzAxNTI0PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "dfbc2aca11c25756", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "131" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNTZW5kUmVjZWl2ZS10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:43 GMT" ], "X-Amzn-Requestid": [ "699b5970-61c3-595c-8486-0e2951b4f622" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD42OTliNTk3MC02MWMzLTU5NWMtODQ4Ni0wZTI5NTFiNGY2MjI8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestSendReceiveJSON.replay000066400000000000000000000346601367004507500321240ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU3H5h/CP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "22696c91be3180b2", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "77" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUNyZWF0ZVF1ZXVlJlF1ZXVlTmFtZT1TUVNUb3BpY1NlbmRSZWNlaXZlSlNPTi10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "349" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:44 GMT" ], "X-Amzn-Requestid": [ "6d93a53b-35cd-572d-8eee-f26205baf7ae" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PENyZWF0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PENyZWF0ZVF1ZXVlUmVzdWx0PjxRdWV1ZVVybD5odHRwczovL3Nxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbS80NjIzODAyMjU3MjIvU1FTVG9waWNTZW5kUmVjZWl2ZUpTT04tdG9wLTE8L1F1ZXVlVXJsPjwvQ3JlYXRlUXVldWVSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD42ZDkzYTUzYi0zNWNkLTU3MmQtOGVlZS1mMjYyMDViYWY3YWU8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9DcmVhdGVRdWV1ZVJlc3BvbnNlPg==" } }, { "ID": "a0df2a182b243dc0", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "167" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPUdldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGVOYW1lLjE9UXVldWVBcm4mUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlSlNPTi10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "401" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:44 GMT" ], "X-Amzn-Requestid": [ "9c115e5d-6e7e-5562-9c52-09045e06a5e1" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PEdldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxHZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PEF0dHJpYnV0ZT48TmFtZT5RdWV1ZUFybjwvTmFtZT48VmFsdWU+YXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ2MjM4MDIyNTcyMjpTUVNUb3BpY1NlbmRSZWNlaXZlSlNPTi10b3AtMTwvVmFsdWU+PC9BdHRyaWJ1dGU+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXN1bHQ+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD45YzExNWU1ZC02ZTdlLTU1NjItOWM1Mi0wOTA0NWUwNmE1ZTE8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9HZXRRdWV1ZUF0dHJpYnV0ZXNSZXNwb25zZT4=" } }, { "ID": "6c7a9df9c22c2d8b", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "671" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNldFF1ZXVlQXR0cmlidXRlcyZBdHRyaWJ1dGUuMS5OYW1lPVBvbGljeSZBdHRyaWJ1dGUuMS5WYWx1ZT0lN0IlMEElMDklMDklMjJWZXJzaW9uJTIyJTNBKyUyMjIwMTItMTAtMTclMjIlMkMlMEElMDklMDklMjJJZCUyMiUzQSslMjJBbGxvd1F1ZXVlJTIyJTJDJTBBJTA5JTA5JTIyU3RhdGVtZW50JTIyJTNBKyU1QiUwQSUwOSUwOSU3QiUwQSUwOSUwOSUyMlNpZCUyMiUzQSslMjJNeVNRU1BvbGljeTAwMSUyMiUyQyUwQSUwOSUwOSUyMkVmZmVjdCUyMiUzQSslMjJBbGxvdyUyMiUyQyUwQSUwOSUwOSUyMlByaW5jaXBhbCUyMiUzQSslN0IlMEElMDklMDklMjJBV1MlMjIlM0ErJTIyJTJBJTIyJTBBJTA5JTA5JTdEJTJDJTBBJTA5JTA5JTIyQWN0aW9uJTIyJTNBKyUyMnNxcyUzQVNlbmRNZXNzYWdlJTIyJTJDJTBBJTA5JTA5JTIyUmVzb3VyY2UlMjIlM0ErJTIyYXJuJTNBYXdzJTNBc3FzJTNBdXMtZWFzdC0yJTNBNDYyMzgwMjI1NzIyJTNBU1FTVG9waWNTZW5kUmVjZWl2ZUpTT04tdG9wLTElMjIlMEElMDklMDklN0QlMEElMDklMDklNUQlMEElMDklMDklN0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlSlNPTi10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "225" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:44 GMT" ], "X-Amzn-Requestid": [ "31250197-24ff-5f67-be94-56ce14873fe4" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNldFF1ZXVlQXR0cmlidXRlc1Jlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MzEyNTAxOTctMjRmZi01ZjY3LWJlOTQtNTZjZTE0ODczZmU0PC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvU2V0UXVldWVBdHRyaWJ1dGVzUmVzcG9uc2U+" } }, { "ID": "d5afd644c9a53a89", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "248" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVNlbmRNZXNzYWdlQmF0Y2gmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlSlNPTi10b3AtMSZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuSWQ9MCZTZW5kTWVzc2FnZUJhdGNoUmVxdWVzdEVudHJ5LjEuTWVzc2FnZUJvZHk9JTdCJTIyRm9vJTIyJTNBKyUyMkJhciUyMiU3RCZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "467" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:44 GMT" ], "X-Amzn-Requestid": [ "1902a45b-4ede-5b04-9bdc-f3027ea61b87" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFNlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZSB4bWxucz0iaHR0cDovL3F1ZXVlLmFtYXpvbmF3cy5jb20vZG9jLzIwMTItMTEtMDUvIj48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48U2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48TWVzc2FnZUlkPmQxYjZjMWNiLTQ4NmItNDVlNS04N2IwLTI1YWZhNzc1MzM2MDwvTWVzc2FnZUlkPjxNRDVPZk1lc3NhZ2VCb2R5PjMzMzM5OWJhMmI3NmExOTY0MzI2MDdmMjNiM2VjYjk1PC9NRDVPZk1lc3NhZ2VCb2R5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvU2VuZE1lc3NhZ2VCYXRjaFJlc3VsdD48UmVzcG9uc2VNZXRhZGF0YT48UmVxdWVzdElkPjE5MDJhNDViLTRlZGUtNWIwNC05YmRjLWYzMDI3ZWE2MWI4NzwvUmVxdWVzdElkPjwvUmVzcG9uc2VNZXRhZGF0YT48L1NlbmRNZXNzYWdlQmF0Y2hSZXNwb25zZT4=" } }, { "ID": "86654d3ad6c6a044", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "187" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPVJlY2VpdmVNZXNzYWdlJk1heE51bWJlck9mTWVzc2FnZXM9MSZNZXNzYWdlQXR0cmlidXRlTmFtZS4xPUFsbCZRdWV1ZVVybD1odHRwcyUzQSUyRiUyRnNxcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSUyRjQ2MjM4MDIyNTcyMiUyRlNRU1RvcGljU2VuZFJlY2VpdmVKU09OLXRvcC0xJlZlcnNpb249MjAxMi0xMS0wNQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "905" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:44 GMT" ], "X-Amzn-Requestid": [ "11301ab5-7d38-5ad2-9229-4dec4d40aa51" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PFJlY2VpdmVNZXNzYWdlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlY2VpdmVNZXNzYWdlUmVzdWx0PjxNZXNzYWdlPjxNZXNzYWdlSWQ+ZDFiNmMxY2ItNDg2Yi00NWU1LTg3YjAtMjVhZmE3NzUzMzYwPC9NZXNzYWdlSWQ+PFJlY2VpcHRIYW5kbGU+QVFFQlIycm1ReldXdmV5MU5pVkpDcmRXODdqblQ0OHp0UFd6dEVuNGpENHpMMzVQNDY3WnB0TUhOc2RLQXZJZTZqRzBiNEJMVjE5MkZBenA4aVVFcmUyNFk0NnFUSGZRZnlJKzcrMTlDaFpnZFpNRlc0R3g2QWhUcDBqZkc4MXRqN0VkU0g0OEY4SHIvRlJpS0JQV1VFSnpWSnBLdy9PNzFrSys1NGs0TkRxdXQzbzY5U3Z5L2ppYm9WcHdrbW5XNUtHaEl6UVZ0Q0xxZTUzMTZ2WnYvWm5kVlIrNnVhWlJOMkFUWkZVVEtxelNqSmc0eTBkcTI2dVhZdzA1OGxZRnJlUnVuczQzVTM1cU9jY0ZsY1kyYXhBcHpSaXBsTVl1M3ArYUtSZTU4TzEvT2RvQ2NTRUd3S01hYU9Pd3hwQm1PMThUSk56NTB1VndnSHhjTk9NZ1VRblBaZTBqUG1zVlZvUE1OdjlweE9lazNUTENFeG16ZjVoajRzaktPNlNGdzBwZnBqNnBoaHNyenpzdUhKeGE5V2NZNWZWbG9iMyt0QmJ6bFdSTVVXa1crSnc9PC9SZWNlaXB0SGFuZGxlPjxNRDVPZkJvZHk+MzMzMzk5YmEyYjc2YTE5NjQzMjYwN2YyM2IzZWNiOTU8L01ENU9mQm9keT48Qm9keT57JnF1b3Q7Rm9vJnF1b3Q7OiAmcXVvdDtCYXImcXVvdDt9PC9Cb2R5PjwvTWVzc2FnZT48L1JlY2VpdmVNZXNzYWdlUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+MTEzMDFhYjUtN2QzOC01YWQyLTkyMjktNGRlYzRkNDBhYTUxPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvUmVjZWl2ZU1lc3NhZ2VSZXNwb25zZT4=" } }, { "ID": "461861f4a2578751", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "686" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZU1lc3NhZ2VCYXRjaCZEZWxldGVNZXNzYWdlQmF0Y2hSZXF1ZXN0RW50cnkuMS5JZD0wJkRlbGV0ZU1lc3NhZ2VCYXRjaFJlcXVlc3RFbnRyeS4xLlJlY2VpcHRIYW5kbGU9QVFFQlIycm1ReldXdmV5MU5pVkpDcmRXODdqblQ0OHp0UFd6dEVuNGpENHpMMzVQNDY3WnB0TUhOc2RLQXZJZTZqRzBiNEJMVjE5MkZBenA4aVVFcmUyNFk0NnFUSGZRZnlJJTJCNyUyQjE5Q2haZ2RaTUZXNEd4NkFoVHAwamZHODF0ajdFZFNINDhGOEhyJTJGRlJpS0JQV1VFSnpWSnBLdyUyRk83MWtLJTJCNTRrNE5EcXV0M282OVN2eSUyRmppYm9WcHdrbW5XNUtHaEl6UVZ0Q0xxZTUzMTZ2WnYlMkZabmRWUiUyQjZ1YVpSTjJBVFpGVVRLcXpTakpnNHkwZHEyNnVYWXcwNThsWUZyZVJ1bnM0M1UzNXFPY2NGbGNZMmF4QXB6UmlwbE1ZdTNwJTJCYUtSZTU4TzElMkZPZG9DY1NFR3dLTWFhT093eHBCbU8xOFRKTno1MHVWd2dIeGNOT01nVVFuUFplMGpQbXNWVm9QTU52OXB4T2VrM1RMQ0V4bXpmNWhqNHNqS082U0Z3MHBmcGo2cGhoc3J6enN1SEp4YTlXY1k1ZlZsb2IzJTJCdEJiemxXUk1VV2tXJTJCSnclM0QmUXVldWVVcmw9aHR0cHMlM0ElMkYlMkZzcXMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20lMkY0NjIzODAyMjU3MjIlMkZTUVNUb3BpY1NlbmRSZWNlaXZlSlNPTi10b3AtMSZWZXJzaW9uPTIwMTItMTEtMDU=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "351" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:44 GMT" ], "X-Amzn-Requestid": [ "6a3c5170-1657-590d-bddd-0629262f698e" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vcXVldWUuYW1hem9uYXdzLmNvbS9kb2MvMjAxMi0xMS0wNS8iPjxEZWxldGVNZXNzYWdlQmF0Y2hSZXN1bHQ+PERlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjxJZD4wPC9JZD48L0RlbGV0ZU1lc3NhZ2VCYXRjaFJlc3VsdEVudHJ5PjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzdWx0PjxSZXNwb25zZU1ldGFkYXRhPjxSZXF1ZXN0SWQ+NmEzYzUxNzAtMTY1Ny01OTBkLWJkZGQtMDYyOTI2MmY2OThlPC9SZXF1ZXN0SWQ+PC9SZXNwb25zZU1ldGFkYXRhPjwvRGVsZXRlTWVzc2FnZUJhdGNoUmVzcG9uc2U+" } }, { "ID": "6d35f38333181f87", "Request": { "Method": "POST", "URL": "https://sqs.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "135" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ] }, "MediaType": "application/x-www-form-urlencoded", "BodyParts": [ "QWN0aW9uPURlbGV0ZVF1ZXVlJlF1ZXVlVXJsPWh0dHBzJTNBJTJGJTJGc3FzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tJTJGNDYyMzgwMjI1NzIyJTJGU1FTVG9waWNTZW5kUmVjZWl2ZUpTT04tdG9wLTEmVmVyc2lvbj0yMDEyLTExLTA1" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Length": [ "211" ], "Content-Type": [ "text/xml" ], "Date": [ "Tue, 09 Jun 2020 06:37:44 GMT" ], "X-Amzn-Requestid": [ "af38f040-9a28-590a-a960-a719aa50a989" ] }, "Body": "PD94bWwgdmVyc2lvbj0iMS4wIj8+PERlbGV0ZVF1ZXVlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly9xdWV1ZS5hbWF6b25hd3MuY29tL2RvYy8yMDEyLTExLTA1LyI+PFJlc3BvbnNlTWV0YWRhdGE+PFJlcXVlc3RJZD5hZjM4ZjA0MC05YTI4LTU5MGEtYTk2MC1hNzE5YWE1MGE5ODk8L1JlcXVlc3RJZD48L1Jlc3BvbnNlTWV0YWRhdGE+PC9EZWxldGVRdWV1ZVJlc3BvbnNlPg==" } } ] }go-cloud-0.20.0/pubsub/awssnssqs/testdata/TestConformanceSQSTopic/TestSendReceiveTwo.replay000066400000000000000000000015501367004507500321140ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSU8H2Xs1f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": null }go-cloud-0.20.0/pubsub/azuresb/000077500000000000000000000000001367004507500162645ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/azuresb/azuresb.go000066400000000000000000000520021367004507500202650ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package azuresb provides an implementation of pubsub using Azure Service // Bus Topic and Subscription. // See https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview for an overview. // // URLs // // For pubsub.OpenTopic and pubsub.OpenSubscription, azuresb registers // for the scheme "azuresb". // The default URL opener will use a Service Bus Connection String based on // the environment variable "SERVICEBUS_CONNECTION_STRING". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Message Delivery Semantics // // Azure ServiceBus supports at-least-once semantics in the default Peek-Lock // mode; messages will be redelivered if they are not Acked, or if they are // explicitly Nacked. // // ServiceBus also supports a Receive-Delete mode, which essentially auto-acks a // message when it is delivered, resulting in at-most-once semantics. Set // SubscriberOptions.ReceiveAndDelete to true to tell azuresb.Subscription that // you've enabled Receive-Delete mode. When enabled, pubsub.Message.Ack is a // no-op, pubsub.Message.Nackable will return false, and pubsub.Message.Nack // will panic. // // See https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // for more background. // // As // // azuresb exposes the following types for As: // - Topic: *servicebus.Topic // - Subscription: *servicebus.Subscription // - Message.BeforeSend: *servicebus.Message // - Message: *servicebus.Message // - Error: common.Retryable, *amqp.Error, *amqp.DetachError package azuresb // import "gocloud.dev/pubsub/azuresb" import ( "context" "errors" "fmt" "net/url" "os" "path" "runtime" "strings" "sync" "time" common "github.com/Azure/azure-amqp-common-go/v3" "github.com/Azure/azure-amqp-common-go/v3/cbs" "github.com/Azure/azure-amqp-common-go/v3/rpc" "github.com/Azure/azure-amqp-common-go/v3/uuid" servicebus "github.com/Azure/azure-service-bus-go" "github.com/Azure/go-amqp" "gocloud.dev/gcerrors" "gocloud.dev/internal/useragent" "gocloud.dev/pubsub" "gocloud.dev/pubsub/batcher" "gocloud.dev/pubsub/driver" ) const ( // https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-amqp-request-response#update-disposition-status dispositionForAck = "completed" dispositionForNack = "abandoned" listenerTimeout = 1 * time.Second ) var sendBatcherOpts = &batcher.Options{ MaxBatchSize: 1, // SendBatch only supports one message at a time MaxHandlers: 100, // max concurrency for sends } func init() { o := new(defaultOpener) pubsub.DefaultURLMux().RegisterTopic(Scheme, o) pubsub.DefaultURLMux().RegisterSubscription(Scheme, o) } // defaultURLOpener creates an URLOpener with ConnectionString initialized from // the environment variable SERVICEBUS_CONNECTION_STRING. type defaultOpener struct { init sync.Once opener *URLOpener err error } func (o *defaultOpener) defaultOpener() (*URLOpener, error) { o.init.Do(func() { cs := os.Getenv("SERVICEBUS_CONNECTION_STRING") if cs == "" { o.err = errors.New("SERVICEBUS_CONNECTION_STRING environment variable not set") return } o.opener = &URLOpener{ConnectionString: cs} }) return o.opener, o.err } func (o *defaultOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { opener, err := o.defaultOpener() if err != nil { return nil, fmt.Errorf("open topic %v: %v", u, err) } return opener.OpenTopicURL(ctx, u) } func (o *defaultOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { opener, err := o.defaultOpener() if err != nil { return nil, fmt.Errorf("open subscription %v: %v", u, err) } return opener.OpenSubscriptionURL(ctx, u) } // Scheme is the URL scheme azuresb registers its URLOpeners under on pubsub.DefaultMux. const Scheme = "azuresb" // URLOpener opens Azure Service Bus URLs like "azuresb://mytopic" for // topics or "azuresb://mytopic?subscription=mysubscription" for subscriptions. // // - The URL's host+path is used as the topic name. // - For subscriptions, the subscription name must be provided in the // "subscription" query parameter. // // No other query parameters are supported. type URLOpener struct { // ConnectionString is the Service Bus connection string (required). // https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues ConnectionString string // Options passed when creating the ServiceBus Topic/Subscription. ServiceBusTopicOptions []servicebus.TopicOption ServiceBusSubscriptionOptions []servicebus.SubscriptionOption // TopicOptions specifies the options to pass to OpenTopic. TopicOptions TopicOptions // SubscriptionOptions specifies the options to pass to OpenSubscription. SubscriptionOptions SubscriptionOptions } func (o *URLOpener) namespace(kind string, u *url.URL) (*servicebus.Namespace, error) { if o.ConnectionString == "" { return nil, fmt.Errorf("open %s %v: ConnectionString is required", kind, u) } ns, err := NewNamespaceFromConnectionString(o.ConnectionString) if err != nil { return nil, fmt.Errorf("open %s %v: invalid connection string %q: %v", kind, u, o.ConnectionString, err) } return ns, nil } // OpenTopicURL opens a pubsub.Topic based on u. func (o *URLOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { ns, err := o.namespace("topic", u) if err != nil { return nil, err } for param := range u.Query() { return nil, fmt.Errorf("open topic %v: invalid query parameter %q", u, param) } topicName := path.Join(u.Host, u.Path) t, err := NewTopic(ns, topicName, o.ServiceBusTopicOptions) if err != nil { return nil, fmt.Errorf("open topic %v: couldn't open topic %q: %v", u, topicName, err) } return OpenTopic(ctx, t, &o.TopicOptions) } // OpenSubscriptionURL opens a pubsub.Subscription based on u. func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { ns, err := o.namespace("subscription", u) if err != nil { return nil, err } topicName := path.Join(u.Host, u.Path) t, err := NewTopic(ns, topicName, o.ServiceBusTopicOptions) if err != nil { return nil, fmt.Errorf("open subscription %v: couldn't open topic %q: %v", u, topicName, err) } q := u.Query() subName := q.Get("subscription") q.Del("subscription") if subName == "" { return nil, fmt.Errorf("open subscription %v: missing required query parameter subscription", u) } for param := range q { return nil, fmt.Errorf("open subscription %v: invalid query parameter %q", u, param) } sub, err := NewSubscription(t, subName, o.ServiceBusSubscriptionOptions) if err != nil { return nil, fmt.Errorf("open subscription %v: couldn't open subscription %q: %v", u, subName, err) } return OpenSubscription(ctx, ns, t, sub, &o.SubscriptionOptions) } type topic struct { sbTopic *servicebus.Topic } // TopicOptions provides configuration options for an Azure SB Topic. type TopicOptions struct{} // NewNamespaceFromConnectionString returns a *servicebus.Namespace from a Service Bus connection string. // https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues func NewNamespaceFromConnectionString(connectionString string) (*servicebus.Namespace, error) { nsOptions := servicebus.NamespaceWithConnectionString(connectionString) return servicebus.NewNamespace(nsOptions) } // NewTopic returns a *servicebus.Topic associated with a Service Bus Namespace. func NewTopic(ns *servicebus.Namespace, topicName string, opts []servicebus.TopicOption) (*servicebus.Topic, error) { return ns.NewTopic(topicName, opts...) } // NewSubscription returns a *servicebus.Subscription associated with a Service Bus Topic. func NewSubscription(parentTopic *servicebus.Topic, subscriptionName string, opts []servicebus.SubscriptionOption) (*servicebus.Subscription, error) { return parentTopic.NewSubscription(subscriptionName, opts...) } // OpenTopic initializes a pubsub Topic on a given Service Bus Topic. func OpenTopic(ctx context.Context, sbTopic *servicebus.Topic, opts *TopicOptions) (*pubsub.Topic, error) { t, err := openTopic(ctx, sbTopic, opts) if err != nil { return nil, err } return pubsub.NewTopic(t, sendBatcherOpts), nil } // openTopic returns the driver for OpenTopic. This function exists so the test // harness can get the driver interface implementation if it needs to. func openTopic(ctx context.Context, sbTopic *servicebus.Topic, _ *TopicOptions) (driver.Topic, error) { if sbTopic == nil { return nil, errors.New("azuresb: OpenTopic requires a Service Bus Topic") } return &topic{sbTopic: sbTopic}, nil } // SendBatch implements driver.Topic.SendBatch. func (t *topic) SendBatch(ctx context.Context, dms []*driver.Message) error { if len(dms) != 1 { panic("azuresb.SendBatch should only get one message at a time") } dm := dms[0] sbms := servicebus.NewMessage(dm.Body) for k, v := range dm.Metadata { sbms.Set(k, v) } if dm.BeforeSend != nil { asFunc := func(i interface{}) bool { if p, ok := i.(**servicebus.Message); ok { *p = sbms return true } return false } if err := dm.BeforeSend(asFunc); err != nil { return err } } return t.sbTopic.Send(ctx, sbms) } func (t *topic) IsRetryable(err error) bool { // Let the Service Bus SDK recover from any transient connectivity issue. return false } func (t *topic) As(i interface{}) bool { p, ok := i.(**servicebus.Topic) if !ok { return false } *p = t.sbTopic return true } // ErrorAs implements driver.Topic.ErrorAs func (*topic) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } func errorAs(err error, i interface{}) bool { switch v := err.(type) { case *amqp.DetachError: if p, ok := i.(**amqp.DetachError); ok { *p = v return true } case *amqp.Error: if p, ok := i.(**amqp.Error); ok { *p = v return true } case common.Retryable: if p, ok := i.(*common.Retryable); ok { *p = v return true } } return false } func (*topic) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } // Close implements driver.Topic.Close. func (*topic) Close() error { return nil } type subscription struct { sbSub *servicebus.Subscription opts *SubscriptionOptions linkErr error // saved error for initializing amqpLink amqpLink *rpc.Link // nil if linkErr != nil } // SubscriptionOptions will contain configuration for subscriptions. type SubscriptionOptions struct { // If false, the serviceBus.Subscription MUST be in the default Peek-Lock mode. // If true, the serviceBus.Subscription MUST be in Receive-and-Delete mode. // When true: pubsub.Message.Ack will be a no-op, pubsub.Message.Nackable // will return true, and pubsub.Message.Nack will panic. ReceiveAndDelete bool } // OpenSubscription initializes a pubsub Subscription on a given Service Bus Subscription and its parent Service Bus Topic. func OpenSubscription(ctx context.Context, parentNamespace *servicebus.Namespace, parentTopic *servicebus.Topic, sbSubscription *servicebus.Subscription, opts *SubscriptionOptions) (*pubsub.Subscription, error) { ds, err := openSubscription(ctx, parentNamespace, parentTopic, sbSubscription, opts) if err != nil { return nil, err } return pubsub.NewSubscription(ds, nil, nil), nil } // openSubscription returns a driver.Subscription. func openSubscription(ctx context.Context, sbNs *servicebus.Namespace, sbTop *servicebus.Topic, sbSub *servicebus.Subscription, opts *SubscriptionOptions) (driver.Subscription, error) { if sbNs == nil { return nil, errors.New("azuresb: OpenSubscription requires a Service Bus Namespace") } if sbTop == nil { return nil, errors.New("azuresb: OpenSubscription requires a Service Bus Topic") } if sbSub == nil { return nil, errors.New("azuresb: OpenSubscription requires a Service Bus Subscription") } if opts == nil { opts = &SubscriptionOptions{} } sub := &subscription{sbSub: sbSub, opts: opts} // Initialize a link to the AMQP server, but save any errors to be // returned in ReceiveBatch instead of returning them here, because we // want "subscription not found" to be a Receive time error. host := fmt.Sprintf("amqps://%s.%s/", sbNs.Name, sbNs.Environment.ServiceBusEndpointSuffix) amqpClient, err := amqp.Dial(host, amqp.ConnSASLAnonymous(), amqp.ConnProperty("product", "Go-Cloud Client"), amqp.ConnProperty("version", servicebus.Version), amqp.ConnProperty("platform", runtime.GOOS), amqp.ConnProperty("framework", runtime.Version()), amqp.ConnProperty("user-agent", useragent.AzureUserAgentPrefix("pubsub")), ) if err != nil { sub.linkErr = err return sub, nil } entityPath := sbTop.Name + "/Subscriptions/" + sbSub.Name audience := host + entityPath if err = cbs.NegotiateClaim(ctx, audience, amqpClient, sbNs.TokenProvider); err != nil { sub.linkErr = err return sub, nil } link, err := rpc.NewLink(amqpClient, sbSub.ManagementPath()) if err != nil { sub.linkErr = err return sub, nil } sub.amqpLink = link return sub, nil } // IsRetryable implements driver.Subscription.IsRetryable. func (s *subscription) IsRetryable(error) bool { // Let the Service Bus SDK recover from any transient connectivity issue. return false } // As implements driver.Subscription.As. func (s *subscription) As(i interface{}) bool { p, ok := i.(**servicebus.Subscription) if !ok { return false } *p = s.sbSub return true } // ErrorAs implements driver.Subscription.ErrorAs func (s *subscription) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } func (s *subscription) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } // partitionAckID is used as the driver.AckID. // // We use a batch API to ack/nack messages via the LockToken, but AzureSB // doesn't support updating messages from different partitions in the same // request. We store the PartitionID (which will default to 0 if partitioning // isn't enabled) along with the LockToken so that we can group by it during // Ack/Nack. type partitionAckID struct { PartitionID int16 LockToken *uuid.UUID } // ReceiveBatch implements driver.Subscription.ReceiveBatch. func (s *subscription) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { if s.linkErr != nil { return nil, s.linkErr } rctx, cancel := context.WithTimeout(ctx, listenerTimeout) defer cancel() var messages []*driver.Message // Loop until rctx is Done, or until we've received maxMessages. for len(messages) < maxMessages && rctx.Err() == nil { // NOTE: there's also a Receive method, but it starts two goroutines // that aren't necessarily finished when Receive returns, which causes // data races if Receive is called again quickly. ReceiveOne is more // straightforward. _ = s.sbSub.ReceiveOne(rctx, servicebus.HandlerFunc(func(_ context.Context, sbmsg *servicebus.Message) error { metadata := map[string]string{} for key, value := range sbmsg.GetKeyValues() { if strVal, ok := value.(string); ok { metadata[key] = strVal } } // partitionID is only available if partitioning is enabled; otherwise, // it defaults to 0. var partitionID int16 if sbmsg.SystemProperties != nil && sbmsg.SystemProperties.PartitionID != nil { partitionID = *sbmsg.SystemProperties.PartitionID } messages = append(messages, &driver.Message{ Body: sbmsg.Data, Metadata: metadata, AckID: &partitionAckID{partitionID, sbmsg.LockToken}, AsFunc: messageAsFunc(sbmsg), }) return nil })) } return messages, nil } func messageAsFunc(sbmsg *servicebus.Message) func(interface{}) bool { return func(i interface{}) bool { p, ok := i.(**servicebus.Message) if !ok { return false } *p = sbmsg return true } } // SendAcks implements driver.Subscription.SendAcks. func (s *subscription) SendAcks(ctx context.Context, ids []driver.AckID) error { if s.opts.ReceiveAndDelete { // Ack is a no-op in Receive-and-Delete mode. return nil } return s.updateMessageDispositions(ctx, ids, dispositionForAck) } // CanNack implements driver.CanNack. func (s *subscription) CanNack() bool { if s == nil { return false } return !s.opts.ReceiveAndDelete } // SendNacks implements driver.Subscription.SendNacks. func (s *subscription) SendNacks(ctx context.Context, ids []driver.AckID) error { if !s.CanNack() { panic("unreachable") } return s.updateMessageDispositions(ctx, ids, dispositionForNack) } // IMPORTANT: This is a workaround to issue message dispositions in bulk which is not supported in the Service Bus SDK. func (s *subscription) updateMessageDispositions(ctx context.Context, ids []driver.AckID, disposition string) error { if len(ids) == 0 { return nil } // Group by partitionID; AzureSB doesn't support updating dispositions for // messages from different partitions. partitions := map[int16][]amqp.UUID{} for _, ackID := range ids { if pid, ok := ackID.(*partitionAckID); ok { lockTokenBytes := [16]byte(*pid.LockToken) partitions[pid.PartitionID] = append(partitions[pid.PartitionID], amqp.UUID(lockTokenBytes)) } } // Update partitions in parallel. const maxConcurrency = 5 sem := make(chan struct{}, maxConcurrency) var mu sync.Mutex var errs []string for _, lockTokens := range partitions { sem <- struct{}{} go func(lockTokens []amqp.UUID) { defer func() { <-sem }() // Release the semaphore. if err := s.updateMessageDispositionsInPartition(ctx, lockTokens, disposition); err != nil { mu.Lock() defer mu.Unlock() errs = append(errs, err.Error()) } }(lockTokens) } for n := 0; n < maxConcurrency; n++ { sem <- struct{}{} } if len(errs) == 0 { return nil } return fmt.Errorf("Ack/Nack failed: %s", strings.Join(errs, ", ")) } // updateMessageDispositionsInPartition assumes lockTokens are all from the // same AzureSB partition. func (s *subscription) updateMessageDispositionsInPartition(ctx context.Context, lockTokens []amqp.UUID, disposition string) error { value := map[string]interface{}{ "disposition-status": disposition, "lock-tokens": lockTokens, } msg := &amqp.Message{ ApplicationProperties: map[string]interface{}{ "operation": "com.microsoft:update-disposition", }, Value: value, } // We're not actually making use of link.Retryable since we're passing 1 // here. The portable type will retry as needed. // // We could just use link.RPC, but it returns a result with a status code // in addition to err, and we'd have to check both. _, err := s.amqpLink.RetryableRPC(ctx, 1, 0, msg) if err == nil { return nil } if !isNotFoundErr(err) { return err } // It's a "not found" error, probably due to the message already being // deleted on the server. If we're just acking 1 message, we can just // swallow the error, but otherwise we'll need to retry one by one. if len(lockTokens) == 1 { return nil } for _, lockToken := range lockTokens { value["lock-tokens"] = []amqp.UUID{lockToken} if _, err := s.amqpLink.RetryableRPC(ctx, 1, 0, msg); err != nil && !isNotFoundErr(err) { return err } } return nil } // isNotFoundErr returns true if the error is status code 410, Gone. // Azure returns this when trying to ack/nack a message that no longer exists. func isNotFoundErr(err error) bool { return strings.Contains(err.Error(), "status code 410") } func errorCode(err error) gcerrors.ErrorCode { // Unfortunately Azure sometimes returns common.Retryable or even // errors.errorString, which don't expose anything other than the error // string :-(. if strings.Contains(err.Error(), "status code 404") { return gcerrors.NotFound } var cond amqp.ErrorCondition if aerr, ok := err.(*amqp.DetachError); ok { if aerr.RemoteError == nil { return gcerrors.NotFound } cond = aerr.RemoteError.Condition } if aerr, ok := err.(*amqp.Error); ok { cond = aerr.Condition } switch cond { case amqp.ErrorCondition(servicebus.ErrorNotFound): case amqp.ErrorCondition(servicebus.ErrorPreconditionFailed): return gcerrors.FailedPrecondition case amqp.ErrorCondition(servicebus.ErrorInternalError): return gcerrors.Internal case amqp.ErrorCondition(servicebus.ErrorNotImplemented): return gcerrors.Unimplemented case amqp.ErrorCondition(servicebus.ErrorUnauthorizedAccess), amqp.ErrorCondition(servicebus.ErrorNotAllowed): return gcerrors.PermissionDenied case amqp.ErrorCondition(servicebus.ErrorResourceLimitExceeded): return gcerrors.ResourceExhausted case amqp.ErrorCondition(servicebus.ErrorInvalidField): return gcerrors.InvalidArgument } return gcerrors.Unknown } // Close implements driver.Subscription.Close. func (*subscription) Close() error { return nil } go-cloud-0.20.0/pubsub/azuresb/azuresb_test.go000066400000000000000000000262261367004507500213350ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package azuresb import ( "context" "fmt" "os" "strings" "sync/atomic" "testing" "github.com/Azure/go-amqp" "gocloud.dev/internal/testing/setup" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" "gocloud.dev/pubsub/drivertest" servicebus "github.com/Azure/azure-service-bus-go" ) var ( // See docs below on how to provision an Azure Service Bus Namespace and obtaining the connection string. // https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues connString = os.Getenv("SERVICEBUS_CONNECTION_STRING") ) const ( nonexistentTopicName = "nonexistent-topic" // Try to keep the entity name under Azure limits. // https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quotas // says 50, but there appears to be some additional overhead. 40 works. maxNameLen = 40 ) type harness struct { ns *servicebus.Namespace numTopics uint32 // atomic numSubs uint32 // atomic closer func() autodelete bool } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { if connString == "" { return nil, fmt.Errorf("azuresb: test harness requires environment variable SERVICEBUS_CONNECTION_STRING to run") } ns, err := NewNamespaceFromConnectionString(connString) if err != nil { return nil, err } noop := func() {} return &harness{ ns: ns, closer: noop, }, nil } func newHarnessUsingAutodelete(ctx context.Context, t *testing.T) (drivertest.Harness, error) { h, err := newHarness(ctx, t) if err == nil { h.(*harness).autodelete = true } return h, err } func (h *harness) CreateTopic(ctx context.Context, testName string) (dt driver.Topic, cleanup func(), err error) { topicName := sanitize(fmt.Sprintf("%s-top-%d", testName, atomic.AddUint32(&h.numTopics, 1))) if err := createTopic(ctx, topicName, h.ns, nil); err != nil { return nil, nil, err } sbTopic, err := NewTopic(h.ns, topicName, nil) dt, err = openTopic(ctx, sbTopic, nil) if err != nil { return nil, nil, err } cleanup = func() { sbTopic.Close(ctx) deleteTopic(ctx, topicName, h.ns) } return dt, cleanup, nil } func (h *harness) MakeNonexistentTopic(ctx context.Context) (driver.Topic, error) { sbTopic, err := NewTopic(h.ns, nonexistentTopicName, nil) if err != nil { return nil, err } return openTopic(ctx, sbTopic, nil) } func (h *harness) CreateSubscription(ctx context.Context, dt driver.Topic, testName string) (ds driver.Subscription, cleanup func(), err error) { subName := sanitize(fmt.Sprintf("%s-sub-%d", testName, atomic.AddUint32(&h.numSubs, 1))) t := dt.(*topic) err = createSubscription(ctx, t.sbTopic.Name, subName, h.ns, nil) if err != nil { return nil, nil, err } var opts []servicebus.SubscriptionOption if h.autodelete { opts = append(opts, servicebus.SubscriptionWithReceiveAndDelete()) } sbSub, err := NewSubscription(t.sbTopic, subName, opts) if err != nil { return nil, nil, err } sopts := SubscriptionOptions{} if h.autodelete { sopts.ReceiveAndDelete = true } ds, err = openSubscription(ctx, h.ns, t.sbTopic, sbSub, &sopts) if err != nil { return nil, nil, err } cleanup = func() { sbSub.Close(ctx) deleteSubscription(ctx, t.sbTopic.Name, subName, h.ns) } return ds, cleanup, nil } func (h *harness) MakeNonexistentSubscription(ctx context.Context) (driver.Subscription, error) { sbTopic, _ := NewTopic(h.ns, nonexistentTopicName, nil) sbSub, _ := NewSubscription(sbTopic, "nonexistent-subscription", nil) return openSubscription(ctx, h.ns, sbTopic, sbSub, nil) } func (h *harness) Close() { h.closer() } func (h *harness) MaxBatchSizes() (int, int) { return sendBatcherOpts.MaxBatchSize, 0 } func (h *harness) SupportsMultipleSubscriptions() bool { return true } // Please run the TestConformance with an extended timeout since each test needs to perform CRUD for ServiceBus Topics and Subscriptions. // Example: C:\Go\bin\go.exe test -timeout 60s gocloud.dev/pubsub/azuresb -run ^TestConformance$ func TestConformance(t *testing.T) { if !*setup.Record { t.Skip("replaying is not yet supported for Azure pubsub") } asTests := []drivertest.AsTest{sbAsTest{}} drivertest.RunConformanceTests(t, newHarness, asTests) } func TestConformanceWithAutodelete(t *testing.T) { if !*setup.Record { t.Skip("replaying is not yet supported for Azure pubsub") } asTests := []drivertest.AsTest{sbAsTest{}} drivertest.RunConformanceTests(t, newHarnessUsingAutodelete, asTests) } type sbAsTest struct{} func (sbAsTest) Name() string { return "azure" } func (sbAsTest) TopicCheck(topic *pubsub.Topic) error { var t2 servicebus.Topic if topic.As(&t2) { return fmt.Errorf("cast succeeded for %T, want failure", &t2) } var t3 *servicebus.Topic if !topic.As(&t3) { return fmt.Errorf("cast failed for %T", &t3) } return nil } func (sbAsTest) SubscriptionCheck(sub *pubsub.Subscription) error { var s2 servicebus.Subscription if sub.As(&s2) { return fmt.Errorf("cast succeeded for %T, want failure", &s2) } var s3 *servicebus.Subscription if !sub.As(&s3) { return fmt.Errorf("cast failed for %T", &s3) } return nil } func (sbAsTest) TopicErrorCheck(t *pubsub.Topic, err error) error { var sbError *amqp.DetachError if !t.ErrorAs(err, &sbError) { return fmt.Errorf("failed to convert %v (%T) to a *amqp.DetachError", err, err) } return nil } func (sbAsTest) SubscriptionErrorCheck(s *pubsub.Subscription, err error) error { // We generate our own error for non-existent subscription, so there's no // underlying Azure error type. return nil } func (sbAsTest) MessageCheck(m *pubsub.Message) error { var m2 servicebus.Message if m.As(&m2) { return fmt.Errorf("cast succeeded for %T, want failure", &m2) } var m3 *servicebus.Message if !m.As(&m3) { return fmt.Errorf("cast failed for %T", &m3) } return nil } func (sbAsTest) BeforeSend(as func(interface{}) bool) error { var m *servicebus.Message if !as(&m) { return fmt.Errorf("cast failed for %T", &m) } return nil } func sanitize(s string) string { // First trim some not-so-useful strings that are part of all test names. s = strings.Replace(s, "TestConformance/Test", "", 1) s = strings.Replace(s, "TestConformanceWithAutodelete/Test", "", 1) s = strings.Replace(s, "/", "_", -1) if len(s) > maxNameLen { // Drop prefix, not suffix, because suffix includes something to make // entities unique within a test. s = s[len(s)-maxNameLen:] } return s } // createTopic ensures the existence of a Service Bus Topic on a given Namespace. func createTopic(ctx context.Context, topicName string, ns *servicebus.Namespace, opts []servicebus.TopicManagementOption) error { tm := ns.NewTopicManager() _, err := tm.Get(ctx, topicName) if err == nil { _ = tm.Delete(ctx, topicName) } _, err = tm.Put(ctx, topicName, opts...) return err } // deleteTopic removes a Service Bus Topic on a given Namespace. func deleteTopic(ctx context.Context, topicName string, ns *servicebus.Namespace) error { tm := ns.NewTopicManager() te, _ := tm.Get(ctx, topicName) if te != nil { return tm.Delete(ctx, topicName) } return nil } // createSubscription ensures the existence of a Service Bus Subscription on a given Namespace and Topic. func createSubscription(ctx context.Context, topicName string, subscriptionName string, ns *servicebus.Namespace, opts []servicebus.SubscriptionManagementOption) error { sm, err := ns.NewSubscriptionManager(topicName) if err != nil { return err } _, err = sm.Get(ctx, subscriptionName) if err == nil { _ = sm.Delete(ctx, subscriptionName) } _, err = sm.Put(ctx, subscriptionName, opts...) return err } // deleteSubscription removes a Service Bus Subscription on a given Namespace and Topic. func deleteSubscription(ctx context.Context, topicName string, subscriptionName string, ns *servicebus.Namespace) error { sm, err := ns.NewSubscriptionManager(topicName) if err != nil { return nil } se, _ := sm.Get(ctx, subscriptionName) if se != nil { _ = sm.Delete(ctx, subscriptionName) } return nil } func BenchmarkAzureServiceBusPubSub(b *testing.B) { const ( benchmarkTopicName = "benchmark-topic" benchmarkSubscriptionName = "benchmark-subscription" ) ctx := context.Background() if connString == "" { b.Fatal("azuresb: benchmark requires environment variable SERVICEBUS_CONNECTION_STRING to run") } ns, err := NewNamespaceFromConnectionString(connString) if err != nil { b.Fatal(err) } // Make topic. if err := createTopic(ctx, benchmarkTopicName, ns, nil); err != nil { b.Fatal(err) } defer deleteTopic(ctx, benchmarkTopicName, ns) sbTopic, err := NewTopic(ns, benchmarkTopicName, nil) if err != nil { b.Fatal(err) } defer sbTopic.Close(ctx) topic, err := OpenTopic(ctx, sbTopic, nil) if err != nil { b.Fatal(err) } defer topic.Shutdown(ctx) // Make subscription. if err := createSubscription(ctx, benchmarkTopicName, benchmarkSubscriptionName, ns, nil); err != nil { b.Fatal(err) } sbSub, err := NewSubscription(sbTopic, benchmarkSubscriptionName, nil) if err != nil { b.Fatal(err) } sub, err := OpenSubscription(ctx, ns, sbTopic, sbSub, nil) if err != nil { b.Fatal(err) } defer sub.Shutdown(ctx) drivertest.RunBenchmarks(b, topic, sub) } func fakeConnectionStringInEnv() func() { oldEnvVal := os.Getenv("SERVICEBUS_CONNECTION_STRING") os.Setenv("SERVICEBUS_CONNECTION_STRING", "Endpoint=sb://foo.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=mykey") return func() { os.Setenv("SERVICEBUS_CONNECTION_STRING", oldEnvVal) } } func TestOpenTopicFromURL(t *testing.T) { cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"azuresb://mytopic", false}, // Invalid parameter. {"azuresb://mytopic?param=value", true}, } ctx := context.Background() for _, test := range tests { topic, err := pubsub.OpenTopic(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if topic != nil { topic.Shutdown(ctx) } } } func TestOpenSubscriptionFromURL(t *testing.T) { cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"azuresb://mytopic?subscription=mysub", false}, // Missing subscription. {"azuresb://mytopic", true}, // Invalid parameter. {"azuresb://mytopic?subscription=mysub¶m=value", true}, } ctx := context.Background() for _, test := range tests { sub, err := pubsub.OpenSubscription(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if sub != nil { sub.Shutdown(ctx) } } } go-cloud-0.20.0/pubsub/azuresb/example_test.go000066400000000000000000000126621367004507500213140ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package azuresb_test import ( "context" "log" "os" servicebus "github.com/Azure/azure-service-bus-go" "gocloud.dev/pubsub" "gocloud.dev/pubsub/azuresb" ) func ExampleOpenTopic() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Change these as needed for your application. connString := os.Getenv("SERVICEBUS_CONNECTION_STRING") topicName := "test-topic" if connString == "" { log.Fatal("Service Bus ConnectionString is not set") } // Connect to Azure Service Bus for the given topic. busNamespace, err := azuresb.NewNamespaceFromConnectionString(connString) if err != nil { log.Fatal(err) } busTopic, err := azuresb.NewTopic(busNamespace, topicName, nil) if err != nil { log.Fatal(err) } defer busTopic.Close(ctx) // Construct a *pubsub.Topic. topic, err := azuresb.OpenTopic(ctx, busTopic, nil) if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func Example_openTopicFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/azuresb" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenTopic creates a *pubsub.Topic from a URL. // This URL will open the topic "mytopic" using a connection string // from the environment variable SERVICEBUS_CONNECTION_STRING. topic, err := pubsub.OpenTopic(ctx, "azuresb://mytopic") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func ExampleOpenSubscription() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Change these as needed for your application. serviceBusConnString := os.Getenv("SERVICEBUS_CONNECTION_STRING") const topicName = "test-topic" const subscriptionName = "test-subscription" // Connect to Azure Service Bus for the given subscription. busNamespace, err := azuresb.NewNamespaceFromConnectionString(serviceBusConnString) if err != nil { log.Fatal(err) } busTopic, err := azuresb.NewTopic(busNamespace, topicName, nil) if err != nil { log.Fatal(err) } defer busTopic.Close(ctx) busSub, err := azuresb.NewSubscription(busTopic, subscriptionName, nil) if err != nil { log.Fatal(err) } defer busSub.Close(ctx) // Construct a *pubsub.Subscription. subscription, err := azuresb.OpenSubscription(ctx, busNamespace, busTopic, busSub, nil) if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } func Example_openSubscriptionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/azuresb" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenSubscription creates a *pubsub.Subscription from a URL. // This URL will open the subscription "mysubscription" for the topic // "mytopic" using a connection string from the environment variable // SERVICEBUS_CONNECTION_STRING. subscription, err := pubsub.OpenSubscription(ctx, "azuresb://mytopic?subscription=mysubscription") if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } func Example_OpenSubscription_inReceiveAndDeleteMode() { ctx := context.Background() // Change these as needed for your application. serviceBusConnString := os.Getenv("SERVICEBUS_CONNECTION_STRING") const topicName = "test-topic" const subscriptionName = "test-subscription" // Connect to Azure Service Bus for the given subscription. busNamespace, err := azuresb.NewNamespaceFromConnectionString(serviceBusConnString) if err != nil { log.Fatal(err) } busTopic, err := azuresb.NewTopic(busNamespace, topicName, nil) if err != nil { log.Fatal(err) } defer busTopic.Close(ctx) // Create the azuresb.Subscription, configuring it with the // ReceiveAndDelete option. // See https://godoc.org/github.com/Azure/azure-service-bus-go#SubscriptionWithReceiveAndDelete. var opts []servicebus.SubscriptionOption opts = append(opts, servicebus.SubscriptionWithReceiveAndDelete()) busSub, err := azuresb.NewSubscription(busTopic, subscriptionName, opts) if err != nil { log.Fatal(err) } defer busSub.Close(ctx) // Construct a *pubsub.Subscription. Since we configured // the azuresb.Subscription with ReceiveAndDelete mode, we need // to set SubscriptionOptions.ReceiveAndDelete = true. subscription, err := azuresb.OpenSubscription(ctx, busNamespace, busTopic, busSub, &azuresb.SubscriptionOptions{ReceiveAndDelete: true}) if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } go-cloud-0.20.0/pubsub/azuresb/testdata/000077500000000000000000000000001367004507500200755ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/azuresb/testdata/README000066400000000000000000000002071367004507500207540ustar00rootroot00000000000000This directory is here just so that the prerelease script (internal/testing/prerelease.sh) will run this package's tests with -record. go-cloud-0.20.0/pubsub/batcher/000077500000000000000000000000001367004507500162215ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/batcher/batcher.go000066400000000000000000000146351367004507500201710ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package batcher supports batching of items. Create a Batcher with a handler and // add items to it. Items are accumulated while handler calls are in progress; when // the handler returns, it will be called again with items accumulated since the last // call. Multiple concurrent calls to the handler are supported. package batcher // import "gocloud.dev/pubsub/batcher" import ( "context" "errors" "reflect" "sync" ) // Split determines how to split n (representing n items) into batches based on // opts. It returns a slice of batch sizes. // // For example, Split(10) might return [10], [5, 5], or [2, 2, 2, 2, 2] // depending on opts. opts may be nil to accept defaults. // // Split will return nil if n is less than o.MinBatchSize. // // The sum of returned batches may be less than n (e.g., if n is 10x larger // than o.MaxBatchSize, but o.MaxHandlers is less than 10). func Split(n int, opts *Options) []int { o := newOptionsWithDefaults(opts) if n < o.MinBatchSize { // No batch yet. return nil } if o.MaxBatchSize == 0 { // One batch is fine. return []int{n} } // TODO(rvangent): Consider trying to even out the batch sizes. // For example, n=10 with MaxBatchSize 9 and MaxHandlers 2 will Split // to [9, 1]; it could be [5, 5]. var batches []int for n >= o.MinBatchSize && len(batches) < o.MaxHandlers { b := o.MaxBatchSize if b > n { b = n } batches = append(batches, b) n -= b } return batches } // A Batcher batches items. type Batcher struct { opts Options handler func(interface{}) error itemSliceZero reflect.Value // nil (zero value) for slice of items wg sync.WaitGroup // tracks active Add calls mu sync.Mutex pending []waiter // items waiting to be handled nHandlers int // number of currently running handler goroutines shutdown bool } type waiter struct { item interface{} errc chan error } // Options sets options for Batcher. type Options struct { // Maximum number of concurrent handlers. Defaults to 1. MaxHandlers int // Minimum size of a batch. Defaults to 1. MinBatchSize int // Maximum size of a batch. 0 means no limit. MaxBatchSize int } // newOptionsWithDefaults returns Options with defaults applied to opts. // opts may be nil to accept all defaults. func newOptionsWithDefaults(opts *Options) Options { var o Options if opts != nil { o = *opts } if o.MaxHandlers == 0 { o.MaxHandlers = 1 } if o.MinBatchSize == 0 { o.MinBatchSize = 1 } return o } // New creates a new Batcher. // // itemType is type that will be batched. For example, if you // want to create batches of *Entry, pass reflect.TypeOf(&Entry{}) for itemType. // // opts can be nil to accept defaults. // // handler is a function that will be called on each bundle. If itemExample is // of type T, the argument to handler is of type []T. func New(itemType reflect.Type, opts *Options, handler func(interface{}) error) *Batcher { return &Batcher{ opts: newOptionsWithDefaults(opts), handler: handler, itemSliceZero: reflect.Zero(reflect.SliceOf(itemType)), } } // Add adds an item to the batcher. It blocks until the handler has // processed the item and reports the error that the handler returned. // If Shutdown has been called, Add immediately returns an error. func (b *Batcher) Add(ctx context.Context, item interface{}) error { c := b.AddNoWait(item) // Wait until either our result is ready or the context is done. select { case err := <-c: return err case <-ctx.Done(): return ctx.Err() } } // AddNoWait adds an item to the batcher and returns immediately. When the handler is // called on the item, the handler's error return value will be sent to the channel // returned from AddNoWait. func (b *Batcher) AddNoWait(item interface{}) <-chan error { b.mu.Lock() defer b.mu.Unlock() // Create a channel to receive the error from the handler. c := make(chan error, 1) if b.shutdown { c <- errors.New("batcher: shut down") return c } // Add the item to the pending list. b.pending = append(b.pending, waiter{item, c}) if b.nHandlers < b.opts.MaxHandlers { // If we can start a handler, do so with the item just added and any others that are pending. batch := b.nextBatch() if batch != nil { b.wg.Add(1) go func() { b.callHandler(batch) b.wg.Done() }() b.nHandlers++ } } // If we can't start a handler, then one of the currently running handlers will // take our item. return c } // nextBatch returns the batch to process, and updates b.pending. // It returns nil if there's no batch ready for processing. // b.mu must be held. func (b *Batcher) nextBatch() []waiter { if len(b.pending) < b.opts.MinBatchSize { return nil } if b.opts.MaxBatchSize == 0 || len(b.pending) <= b.opts.MaxBatchSize { // Send it all! batch := b.pending b.pending = nil return batch } batch := b.pending[:b.opts.MaxBatchSize] b.pending = b.pending[b.opts.MaxBatchSize:] return batch } func (b *Batcher) callHandler(batch []waiter) { for batch != nil { // Collect the items into a slice of the example type. items := b.itemSliceZero for _, m := range batch { items = reflect.Append(items, reflect.ValueOf(m.item)) } // Call the handler and report the result to all waiting // callers of Add. err := b.handler(items.Interface()) for _, m := range batch { m.errc <- err } b.mu.Lock() // If there is more work, keep running; otherwise exit. Take the new batch // and decrement the handler count atomically, so that newly added items will // always get to run. batch = b.nextBatch() if batch == nil { b.nHandlers-- } b.mu.Unlock() } } // Shutdown waits for all active calls to Add to finish, then // returns. After Shutdown is called, all subsequent calls to Add fail. // Shutdown should be called only once. func (b *Batcher) Shutdown() { b.mu.Lock() b.shutdown = true b.mu.Unlock() b.wg.Wait() } go-cloud-0.20.0/pubsub/batcher/batcher_test.go000066400000000000000000000142551367004507500212260ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package batcher_test import ( "bytes" "context" "errors" "io" "reflect" "sync" "sync/atomic" "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/pubsub/batcher" ) func TestSplit(t *testing.T) { tests := []struct { n int opts *batcher.Options want []int }{ // Defaults. {0, nil, nil}, {1, nil, []int{1}}, {10, nil, []int{10}}, // MinBatchSize. {4, &batcher.Options{MinBatchSize: 5}, nil}, {8, &batcher.Options{MinBatchSize: 5, MaxBatchSize: 7}, []int{7}}, // <= MaxBatchSize. {5, &batcher.Options{MaxBatchSize: 5}, []int{5}}, {9, &batcher.Options{MaxBatchSize: 10}, []int{9}}, // > MaxBatchSize with MaxHandlers = 1. {5, &batcher.Options{MaxBatchSize: 4}, []int{4}}, {999, &batcher.Options{MaxBatchSize: 10}, []int{10}}, // MaxBatchSize with MaxHandlers > 1. {10, &batcher.Options{MaxBatchSize: 4, MaxHandlers: 2}, []int{4, 4}}, {10, &batcher.Options{MaxBatchSize: 5, MaxHandlers: 2}, []int{5, 5}}, {10, &batcher.Options{MaxBatchSize: 9, MaxHandlers: 2}, []int{9, 1}}, {9, &batcher.Options{MaxBatchSize: 4, MaxHandlers: 3}, []int{4, 4, 1}}, {10, &batcher.Options{MaxBatchSize: 4, MaxHandlers: 3}, []int{4, 4, 2}}, // All 3 options together. {8, &batcher.Options{MinBatchSize: 5, MaxBatchSize: 7, MaxHandlers: 2}, []int{7}}, } for _, test := range tests { got := batcher.Split(test.n, test.opts) if diff := cmp.Diff(got, test.want); diff != "" { t.Errorf("%d/%#v: got %v want %v diff %s", test.n, test.opts, got, test.want, diff) } } } func TestSequential(t *testing.T) { // Verify that sequential non-concurrent Adds to a batcher produce single-item batches. // Since there is no concurrent work, the Batcher will always produce the items one at a time. ctx := context.Background() var got []int e := errors.New("e") b := batcher.New(reflect.TypeOf(int(0)), nil, func(items interface{}) error { got = items.([]int) return e }) for i := 0; i < 10; i++ { err := b.Add(ctx, i) if err != e { t.Errorf("got %v, want %v", err, e) } want := []int{i} if !cmp.Equal(got, want) { t.Errorf("got %+v, want %+v", got, want) } } } func TestMinBatchSize(t *testing.T) { // Verify the MinBatchSize option works. var got [][]int b := batcher.New(reflect.TypeOf(int(0)), &batcher.Options{MinBatchSize: 3}, func(items interface{}) error { got = append(got, items.([]int)) return nil }) for i := 0; i < 6; i++ { b.AddNoWait(i) } b.Shutdown() want := [][]int{{0, 1, 2}, {3, 4, 5}} if !cmp.Equal(got, want) { t.Errorf("got %+v, want %+v", got, want) } } func TestSaturation(t *testing.T) { // Verify that under high load the maximum number of handlers are running. ctx := context.Background() const ( maxHandlers = 10 maxBatchSize = 50 ) var ( mu sync.Mutex outstanding, max int // number of handlers maxBatch int // size of largest batch count = map[int]int{} // how many of each item the handlers observe ) b := batcher.New(reflect.TypeOf(int(0)), &batcher.Options{MaxHandlers: maxHandlers, MaxBatchSize: maxBatchSize}, func(x interface{}) error { items := x.([]int) mu.Lock() outstanding++ if outstanding > max { max = outstanding } for _, x := range items { count[x]++ } if len(items) > maxBatch { maxBatch = len(items) } mu.Unlock() defer func() { mu.Lock(); outstanding--; mu.Unlock() }() // Sleep a little to increase the likelihood of saturation. time.Sleep(10 * time.Millisecond) return nil }) var wg sync.WaitGroup const nItems = 1000 for i := 0; i < nItems; i++ { i := i wg.Add(1) go func() { defer wg.Done() // Sleep a little to increase the likelihood of saturation. time.Sleep(time.Millisecond) if err := b.Add(ctx, i); err != nil { t.Errorf("b.Add(ctx, %d) error: %v", i, err) } }() } wg.Wait() // Check that we saturated the batcher. if max != maxHandlers { t.Errorf("max concurrent handlers = %d, want %d", max, maxHandlers) } // Check that at least one batch had more than one item. if maxBatch <= 1 || maxBatch > maxBatchSize { t.Errorf("got max batch size of %d, expected > 1 and <= %d", maxBatch, maxBatchSize) } // Check that handlers saw every item exactly once. want := map[int]int{} for i := 0; i < nItems; i++ { want[i] = 1 } if diff := cmp.Diff(count, want); diff != "" { t.Errorf("items: %s", diff) } } func TestShutdown(t *testing.T) { ctx := context.Background() var nHandlers int64 // atomic c := make(chan int, 10) b := batcher.New(reflect.TypeOf(int(0)), &batcher.Options{MaxHandlers: cap(c)}, func(x interface{}) error { for range x.([]int) { c <- 0 } atomic.AddInt64(&nHandlers, 1) defer atomic.AddInt64(&nHandlers, -1) time.Sleep(time.Second) // we want handlers to be active on Shutdown return nil }) for i := 0; i < cap(c); i++ { go func() { err := b.Add(ctx, 0) if err != nil { t.Errorf("b.Add error: %v", err) } }() } // Make sure all goroutines have started. for i := 0; i < cap(c); i++ { <-c } b.Shutdown() if got := atomic.LoadInt64(&nHandlers); got != 0 { t.Fatalf("%d Handlers still active after Shutdown returns", got) } if err := b.Add(ctx, 1); err == nil { t.Error("got nil, want error from Add after Shutdown") } } func TestItemCanBeInterface(t *testing.T) { readerType := reflect.TypeOf([]io.Reader{}).Elem() called := false b := batcher.New(readerType, nil, func(items interface{}) error { called = true _, ok := items.([]io.Reader) if !ok { t.Fatal("items is not a []io.Reader") } return nil }) b.Add(context.Background(), &bytes.Buffer{}) if !called { t.Fatal("handler not called") } } go-cloud-0.20.0/pubsub/benchmark_test.go000066400000000000000000000215571367004507500201430ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pubsub import ( "context" "fmt" "math/rand" "sync" "testing" "time" "gocloud.dev/pubsub/driver" "golang.org/x/sync/errgroup" "golang.org/x/xerrors" ) const ( // How long to run the test. runFor = 25 * time.Second // How long the "warmup period" is, during which we report more frequently. reportWarmup = 500 * time.Millisecond // Minimum frequency for reporting throughput, during warmup and after that. reportPeriodWarmup = 50 * time.Millisecond reportPeriod = 1 * time.Second // Number of output lines per test. We set this to a constant so that it's // easy to copy/paste the output into a Google Sheet with pre-created graphs. // Should be above runFor / reportPeriod + reportWarmup / reportPeriodWarmup. numLinesPerTest = 50 // Number of data points to smooth msgs/sec and RPCs/sec over. smoothing = 5 ) type fakeSub struct { driver.Subscription start time.Time profile func(bool, int) (int, time.Duration) msgs []*driver.Message } func (s *fakeSub) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { n, delay := s.profile(s.inMiddleThird(), maxMessages) if delay > 0 { time.Sleep(delay) } return s.msgs[:n], nil } // inMiddleThird returns true if this test is in the middle third of the running // time; used for burstiness tests. func (s *fakeSub) inMiddleThird() bool { elapsed := time.Since(s.start) return elapsed > runFor/3 && elapsed < runFor*2/3 } // TestReceivePerformance enables characterization of Receive under various // situations, characterized in "tests" below. func TestReceivePerformance(t *testing.T) { t.Skip("Skipped by default") const defaultNumGoRoutines = 100 defaultReceiveProfile := func(_ bool, maxMessages int) (int, time.Duration) { return maxMessages, 0 } defaultProcessProfile := func(bool) time.Duration { return 0 } tests := []struct { description string // See the defaults above. numGoRoutines int receiveProfile func(bool, int) (int, time.Duration) processProfile func(bool) time.Duration noAck bool }{ { description: "baseline", }, { description: "1 goroutine", numGoRoutines: 1, }, { description: "no ack", noAck: true, }, { description: "receive 100ms", receiveProfile: func(_ bool, maxMessages int) (int, time.Duration) { return maxMessages, 100 * time.Millisecond }, }, { description: "receive 1s", receiveProfile: func(_ bool, maxMessages int) (int, time.Duration) { return maxMessages, 1 * time.Second }, }, { description: "process 100ms", processProfile: func(bool) time.Duration { return 100 * time.Millisecond }, }, { description: "process 1s", processProfile: func(bool) time.Duration { return 1 * time.Second }, }, { description: "receive 1s process 70ms", receiveProfile: func(_ bool, maxMessages int) (int, time.Duration) { return maxMessages, 1 * time.Second }, processProfile: func(bool) time.Duration { return 70 * time.Millisecond }, }, { description: "receive 250ms+stddev 150ms, process 10ms + stddev 5ms", receiveProfile: func(_ bool, maxMessages int) (int, time.Duration) { return maxMessages, time.Duration(rand.NormFloat64()*150+250) * time.Millisecond }, processProfile: func(bool) time.Duration { return time.Duration(rand.NormFloat64()*5+10) * time.Millisecond }, }, { description: "bursty message arrival", receiveProfile: func(inMiddleThird bool, maxMessages int) (int, time.Duration) { // When in the middle third of the running time, return 0 messages. n := maxMessages if inMiddleThird { n = 0 } return n, time.Duration(rand.NormFloat64()*25+100) * time.Millisecond }, processProfile: func(bool) time.Duration { return time.Duration(rand.NormFloat64()*5+10) * time.Millisecond }, }, { description: "bursty receive time", receiveProfile: func(inMiddleThird bool, maxMessages int) (int, time.Duration) { // When in the middle third of the running time, 10x the RPC time. d := time.Duration(rand.NormFloat64()*25+100) * time.Millisecond if inMiddleThird { d *= 10 } return maxMessages, d }, processProfile: func(bool) time.Duration { return time.Duration(rand.NormFloat64()*5+10) * time.Millisecond }, }, { description: "bursty process time", receiveProfile: func(_ bool, maxMessages int) (int, time.Duration) { return maxMessages, time.Duration(rand.NormFloat64()*25+100) * time.Millisecond }, processProfile: func(inMiddleThird bool) time.Duration { d := time.Duration(rand.NormFloat64()*5+10) * time.Millisecond if inMiddleThird { d *= 100 } return d }, }, } for _, test := range tests { if test.numGoRoutines == 0 { test.numGoRoutines = defaultNumGoRoutines } if test.receiveProfile == nil { test.receiveProfile = defaultReceiveProfile } if test.processProfile == nil { test.processProfile = defaultProcessProfile } t.Run(test.description, func(t *testing.T) { runBenchmark(t, test.description, test.numGoRoutines, test.receiveProfile, test.processProfile, test.noAck) }) } } func runBenchmark(t *testing.T, description string, numGoRoutines int, receiveProfile func(bool, int) (int, time.Duration), processProfile func(bool) time.Duration, noAck bool) { msgs := make([]*driver.Message, maxBatchSize) for i := range msgs { msgs[i] = &driver.Message{} } fake := &fakeSub{msgs: msgs, profile: receiveProfile, start: time.Now()} sub := newSubscription(fake, nil, nil) defer sub.Shutdown(context.Background()) // Header row. fmt.Printf("%s\tmsgs/sec\tRPCs/sec\tbatchsize\n", description) var mu sync.Mutex start := time.Now() var lastReport time.Time numMsgs := 0 var prevMsgsPerSec, prevRPCsPerSec []float64 // last datapoints var runningMsgsPerSec, runningRPCsPerSec float64 // sum of values in above slices numRPCs := 0 lastMaxMessages := 0 nLines := 1 // header // mu must be locked when called. reportLine := func(now time.Time) { elapsed := now.Sub(start) elapsedSinceReport := now.Sub(lastReport) // Smooth msgsPerSec over the last datapoints. msgsPerSec := float64(numMsgs) / elapsedSinceReport.Seconds() prevMsgsPerSec = append(prevMsgsPerSec, msgsPerSec) runningMsgsPerSec += msgsPerSec if len(prevMsgsPerSec) > smoothing { runningMsgsPerSec -= prevMsgsPerSec[0] if runningMsgsPerSec < 0 { runningMsgsPerSec = 0 } prevMsgsPerSec = prevMsgsPerSec[1:] } // Smooth rpcsPerSec over the last datapoints. rpcsPerSec := float64(numRPCs) / elapsedSinceReport.Seconds() prevRPCsPerSec = append(prevRPCsPerSec, rpcsPerSec) runningRPCsPerSec += rpcsPerSec if len(prevRPCsPerSec) > smoothing { runningRPCsPerSec -= prevRPCsPerSec[0] if runningRPCsPerSec < 0 { runningRPCsPerSec = 0 } prevRPCsPerSec = prevRPCsPerSec[1:] } fmt.Printf("%f\t%f\t%f\t%d\n", elapsed.Seconds(), runningMsgsPerSec/float64(len(prevMsgsPerSec)), runningRPCsPerSec/float64(len(prevRPCsPerSec)), lastMaxMessages) nLines++ lastReport = now numMsgs = 0 numRPCs = 0 } sub.preReceiveBatchHook = func(maxMessages int) { mu.Lock() defer mu.Unlock() lastMaxMessages = maxMessages numRPCs++ if lastReport.IsZero() { reportLine(time.Now()) } } ctx, cancel := context.WithTimeout(context.Background(), runFor) defer cancel() done := make(chan struct{}) go func() { period := reportPeriodWarmup for { select { case now := <-time.After(period): mu.Lock() reportLine(now) mu.Unlock() if now.Sub(start) > reportWarmup { period = reportPeriod } case <-ctx.Done(): close(done) return } } }() var grp errgroup.Group for i := 0; i < numGoRoutines; i++ { grp.Go(func() error { // Each goroutine loops until ctx is canceled. for { m, err := sub.Receive(ctx) if xerrors.Is(err, context.DeadlineExceeded) { return nil } if err != nil { return err } mu.Lock() numMsgs++ mu.Unlock() delay := processProfile(fake.inMiddleThird()) if delay > 0 { time.Sleep(delay) } if !noAck { m.Ack() } } }) } if err := grp.Wait(); err != nil { t.Errorf("%s: %v", description, err) } <-done if nLines > numLinesPerTest { t.Errorf("produced too many lines (%d)", nLines) } for n := nLines; n < numLinesPerTest; n++ { fmt.Println() } } go-cloud-0.20.0/pubsub/driver/000077500000000000000000000000001367004507500161045ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/driver/driver.go000066400000000000000000000174431367004507500177370ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package driver defines interfaces to be implemented by pubsub drivers, which // will be used by the pubsub package to interact with the underlying services. // Application code should use package pubsub. package driver // import "gocloud.dev/pubsub/driver" import ( "context" "gocloud.dev/gcerrors" ) // AckID is the identifier of a message for purposes of acknowledgement. type AckID interface{} // AckInfo represents an action on an AckID. type AckInfo struct { // AckID is the AckID the action is for. AckID AckID // IsAck is true if the AckID should be acked, false if it should be nacked. IsAck bool } // Message is data to be published (sent) to a topic and later received from // subscriptions on that topic. type Message struct { // Body contains the content of the message. Body []byte // Metadata has key/value pairs describing the message. Metadata map[string]string // AckID should be set to something identifying the message on the // server. It may be passed to Subscription.SendAcks to acknowledge // the message, or to Subscription.SendNacks. This field should only // be set by methods implementing Subscription.ReceiveBatch. AckID AckID // AsFunc allows drivers to expose driver-specific types; // see Topic.As for more details. // AsFunc must be populated on messages returned from ReceiveBatch. AsFunc func(interface{}) bool // BeforeSend is a callback used when sending a message. It should remain // nil on messages returned from ReceiveBatch. // // The callback must be called exactly once, before the message is sent. // // asFunc converts its argument to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. BeforeSend func(asFunc func(interface{}) bool) error } // Topic publishes messages. // Drivers may optionally also implement io.Closer; Close will be called // when the pubsub.Topic is Shutdown. type Topic interface { // SendBatch should publish all the messages in ms. It should // return only after all the messages are sent, an error occurs, or the // context is done. // // Only the Body and (optionally) Metadata fields of the Messages in ms // will be set by the caller of SendBatch. // // If any message in the batch fails to send, SendBatch should return an // error. // // If there is a transient failure, this method should not retry but // should return an error for which IsRetryable returns true. The // concrete API takes care of retry logic. // // The slice ms should not be retained past the end of the call to // SendBatch. // // SendBatch may be called concurrently from multiple goroutines. // // Drivers can control the number of messages sent in a single batch // and the concurrency of calls to SendBatch via a batcher.Options // passed to pubsub.NewTopic. SendBatch(ctx context.Context, ms []*Message) error // IsRetryable should report whether err can be retried. // err will always be a non-nil error returned from SendBatch. IsRetryable(err error) bool // As allows drivers to expose driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. As(i interface{}) bool // ErrorAs allows drivers to expose driver-specific types for errors. // See https://gocloud.dev/concepts/as/ for background information. ErrorAs(error, interface{}) bool // ErrorCode should return a code that describes the error, which was returned by // one of the other methods in this interface. ErrorCode(error) gcerrors.ErrorCode // Close cleans up any resources used by the Topic. Once Close is called, // there will be no method calls to the Topic other than As, ErrorAs, and // ErrorCode. Close() error } // Subscription receives published messages. // Drivers may optionally also implement io.Closer; Close will be called // when the pubsub.Subscription is Shutdown. type Subscription interface { // ReceiveBatch should return a batch of messages that have queued up // for the subscription on the server, up to maxMessages. // // If there is a transient failure, this method should not retry but // should return a nil slice and an error. The concrete API will take // care of retry logic. // // If no messages are currently available, this method can return an empty // slice of messages and no error. ReceiveBatch will be called again // immediately, so implementations should try to wait for messages for some // non-zero amount of time before returning zero messages. If the underlying // service doesn't support waiting, then a time.Sleep can be used. // // ReceiveBatch may be called concurrently from multiple goroutines. // // Drivers can control the maximum value of maxMessages and the concurrency // of calls to ReceiveBatch via a batcher.Options passed to // pubsub.NewSubscription. ReceiveBatch(ctx context.Context, maxMessages int) ([]*Message, error) // SendAcks should acknowledge the messages with the given ackIDs on // the server so that they will not be received again for this // subscription if the server gets the acks before their deadlines. // This method should return only after all the ackIDs are sent, an // error occurs, or the context is done. // // It is acceptable for SendAcks to be a no-op for drivers that don't // support message acknowledgement. // // SendAcks may be called concurrently from multiple goroutines. // // Drivers can control the maximum size of ackIDs and the concurrency // of calls to SendAcks/SendNacks via a batcher.Options passed to // pubsub.NewSubscription. SendAcks(ctx context.Context, ackIDs []AckID) error // CanNack must return true iff the driver supports Nacking messages. // // If CanNack returns false, SendNacks will never be called, and Nack will // panic if called. CanNack() bool // SendNacks should notify the server that the messages with the given ackIDs // are not being processed by this client, so that they will be received // again later, potentially by another subscription. // This method should return only after all the ackIDs are sent, an // error occurs, or the context is done. // // If the service does not suppport nacking of messages, return false from // CanNack, and SendNacks will never be called. // // SendNacks may be called concurrently from multiple goroutines. // // Drivers can control the maximum size of ackIDs and the concurrency // of calls to SendAcks/Nacks via a batcher.Options passed to // pubsub.NewSubscription. SendNacks(ctx context.Context, ackIDs []AckID) error // IsRetryable should report whether err can be retried. // err will always be a non-nil error returned from ReceiveBatch or SendAcks. IsRetryable(err error) bool // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. As(i interface{}) bool // ErrorAs allows drivers to expose driver-specific types for errors. // See https://gocloud.dev/concepts/as/ for background information. ErrorAs(error, interface{}) bool // ErrorCode should return a code that describes the error, which was returned by // one of the other methods in this interface. ErrorCode(error) gcerrors.ErrorCode // Close cleans up any resources used by the Topic. Once Close is called, // there will be no method calls to the Topic other than As, ErrorAs, and // ErrorCode. Close() error } go-cloud-0.20.0/pubsub/drivertest/000077500000000000000000000000001367004507500170045ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/drivertest/drivertest.go000066400000000000000000000737441367004507500215450ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package drivertest provides a conformance test for implementations of // driver. package drivertest // import "gocloud.dev/pubsub/drivertest" import ( "bytes" "context" "errors" "sort" "strconv" "testing" "time" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "gocloud.dev/gcerrors" "gocloud.dev/internal/escape" "gocloud.dev/internal/retry" "gocloud.dev/pubsub" "gocloud.dev/pubsub/batcher" "gocloud.dev/pubsub/driver" "golang.org/x/sync/errgroup" ) // Harness descibes the functionality test harnesses must provide to run // conformance tests. type Harness interface { // CreateTopic creates a new topic and returns a driver.Topic // for testing. The topic may have to be removed manually if the test is // abruptly terminated or the network connection fails. CreateTopic(ctx context.Context, testName string) (dt driver.Topic, cleanup func(), err error) // MakeNonexistentTopic makes a driver.Topic referencing a topic that // does not exist. MakeNonexistentTopic(ctx context.Context) (driver.Topic, error) // CreateSubscription creates a new subscription, subscribed // to the given topic, and returns a driver.Subscription for testing. The // subscription may have to be cleaned up manually if the test is abruptly // terminated or the network connection fails. CreateSubscription(ctx context.Context, t driver.Topic, testName string) (ds driver.Subscription, cleanup func(), err error) // MakeNonexistentSubscription makes a driver.Subscription referencing a // subscription that does not exist. MakeNonexistentSubscription(ctx context.Context) (driver.Subscription, error) // Close closes resources used by the harness, but does not call Close // on the Topics and Subscriptions generated by the Harness. Close() // MaxBatchSizes returns the maximum size of SendBatch/Send(Na|A)cks, or 0 // if there's no max. MaxBatchSizes() (int, int) // SupportsMultipleSubscriptions reports whether the driver supports // multiple subscriptions for the same topic. SupportsMultipleSubscriptions() bool } // HarnessMaker describes functions that construct a harness for running tests. // It is called exactly once per test; Harness.Close() will be called when the test is complete. type HarnessMaker func(ctx context.Context, t *testing.T) (Harness, error) // AsTest represents a test of As functionality. // The conformance test: // 1. Calls TopicCheck. // 2. Calls SubscriptionCheck. // 3. Sends a message, setting Message.BeforeSend to BeforeSend. // 4. Receives the message and calls MessageCheck. // 5. Calls TopicErrorCheck. // 6. Calls SubscriptionErrorCheck. type AsTest interface { // Name should return a descriptive name for the test. Name() string // TopicCheck will be called to allow verifcation of Topic.As. TopicCheck(t *pubsub.Topic) error // SubscriptionCheck will be called to allow verification of Subscription.As. SubscriptionCheck(s *pubsub.Subscription) error // TopicErrorCheck will be called to allow verification of Topic.ErrorAs. // The error will be the one returned from SendBatch when called with // a non-existent topic. TopicErrorCheck(t *pubsub.Topic, err error) error // SubscriptionErrorCheck will be called to allow verification of // Subscription.ErrorAs. // The error will be the one returned from ReceiveBatch when called with // a non-existent subscription. SubscriptionErrorCheck(s *pubsub.Subscription, err error) error // MessageCheck will be called to allow verification of Message.As. MessageCheck(m *pubsub.Message) error // BeforeSend will be used as Message.BeforeSend as part of sending a test // message. BeforeSend(as func(interface{}) bool) error } // Many tests set the maximum batch size to 1 to make record/replay stable. var batchSizeOne = &batcher.Options{MaxBatchSize: 1, MaxHandlers: 1} type verifyAsFailsOnNil struct{} func (verifyAsFailsOnNil) Name() string { return "verify As returns false when passed nil" } func (verifyAsFailsOnNil) TopicCheck(t *pubsub.Topic) error { if t.As(nil) { return errors.New("want Topic.As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) SubscriptionCheck(s *pubsub.Subscription) error { if s.As(nil) { return errors.New("want Subscription.As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) TopicErrorCheck(t *pubsub.Topic, err error) (ret error) { defer func() { if recover() == nil { ret = errors.New("want Topic.ErrorAs to panic when passed nil") } }() t.ErrorAs(err, nil) return nil } func (verifyAsFailsOnNil) SubscriptionErrorCheck(s *pubsub.Subscription, err error) (ret error) { defer func() { if recover() == nil { ret = errors.New("want Subscription.ErrorAs to panic when passed nil") } }() s.ErrorAs(err, nil) return nil } func (verifyAsFailsOnNil) MessageCheck(m *pubsub.Message) error { if m.As(nil) { return errors.New("want Message.As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) BeforeSend(as func(interface{}) bool) error { if as(nil) { return errors.New("want Message.BeforeSend's As function to return false when passed nil") } return nil } // RunConformanceTests runs conformance tests for driver implementations of pubsub. func RunConformanceTests(t *testing.T, newHarness HarnessMaker, asTests []AsTest) { tests := map[string]func(t *testing.T, newHarness HarnessMaker){ "TestSendReceive": testSendReceive, "TestSendReceiveTwo": testSendReceiveTwo, "TestSendReceiveJSON": testSendReceiveJSON, "TestNack": testNack, "TestBatching": testBatching, "TestDoubleAck": testDoubleAck, "TestErrorOnSendToClosedTopic": testErrorOnSendToClosedTopic, "TestErrorOnReceiveFromClosedSubscription": testErrorOnReceiveFromClosedSubscription, "TestCancelSendReceive": testCancelSendReceive, "TestNonExistentTopicSucceedsOnOpenButFailsOnSend": testNonExistentTopicSucceedsOnOpenButFailsOnSend, "TestNonExistentSubscriptionSucceedsOnOpenButFailsOnReceive": testNonExistentSubscriptionSucceedsOnOpenButFailsOnReceive, "TestMetadata": testMetadata, "TestNonUTF8MessageBody": testNonUTF8MessageBody, } for name, test := range tests { t.Run(name, func(t *testing.T) { test(t, newHarness) }) } asTests = append(asTests, verifyAsFailsOnNil{}) t.Run("TestAs", func(t *testing.T) { for _, st := range asTests { if st.Name() == "" { t.Fatalf("AsTest.Name is required") } t.Run(st.Name(), func(t *testing.T) { testAs(t, newHarness, st) }) } }) } // RunBenchmarks runs benchmarks for driver implementations of pubsub. func RunBenchmarks(b *testing.B, topic *pubsub.Topic, sub *pubsub.Subscription) { b.Run("BenchmarkReceive", func(b *testing.B) { benchmark(b, topic, sub, false) }) b.Run("BenchmarkSend", func(b *testing.B) { benchmark(b, topic, sub, true) }) } func testNonExistentTopicSucceedsOnOpenButFailsOnSend(t *testing.T, newHarness HarnessMaker) { // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() dt, err := h.MakeNonexistentTopic(ctx) if err != nil { // Failure shouldn't happen for non-existent topics until messages are sent // to them. t.Fatalf("creating a local topic that doesn't exist on the server: %v", err) } topic := pubsub.NewTopic(dt, nil) defer func() { if err := topic.Shutdown(ctx); err != nil { t.Error(err) } }() m := &pubsub.Message{} err = topic.Send(ctx, m) if err == nil || gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("got error %v for send to non-existent topic, want code=NotFound", err) } } func testNonExistentSubscriptionSucceedsOnOpenButFailsOnReceive(t *testing.T, newHarness HarnessMaker) { // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() ds, err := h.MakeNonexistentSubscription(ctx) if err != nil { t.Fatalf("failed to make non-existent subscription: %v", err) } sub := pubsub.NewSubscription(ds, batchSizeOne, batchSizeOne) defer func() { if err := sub.Shutdown(ctx); err != nil { t.Error(err) } }() // The test will hang here if the message isn't available, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() _, err = sub.Receive(ctx2) if err == nil || ctx2.Err() != nil || gcerrors.Code(err) != gcerrors.NotFound { t.Errorf("got error %v for receive from non-existent subscription, want code=NotFound", err) } } func testSendReceive(t *testing.T, newHarness HarnessMaker) { // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() topic, sub, cleanup, err := makePair(ctx, t, h) if err != nil { t.Fatal(err) } defer cleanup() want := publishN(ctx, t, topic, 3) got := receiveN(ctx, t, sub, len(want)) // Check that the received messages match the sent ones. if diff := diffMessageSets(got, want); diff != "" { t.Error(diff) } } // Receive from two subscriptions to the same topic. // Verify both get all the messages. func testSendReceiveTwo(t *testing.T, newHarness HarnessMaker) { // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() if !h.SupportsMultipleSubscriptions() { t.Skip("multiple subscriptions to a topic not supported") } dt, cleanup, err := h.CreateTopic(ctx, t.Name()) if err != nil { t.Fatal(err) } defer cleanup() topic := pubsub.NewTopic(dt, batchSizeOne) defer func() { if err := topic.Shutdown(ctx); err != nil { t.Error(err) } }() var ss []*pubsub.Subscription for i := 0; i < 2; i++ { ds, cleanup, err := h.CreateSubscription(ctx, dt, t.Name()) if err != nil { t.Fatal(err) } defer cleanup() s := pubsub.NewSubscription(ds, batchSizeOne, batchSizeOne) defer func() { if err := s.Shutdown(ctx); err != nil { t.Error(err) } }() ss = append(ss, s) } want := publishN(ctx, t, topic, 3) for i, s := range ss { got := receiveN(ctx, t, s, len(want)) if diff := diffMessageSets(got, want); diff != "" { t.Errorf("sub #%d: %s", i, diff) } } } func testSendReceiveJSON(t *testing.T, newHarness HarnessMaker) { const json = `{"Foo": "Bar"}` // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() topic, sub, cleanup, err := makePair(ctx, t, h) if err != nil { t.Fatal(err) } defer cleanup() sendM := &pubsub.Message{Body: []byte(json)} if err := topic.Send(ctx, sendM); err != nil { t.Fatal(err) } ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() receiveM, err := sub.Receive(ctx2) if err != nil { t.Fatal(err) } receiveM.Ack() if diff := cmp.Diff(receiveM, sendM, cmpopts.IgnoreUnexported(pubsub.Message{})); diff != "" { t.Error(diff) } } func testNack(t *testing.T, newHarness HarnessMaker) { const nMessages = 2 // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() dt, topicCleanup, err := h.CreateTopic(ctx, t.Name()) if err != nil { t.Fatal(err) } defer topicCleanup() ds, subCleanup, err := h.CreateSubscription(ctx, dt, t.Name()) if err != nil { t.Fatal(err) } defer subCleanup() if !ds.CanNack() { t.Skip("Nack not supported") } topic := pubsub.NewTopic(dt, batchSizeOne) defer func() { if err := topic.Shutdown(ctx); err != nil { t.Error(err) } }() sub := pubsub.NewSubscription(ds, batchSizeOne, batchSizeOne) defer func() { if err := sub.Shutdown(ctx); err != nil { t.Error(err) } }() want := publishN(ctx, t, topic, nMessages) // Get the messages, but nack them. // Make sure to nack after receiving all of them; otherwise, we could // receive one of the messages twice instead of receiving all nMessages. // The test will hang here if the messages aren't redelivered, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() var got []*pubsub.Message for i := 0; i < nMessages; i++ { m, err := sub.Receive(ctx2) if err != nil { t.Fatal(err) } got = append(got, m) } for _, m := range got { m.Nack() } // Check that the received messages match the sent ones. if diff := diffMessageSets(got, want); diff != "" { t.Error(diff) } // The test will hang here if the messages aren't redelivered, so use a shorter timeout. ctx2, cancel = context.WithTimeout(ctx, 30*time.Second) defer cancel() got = nil for i := 0; i < nMessages; i++ { m, err := sub.Receive(ctx2) if err != nil { t.Fatal(err) } got = append(got, m) m.Ack() } if diff := diffMessageSets(got, want); diff != "" { t.Error(diff) } } func testBatching(t *testing.T, newHarness HarnessMaker) { const nMessages = 12 // must be divisible by 2 const batchSize = nMessages / 2 // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() maxSendBatch, maxAckBatch := h.MaxBatchSizes() dt, topicCleanup, err := h.CreateTopic(ctx, t.Name()) if err != nil { t.Fatal(err) } defer topicCleanup() ds, subCleanup, err := h.CreateSubscription(ctx, dt, t.Name()) if err != nil { t.Fatal(err) } defer subCleanup() sendBatchOpts := &batcher.Options{MinBatchSize: batchSize, MaxBatchSize: batchSize} // If the driver doesn't support batchSize batches, fall back to size 1. if maxSendBatch != 0 && batchSize > maxSendBatch { sendBatchOpts = batchSizeOne } topic := pubsub.NewTopic(dt, sendBatchOpts) defer func() { if err := topic.Shutdown(ctx); err != nil { t.Error(err) } }() ackBatchOpts := &batcher.Options{MinBatchSize: batchSize, MaxBatchSize: batchSize} // If the driver doesn't support batchSize batches, fall back to size 1. if maxAckBatch != 0 && batchSize > maxAckBatch { ackBatchOpts = batchSizeOne } sub := pubsub.NewSubscription(ds, batchSizeOne, ackBatchOpts) defer func() { if err := sub.Shutdown(ctx); err != nil { t.Error(err) } }() // Publish nMessages. We have to do them asynchronously because topic.Send // blocks until the message is sent, and these messages won't be sent until // all batchSize are queued. // Note: this test uses the same Body for each message, because the order // that they appear in the SendBatch is not stable. gr, grctx := errgroup.WithContext(ctx) var want []*pubsub.Message for i := 0; i < nMessages; i++ { m := &pubsub.Message{Body: []byte("hello world")} want = append(want, m) gr.Go(func() error { return topic.Send(grctx, m) }) } if err := gr.Wait(); err != nil { t.Fatal(err) } // Get the messages. // The test will hang here if the messages aren't delivered, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() var got []*pubsub.Message for i := 0; i < nMessages; i++ { m, err := sub.Receive(ctx2) if err != nil { t.Fatal(err) } got = append(got, m) m.Ack() } if diff := diffMessageSets(got, want); diff != "" { t.Error(diff) } } func testDoubleAck(t *testing.T, newHarness HarnessMaker) { // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() dt, topicCleanup, err := h.CreateTopic(ctx, t.Name()) if err != nil { t.Fatal(err) } defer topicCleanup() ds, subCleanup, err := h.CreateSubscription(ctx, dt, t.Name()) if err != nil { t.Fatal(err) } defer subCleanup() // Publish 3 messages. for i := 0; i < 3; i++ { err := dt.SendBatch(ctx, []*driver.Message{{Body: []byte(strconv.Itoa(i))}}) if err != nil { t.Fatal(err) } } // Retrieve the messages. // The test will hang here if the messages aren't delivered, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() var dms []*driver.Message for len(dms) != 3 { curdms, err := ds.ReceiveBatch(ctx2, 3) if err != nil { t.Fatal(err) } if err := ctx2.Err(); err != nil { t.Fatalf("never received expected messages: %v", err) } dms = append(dms, curdms...) } // Ack the first two messages. err = ds.SendAcks(ctx, []driver.AckID{dms[0].AckID, dms[1].AckID}) if err != nil { t.Fatal(err) } // Ack them again; this should succeed even though we've acked them before. // If services return an error for this, drivers should drop them. err = ds.SendAcks(ctx, []driver.AckID{dms[0].AckID, dms[1].AckID}) if err != nil { t.Fatal(err) } if !ds.CanNack() { return } // Nack all 3 messages. This should also succeed, and the nack of the third // message should take effect, so we should be able to fetch it again. // Note that the other messages *may* also be re-sent, because we're nacking // them here (even though we acked them earlier); it depends on service // semantics and time-sensitivity. err = ds.SendNacks(ctx, []driver.AckID{dms[0].AckID, dms[1].AckID, dms[2].AckID}) if err != nil { t.Fatal(err) } // The test will hang here if the message isn't redelivered, so use a shorter timeout. ctx2, cancel = context.WithTimeout(ctx, 30*time.Second) defer cancel() // We're looking to re-receive dms[2]. Loop: for { curdms, err := ds.ReceiveBatch(ctx2, 1) if err != nil { t.Fatal(err) } for _, curdm := range curdms { if bytes.Equal(curdm.Body, dms[2].Body) { // Found it! break Loop } } } } // Publish n different messages to the topic. Return the messages. func publishN(ctx context.Context, t *testing.T, topic *pubsub.Topic, n int) []*pubsub.Message { var ms []*pubsub.Message for i := 0; i < n; i++ { m := &pubsub.Message{ Body: []byte(strconv.Itoa(i)), Metadata: map[string]string{"a": strconv.Itoa(i)}, } if err := topic.Send(ctx, m); err != nil { t.Fatal(err) } ms = append(ms, m) } return ms } // Receive and ack n messages from sub. func receiveN(ctx context.Context, t *testing.T, sub *pubsub.Subscription, n int) []*pubsub.Message { // The test will hang here if the message(s) aren't available, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() var ms []*pubsub.Message for i := 0; i < n; i++ { m, err := sub.Receive(ctx2) if err != nil { t.Fatal(err) } ms = append(ms, m) m.Ack() } return ms } // Find the differences between two sets of messages. func diffMessageSets(got, want []*pubsub.Message) string { less := func(x, y *pubsub.Message) bool { return bytes.Compare(x.Body, y.Body) < 0 } return cmp.Diff(got, want, cmpopts.SortSlices(less), cmpopts.IgnoreUnexported(pubsub.Message{})) } func testErrorOnSendToClosedTopic(t *testing.T, newHarness HarnessMaker) { // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() dt, cleanup, err := h.CreateTopic(ctx, t.Name()) if err != nil { t.Fatal(err) } defer cleanup() topic := pubsub.NewTopic(dt, batchSizeOne) if err := topic.Shutdown(ctx); err != nil { t.Error(err) } // Check that sending to the closed topic fails. m := &pubsub.Message{} if err := topic.Send(ctx, m); err == nil { t.Error("topic.Send returned nil, want error") } if err := topic.Shutdown(ctx); err == nil { t.Error("wanted error on double Shutdown") } } func testErrorOnReceiveFromClosedSubscription(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() dt, cleanup, err := h.CreateTopic(ctx, t.Name()) if err != nil { t.Fatal(err) } defer cleanup() ds, cleanup, err := h.CreateSubscription(ctx, dt, t.Name()) if err != nil { t.Fatal(err) } defer cleanup() sub := pubsub.NewSubscription(ds, batchSizeOne, batchSizeOne) if err := sub.Shutdown(ctx); err != nil { t.Error(err) } if _, err = sub.Receive(ctx); err == nil { t.Error("sub.Receive returned nil, want error") } if err := sub.Shutdown(ctx); err == nil { t.Error("wanted error on double Shutdown") } } func testCancelSendReceive(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() topic, sub, cleanup, err := makePair(ctx, t, h) if err != nil { t.Fatal(err) } defer cleanup() ctx, cancel := context.WithCancel(ctx) cancel() m := &pubsub.Message{} if err := topic.Send(ctx, m); !isCanceled(err) { t.Errorf("topic.Send returned %v (%T), want context.Canceled", err, err) } if _, err := sub.Receive(ctx); !isCanceled(err) { t.Errorf("sub.Receive returned %v (%T), want context.Canceled", err, err) } // It would be nice to add a test that cancels an in-flight blocking Receive. // However, because pubsub.Subscription.Receive repeatedly calls // driver.ReceiveBatch if it returns 0 messages, it's difficult to write // such a test without it being flaky for drivers with record/replay // (the number of times driver.ReceiveBatch is called is timing-dependent). } func testMetadata(t *testing.T, newHarness HarnessMaker) { // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() // Some services limit the number of metadata per message. // Sort the escape.WeirdStrings values for record/replay consistency, // then break the weird strings up into groups of at most maxMetadataKeys. const maxMetadataKeys = 10 var weirdStrings []string for _, v := range escape.WeirdStrings { weirdStrings = append(weirdStrings, v) } sort.Slice(weirdStrings, func(i, j int) bool { return weirdStrings[i] < weirdStrings[j] }) weirdMetaDataGroups := []map[string]string{{}} i := 0 for _, k := range weirdStrings { weirdMetaDataGroups[i][k] = k if len(weirdMetaDataGroups[i]) == maxMetadataKeys { weirdMetaDataGroups = append(weirdMetaDataGroups, map[string]string{}) i++ } } topic, sub, cleanup, err := makePair(ctx, t, h) if err != nil { t.Fatal(err) } defer cleanup() for _, wm := range weirdMetaDataGroups { m := &pubsub.Message{ Body: []byte("hello world"), Metadata: wm, } if err := topic.Send(ctx, m); err != nil { t.Fatal(err) } // The test will hang here if the messages aren't delivered, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() m, err = sub.Receive(ctx2) if err != nil { t.Fatal(err) } m.Ack() if diff := cmp.Diff(m.Metadata, wm); diff != "" { t.Fatalf("got\n%v\nwant\n%v\ndiff\n%s", m.Metadata, wm, diff) } } // Verify that non-UTF8 strings in metadata key or value fail. m := &pubsub.Message{ Body: []byte("hello world"), Metadata: map[string]string{escape.NonUTF8String: "bar"}, } if err := topic.Send(ctx, m); err == nil { t.Error("got nil error, expected error for using non-UTF8 string as metadata key") } m.Metadata = map[string]string{"foo": escape.NonUTF8String} if err := topic.Send(ctx, m); err == nil { t.Error("got nil error, expected error for using non-UTF8 string as metadata value") } } func testNonUTF8MessageBody(t *testing.T, newHarness HarnessMaker) { // Set up. ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() topic, sub, cleanup, err := makePair(ctx, t, h) if err != nil { t.Fatal(err) } defer cleanup() // Sort the WeirdStrings map for record/replay consistency. var weirdStrings [][]string // [0] = key, [1] = value for k, v := range escape.WeirdStrings { weirdStrings = append(weirdStrings, []string{k, v}) } sort.Slice(weirdStrings, func(i, j int) bool { return weirdStrings[i][0] < weirdStrings[j][0] }) // Construct a message body with the weird strings and some non-UTF-8 bytes. var body []byte for _, v := range weirdStrings { body = append(body, []byte(v[1])...) } body = append(body, []byte(escape.NonUTF8String)...) m := &pubsub.Message{Body: body} if err := topic.Send(ctx, m); err != nil { t.Fatal(err) } // The test will hang here if the messages aren't delivered, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() m, err = sub.Receive(ctx2) if err != nil { t.Fatal(err) } m.Ack() if diff := cmp.Diff(m.Body, body); diff != "" { t.Fatalf("got\n%v\nwant\n%v\ndiff\n%s", m.Body, body, diff) } } func isCanceled(err error) bool { if err == context.Canceled { return true } if cerr, ok := err.(*retry.ContextError); ok { return cerr.CtxErr == context.Canceled } return gcerrors.Code(err) == gcerrors.Canceled } func makePair(ctx context.Context, t *testing.T, h Harness) (*pubsub.Topic, *pubsub.Subscription, func(), error) { dt, topicCleanup, err := h.CreateTopic(ctx, t.Name()) if err != nil { return nil, nil, nil, err } ds, subCleanup, err := h.CreateSubscription(ctx, dt, t.Name()) if err != nil { topicCleanup() return nil, nil, nil, err } topic := pubsub.NewTopic(dt, batchSizeOne) sub := pubsub.NewSubscription(ds, batchSizeOne, batchSizeOne) cleanup := func() { if err := topic.Shutdown(ctx); err != nil { t.Error(err) } if err := sub.Shutdown(ctx); err != nil { t.Error(err) } subCleanup() topicCleanup() } return topic, sub, cleanup, nil } // testAs tests the various As functions, using AsTest. func testAs(t *testing.T, newHarness HarnessMaker, st AsTest) { ctx := context.Background() h, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer h.Close() topic, sub, cleanup, err := makePair(ctx, t, h) if err != nil { t.Fatal(err) } defer cleanup() if err := st.TopicCheck(topic); err != nil { t.Error(err) } if err := st.SubscriptionCheck(sub); err != nil { t.Error(err) } msg := &pubsub.Message{ Body: []byte("x"), BeforeSend: st.BeforeSend, } if err := topic.Send(ctx, msg); err != nil { t.Fatal(err) } // The test will hang here if the messages aren't delivered, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() m, err := sub.Receive(ctx2) if err != nil { t.Fatal(err) } if err := st.MessageCheck(m); err != nil { t.Error(err) } m.Ack() // Make a nonexistent topic and try to to send on it, to get an error we can // use to call TopicErrorCheck. dt, err := h.MakeNonexistentTopic(ctx) if err != nil { t.Fatal(err) } nonexistentTopic := pubsub.NewTopic(dt, batchSizeOne) defer func() { if err := nonexistentTopic.Shutdown(ctx); err != nil { t.Error(err) } }() topicErr := nonexistentTopic.Send(ctx, &pubsub.Message{}) if topicErr == nil || gcerrors.Code(topicErr) != gcerrors.NotFound { t.Errorf("got error %v sending to nonexistent topic, want Code=NotFound", topicErr) } else if err := st.TopicErrorCheck(topic, topicErr); err != nil { t.Error(err) } // Make a nonexistent subscription and try to receive from it, to get an error // we can use to call SubscriptionErrorCheck. ds, err := h.MakeNonexistentSubscription(ctx) if err != nil { t.Fatal(err) } nonExistentSub := pubsub.NewSubscription(ds, batchSizeOne, batchSizeOne) defer func() { if err := nonExistentSub.Shutdown(ctx); err != nil { t.Error(err) } }() // The test will hang here if Receive doesn't fail quickly, so set a shorter timeout. ctx2, cancel = context.WithTimeout(ctx, 30*time.Second) defer cancel() _, subErr := nonExistentSub.Receive(ctx2) if subErr == nil || ctx2.Err() != nil || gcerrors.Code(subErr) != gcerrors.NotFound { t.Errorf("got error %v receiving from nonexistent subscription, want Code=NotFound", subErr) } else if err := st.SubscriptionErrorCheck(nonExistentSub, subErr); err != nil { t.Error(err) } } // Publishes a large number of messages to topic concurrently, and then times // how long it takes to send (if timeSend is true) or receive (if timeSend // is false) them all. func benchmark(b *testing.B, topic *pubsub.Topic, sub *pubsub.Subscription, timeSend bool) { attrs := map[string]string{"label": "value"} body := []byte("hello, world") const ( nMessages = 10000 concurrencySend = 100 concurrencyReceive = 100 ) if nMessages%concurrencySend != 0 || nMessages%concurrencyReceive != 0 { b.Fatal("nMessages must be divisible by # of sending/receiving goroutines") } b.ResetTimer() for i := 0; i < b.N; i++ { if !timeSend { b.StopTimer() } if err := publishNConcurrently(topic, nMessages, concurrencySend, attrs, body); err != nil { b.Fatalf("publishing: %v", err) } b.Logf("published %d messages", nMessages) if timeSend { b.StopTimer() } else { b.StartTimer() } if err := receiveNConcurrently(sub, nMessages, concurrencyReceive); err != nil { b.Fatalf("receiving: %v", err) } b.SetBytes(nMessages * 1e6) b.Log("MB/s is actually number of messages received per second") if timeSend { b.StartTimer() } } } func publishNConcurrently(topic *pubsub.Topic, nMessages, nGoroutines int, attrs map[string]string, body []byte) error { return runConcurrently(nMessages, nGoroutines, func(ctx context.Context) error { return topic.Send(ctx, &pubsub.Message{Metadata: attrs, Body: body}) }) } func receiveNConcurrently(sub *pubsub.Subscription, nMessages, nGoroutines int) error { return runConcurrently(nMessages, nGoroutines, func(ctx context.Context) error { m, err := sub.Receive(ctx) if err != nil { return err } m.Ack() return nil }) } // Call function f n times concurrently, using g goroutines. g must divide n. // Wait until all calls complete. If any fail, cancel the remaining ones. func runConcurrently(n, g int, f func(context.Context) error) error { gr, ctx := errgroup.WithContext(context.Background()) ng := n / g for i := 0; i < g; i++ { gr.Go(func() error { for j := 0; j < ng; j++ { if err := f(ctx); err != nil { return err } } return nil }) } return gr.Wait() } go-cloud-0.20.0/pubsub/example_test.go000066400000000000000000000143521367004507500176370ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pubsub_test import ( "context" "fmt" "log" "gocloud.dev/pubsub" pbraw "cloud.google.com/go/pubsub/apiv1" pbapi "google.golang.org/genproto/googleapis/pubsub/v1" "google.golang.org/grpc/status" ) func ExampleTopic_Send() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var topic *pubsub.Topic err := topic.Send(ctx, &pubsub.Message{ Body: []byte("Hello, World!\n"), // Metadata is optional and can be nil. Metadata: map[string]string{ // These are examples of metadata. // There is nothing special about the key names. "language": "en", "importance": "high", }, }) if err != nil { log.Fatal(err) } } func ExampleSubscription_Receive() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var subscription *pubsub.Subscription // Loop on received messages. for { msg, err := subscription.Receive(ctx) if err != nil { // Errors from Receive indicate that Receive will no longer succeed. log.Printf("Receiving message: %v", err) break } // Do work based on the message, for example: fmt.Printf("Got message: %q\n", msg.Body) // Messages must always be acknowledged with Ack. msg.Ack() } } func ExampleSubscription_Receive_concurrent() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var subscription *pubsub.Subscription // Loop on received messages. We can use a channel as a semaphore to limit how // many goroutines we have active at a time as well as wait on the goroutines // to finish before exiting. const maxHandlers = 10 sem := make(chan struct{}, maxHandlers) recvLoop: for { msg, err := subscription.Receive(ctx) if err != nil { // Errors from Receive indicate that Receive will no longer succeed. log.Printf("Receiving message: %v", err) break } // Wait if there are too many active handle goroutines and acquire the // semaphore. If the context is canceled, stop waiting and start shutting // down. select { case sem <- struct{}{}: case <-ctx.Done(): break recvLoop } // Handle the message in a new goroutine. go func() { defer func() { <-sem }() // Release the semaphore. defer msg.Ack() // Messages must always be acknowledged with Ack. // Do work based on the message, for example: fmt.Printf("Got message: %q\n", msg.Body) }() } // We're no longer receiving messages. Wait to finish handling any // unacknowledged messages by totally acquiring the semaphore. for n := 0; n < maxHandlers; n++ { sem <- struct{}{} } } func ExampleMessage_As() { // This example is specific to the gcppubsub implementation; it demonstrates // access to the underlying PubsubMessage type. // The types exposed for As by gcppubsub are documented in // https://godoc.org/gocloud.dev/pubsub/gcppubsub#hdr-As ctx := context.Background() sub, err := pubsub.OpenSubscription(ctx, "gcppubsub://project/topic") if err != nil { log.Fatal(err) } defer sub.Shutdown(ctx) msg, err := sub.Receive(ctx) if err != nil { log.Fatal(err) } var pm *pbapi.PubsubMessage if msg.As(&pm) { _ = pm.GetAttributes() } msg.Ack() } func ExampleSubscription_As() { // This example is specific to the gcppubsub implementation; it demonstrates // access to the underlying SubscriberClient type. // The types exposed for As by gcppubsub are documented in // https://godoc.org/gocloud.dev/pubsub/gcppubsub#hdr-As ctx := context.Background() sub, err := pubsub.OpenSubscription(ctx, "gcppubsub://project/topic") if err != nil { log.Fatal(err) } defer sub.Shutdown(ctx) var sc *pbraw.SubscriberClient if sub.As(&sc) { _ = sc.CallOptions } } func ExampleSubscription_ErrorAs() { // This example is specific to the gcppubsub implementation; it demonstrates // access to the underlying Status type. // The types exposed for As by gcppubsub are documented in // https://godoc.org/gocloud.dev/pubsub/gcppubsub#hdr-As ctx := context.Background() sub, err := pubsub.OpenSubscription(ctx, "gcppubsub://project/badtopic") if err != nil { log.Fatal(err) } defer sub.Shutdown(ctx) msg, err := sub.Receive(ctx) if err != nil { var s *status.Status if sub.ErrorAs(err, &s) { _ = s.Code() } log.Fatal(err) } msg.Ack() } func ExampleTopic_As() { // This example is specific to the gcppubsub implementation; it demonstrates // access to the underlying PublisherClient type. // The types exposed for As by gcppubsub are documented in // https://godoc.org/gocloud.dev/pubsub/gcppubsub#hdr-As ctx := context.Background() topic, err := pubsub.OpenTopic(ctx, "gcppubsub://project/topic") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) var pc *pbraw.PublisherClient if topic.As(&pc) { _ = pc } } func ExampleTopic_ErrorAs() { // This example is specific to the gcppubsub implementation; it demonstrates // access to the underlying Status type. // The types exposed for As by gcppubsub are documented in // https://godoc.org/gocloud.dev/pubsub/gcppubsub#hdr-As ctx := context.Background() topic, err := pubsub.OpenTopic(ctx, "gcppubsub://project/topic") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) err = topic.Send(ctx, &pubsub.Message{Body: []byte("hello")}) if err != nil { var s *status.Status if topic.ErrorAs(err, &s) { _ = s.Code() } log.Fatal(err) } } go-cloud-0.20.0/pubsub/gcppubsub/000077500000000000000000000000001367004507500166035ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/gcppubsub/example_test.go000066400000000000000000000072331367004507500216310ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcppubsub_test import ( "context" "log" "gocloud.dev/gcp" "gocloud.dev/pubsub" "gocloud.dev/pubsub/gcppubsub" ) func ExampleOpenTopic() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Your GCP credentials. // See https://cloud.google.com/docs/authentication/production // for more info on alternatives. creds, err := gcp.DefaultCredentials(ctx) if err != nil { log.Fatal(err) } // Open a gRPC connection to the GCP Pub/Sub API. conn, cleanup, err := gcppubsub.Dial(ctx, creds.TokenSource) if err != nil { log.Fatal(err) } defer cleanup() // Construct a PublisherClient using the connection. pubClient, err := gcppubsub.PublisherClient(ctx, conn) if err != nil { log.Fatal(err) } defer pubClient.Close() // Construct a *pubsub.Topic. topic, err := gcppubsub.OpenTopicByPath(pubClient, "projects/myprojectID/topics/example-topic", nil) if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func Example_openTopicFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/gcppubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() topic, err := pubsub.OpenTopic(ctx, "gcppubsub://projects/myproject/topics/mytopic") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func ExampleOpenSubscription() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Your GCP credentials. // See https://cloud.google.com/docs/authentication/production // for more info on alternatives. creds, err := gcp.DefaultCredentials(ctx) if err != nil { log.Fatal(err) } // Open a gRPC connection to the GCP Pub/Sub API. conn, cleanup, err := gcppubsub.Dial(ctx, creds.TokenSource) if err != nil { log.Fatal(err) } defer cleanup() // Construct a SubscriberClient using the connection. subClient, err := gcppubsub.SubscriberClient(ctx, conn) if err != nil { log.Fatal(err) } defer subClient.Close() // Construct a *pubsub.Subscription. subscription, err := gcppubsub.OpenSubscriptionByPath( subClient, "projects/myprojectID/subscriptions/example-subscription", nil) if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } func Example_openSubscriptionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/gcppubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() subscription, err := pubsub.OpenSubscription(ctx, "gcppubsub://projects/my-project/subscriptions/my-subscription") if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } go-cloud-0.20.0/pubsub/gcppubsub/gcppubsub.go000066400000000000000000000400621367004507500211260ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcppubsub provides a pubsub implementation that uses GCP // PubSub. Use OpenTopic to construct a *pubsub.Topic, and/or OpenSubscription // to construct a *pubsub.Subscription. // // URLs // // For pubsub.OpenTopic and pubsub.OpenSubscription, gcppubsub registers // for the scheme "gcppubsub". // The default URL opener will creating a connection using use default // credentials from the environment, as described in // https://cloud.google.com/docs/authentication/production. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // GCP Pub/Sub emulator is supported as per https://cloud.google.com/pubsub/docs/emulator // So, when environment variable 'PUBSUB_EMULATOR_HOST' is set // driver connects to the specified emulator host by default. // // Message Delivery Semantics // // GCP Pub/Sub supports at-least-once semantics; applications must // call Message.Ack after processing a message, or it will be redelivered. // See https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // for more background. // // As // // gcppubsub exposes the following types for As: // - Topic: *raw.PublisherClient // - Subscription: *raw.SubscriberClient // - Message.BeforeSend: *pb.PubsubMessage // - Message: *pb.PubsubMessage // - Error: *google.golang.org/grpc/status.Status package gcppubsub // import "gocloud.dev/pubsub/gcppubsub" import ( "context" "fmt" "net/url" "os" "path" "regexp" "strings" "sync" "time" raw "cloud.google.com/go/pubsub/apiv1" "github.com/google/wire" "gocloud.dev/gcerrors" "gocloud.dev/gcp" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/useragent" "gocloud.dev/pubsub" "gocloud.dev/pubsub/batcher" "gocloud.dev/pubsub/driver" "google.golang.org/api/option" pb "google.golang.org/genproto/googleapis/pubsub/v1" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/oauth" "google.golang.org/grpc/status" ) var endPoint = "pubsub.googleapis.com:443" var sendBatcherOpts = &batcher.Options{ MaxBatchSize: 1000, // The PubSub service limits the number of messages in a single Publish RPC MaxHandlers: 2, } var recvBatcherOpts = &batcher.Options{ // GCP Pub/Sub returns at most 1000 messages per RPC. MaxBatchSize: 1000, MaxHandlers: 10, } var ackBatcherOpts = &batcher.Options{ // The PubSub service limits the size of Acknowledge/ModifyAckDeadline RPCs. // (E.g., "Request payload size exceeds the limit: 524288 bytes."). MaxBatchSize: 1000, MaxHandlers: 2, } func init() { o := new(lazyCredsOpener) pubsub.DefaultURLMux().RegisterTopic(Scheme, o) pubsub.DefaultURLMux().RegisterSubscription(Scheme, o) } // Set holds Wire providers for this package. var Set = wire.NewSet( Dial, PublisherClient, SubscriberClient, wire.Struct(new(SubscriptionOptions)), wire.Struct(new(TopicOptions)), wire.Struct(new(URLOpener), "Conn", "TopicOptions", "SubscriptionOptions"), ) // lazyCredsOpener obtains Application Default Credentials on the first call // to OpenTopicURL/OpenSubscriptionURL. type lazyCredsOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyCredsOpener) defaultConn(ctx context.Context) (*URLOpener, error) { o.init.Do(func() { var conn *grpc.ClientConn var err error if e := os.Getenv("PUBSUB_EMULATOR_HOST"); e != "" { // Connect to the GCP pubsub emulator by overriding the default endpoint // if the 'PUBSUB_EMULATOR_HOST' environment variable is set. // Check https://cloud.google.com/pubsub/docs/emulator for more info. endPoint = e conn, err = dialEmulator(ctx, e) if err != nil { o.err = err return } } else { creds, err := gcp.DefaultCredentials(ctx) if err != nil { o.err = err return } conn, _, err = Dial(ctx, creds.TokenSource) if err != nil { o.err = err return } } o.opener = &URLOpener{Conn: conn} }) return o.opener, o.err } func (o *lazyCredsOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { opener, err := o.defaultConn(ctx) if err != nil { return nil, fmt.Errorf("open topic %v: failed to open default connection: %v", u, err) } return opener.OpenTopicURL(ctx, u) } func (o *lazyCredsOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { opener, err := o.defaultConn(ctx) if err != nil { return nil, fmt.Errorf("open subscription %v: failed to open default connection: %v", u, err) } return opener.OpenSubscriptionURL(ctx, u) } // Scheme is the URL scheme gcppubsub registers its URLOpeners under on pubsub.DefaultMux. const Scheme = "gcppubsub" // URLOpener opens GCP Pub/Sub URLs like "gcppubsub://projects/myproject/topics/mytopic" for // topics or "gcppubsub://projects/myproject/subscriptions/mysub" for subscriptions. // // The shortened forms "gcppubsub://myproject/mytopic" for topics or // "gcppubsub://myproject/mysub" for subscriptions are also supported. // // No URL parameters are supported. type URLOpener struct { // Conn must be set to a non-nil ClientConn authenticated with // Cloud Pub/Sub scope or equivalent. Conn *grpc.ClientConn // TopicOptions specifies the options to pass to OpenTopic. TopicOptions TopicOptions // SubscriptionOptions specifies the options to pass to OpenSubscription. SubscriptionOptions SubscriptionOptions } // OpenTopicURL opens a pubsub.Topic based on u. func (o *URLOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { for param := range u.Query() { return nil, fmt.Errorf("open topic %v: invalid query parameter %q", u, param) } pc, err := PublisherClient(ctx, o.Conn) if err != nil { return nil, err } topicPath := path.Join(u.Host, u.Path) if topicPathRE.MatchString(topicPath) { return OpenTopicByPath(pc, topicPath, &o.TopicOptions) } // Shortened form? topicName := strings.TrimPrefix(u.Path, "/") return OpenTopic(pc, gcp.ProjectID(u.Host), topicName, &o.TopicOptions), nil } // OpenSubscriptionURL opens a pubsub.Subscription based on u. func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { for param := range u.Query() { return nil, fmt.Errorf("open subscription %v: invalid query parameter %q", u, param) } sc, err := SubscriberClient(ctx, o.Conn) if err != nil { return nil, err } subPath := path.Join(u.Host, u.Path) if subscriptionPathRE.MatchString(subPath) { return OpenSubscriptionByPath(sc, subPath, &o.SubscriptionOptions) } // Shortened form? subName := strings.TrimPrefix(u.Path, "/") return OpenSubscription(sc, gcp.ProjectID(u.Host), subName, &o.SubscriptionOptions), nil } type topic struct { path string client *raw.PublisherClient } // Dial opens a gRPC connection to the GCP Pub Sub API. // // The second return value is a function that can be called to clean up // the connection opened by Dial. func Dial(ctx context.Context, ts gcp.TokenSource) (*grpc.ClientConn, func(), error) { conn, err := grpc.DialContext(ctx, endPoint, grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")), grpc.WithPerRPCCredentials(oauth.TokenSource{TokenSource: ts}), useragent.GRPCDialOption("pubsub"), ) if err != nil { return nil, nil, err } return conn, func() { conn.Close() }, nil } // dialEmulator opens a gRPC connection to the GCP Pub Sub API. func dialEmulator(ctx context.Context, e string) (*grpc.ClientConn, error) { conn, err := grpc.DialContext(ctx, e, grpc.WithInsecure(), useragent.GRPCDialOption("pubsub")) if err != nil { return nil, err } return conn, nil } // PublisherClient returns a *raw.PublisherClient that can be used in OpenTopic. func PublisherClient(ctx context.Context, conn *grpc.ClientConn) (*raw.PublisherClient, error) { return raw.NewPublisherClient(ctx, option.WithGRPCConn(conn)) } // SubscriberClient returns a *raw.SubscriberClient that can be used in OpenSubscription. func SubscriberClient(ctx context.Context, conn *grpc.ClientConn) (*raw.SubscriberClient, error) { return raw.NewSubscriberClient(ctx, option.WithGRPCConn(conn)) } // TopicOptions will contain configuration for topics. type TopicOptions struct{} // OpenTopic returns a *pubsub.Topic backed by an existing GCP PubSub topic // in the given projectID. topicName is the last part of the full topic // path, e.g., "foo" from "projects//topic/foo". // See the package documentation for an example. func OpenTopic(client *raw.PublisherClient, projectID gcp.ProjectID, topicName string, opts *TopicOptions) *pubsub.Topic { topicPath := fmt.Sprintf("projects/%s/topics/%s", projectID, topicName) return pubsub.NewTopic(openTopic(client, topicPath), sendBatcherOpts) } var topicPathRE = regexp.MustCompile("^projects/.+/topics/.+$") // OpenTopicByPath returns a *pubsub.Topic backed by an existing GCP PubSub // topic. topicPath must be of the form "projects//topic/". // See the package documentation for an example. func OpenTopicByPath(client *raw.PublisherClient, topicPath string, opts *TopicOptions) (*pubsub.Topic, error) { if !topicPathRE.MatchString(topicPath) { return nil, fmt.Errorf("invalid topicPath %q; must match %v", topicPath, topicPathRE) } return pubsub.NewTopic(openTopic(client, topicPath), sendBatcherOpts), nil } // openTopic returns the driver for OpenTopic. This function exists so the test // harness can get the driver interface implementation if it needs to. func openTopic(client *raw.PublisherClient, topicPath string) driver.Topic { return &topic{topicPath, client} } // SendBatch implements driver.Topic.SendBatch. func (t *topic) SendBatch(ctx context.Context, dms []*driver.Message) error { var ms []*pb.PubsubMessage for _, dm := range dms { psm := &pb.PubsubMessage{Data: dm.Body, Attributes: dm.Metadata} if dm.BeforeSend != nil { asFunc := func(i interface{}) bool { if p, ok := i.(**pb.PubsubMessage); ok { *p = psm return true } return false } if err := dm.BeforeSend(asFunc); err != nil { return err } } ms = append(ms, psm) } req := &pb.PublishRequest{Topic: t.path, Messages: ms} if _, err := t.client.Publish(ctx, req); err != nil { return err } return nil } // IsRetryable implements driver.Topic.IsRetryable. func (t *topic) IsRetryable(error) bool { // The client handles retries. return false } // As implements driver.Topic.As. func (t *topic) As(i interface{}) bool { c, ok := i.(**raw.PublisherClient) if !ok { return false } *c = t.client return true } // ErrorAs implements driver.Topic.ErrorAs func (*topic) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } func errorAs(err error, i interface{}) bool { s, ok := status.FromError(err) if !ok { return false } p, ok := i.(**status.Status) if !ok { return false } *p = s return true } func (*topic) ErrorCode(err error) gcerrors.ErrorCode { return gcerr.GRPCCode(err) } // Close implements driver.Topic.Close. func (*topic) Close() error { return nil } type subscription struct { client *raw.SubscriberClient path string } // SubscriptionOptions will contain configuration for subscriptions. type SubscriptionOptions struct{} // OpenSubscription returns a *pubsub.Subscription backed by an existing GCP // PubSub subscription subscriptionName in the given projectID. See the package // documentation for an example. func OpenSubscription(client *raw.SubscriberClient, projectID gcp.ProjectID, subscriptionName string, opts *SubscriptionOptions) *pubsub.Subscription { path := fmt.Sprintf("projects/%s/subscriptions/%s", projectID, subscriptionName) return pubsub.NewSubscription(openSubscription(client, path), nil, ackBatcherOpts) } var subscriptionPathRE = regexp.MustCompile("^projects/.+/subscriptions/.+$") // OpenSubscriptionByPath returns a *pubsub.Subscription backed by an existing // GCP PubSub subscription. subscriptionPath must be of the form // "projects//subscriptions/". // See the package documentation for an example. func OpenSubscriptionByPath(client *raw.SubscriberClient, subscriptionPath string, opts *SubscriptionOptions) (*pubsub.Subscription, error) { if !subscriptionPathRE.MatchString(subscriptionPath) { return nil, fmt.Errorf("invalid subscriptionPath %q; must match %v", subscriptionPath, subscriptionPathRE) } return pubsub.NewSubscription(openSubscription(client, subscriptionPath), nil, ackBatcherOpts), nil } // openSubscription returns a driver.Subscription. func openSubscription(client *raw.SubscriberClient, subscriptionPath string) driver.Subscription { return &subscription{client, subscriptionPath} } // ReceiveBatch implements driver.Subscription.ReceiveBatch. func (s *subscription) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { // Whether to ask Pull to return immediately, or wait for some messages to // arrive. If we're making multiple RPCs, we don't want any of them to wait; // we might have gotten messages from one of the other RPCs. // maxMessages will only be high enough to set this to true in high-throughput // situations, so the likelihood of getting 0 messages is small anyway. returnImmediately := maxMessages == recvBatcherOpts.MaxBatchSize req := &pb.PullRequest{ Subscription: s.path, ReturnImmediately: returnImmediately, MaxMessages: int32(maxMessages), } resp, err := s.client.Pull(ctx, req) if err != nil { return nil, err } if len(resp.ReceivedMessages) == 0 { // If we did happen to get 0 messages, and we didn't ask the server to wait // for messages, sleep a bit to avoid spinning. if returnImmediately { time.Sleep(100 * time.Millisecond) } return nil, nil } ms := make([]*driver.Message, 0, len(resp.ReceivedMessages)) for _, rm := range resp.ReceivedMessages { rmm := rm.Message m := &driver.Message{ Body: rmm.Data, Metadata: rmm.Attributes, AckID: rm.AckId, AsFunc: messageAsFunc(rmm), } ms = append(ms, m) } return ms, nil } func messageAsFunc(pm *pb.PubsubMessage) func(interface{}) bool { return func(i interface{}) bool { p, ok := i.(**pb.PubsubMessage) if !ok { return false } *p = pm return true } } // SendAcks implements driver.Subscription.SendAcks. func (s *subscription) SendAcks(ctx context.Context, ids []driver.AckID) error { ids2 := make([]string, 0, len(ids)) for _, id := range ids { ids2 = append(ids2, id.(string)) } return s.client.Acknowledge(ctx, &pb.AcknowledgeRequest{Subscription: s.path, AckIds: ids2}) } // CanNack implements driver.CanNack. func (s *subscription) CanNack() bool { return true } // SendNacks implements driver.Subscription.SendNacks. func (s *subscription) SendNacks(ctx context.Context, ids []driver.AckID) error { ids2 := make([]string, 0, len(ids)) for _, id := range ids { ids2 = append(ids2, id.(string)) } return s.client.ModifyAckDeadline(ctx, &pb.ModifyAckDeadlineRequest{ Subscription: s.path, AckIds: ids2, AckDeadlineSeconds: 0, }) } // IsRetryable implements driver.Subscription.IsRetryable. func (s *subscription) IsRetryable(error) bool { // The client handles retries. return false } // As implements driver.Subscription.As. func (s *subscription) As(i interface{}) bool { c, ok := i.(**raw.SubscriberClient) if !ok { return false } *c = s.client return true } // ErrorAs implements driver.Subscription.ErrorAs func (*subscription) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } func (*subscription) ErrorCode(err error) gcerrors.ErrorCode { return gcerr.GRPCCode(err) } // Close implements driver.Subscription.Close. func (*subscription) Close() error { return nil } go-cloud-0.20.0/pubsub/gcppubsub/gcppubsub_test.go000066400000000000000000000272771367004507500222020ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcppubsub import ( "context" "fmt" "path" "strings" "sync/atomic" "testing" raw "cloud.google.com/go/pubsub/apiv1" "gocloud.dev/gcp" "gocloud.dev/internal/testing/setup" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" "gocloud.dev/pubsub/drivertest" pubsubpb "google.golang.org/genproto/googleapis/pubsub/v1" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) // projectID is the project ID that was used during the last test run using // --record. const projectID = "go-cloud-test-216917" type harness struct { closer func() pubClient *raw.PublisherClient subClient *raw.SubscriberClient numTopics uint32 // atomic numSubs uint32 // atomic } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { conn, done := setup.NewGCPgRPCConn(ctx, t, endPoint, "pubsub") pubClient, err := PublisherClient(ctx, conn) if err != nil { return nil, fmt.Errorf("making publisher client: %v", err) } subClient, err := SubscriberClient(ctx, conn) if err != nil { return nil, fmt.Errorf("making subscription client: %v", err) } return &harness{closer: done, pubClient: pubClient, subClient: subClient, numTopics: 0, numSubs: 0}, nil } func (h *harness) CreateTopic(ctx context.Context, testName string) (dt driver.Topic, cleanup func(), err error) { // We may encounter topics that were created by a previous test run and were // not properly cleaned up. In such a case delete the existing topic and create // a new topic with a higher topic number (to avoid cool-off issues between // deletion and re-creation). for { topicName := fmt.Sprintf("%s-topic-%d", sanitize(testName), atomic.AddUint32(&h.numTopics, 1)) topicPath := fmt.Sprintf("projects/%s/topics/%s", projectID, topicName) dt, cleanup, err := createTopic(ctx, h.pubClient, topicName, topicPath) if err != nil && status.Code(err) == codes.AlreadyExists { // Delete the topic and retry. h.pubClient.DeleteTopic(ctx, &pubsubpb.DeleteTopicRequest{Topic: topicPath}) continue } return dt, cleanup, err } } func createTopic(ctx context.Context, pubClient *raw.PublisherClient, topicName, topicPath string) (dt driver.Topic, cleanup func(), err error) { _, err = pubClient.CreateTopic(ctx, &pubsubpb.Topic{Name: topicPath}) if err != nil { return nil, nil, err } dt = openTopic(pubClient, path.Join("projects", projectID, "topics", topicName)) cleanup = func() { pubClient.DeleteTopic(ctx, &pubsubpb.DeleteTopicRequest{Topic: topicPath}) } return dt, cleanup, nil } func (h *harness) MakeNonexistentTopic(ctx context.Context) (driver.Topic, error) { return openTopic(h.pubClient, path.Join("projects", projectID, "topics", "nonexistent-topic")), nil } func (h *harness) CreateSubscription(ctx context.Context, dt driver.Topic, testName string) (ds driver.Subscription, cleanup func(), err error) { // We may encounter subscriptions that were created by a previous test run // and were not properly cleaned up. In such a case delete the existing // subscription and create a new subscription with a higher subscription // number (to avoid cool-off issues between deletion and re-creation). for { subName := fmt.Sprintf("%s-subscription-%d", sanitize(testName), atomic.AddUint32(&h.numSubs, 1)) subPath := fmt.Sprintf("projects/%s/subscriptions/%s", projectID, subName) ds, cleanup, err := createSubscription(ctx, h.subClient, dt, subName, subPath) if err != nil && status.Code(err) == codes.AlreadyExists { // Delete the subscription and retry. h.subClient.DeleteSubscription(ctx, &pubsubpb.DeleteSubscriptionRequest{Subscription: subPath}) continue } return ds, cleanup, err } } func createSubscription(ctx context.Context, subClient *raw.SubscriberClient, dt driver.Topic, subName, subPath string) (ds driver.Subscription, cleanup func(), err error) { t := dt.(*topic) _, err = subClient.CreateSubscription(ctx, &pubsubpb.Subscription{ Name: subPath, Topic: t.path, }) if err != nil { return nil, nil, err } ds = openSubscription(subClient, path.Join("projects", projectID, "subscriptions", subName)) cleanup = func() { subClient.DeleteSubscription(ctx, &pubsubpb.DeleteSubscriptionRequest{Subscription: subPath}) } return ds, cleanup, nil } func (h *harness) MakeNonexistentSubscription(ctx context.Context) (driver.Subscription, error) { return openSubscription(h.subClient, path.Join("projects", projectID, "subscriptions", "nonexistent-subscription")), nil } func (h *harness) Close() { h.pubClient.Close() h.subClient.Close() h.closer() } func (h *harness) MaxBatchSizes() (int, int) { return sendBatcherOpts.MaxBatchSize, ackBatcherOpts.MaxBatchSize } func (*harness) SupportsMultipleSubscriptions() bool { return true } func TestConformance(t *testing.T) { asTests := []drivertest.AsTest{gcpAsTest{}} drivertest.RunConformanceTests(t, newHarness, asTests) } func BenchmarkGcpPubSub(b *testing.B) { ctx := context.Background() creds, err := gcp.DefaultCredentials(ctx) if err != nil { b.Fatal(err) } // Connect. conn, cleanup, err := Dial(ctx, gcp.CredentialsTokenSource(creds)) if err != nil { b.Fatal(err) } defer cleanup() // Make topic. pc, err := PublisherClient(ctx, conn) if err != nil { b.Fatal(err) } topicName := fmt.Sprintf("%s-topic", b.Name()) topicPath := fmt.Sprintf("projects/%s/topics/%s", projectID, topicName) dt, cleanup1, err := createTopic(ctx, pc, topicName, topicPath) if err != nil { b.Fatal(err) } defer cleanup1() topic := pubsub.NewTopic(dt, nil) defer topic.Shutdown(ctx) // Make subscription. sc, err := SubscriberClient(ctx, conn) if err != nil { b.Fatal(err) } subName := fmt.Sprintf("%s-subscription", b.Name()) subPath := fmt.Sprintf("projects/%s/subscriptions/%s", projectID, subName) ds, cleanup2, err := createSubscription(ctx, sc, dt, subName, subPath) if err != nil { b.Fatal(err) } defer cleanup2() sub := pubsub.NewSubscription(ds, recvBatcherOpts, ackBatcherOpts) defer sub.Shutdown(ctx) drivertest.RunBenchmarks(b, topic, sub) } type gcpAsTest struct{} func (gcpAsTest) Name() string { return "gcp test" } func (gcpAsTest) TopicCheck(topic *pubsub.Topic) error { var c2 raw.PublisherClient if topic.As(&c2) { return fmt.Errorf("cast succeeded for %T, want failure", &c2) } var c3 *raw.PublisherClient if !topic.As(&c3) { return fmt.Errorf("cast failed for %T", &c3) } return nil } func (gcpAsTest) SubscriptionCheck(sub *pubsub.Subscription) error { var c2 raw.SubscriberClient if sub.As(&c2) { return fmt.Errorf("cast succeeded for %T, want failure", &c2) } var c3 *raw.SubscriberClient if !sub.As(&c3) { return fmt.Errorf("cast failed for %T", &c3) } return nil } func (gcpAsTest) TopicErrorCheck(t *pubsub.Topic, err error) error { var s *status.Status if !t.ErrorAs(err, &s) { return fmt.Errorf("failed to convert %v (%T) to a gRPC Status", err, err) } if s.Code() != codes.NotFound { return fmt.Errorf("got code %s, want NotFound", s.Code()) } return nil } func (gcpAsTest) SubscriptionErrorCheck(sub *pubsub.Subscription, err error) error { var s *status.Status if !sub.ErrorAs(err, &s) { return fmt.Errorf("failed to convert %v (%T) to a gRPC Status", err, err) } if s.Code() != codes.NotFound { return fmt.Errorf("got code %s, want NotFound", s.Code()) } return nil } func (gcpAsTest) MessageCheck(m *pubsub.Message) error { var pm pubsubpb.PubsubMessage if m.As(&pm) { return fmt.Errorf("cast succeeded for %T, want failure", &pm) } var ppm *pubsubpb.PubsubMessage if !m.As(&ppm) { return fmt.Errorf("cast failed for %T", &ppm) } return nil } func (gcpAsTest) BeforeSend(as func(interface{}) bool) error { var ppm *pubsubpb.PubsubMessage if !as(&ppm) { return fmt.Errorf("cast failed for %T", &ppm) } return nil } func sanitize(testName string) string { return strings.Replace(testName, "/", "_", -1) } func TestOpenTopic(t *testing.T) { ctx := context.Background() creds, err := setup.FakeGCPCredentials(ctx) if err != nil { t.Fatal(err) } projID, err := gcp.DefaultProjectID(creds) if err != nil { t.Fatal(err) } conn, cleanup, err := Dial(ctx, gcp.CredentialsTokenSource(creds)) if err != nil { t.Fatal(err) } defer cleanup() pc, err := PublisherClient(ctx, conn) if err != nil { t.Fatal(err) } topic := OpenTopic(pc, projID, "my-topic", nil) defer topic.Shutdown(ctx) err = topic.Send(ctx, &pubsub.Message{Body: []byte("hello world")}) if err == nil { t.Error("got nil, want error") } // Repeat with OpenTopicByPath. topic, err = OpenTopicByPath(pc, path.Join("projects", string(projID), "topics", "my-topic"), nil) if err != nil { t.Fatal(err) } defer topic.Shutdown(ctx) err = topic.Send(ctx, &pubsub.Message{Body: []byte("hello world")}) if err == nil { t.Error("got nil, want error") } // Try an invalid path. _, err = OpenTopicByPath(pc, "my-topic", nil) if err == nil { t.Error("got nil, want error") } } func TestOpenSubscription(t *testing.T) { ctx := context.Background() creds, err := setup.FakeGCPCredentials(ctx) if err != nil { t.Fatal(err) } projID, err := gcp.DefaultProjectID(creds) if err != nil { t.Fatal(err) } conn, cleanup, err := Dial(ctx, gcp.CredentialsTokenSource(creds)) if err != nil { t.Fatal(err) } defer cleanup() sc, err := SubscriberClient(ctx, conn) if err != nil { t.Fatal(err) } sub := OpenSubscription(sc, projID, "my-subscription", nil) defer sub.Shutdown(ctx) _, err = sub.Receive(ctx) if err == nil { t.Error("got nil, want error") } // Repeat with OpenSubscriptionByPath. sub, err = OpenSubscriptionByPath(sc, path.Join("projects", string(projID), "subscriptions", "my-subscription"), nil) if err != nil { t.Fatal(err) } defer sub.Shutdown(ctx) _, err = sub.Receive(ctx) if err == nil { t.Error("got nil, want error") } // Try an invalid path. _, err = OpenSubscriptionByPath(sc, "my-subscription", nil) if err == nil { t.Error("got nil, want error") } } func TestOpenTopicFromURL(t *testing.T) { cleanup := setup.FakeGCPDefaultCredentials(t) defer cleanup() tests := []struct { URL string WantErr bool }{ // OK, short form. {"gcppubsub://myproject/mytopic", false}, // OK, long form. {"gcppubsub://projects/myproject/topic/mytopic", false}, // Invalid parameter. {"gcppubsub://myproject/mytopic?param=value", true}, } ctx := context.Background() for _, test := range tests { topic, err := pubsub.OpenTopic(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if topic != nil { topic.Shutdown(ctx) } } } func TestOpenSubscriptionFromURL(t *testing.T) { cleanup := setup.FakeGCPDefaultCredentials(t) defer cleanup() tests := []struct { URL string WantErr bool }{ // OK, short form. {"gcppubsub://myproject/mysub", false}, // OK, long form. {"gcppubsub://projects/myproject/subscriptions/mysub", false}, // Invalid parameter. {"gcppubsub://myproject/mysub?param=value", true}, } ctx := context.Background() for _, test := range tests { sub, err := pubsub.OpenSubscription(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if sub != nil { sub.Shutdown(ctx) } } } go-cloud-0.20.0/pubsub/gcppubsub/testdata/000077500000000000000000000000001367004507500204145ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/000077500000000000000000000000001367004507500235065ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestAs/000077500000000000000000000000001367004507500247115ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestAs/gcp_test.replay000066400000000000000000000071371367004507500277470ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopic| *type.googleapis.com/google.pubsub.v1.TopicN Lprojects/go-cloud-test-216917/topics/TestConformance_TestAs_gcp_test-topic-1h *type.googleapis.com/google.pubsub.v1.Topic Lprojects/go-cloud-test-216917/topics/TestConformance_TestAs_gcp_test-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_gcp_test-subscription-1Lprojects/go-cloud-test-216917/topics/TestConformance_TestAs_gcp_test-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_gcp_test-subscription-1Lprojects/go-cloud-test-216917/topics/TestConformance_TestAs_gcp_test-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequestS Lprojects/go-cloud-test-216917/topics/TestConformance_TestAs_gcp_test-topic-1 xPJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261637884573233(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest^ Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_gcp_test-subscription-1 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFGwtTE1FcdgNDEGgzXHUHUQ0YdX9ocjlTEgMKTFl-VVsJPGh-fHQFVwwfcXppfW5fFAIARlBWi5yLze2C8kcdajX-mLGnQEq26Jo-Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypY# x1261637884573233" (~(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_gcp_test-subscription-1EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFGwtTE1FcdgNDEGgzXHUHUQ0YdX9ocjlTEgMKTFl-VVsJPGh-fHQFVwwfcXppfW5fFAIARlBWi5yLze2C8kcdajX-mLGnQEq26Jo-Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypY#/google.pubsub.v1.Publisher/Publishq 3type.googleapis.com/google.pubsub.v1.PublishRequest: 6projects/go-cloud-test-216917/topics/nonexistent-topic1+ )type.googleapis.com/google.protobuf.Empty(  %type.googleapis.com/google.rpc.Status0Resource not found (resource=nonexistent-topic). (type.googleapis.com/google.rpc.DebugInfovtCould not find in SpannerConfigStore: TopicByProjectIdAndName(project_id=892942638129, topic_name=nonexistent-topic) ( !/google.pubsub.v1.Subscriber/Pull| 0type.googleapis.com/google.pubsub.v1.PullRequestH Dprojects/go-cloud-test-216917/subscriptions/nonexistent-subscription* %type.googleapis.com/google.rpc.Status7Resource not found (resource=nonexistent-subscription). (type.googleapis.com/google.rpc.DebugInfoCould not find in SpannerConfigStore: SubscriptionByProjectIdAndName(project_id=892942638129, subscription_name=nonexistent-subscription) ( //google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequest\ Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_gcp_test-subscription-11+ )type.googleapis.com/google.protobuf.Empty('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestN Lprojects/go-cloud-test-216917/topics/TestConformance_TestAs_gcp_test-topic-11+ )type.googleapis.com/google.protobuf.Empty(verify_As_returns_false_when_passed_nil.replay000066400000000000000000000076651367004507500361730ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestAsRPCReplay'/google.pubsub.v1.Publisher/CreateTopic *type.googleapis.com/google.pubsub.v1.Topicm kprojects/go-cloud-test-216917/topics/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-topic-1 *type.googleapis.com/google.pubsub.v1.Topic kprojects/go-cloud-test-216917/topics/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(T//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription yprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-subscription-1kprojects/go-cloud-test-216917/topics/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-topic-18 1type.googleapis.com/google.pubsub.v1.Subscription yprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-subscription-1kprojects/go-cloud-test-216917/topics/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequestr kprojects/go-cloud-test-216917/topics/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-topic-1 xPJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623154123953(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest} yprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-subscription-1 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEG4zXHUHUQ0YdX9ocjlTEVdQF1l-VVsJPGh-fHQFVwwfcH5gcG5bEQILQFBW6oeP2u-C8kcdajX3mLGnQEq34oNqZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY# x1261623154123953" ((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest yprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-subscription-1EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEG4zXHUHUQ0YdX9ocjlTEVdQF1l-VVsJPGh-fHQFVwwfcH5gcG5bEQILQFBW6oeP2u-C8kcdajX3mLGnQEq34oNqZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY#/google.pubsub.v1.Publisher/Publishq 3type.googleapis.com/google.pubsub.v1.PublishRequest: 6projects/go-cloud-test-216917/topics/nonexistent-topic1+ )type.googleapis.com/google.protobuf.Empty(  %type.googleapis.com/google.rpc.Status0Resource not found (resource=nonexistent-topic). (type.googleapis.com/google.rpc.DebugInfovtCould not find in SpannerConfigStore: TopicByProjectIdAndName(project_id=892942638129, topic_name=nonexistent-topic) ( !/google.pubsub.v1.Subscriber/Pull| 0type.googleapis.com/google.pubsub.v1.PullRequestH Dprojects/go-cloud-test-216917/subscriptions/nonexistent-subscription* %type.googleapis.com/google.rpc.Status7Resource not found (resource=nonexistent-subscription). (type.googleapis.com/google.rpc.DebugInfoCould not find in SpannerConfigStore: SubscriptionByProjectIdAndName(project_id=892942638129, subscription_name=nonexistent-subscription) ( //google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequest{ yprojects/go-cloud-test-216917/subscriptions/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-subscription-11+ )type.googleapis.com/google.protobuf.Empty('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestm kprojects/go-cloud-test-216917/topics/TestConformance_TestAs_verify_As_returns_false_when_passed_nil-topic-11+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestBatching.replay000066400000000000000000000253651367004507500273160ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopicy *type.googleapis.com/google.pubsub.v1.TopicK Iprojects/go-cloud-test-216917/topics/TestConformance_TestBatching-topic-1e *type.googleapis.com/google.pubsub.v1.Topic Iprojects/go-cloud-test-216917/topics/TestConformance_TestBatching-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1Iprojects/go-cloud-test-216917/topics/TestConformance_TestBatching-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1Iprojects/go-cloud-test-216917/topics/TestConformance_TestBatching-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest Iprojects/go-cloud-test-216917/topics/TestConformance_TestBatching-topic-1 hello world hello world hello world hello world hello world hello world 4type.googleapis.com/google.pubsub.v1.PublishResponsel 1261623204364303 1261623204364304 1261623204364305 1261623204364306 1261623204364307 1261623204364308(#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest Iprojects/go-cloud-test-216917/topics/TestConformance_TestBatching-topic-1 hello world hello world hello world hello world hello world hello world 4type.googleapis.com/google.pubsub.v1.PublishResponsel 1261623301031018 1261623301031019 1261623301031020 1261623301031021 1261623301031022 1261623301031023(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VWwk8aH58dAVXDB9wfmN1blkVBQFFUFae8JmF64LyRx1tNZyYsadASqL2htJ0Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ, hello world1261623204364303" Åf( !/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VWgk8aH58dAVXDB9wfmN1blkVBQFFV1ae8JmF64LyRx1tNZ-YsadASoHYzsV0Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ, hello world1261623204364304" Åf( !/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VWQk8aH58dAVXDB9wfmN1blkVBQFFVlae8JmF64LyRx1tNZ6YsadASsav_713Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ, hello world1261623204364305" Åf( !/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VWAk8aH58dAVXDB9wfmN1blkVBQFFVVae8JmF64LyRx1tNZGYsadASrbdh5p3Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ, hello world1261623204364306" Åf(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VXwk8aH58dAVXDB9wfmN1blkVBQFFVFae8JmF64LyRx1tNZCYsadASsSo1vJ3Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ, hello world1261623204364307" Åf(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VXgk8aH58dAVXDB9wfmN1blkVBQFFW1ae8JmF64LyRx1tNZOYsadASoyC8u53Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ, hello world1261623204364308" Åf((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VWwk8aH58dAVXDB9wfmN1blkVBQFFUFae8JmF64LyRx1tNZyYsadASqL2htJ0Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VWgk8aH58dAVXDB9wfmN1blkVBQFFV1ae8JmF64LyRx1tNZ-YsadASoHYzsV0Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VWQk8aH58dAVXDB9wfmN1blkVBQFFVlae8JmF64LyRx1tNZ6YsadASsav_713Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VWAk8aH58dAVXDB9wfmN1blkVBQFFVVae8JmF64LyRx1tNZGYsadASrbdh5p3Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VXwk8aH58dAVXDB9wfmN1blkVBQFFVFae8JmF64LyRx1tNZCYsadASsSo1vJ3Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX5VXgk8aH58dAVXDB9wfmN1blkVBQFFW1ae8JmF64LyRx1tNZOYsadASoyC8u53Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-11+ )type.googleapis.com/google.protobuf.Empty(% 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFQtTE1FcdgNDEGAzXHUHUQ0YdX9ocjlSG1cATFl_VVsJPGh-fHQFVwwfcH5idWtaEAACRFtWnvCZheuC8kcdajWVmLGnQErCsqphZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY, hello world1261623301031018" }(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1% 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFQtTE1FcdgNDEGAzXHUHUQ0YdX9ocjlSG1cATFl_VVoJPGh-fHQFVwwfcH5idWtaEAACRFpWnvCZheuC8kcdajWUmLGnQEqyi61ZZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY, hello world1261623301031019" }(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1% 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFQtTE1FcdgNDEGAzXHUHUQ0YdX9ocjlSG1cATFl_VVkJPGh-fHQFVwwfcH5idWtaEAACR1NWnvCZheuC8kcdajWXmLGnQEqbsbtHZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY, hello world1261623301031020" }(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1% 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFQtTE1FcdgNDEGAzXHUHUQ0YdX9ocjlSG1cATFl_VVgJPGh-fHQFVwwfcH5idWtaEAACR1JWnvCZheuC8kcdajWWmLGnQEqqtdJMZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY, hello world1261623301031021" }(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX9VXwk8aH58dAVXDB9wfmJ1a1oQAAJHUVae8JmF64LyRx1tNemYsadASsWcpLl0Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ, hello world1261623301031022" }(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX9VXgk8aH58dAVXDB9wfmJ1a1oQAAJHUFae8JmF64LyRx1tNeiYsadASve_oZV0Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ, hello world1261623301031023" }(!(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-1EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFQtTE1FcdgNDEGAzXHUHUQ0YdX9ocjlSG1cATFl_VVsJPGh-fHQFVwwfcH5idWtaEAACRFtWnvCZheuC8kcdajWVmLGnQErCsqphZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFQtTE1FcdgNDEGAzXHUHUQ0YdX9ocjlSG1cATFl_VVoJPGh-fHQFVwwfcH5idWtaEAACRFpWnvCZheuC8kcdajWUmLGnQEqyi61ZZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFQtTE1FcdgNDEGAzXHUHUQ0YdX9ocjlSG1cATFl_VVkJPGh-fHQFVwwfcH5idWtaEAACR1NWnvCZheuC8kcdajWXmLGnQEqbsbtHZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFQtTE1FcdgNDEGAzXHUHUQ0YdX9ocjlSG1cATFl_VVgJPGh-fHQFVwwfcH5idWtaEAACR1JWnvCZheuC8kcdajWWmLGnQEqqtdJMZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX9VXwk8aH58dAVXDB9wfmJ1a1oQAAJHUVae8JmF64LyRx1tNemYsadASsWcpLl0Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQTgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUVC1MTUVx2A0MQYDNcdQdRDRh1f2hyOVIbVwBMWX9VXgk8aH58dAVXDB9wfmJ1a1oQAAJHUFae8JmF64LyRx1tNeiYsadASve_oZV0Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ1+ )type.googleapis.com/google.protobuf.Empty(#//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequestY Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestBatching-subscription-11+ )type.googleapis.com/google.protobuf.Empty(%'/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestK Iprojects/go-cloud-test-216917/topics/TestConformance_TestBatching-topic-11+ )type.googleapis.com/google.protobuf.Empty('go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestCancelSendReceive.replay000066400000000000000000000031541367004507500310710ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopic *type.googleapis.com/google.pubsub.v1.TopicT Rprojects/go-cloud-test-216917/topics/TestConformance_TestCancelSendReceive-topic-1n *type.googleapis.com/google.pubsub.v1.Topic Rprojects/go-cloud-test-216917/topics/TestConformance_TestCancelSendReceive-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4("//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription `projects/go-cloud-test-216917/subscriptions/TestConformance_TestCancelSendReceive-subscription-1Rprojects/go-cloud-test-216917/topics/TestConformance_TestCancelSendReceive-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription `projects/go-cloud-test-216917/subscriptions/TestConformance_TestCancelSendReceive-subscription-1Rprojects/go-cloud-test-216917/topics/TestConformance_TestCancelSendReceive-topic-1"( B$Z (//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequestb `projects/go-cloud-test-216917/subscriptions/TestConformance_TestCancelSendReceive-subscription-11+ )type.googleapis.com/google.protobuf.Empty('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestT Rprojects/go-cloud-test-216917/topics/TestConformance_TestCancelSendReceive-topic-11+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestDoubleAck.replay000066400000000000000000000152451367004507500274240ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopicz *type.googleapis.com/google.pubsub.v1.TopicL Jprojects/go-cloud-test-216917/topics/TestConformance_TestDoubleAck-topic-1f *type.googleapis.com/google.pubsub.v1.Topic Jprojects/go-cloud-test-216917/topics/TestConformance_TestDoubleAck-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1Jprojects/go-cloud-test-216917/topics/TestConformance_TestDoubleAck-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1Jprojects/go-cloud-test-216917/topics/TestConformance_TestDoubleAck-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequestQ Jprojects/go-cloud-test-216917/topics/TestConformance_TestDoubleAck-topic-1 0PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261641711564921(#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequestQ Jprojects/go-cloud-test-216917/topics/TestConformance_TestDoubleAck-topic-1 1PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623204510883(#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequestQ Jprojects/go-cloud-test-216917/topics/TestConformance_TestDoubleAck-topic-1 2PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261621543798554( !/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest\ Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1 1type.googleapis.com/google.pubsub.v1.PullResponse  BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1XzN1B1ENGXN6Y3xtCRtVBExVdF9RGx9ZXH5VBlMLGHR5YHJrWxYHBkxRf3fkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4# 01261641711564921"   BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1WzN1B1ENGXN6Y3xtCRtVBUFVdF9RGx9ZXH5VBlMLGHR_YndqXhYAAk1bfXfkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4# 11261623204510883" ğ  BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1WzN1B1ENGXN6Y3xtCRtVBUFVdF5RGx9ZXH5VBlMLGHR_YHBuWRQICkBWenfkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4# 21261621543798554" ( 9(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1XzN1B1ENGXN6Y3xtCRtVBExVdF9RGx9ZXH5VBlMLGHR5YHJrWxYHBkxRf3fkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1WzN1B1ENGXN6Y3xtCRtVBUFVdF9RGx9ZXH5VBlMLGHR_YndqXhYAAk1bfXfkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU41+ )type.googleapis.com/google.protobuf.Empty( 9(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1XzN1B1ENGXN6Y3xtCRtVBExVdF9RGx9ZXH5VBlMLGHR5YHJrWxYHBkxRf3fkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1WzN1B1ENGXN6Y3xtCRtVBUFVdF9RGx9ZXH5VBlMLGHR_YndqXhYAAk1bfXfkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU41+ )type.googleapis.com/google.protobuf.Empty(./google.pubsub.v1.Subscriber/ModifyAckDeadline =type.googleapis.com/google.pubsub.v1.ModifyAckDeadlineRequest Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1"BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1XzN1B1ENGXN6Y3xtCRtVBExVdF9RGx9ZXH5VBlMLGHR5YHJrWxYHBkxRf3fkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4"BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1WzN1B1ENGXN6Y3xtCRtVBUFVdF9RGx9ZXH5VBlMLGHR_YndqXhYAAk1bfXfkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4"BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1WzN1B1ENGXN6Y3xtCRtVBUFVdF5RGx9ZXH5VBlMLGHR_YHBuWRQICkBWenfkt9vS0ILbNUsxIYWXrbNfeoDy2t5gZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU41+ )type.googleapis.com/google.protobuf.Empty(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest\ Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1 1type.googleapis.com/google.pubsub.v1.PullResponse  BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1XzN1B1ENGXN6Y3xtCRtVBExVdF9RGx9ZXH5VBlMLGHR5YHJrWxYHBkxRf3fkt9vS0ILbNUsxIYuXrbNfetPPjvhiZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4# 01261641711564921" (!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest\ Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1 1type.googleapis.com/google.pubsub.v1.PullResponse  BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1WzN1B1ENGXN6Y3xtCRtVBUFVdF9RGx9ZXH5VBlMLGHR_YndqXhYAAk1bfXfkt9vS0ILbNUsxIYiXrbNfeq24pdNiZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4# 11261623204510883" ğ(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest\ Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-1 1type.googleapis.com/google.pubsub.v1.PullResponse  BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRIBCBQFfH1yQ1V1WzN1B1ENGXN6Y3xtCRtVBUFVdF5RGx9ZXH5VBlMLGHR_YHBuWRQICkBWenfkt9vS0ILbNUsxIYmXrbNfesu65qNiZhs9XxJLLD5-LTNFQV5AEkwmBkRJUytDCypYEU4# 21261621543798554" (//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequestZ Xprojects/go-cloud-test-216917/subscriptions/TestConformance_TestDoubleAck-subscription-11+ )type.googleapis.com/google.protobuf.Empty('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestL Jprojects/go-cloud-test-216917/topics/TestConformance_TestDoubleAck-topic-11+ )type.googleapis.com/google.protobuf.Empty(TestErrorOnReceiveFromClosedSubscription.replay000066400000000000000000000034041367004507500347620ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformanceRPCReplay'/google.pubsub.v1.Publisher/CreateTopic *type.googleapis.com/google.pubsub.v1.Topicg eprojects/go-cloud-test-216917/topics/TestConformance_TestErrorOnReceiveFromClosedSubscription-topic-1 *type.googleapis.com/google.pubsub.v1.Topic eprojects/go-cloud-test-216917/topics/TestConformance_TestErrorOnReceiveFromClosedSubscription-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(H//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestErrorOnReceiveFromClosedSubscription-subscription-1eprojects/go-cloud-test-216917/topics/TestConformance_TestErrorOnReceiveFromClosedSubscription-topic-1, 1type.googleapis.com/google.pubsub.v1.Subscription sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestErrorOnReceiveFromClosedSubscription-subscription-1eprojects/go-cloud-test-216917/topics/TestConformance_TestErrorOnReceiveFromClosedSubscription-topic-1"( B$Z (//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequestu sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestErrorOnReceiveFromClosedSubscription-subscription-11+ )type.googleapis.com/google.protobuf.Empty('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestg eprojects/go-cloud-test-216917/topics/TestConformance_TestErrorOnReceiveFromClosedSubscription-topic-11+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestErrorOnSendToClosedTopic.replay000066400000000000000000000014761367004507500324300ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopic *type.googleapis.com/google.pubsub.v1.Topic[ Yprojects/go-cloud-test-216917/topics/TestConformance_TestErrorOnSendToClosedTopic-topic-1u *type.googleapis.com/google.pubsub.v1.Topic Yprojects/go-cloud-test-216917/topics/TestConformance_TestErrorOnSendToClosedTopic-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequest[ Yprojects/go-cloud-test-216917/topics/TestConformance_TestErrorOnSendToClosedTopic-topic-11+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestMetadata.replay000066400000000000000000000116341367004507500273110ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopicy *type.googleapis.com/google.pubsub.v1.TopicK Iprojects/go-cloud-test-216917/topics/TestConformance_TestMetadata-topic-1e *type.googleapis.com/google.pubsub.v1.Topic Iprojects/go-cloud-test-216917/topics/TestConformance_TestMetadata-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestMetadata-subscription-1Iprojects/go-cloud-test-216917/topics/TestConformance_TestMetadata-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestMetadata-subscription-1Iprojects/go-cloud-test-216917/topics/TestConformance_TestMetadata-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest Iprojects/go-cloud-test-216917/topics/TestConformance_TestMetadata-topic-1 hello world 1234512345 :;<=>?:;<=>? @@$    [\]^_[\]^_$ $  !"#$%&'()*+,-./ !"#$%&'()*+,-./& ..\foo\\bar\\\baz..\foo\\bar\\\baz8 ../foo/../bar/../../baz../../foo/../bar/../../baz../8 ..\foo\..\bar\..\..\baz..\..\foo\..\bar\..\..\baz..\PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623266551616(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestMetadata-subscription-1p 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUaC1MTUVx2A0MQbDNcdQdRDRh1f2hyOV1CUgtCWX5VWwk8aH58dAVXDB9wfmNzbF8WAAREVVbx5MfG64LyRx1tNdKbsadASqGYgLZ3Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ hello world @@ 1234512345 :;<=>?:;<=>? [\]^_[\]^_& ..\foo\\bar\\\baz..\foo\\bar\\\baz$ 8 ..\foo\..\bar\..\..\baz..\..\foo\..\bar\..\..\baz..\8 ../foo/../bar/../../baz../../foo/../bar/../../baz../$  !"#$%&'()*+,-./ !"#$%&'()*+,-./$   1261623266551616" 3(}(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestMetadata-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUaC1MTUVx2A0MQbDNcdQdRDRh1f2hyOV1CUgtCWX5VWwk8aH58dAVXDB9wfmNzbF8WAAREVVbx5MfG64LyRx1tNdKbsadASqGYgLZ3Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest Iprojects/go-cloud-test-216917/topics/TestConformance_TestMetadata-topic-1 hello world {|}~{|}~ ☺☺☺ ☺☺☺ `` foo bar baz foo bar baz foo"bar"baz foo"bar"baz foo//bar///bazfoo//bar///baz foo/bar/baz foo/bar/baz foo\bar\baz foo\bar\bazPJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261621543569816( !/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest[ Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestMetadata-subscription-11+ )type.googleapis.com/google.protobuf.Empty(  1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUaC1MTUVx2A0MQbDNcdQdRDRh1f2hyOV1CUgtCWX9VWwk8aH58dAVXDB9wfGRxaV8VCApEVVbx5MfG64LyRx1tNdWbsadAStiWlOR2Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ hello world foo"bar"baz foo"bar"baz {|}~{|}~ `` foo\bar\baz foo\bar\baz foo bar baz foo bar baz ☺☺☺ ☺☺☺ foo/bar/baz foo/bar/baz foo//bar///bazfoo//bar///baz1261621543569816" ( }(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestMetadata-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUaC1MTUVx2A0MQbDNcdQdRDRh1f2hyOV1CUgtCWX9VWwk8aH58dAVXDB9wfGRxaV8VCApEVVbx5MfG64LyRx1tNdWbsadAStiWlOR2Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ1+ )type.googleapis.com/google.protobuf.Empty(//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequestY Wprojects/go-cloud-test-216917/subscriptions/TestConformance_TestMetadata-subscription-11+ )type.googleapis.com/google.protobuf.Empty('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestK Iprojects/go-cloud-test-216917/topics/TestConformance_TestMetadata-topic-11+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestNack.replay000066400000000000000000000131751367004507500264470ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopicu *type.googleapis.com/google.pubsub.v1.TopicG Eprojects/go-cloud-test-216917/topics/TestConformance_TestNack-topic-1a *type.googleapis.com/google.pubsub.v1.Topic Eprojects/go-cloud-test-216917/topics/TestConformance_TestNack-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-1Eprojects/go-cloud-test-216917/topics/TestConformance_TestNack-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-1Eprojects/go-cloud-test-216917/topics/TestConformance_TestNack-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequestT Eprojects/go-cloud-test-216917/topics/TestConformance_TestNack-topic-1 0 a0PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623266638681(#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequestT Eprojects/go-cloud-test-216917/topics/TestConformance_TestNack-topic-1 1 a1PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261637884481291(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequestW Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-1& 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUSC1MTUVx2A0MQbjNcdQdRDRh1f2hyOVIVCFYWWX5VWwk8aH58dAVXDB9wfmNzbFwQCQRNUlaR8I_h_4LyRx1tNYKYsadAStiS1aN3Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ+ 0 a01261623266638681" ջ( !/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequestW Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-1& 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUSC1MTUVx2A0MQbjNcdQdRDRh1f2hyOVIVCFYWWX9VWwk8aH58dAVXDB9xeml9bl4bAABMUlaR8I_h_4LyRx1tNYWYsadASv715p13Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ+ 1 a11261637884481291" ( ./google.pubsub.v1.Subscriber/ModifyAckDeadline =type.googleapis.com/google.pubsub.v1.ModifyAckDeadlineRequest Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-1"TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUSC1MTUVx2A0MQbjNcdQdRDRh1f2hyOVIVCFYWWX5VWwk8aH58dAVXDB9wfmNzbFwQCQRNUlaR8I_h_4LyRx1tNYKYsadAStiS1aN3Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequestW Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-11+ )type.googleapis.com/google.protobuf.Empty( ./google.pubsub.v1.Subscriber/ModifyAckDeadline =type.googleapis.com/google.pubsub.v1.ModifyAckDeadlineRequest Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-1"TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUSC1MTUVx2A0MQbjNcdQdRDRh1f2hyOVIVCFYWWX9VWwk8aH58dAVXDB9xeml9bl4bAABMUlaR8I_h_4LyRx1tNYWYsadASv715p13Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ1+ )type.googleapis.com/google.protobuf.Empty($ 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFEgtTE1FcdgNDEG4zXHUHUQ0YdX9ocjlSFQhWFll-VVsJPGh-fHQFVwwfcH5jc2xcEAkETVJWkfCP4f-C8kcdajWHmLGnQEqwuNpkZhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypY+ 0 a01261623266638681" ջ(w(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-1EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFEgtTE1FcdgNDEG4zXHUHUQ0YdX9ocjlSFQhWFll-VVsJPGh-fHQFVwwfcH5jc2xcEAkETVJWkfCP4f-C8kcdajWHmLGnQEqwuNpkZhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypY!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequestW Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-11+ )type.googleapis.com/google.protobuf.Empty(& 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUSC1MTUVx2A0MQbjNcdQdRDRh1f2hyOVIVCFYWWX9VWwk8aH58dAVXDB9xeml9bl4bAABMUlaR8I_h_4LyRx1tNYaYsadASpKK_bV0Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ+ 1 a11261637884481291" (y(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUSC1MTUVx2A0MQbjNcdQdRDRh1f2hyOVIVCFYWWX9VWwk8aH58dAVXDB9xeml9bl4bAABMUlaR8I_h_4LyRx1tNYaYsadASpKK_bV0Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ1+ )type.googleapis.com/google.protobuf.Empty(//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequestU Sprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNack-subscription-11+ )type.googleapis.com/google.protobuf.Empty('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestG Eprojects/go-cloud-test-216917/topics/TestConformance_TestNack-topic-11+ )type.googleapis.com/google.protobuf.Empty(TestNonExistentSubscriptionSucceedsOnOpenButFailsOnReceive.replay000066400000000000000000000007421367004507500404230ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformanceRPCReplay!/google.pubsub.v1.Subscriber/Pull| 0type.googleapis.com/google.pubsub.v1.PullRequestH Dprojects/go-cloud-test-216917/subscriptions/nonexistent-subscription* %type.googleapis.com/google.rpc.Status7Resource not found (resource=nonexistent-subscription). (type.googleapis.com/google.rpc.DebugInfoCould not find in SpannerConfigStore: SubscriptionByProjectIdAndName(project_id=892942638129, subscription_name=nonexistent-subscription) (TestNonExistentTopicSucceedsOnOpenButFailsOnSend.replay000066400000000000000000000006731367004507500363270ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformanceRPCReplay#/google.pubsub.v1.Publisher/Publishq 3type.googleapis.com/google.pubsub.v1.PublishRequest: 6projects/go-cloud-test-216917/topics/nonexistent-topic  %type.googleapis.com/google.rpc.Status0Resource not found (resource=nonexistent-topic). (type.googleapis.com/google.rpc.DebugInfovtCould not find in SpannerConfigStore: TopicByProjectIdAndName(project_id=892942638129, topic_name=nonexistent-topic) (go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestNonUTF8MessageBody.replay000066400000000000000000000063231367004507500311140ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopic *type.googleapis.com/google.pubsub.v1.TopicU Sprojects/go-cloud-test-216917/topics/TestConformance_TestNonUTF8MessageBody-topic-1o *type.googleapis.com/google.pubsub.v1.Topic Sprojects/go-cloud-test-216917/topics/TestConformance_TestNonUTF8MessageBody-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4($//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription aprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNonUTF8MessageBody-subscription-1Sprojects/go-cloud-test-216917/topics/TestConformance_TestNonUTF8MessageBody-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription aprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNonUTF8MessageBody-subscription-1Sprojects/go-cloud-test-216917/topics/TestConformance_TestNonUTF8MessageBody-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest Sprojects/go-cloud-test-216917/topics/TestConformance_TestNonUTF8MessageBody-topic-1   !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~foo\bar\baz..\foo\..\bar\..\..\baz..\../foo/../bar/../../baz../foo/bar/bazfoo"bar"baz..\foo\\bar\\\bazfoo//bar///bazfoo bar baz12345☺☺☺PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261621585913910(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequeste aprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNonUTF8MessageBody-subscription-1 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEURC1MTUVx2A0MQbzNcdQdRDRh1f2hyOV1HAQpMWX5VWwk8aH58dAVXDB9wfGR9b1MSAgtEU1bP5MfG64LyRx1tNa2YsadASoPO1ZN3Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ   !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~foo\bar\baz..\foo\..\bar\..\..\baz..\../foo/../bar/../../baz../foo/bar/bazfoo"bar"baz..\foo\\bar\\\bazfoo//bar///bazfoo bar baz12345☺☺☺1261621585913910" ((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest aprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNonUTF8MessageBody-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEURC1MTUVx2A0MQbzNcdQdRDRh1f2hyOV1HAQpMWX5VWwk8aH58dAVXDB9wfGR9b1MSAgtEU1bP5MfG64LyRx1tNa2YsadASoPO1ZN3Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ1+ )type.googleapis.com/google.protobuf.Empty( //google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequestc aprojects/go-cloud-test-216917/subscriptions/TestConformance_TestNonUTF8MessageBody-subscription-11+ )type.googleapis.com/google.protobuf.Empty( '/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestU Sprojects/go-cloud-test-216917/topics/TestConformance_TestNonUTF8MessageBody-topic-11+ )type.googleapis.com/google.protobuf.Empty( go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestSendReceive.replay000066400000000000000000000121301367004507500277550ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopic| *type.googleapis.com/google.pubsub.v1.TopicN Lprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceive-topic-1h *type.googleapis.com/google.pubsub.v1.Topic Lprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceive-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-1Lprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceive-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-1Lprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceive-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest[ Lprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceive-topic-1 0 a0PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261621585898401(#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest[ Lprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceive-topic-1 1 a1PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623132281909(#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest[ Lprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceive-topic-1 2 a2PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261641546024362( !/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest^ Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-1' 1type.googleapis.com/google.pubsub.v1.PullResponse  BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRALUxNRXHUDQxBpXDN1B1ENGXN6Y3xtCRRUVkUHdF9RGx9ZXH5VBlMLGHR_YnRpWBEJA0xTd3eBqM_o3oLbNUsxIcmXrbNfeua31r9gZhs9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEU4+ 1 a11261623132281909" ̉( (/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-1BCEhPjA-RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRALUxNRXHUDQxBpXDN1B1ENGXN6Y3xtCRRUVkUHdF9RGx9ZXH5VBlMLGHR_YnRpWBEJA0xTd3eBqM_o3oLbNUsxIcmXrbNfeua31r9gZhs9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEU4!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest^ Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-11+ )type.googleapis.com/google.protobuf.Empty( $ 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFEAtTE1FcdgNDEG0zXHUHUQ0YdX9ocjldRlNUTFl-VVsJPGh-fHQFVwwfcHxkfW9SGgkGRVJWhejZjeqC8kcdajWkmLGnQEr9pZh8Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypY+ 0 a01261621585898401" (~(/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-1EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFEAtTE1FcdgNDEG0zXHUHUQ0YdX9ocjldRlNUTFl-VVsJPGh-fHQFVwwfcHxkfW9SGgkGRVJWhejZjeqC8kcdajWkmLGnQEr9pZh8Zhg9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypY!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequest^ Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-11+ )type.googleapis.com/google.protobuf.Empty(& 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUQC1MTUVx1A0MQaVwzdQdRDRlzemN8bQkUVFZFB3ReURsfWVx-VQZTCxh0eWBwblwTAwZGVXx3gajP6N6C2zVLNiHMl62zX3ry9NQLZhs9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ+ 2 a21261641546024362" ((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUQC1MTUVx1A0MQaVwzdQdRDRlzemN8bQkUVFZFB3ReURsfWVx-VQZTCxh0eWBwblwTAwZGVXx3gajP6N6C2zVLNiHMl62zX3ry9NQLZhs9XBJLLD5-LTJFQV5AEkwmB0RJUytDCypYEQ1+ )type.googleapis.com/google.protobuf.Empty(//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequest\ Zprojects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceive-subscription-11+ )type.googleapis.com/google.protobuf.Empty('/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestN Lprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceive-topic-11+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestSendReceiveJSON.replay000066400000000000000000000054471367004507500304640ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopic *type.googleapis.com/google.pubsub.v1.TopicR Pprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveJSON-topic-1l *type.googleapis.com/google.pubsub.v1.Topic Pprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveJSON-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription ^projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveJSON-subscription-1Pprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveJSON-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription ^projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveJSON-subscription-1Pprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveJSON-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequestd Pprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveJSON-topic-1 {"Foo": "Bar"}PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623092619372(!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequestb ^projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveJSON-subscription-1+ 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUQC1MTUVx2A0MQaDNcdQdRDRh1f2hyOVIXB1NNWX5VWwk8aH58dAVXDB9wfmF8aFwSCAFCUVa1yeKE6oLyRx1tNYuYsadASv7A4rF0Zhg9XBJLLD5-LTNFQV5AEkwmBkRJUytDCypYEQ0 {"Foo": "Bar"}1261623092619372" ((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest ^projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveJSON-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUQC1MTUVx2A0MQaDNcdQdRDRh1f2hyOVIXB1NNWX5VWwk8aH58dAVXDB9wfmF8aFwSCAFCUVa1yeKE6oLyRx1tNYuYsadASv7A4rF0Zhg9XBJLLD5-LTNFQV5AEkwmBkRJUytDCypYEQ1+ )type.googleapis.com/google.protobuf.Empty( //google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequest` ^projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveJSON-subscription-11+ )type.googleapis.com/google.protobuf.Empty( '/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestR Pprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveJSON-topic-11+ )type.googleapis.com/google.protobuf.Empty( go-cloud-0.20.0/pubsub/gcppubsub/testdata/TestConformance/TestSendReceiveTwo.replay000066400000000000000000000212461367004507500304570ustar00rootroot00000000000000RPCReplay'/google.pubsub.v1.Publisher/CreateTopic *type.googleapis.com/google.pubsub.v1.TopicQ Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1k *type.googleapis.com/google.pubsub.v1.Topic Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1 asia-east1 asia-northeast1 asia-southeast1 australia-southeast1 europe-north1 europe-west1 europe-west2 europe-west3 europe-west4 us-central1 us-central2 us-east1 us-east4 us-west1 us-west2 us-west3 us-west4(//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-1Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-1Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1"( B$Z (//google.pubsub.v1.Subscriber/CreateSubscription 1type.googleapis.com/google.pubsub.v1.Subscription ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-2Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1 1type.googleapis.com/google.pubsub.v1.Subscription ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-2Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1"( B$Z (#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest^ Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1 0 a0PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623301111180(#/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest^ Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1 1 a1PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623204241431( #/google.pubsub.v1.Publisher/Publish 3type.googleapis.com/google.pubsub.v1.PublishRequest^ Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-1 2 a2PJ 4type.googleapis.com/google.pubsub.v1.PublishResponse 1261623154037981( !/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequesta ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-1& 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUXC1MTUVx2A0MQbDNcdQdRDRh1f2hyOVISA1ZNWX5VWwk8aH58dAVXDB9wfmJ1a1sSAANNU1aCmNOt74LyRx1tNbyYsadASre7uqd2Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ+ 0 a01261623301111180" ( (/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUXC1MTUVx2A0MQbDNcdQdRDRh1f2hyOVISA1ZNWX5VWwk8aH58dAVXDB9wfmJ1a1sSAANNU1aCmNOt74LyRx1tNbyYsadASre7uqd2Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequesta ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-11+ )type.googleapis.com/google.protobuf.Empty(& 1type.googleapis.com/google.pubsub.v1.PullResponse  TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUXC1MTUVx2A0MQazNcdQdRDRh1f2hyOVISAgoUWX5VWwk8aH58dAVXDB9wfmN1blgXAAZGUlaCmNOt74LyRx1tNb-YsadASvWkxvd2Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ+ 1 a11261623204241431" ((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-1TgQhIT4wPkVTRFAGFixdRkhRNxkIaFEOT14jPzUgKEUXC1MTUVx2A0MQazNcdQdRDRh1f2hyOVISAgoUWX5VWwk8aH58dAVXDB9wfmN1blgXAAZGUlaCmNOt74LyRx1tNb-YsadASvWkxvd2Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypYEQ!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequesta ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-11+ )type.googleapis.com/google.protobuf.Empty($ 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEGszXHUHUQ0YdX9ocjlSEgIKFFl_VVsJPGh-fHQFVwwfcH5gcG5aEAYLTVJWgpjTre-C8kcdajWxmLGnQEqPy4J7Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY+ 2 a21261623154037981" ((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-1EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEGszXHUHUQ0YdX9ocjlSEgIKFFl_VVsJPGh-fHQFVwwfcH5gcG5aEAYLTVJWgpjTre-C8kcdajWxmLGnQEqPy4J7Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequesta ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-21+ )type.googleapis.com/google.protobuf.Empty($ 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEGwzXHUHUQ0YdX9ocjlSEgNWTVl-VVsJPGh-fHQFVwwfcH5idWtbEgADTVNW7L_oveGC8kcdajWzmLGnQErJwtsdZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY+ 0 a01261623301111180" ((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-2EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEGwzXHUHUQ0YdX9ocjlSEgNWTVl-VVsJPGh-fHQFVwwfcH5idWtbEgADTVNW7L_oveGC8kcdajWzmLGnQErJwtsdZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequesta ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-21+ )type.googleapis.com/google.protobuf.Empty($ 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEGszXHUHUQ0YdX9ocjlSEgIKFFl-VVsJPGh-fHQFVwwfcH5jdW5YFwAGRlJW7L_oveGC8kcdajWymLGnQEryzZp6Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY+ 1 a11261623204241431" ((/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-2EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEGszXHUHUQ0YdX9ocjlSEgIKFFl-VVsJPGh-fHQFVwwfcH5jdW5YFwAGRlJW7L_oveGC8kcdajWymLGnQEryzZp6Zhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY!/google.pubsub.v1.Subscriber/Pull 0type.googleapis.com/google.pubsub.v1.PullRequesta ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-21+ )type.googleapis.com/google.protobuf.Empty($ 1type.googleapis.com/google.pubsub.v1.PullResponse  EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEGszXHUHUQ0YdX9ocjlSEgIKFFl_VVsJPGh-fHQFVwwfcH5gcG5aEAYLTVJW7L_oveGC8kcdajW1mLGnQEqVq8BKZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY+ 2 a21261623154037981" ( (/google.pubsub.v1.Subscriber/Acknowledge 7type.googleapis.com/google.pubsub.v1.AcknowledgeRequest ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-2EU4EISE-MD5FU0RQBhYsXUZIUTcZCGhRDk9eIz81IChFFwtTE1FcdgNDEGszXHUHUQ0YdX9ocjlSEgIKFFl_VVsJPGh-fHQFVwwfcH5gcG5aEAYLTVJW7L_oveGC8kcdajW1mLGnQEqVq8BKZhg9XBJLLD5-LT1FQV5AEkwmCERJUytDCypY1+ )type.googleapis.com/google.protobuf.Empty(#//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequest_ ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-21+ )type.googleapis.com/google.protobuf.Empty(%//google.pubsub.v1.Subscriber/DeleteSubscription >type.googleapis.com/google.pubsub.v1.DeleteSubscriptionRequest_ ]projects/go-cloud-test-216917/subscriptions/TestConformance_TestSendReceiveTwo-subscription-11+ )type.googleapis.com/google.protobuf.Empty(''/google.pubsub.v1.Publisher/DeleteTopic 7type.googleapis.com/google.pubsub.v1.DeleteTopicRequestQ Oprojects/go-cloud-test-216917/topics/TestConformance_TestSendReceiveTwo-topic-11+ )type.googleapis.com/google.protobuf.Empty()go-cloud-0.20.0/pubsub/kafkapubsub/000077500000000000000000000000001367004507500171075ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/kafkapubsub/example_test.go000066400000000000000000000064631367004507500221410ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package kafkapubsub_test import ( "context" "log" "gocloud.dev/pubsub" "gocloud.dev/pubsub/kafkapubsub" ) func ExampleOpenTopic() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // The set of brokers in the Kafka cluster. addrs := []string{"1.2.3.4:9092"} // The Kafka client configuration to use. config := kafkapubsub.MinimalConfig() // Construct a *pubsub.Topic. topic, err := kafkapubsub.OpenTopic(addrs, config, "my-topic", nil) if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func ExampleOpenSubscription() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // The set of brokers in the Kafka cluster. addrs := []string{"1.2.3.4:9092"} // The Kafka client configuration to use. config := kafkapubsub.MinimalConfig() // Construct a *pubsub.Subscription, joining the consumer group "my-group" // and receiving messages from "my-topic". subscription, err := kafkapubsub.OpenSubscription( addrs, config, "my-group", []string{"my-topic"}, nil) if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } func Example_openTopicFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/kafkapubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenTopic creates a *pubsub.Topic from a URL. // The host + path are the topic name to send to. // The set of brokers must be in an environment variable KAFKA_BROKERS. topic, err := pubsub.OpenTopic(ctx, "kafka://my-topic") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func Example_openSubscriptionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/kafkapubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenSubscription creates a *pubsub.Subscription from a URL. // The host + path are used as the consumer group name. // The "topic" query parameter sets one or more topics to subscribe to. // The set of brokers must be in an environment variable KAFKA_BROKERS. subscription, err := pubsub.OpenSubscription(ctx, "kafka://my-group?topic=my-topic") if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } go-cloud-0.20.0/pubsub/kafkapubsub/go.mod000066400000000000000000000017771367004507500202310ustar00rootroot00000000000000// Copyright 2018-2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev/pubsub/kafkapubsub go 1.12 require ( github.com/Shopify/sarama v1.26.4 github.com/google/go-cmp v0.4.1 github.com/klauspost/compress v1.10.8 // indirect github.com/pierrec/lz4 v2.5.2+incompatible // indirect github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect gocloud.dev v0.20.0 golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 // indirect ) go-cloud-0.20.0/pubsub/kafkapubsub/go.sum000066400000000000000000001525421367004507500202530ustar00rootroot00000000000000bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3 h1:0sMegbmn/8uTwpNkB0q9cLEpZ2W5a6kl+wtBQgPWBJQ= cloud.google.com/go v0.44.3/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.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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 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/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/Shopify/sarama v1.26.4 h1:+17TxUq/PJEAfZAll0T7XJjSgQWCpaQSoki/x5yN8o8= github.com/Shopify/sarama v1.26.4/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= 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/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.7.2 h1:2QxQoC1TS09S7fhCPsrvqYdvP1H5M1P1ih5ABm3BTYk= github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.9.8 h1:VMAMUUOh+gaxKTMk+zqbjsSjsIcUcL/LF4o63i82QyA= github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.8 h1:eLeJ3dr/Y9+XRfJT4l+8ZjmtB5RPJhucH2HeCV5+IZY= github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149 h1:HfxbT6/JcvIljmERptWhwa8XzP7H3T+Z2N26gTsaDaA= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/pierrec/lz4 v2.4.1+incompatible h1:mFe7ttWaflA46Mhqh+jUfjp2qTbPYxLB2/OyBppH9dg= github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 h1:dY6ETXrvDG7Sa4vE8ZQG4yqWg6UnOcbqTAahkV813vQ= github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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/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/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.5.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 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= 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/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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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-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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 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/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/jcmturner/aescts.v1 v1.0.1 h1:cVVZBK2b1zY26haWB4vbBiZrfFQnfbTVrE3xZq6hrEw= gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= gopkg.in/jcmturner/dnsutils.v1 v1.0.1 h1:cIuC1OLRGZrld+16ZJvvZxVJeKPsvd5eUIvxfoN5hSM= gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= gopkg.in/jcmturner/goidentity.v3 v3.0.0 h1:1duIyWiTaYvVx3YX2CYtpJbUFd7/UuPYCfgXtQ3VTbI= gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= gopkg.in/jcmturner/gokrb5.v7 v7.5.0 h1:a9tsXlIDD9SKxotJMK3niV7rPZAJeX2aD/0yg3qlIrg= gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= gopkg.in/jcmturner/rpc.v1 v1.1.0 h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU= gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= go-cloud-0.20.0/pubsub/kafkapubsub/kafka.go000066400000000000000000000507671367004507500205320ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package kafkapubsub provides an implementation of pubsub for Kafka. // It requires a minimum Kafka version of 0.11.x for Header support. // Some functionality may work with earlier versions of Kafka. // // See https://kafka.apache.org/documentation.html#semantics for a discussion // of message semantics in Kafka. sarama.Config exposes many knobs that // can affect performance and semantics, so review and set them carefully. // // kafkapubsub does not support Message.Nack; Message.Nackable will return // false, and Message.Nack will panic if called. // // URLs // // For pubsub.OpenTopic and pubsub.OpenSubscription, kafkapubsub registers // for the scheme "kafka". // The default URL opener will connect to a default set of Kafka brokers based // on the environment variable "KAFKA_BROKERS", expected to be a comma-delimited // set of server addresses. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Escaping // // Go CDK supports all UTF-8 strings. No escaping is required for Kafka. // Message metadata is supported through Kafka Headers, which allow arbitrary // []byte for both key and value. These are converted to string for use in // Message.Metadata. // // As // // kafkapubsub exposes the following types for As: // - Topic: sarama.SyncProducer // - Subscription: sarama.ConsumerGroup, sarama.ConsumerGroupSession (may be nil during session renegotiation, and session may go stale at any time) // - Message: *sarama.ConsumerMessage // - Message.BeforeSend: *sarama.ProducerMessage // - Error: sarama.ConsumerError, sarama.ConsumerErrors, sarama.ProducerError, sarama.ProducerErrors, sarama.ConfigurationError, sarama.PacketDecodingError, sarama.PacketEncodingError, sarama.KError package kafkapubsub // import "gocloud.dev/pubsub/kafkapubsub" import ( "context" "errors" "fmt" "net/url" "os" "path" "reflect" "strings" "sync" "time" "github.com/Shopify/sarama" "gocloud.dev/gcerrors" "gocloud.dev/pubsub" "gocloud.dev/pubsub/batcher" "gocloud.dev/pubsub/driver" ) var sendBatcherOpts = &batcher.Options{ MaxBatchSize: 100, MaxHandlers: 2, } var recvBatcherOpts = &batcher.Options{ MaxBatchSize: 1, MaxHandlers: 1, } func init() { opener := new(defaultOpener) pubsub.DefaultURLMux().RegisterTopic(Scheme, opener) pubsub.DefaultURLMux().RegisterSubscription(Scheme, opener) } // defaultOpener create a default opener. type defaultOpener struct { init sync.Once opener *URLOpener err error } func (o *defaultOpener) defaultOpener() (*URLOpener, error) { o.init.Do(func() { brokerList := os.Getenv("KAFKA_BROKERS") if brokerList == "" { o.err = errors.New("KAFKA_BROKERS environment variable not set") return } brokers := strings.Split(brokerList, ",") for i, b := range brokers { brokers[i] = strings.TrimSpace(b) } o.opener = &URLOpener{ Brokers: brokers, Config: MinimalConfig(), } }) return o.opener, o.err } func (o *defaultOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { opener, err := o.defaultOpener() if err != nil { return nil, fmt.Errorf("open topic %v: %v", u, err) } return opener.OpenTopicURL(ctx, u) } func (o *defaultOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { opener, err := o.defaultOpener() if err != nil { return nil, fmt.Errorf("open subscription %v: %v", u, err) } return opener.OpenSubscriptionURL(ctx, u) } // Scheme is the URL scheme that kafkapubsub registers its URLOpeners under on pubsub.DefaultMux. const Scheme = "kafka" // URLOpener opens Kafka URLs like "kafka://mytopic" for topics and // "kafka://group?topic=mytopic" for subscriptions. // // For topics, the URL's host+path is used as the topic name. // // For subscriptions, the URL's host+path is used as the group name, // and the "topic" query parameter(s) are used as the set of topics to // subscribe to. type URLOpener struct { // Brokers is the slice of brokers in the Kafka cluster. Brokers []string // Config is the Sarama Config. // Config.Producer.Return.Success must be set to true. Config *sarama.Config // TopicOptions specifies the options to pass to OpenTopic. TopicOptions TopicOptions // SubscriptionOptions specifies the options to pass to OpenSubscription. SubscriptionOptions SubscriptionOptions } // OpenTopicURL opens a pubsub.Topic based on u. func (o *URLOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { for param := range u.Query() { return nil, fmt.Errorf("open topic %v: invalid query parameter %q", u, param) } topicName := path.Join(u.Host, u.Path) return OpenTopic(o.Brokers, o.Config, topicName, &o.TopicOptions) } // OpenSubscriptionURL opens a pubsub.Subscription based on u. func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { q := u.Query() topics := q["topic"] q.Del("topic") for param := range q { return nil, fmt.Errorf("open subscription %v: invalid query parameter %q", u, param) } group := path.Join(u.Host, u.Path) return OpenSubscription(o.Brokers, o.Config, group, topics, &o.SubscriptionOptions) } // MinimalConfig returns a minimal sarama.Config. func MinimalConfig() *sarama.Config { config := sarama.NewConfig() config.Version = sarama.V0_11_0_0 // required for Headers config.Producer.Return.Successes = true // required for SyncProducer return config } type topic struct { producer sarama.SyncProducer topicName string opts TopicOptions } // TopicOptions contains configuration options for topics. type TopicOptions struct { // KeyName optionally sets the Message.Metadata key to use as the optional // Kafka message key. If set, and if a matching Message.Metadata key is found, // the value for that key will be used as the message key when sending to // Kafka, instead of being added to the message headers. KeyName string } // OpenTopic creates a pubsub.Topic that sends to a Kafka topic. // // It uses a sarama.SyncProducer to send messages. Producer options can // be configured in the Producer section of the sarama.Config: // https://godoc.org/github.com/Shopify/sarama#Config. // // Config.Producer.Return.Success must be set to true. func OpenTopic(brokers []string, config *sarama.Config, topicName string, opts *TopicOptions) (*pubsub.Topic, error) { dt, err := openTopic(brokers, config, topicName, opts) if err != nil { return nil, err } return pubsub.NewTopic(dt, sendBatcherOpts), nil } // openTopic returns the driver for OpenTopic. This function exists so the test // harness can get the driver interface implementation if it needs to. func openTopic(brokers []string, config *sarama.Config, topicName string, opts *TopicOptions) (driver.Topic, error) { if opts == nil { opts = &TopicOptions{} } producer, err := sarama.NewSyncProducer(brokers, config) if err != nil { return nil, err } return &topic{producer: producer, topicName: topicName, opts: *opts}, nil } // SendBatch implements driver.Topic.SendBatch. func (t *topic) SendBatch(ctx context.Context, dms []*driver.Message) error { // Convert the messages to a slice of sarama.ProducerMessage. ms := make([]*sarama.ProducerMessage, 0, len(dms)) for _, dm := range dms { var kafkaKey []byte var headers []sarama.RecordHeader for k, v := range dm.Metadata { if k == t.opts.KeyName { // Use this key's value as the Kafka message key instead of adding it // to the headers. kafkaKey = []byte(v) } else { headers = append(headers, sarama.RecordHeader{Key: []byte(k), Value: []byte(v)}) } } pm := &sarama.ProducerMessage{ Topic: t.topicName, Key: sarama.ByteEncoder(kafkaKey), Value: sarama.ByteEncoder(dm.Body), Headers: headers, } if dm.BeforeSend != nil { asFunc := func(i interface{}) bool { if p, ok := i.(**sarama.ProducerMessage); ok { *p = pm return true } return false } if err := dm.BeforeSend(asFunc); err != nil { return err } } ms = append(ms, pm) } return t.producer.SendMessages(ms) } // Close implements io.Closer. func (t *topic) Close() error { return t.producer.Close() } // IsRetryable implements driver.Topic.IsRetryable. func (t *topic) IsRetryable(error) bool { return false } // As implements driver.Topic.As. func (t *topic) As(i interface{}) bool { if p, ok := i.(*sarama.SyncProducer); ok { *p = t.producer return true } return false } // ErrorAs implements driver.Topic.ErrorAs. func (t *topic) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } // ErrorCode implements driver.Topic.ErrorCode. func (t *topic) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } func errorCode(err error) gcerrors.ErrorCode { if pes, ok := err.(sarama.ProducerErrors); ok && len(pes) == 1 { return errorCode(pes[0]) } if pe, ok := err.(*sarama.ProducerError); ok { return errorCode(pe.Err) } if err == sarama.ErrUnknownTopicOrPartition { return gcerrors.NotFound } return gcerrors.Unknown } type subscription struct { opts SubscriptionOptions closeCh chan struct{} // closed when we've shut down joinCh chan struct{} // closed when we join for the first time cancel func() // cancels the background consumer closeErr error // fatal error detected by the background consumer consumerGroup sarama.ConsumerGroup mu sync.Mutex unacked []*ackInfo sess sarama.ConsumerGroupSession // current session, if any, used for marking offset updates expectedClaims int // # of expected claims for the current session, they should be added via ConsumeClaim claims []sarama.ConsumerGroupClaim // claims in the current session } // ackInfo stores info about a message and whether it has been acked. // It is used as the driver.AckID. type ackInfo struct { msg *sarama.ConsumerMessage acked bool } // SubscriptionOptions contains configuration for subscriptions. type SubscriptionOptions struct { // KeyName optionally sets the Message.Metadata key in which to store the // Kafka message key. If set, and if the Kafka message key is non-empty, // the key value will be stored in Message.Metadata under KeyName. KeyName string // WaitForJoin causes OpenSubscription to wait for up to WaitForJoin // to allow the client to join the consumer group. // Messages sent to the topic before the client joins the group // may not be received by this subscription. // OpenSubscription will succeed even if WaitForJoin elapses and // the subscription still hasn't been joined successfully. WaitForJoin time.Duration } // OpenSubscription creates a pubsub.Subscription that joins group, receiving // messages from topics. // // It uses a sarama.ConsumerGroup to receive messages. Consumer options can // be configured in the Consumer section of the sarama.Config: // https://godoc.org/github.com/Shopify/sarama#Config. func OpenSubscription(brokers []string, config *sarama.Config, group string, topics []string, opts *SubscriptionOptions) (*pubsub.Subscription, error) { ds, err := openSubscription(brokers, config, group, topics, opts) if err != nil { return nil, err } return pubsub.NewSubscription(ds, recvBatcherOpts, nil), nil } // openSubscription returns the driver for OpenSubscription. This function // exists so the test harness can get the driver interface implementation if it // needs to. func openSubscription(brokers []string, config *sarama.Config, group string, topics []string, opts *SubscriptionOptions) (driver.Subscription, error) { if opts == nil { opts = &SubscriptionOptions{} } consumerGroup, err := sarama.NewConsumerGroup(brokers, group, config) if err != nil { return nil, err } // Create a cancelable context for the background goroutine that // consumes messages. ctx, cancel := context.WithCancel(context.Background()) joinCh := make(chan struct{}) ds := &subscription{ opts: *opts, consumerGroup: consumerGroup, closeCh: make(chan struct{}), joinCh: joinCh, cancel: cancel, } // Start a background consumer. It should run until ctx is cancelled // by Close, or until there's a fatal error (e.g., topic doesn't exist). // We're registering ds as our ConsumerGroupHandler, so sarama will // call [Setup, ConsumeClaim (possibly more than once), Cleanup] // repeatedly as the consumer group is rebalanced. // See https://godoc.org/github.com/Shopify/sarama#ConsumerGroup. go func() { for { ds.closeErr = consumerGroup.Consume(ctx, topics, ds) if ds.closeErr != nil || ctx.Err() != nil { consumerGroup.Close() close(ds.closeCh) break } } }() if opts.WaitForJoin > 0 { // Best effort wait for first consumer group session. select { case <-joinCh: case <-ds.closeCh: case <-time.After(opts.WaitForJoin): } } return ds, nil } // Setup implements sarama.ConsumerGroupHandler.Setup. It is called whenever // a new session with the broker is starting. func (s *subscription) Setup(sess sarama.ConsumerGroupSession) error { // Record the current session. s.mu.Lock() defer s.mu.Unlock() s.sess = sess s.expectedClaims = 0 for _, claims := range sess.Claims() { s.expectedClaims += len(claims) } return nil } // Cleanup implements sarama.ConsumerGroupHandler.Cleanup. func (s *subscription) Cleanup(sarama.ConsumerGroupSession) error { // Clear the current session. s.mu.Lock() defer s.mu.Unlock() s.sess = nil s.expectedClaims = 0 s.claims = nil return nil } // ConsumeClaim implements sarama.ConsumerGroupHandler.ConsumeClaim. // This is where messages are actually delivered, via a channel. func (s *subscription) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { s.mu.Lock() s.claims = append(s.claims, claim) // Once all of the expected claims have registered, close joinCh to (possibly) wake up OpenSubscription. if s.joinCh != nil && len(s.claims) == s.expectedClaims { close(s.joinCh) s.joinCh = nil } s.mu.Unlock() <-sess.Context().Done() return nil } // ReceiveBatch implements driver.Subscription.ReceiveBatch. func (s *subscription) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { // Try to read maxMessages for up to 100ms before giving up. maxWaitCtx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) defer cancel() for { // We'll give up after maxWaitCtx is Done, or if s.closeCh is closed. // Otherwise, we want to pull a message from one of the channels in the // claim(s) we've been given. // // Note: we could multiplex this by ranging over each claim.Messages(), // writing the messages to a single ch, and then reading from that ch // here. However, this results in us reading messages from Kafka and // essentially queueing them here; when the session is closed for whatever // reason, those messages are lost, which may or may not be an issue // depending on the Kafka configuration being used. // // It seems safer to use reflect.Select to explicitly only get a single // message at a time, and hand it directly to the user. // // reflect.Select is essentially a "select" statement, but allows us to // build the cases dynamically. We need that because we need a case for // each of the claims in s.claims. s.mu.Lock() cases := make([]reflect.SelectCase, 0, len(s.claims)+2) // Add a case for s.closeCh being closed, at index = 0. cases = append(cases, reflect.SelectCase{ Dir: reflect.SelectRecv, Chan: reflect.ValueOf(s.closeCh), }) // Add a case for maxWaitCtx being Done, at index = 1. cases = append(cases, reflect.SelectCase{ Dir: reflect.SelectRecv, Chan: reflect.ValueOf(maxWaitCtx.Done()), }) // Add a case per claim, reading from the claim's Messages channel. for _, claim := range s.claims { cases = append(cases, reflect.SelectCase{ Dir: reflect.SelectRecv, Chan: reflect.ValueOf(claim.Messages()), }) } s.mu.Unlock() i, v, ok := reflect.Select(cases) if !ok { // The i'th channel was closed. switch i { case 0: // s.closeCh return nil, s.closeErr case 1: // maxWaitCtx // We've tried for a while to get a message, but didn't get any. // Return an empty slice; the portable type will call us back. return nil, ctx.Err() } // Otherwise, if one of the claim channels closed, we're probably ending // a session. Just keep trying. continue } msg := v.Interface().(*sarama.ConsumerMessage) // We've got a message! It should not be nil. // Read the metadata from msg.Headers. md := map[string]string{} for _, h := range msg.Headers { md[string(h.Key)] = string(h.Value) } // Add a metadata entry for the message key if appropriate. if len(msg.Key) > 0 && s.opts.KeyName != "" { md[s.opts.KeyName] = string(msg.Key) } ack := &ackInfo{msg: msg} dm := &driver.Message{ Body: msg.Value, Metadata: md, AckID: ack, AsFunc: func(i interface{}) bool { if p, ok := i.(**sarama.ConsumerMessage); ok { *p = msg return true } return false }, } s.mu.Lock() defer s.mu.Unlock() s.unacked = append(s.unacked, ack) return []*driver.Message{dm}, nil } } // SendAcks implements driver.Subscription.SendAcks. func (s *subscription) SendAcks(ctx context.Context, ids []driver.AckID) error { s.mu.Lock() defer s.mu.Unlock() // Mark them all acked. for _, id := range ids { id.(*ackInfo).acked = true } if s.sess == nil { // We don't have a current session, so we can't send offset updates. // We'll just wait until next time and retry. return nil } // Mark all of the acked messages at the head of the slice. Since Kafka only // stores a single offset, we can't mark messages that aren't at the head; that // would move the offset past other as-yet-unacked messages. for len(s.unacked) > 0 && s.unacked[0].acked { s.sess.MarkMessage(s.unacked[0].msg, "") s.unacked = s.unacked[1:] } return nil } // CanNack implements driver.CanNack. func (s *subscription) CanNack() bool { // Nacking a single message doesn't make sense with the way Kafka maintains // offsets. return false } // SendNacks implements driver.Subscription.SendNacks. func (s *subscription) SendNacks(ctx context.Context, ids []driver.AckID) error { panic("unreachable") } // Close implements io.Closer. func (s *subscription) Close() error { // Cancel the ctx for the background goroutine and wait until it's done. s.cancel() <-s.closeCh return nil } // IsRetryable implements driver.Subscription.IsRetryable. func (*subscription) IsRetryable(error) bool { return false } // As implements driver.Subscription.As. func (s *subscription) As(i interface{}) bool { if p, ok := i.(*sarama.ConsumerGroup); ok { *p = s.consumerGroup return true } if p, ok := i.(*sarama.ConsumerGroupSession); ok { s.mu.Lock() defer s.mu.Unlock() *p = s.sess return true } return false } // ErrorAs implements driver.Subscription.ErrorAs. func (s *subscription) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } // ErrorCode implements driver.Subscription.ErrorCode. func (*subscription) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } func errorAs(err error, i interface{}) bool { switch terr := err.(type) { case sarama.ConsumerError: if p, ok := i.(*sarama.ConsumerError); ok { *p = terr return true } case sarama.ConsumerErrors: if p, ok := i.(*sarama.ConsumerErrors); ok { *p = terr return true } case sarama.ProducerError: if p, ok := i.(*sarama.ProducerError); ok { *p = terr return true } case sarama.ProducerErrors: if p, ok := i.(*sarama.ProducerErrors); ok { *p = terr return true } case sarama.ConfigurationError: if p, ok := i.(*sarama.ConfigurationError); ok { *p = terr return true } case sarama.PacketDecodingError: if p, ok := i.(*sarama.PacketDecodingError); ok { *p = terr return true } case sarama.PacketEncodingError: if p, ok := i.(*sarama.PacketEncodingError); ok { *p = terr return true } case sarama.KError: if p, ok := i.(*sarama.KError); ok { *p = terr return true } } return false } go-cloud-0.20.0/pubsub/kafkapubsub/kafka_test.go000066400000000000000000000325141367004507500215570ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package kafkapubsub // import "gocloud.dev/pubsub/kafkapubsub" // To run these tests against a real Kafka server, run localkafka.sh. // See https://github.com/spotify/docker-kafka for more on the docker container // that the script runs. import ( "context" "errors" "fmt" "math/rand" "os" "strings" "sync/atomic" "testing" "time" "github.com/Shopify/sarama" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "gocloud.dev/internal/testing/setup" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" "gocloud.dev/pubsub/drivertest" ) var ( localBrokerAddrs = []string{"localhost:9092"} // Makes OpenSubscription wait ~forever until the subscriber has joined the // ConsumerGroup. Messages sent to the topic before the subscriber has joined // won't be received. subscriptionOptions = &SubscriptionOptions{WaitForJoin: 24 * time.Hour} ) type harness struct { uniqueID int numSubs uint32 numTopics uint32 } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { if !setup.HasDockerTestEnvironment() { t.Skip("Skipping Kafka tests since the Kafka server is not available") } return &harness{uniqueID: rand.Int()}, nil } func createKafkaTopic(topicName string, partitions int32) (func(), error) { // Create the topic. config := MinimalConfig() admin, err := sarama.NewClusterAdmin(localBrokerAddrs, config) if err != nil { return func() {}, err } close1 := func() { admin.Close() } topicDetail := &sarama.TopicDetail{ NumPartitions: partitions, ReplicationFactor: 1, } if err := admin.CreateTopic(topicName, topicDetail, false); err != nil { return close1, err } close2 := func() { admin.DeleteTopic(topicName) close1() } return close2, nil } func (h *harness) CreateTopic(ctx context.Context, testName string) (driver.Topic, func(), error) { topicName := fmt.Sprintf("%s-topic-%d-%d", sanitize(testName), h.uniqueID, atomic.AddUint32(&h.numTopics, 1)) cleanup, err := createKafkaTopic(topicName, 1) if err != nil { return nil, cleanup, err } // Open it. dt, err := openTopic(localBrokerAddrs, MinimalConfig(), topicName, nil) if err != nil { return nil, cleanup, err } return dt, cleanup, nil } func (h *harness) MakeNonexistentTopic(ctx context.Context) (driver.Topic, error) { return openTopic(localBrokerAddrs, MinimalConfig(), "nonexistent-topic", nil) } func (h *harness) CreateSubscription(ctx context.Context, dt driver.Topic, testName string) (driver.Subscription, func(), error) { groupID := fmt.Sprintf("%s-sub-%d-%d", sanitize(testName), h.uniqueID, atomic.AddUint32(&h.numSubs, 1)) ds, err := openSubscription(localBrokerAddrs, MinimalConfig(), groupID, []string{dt.(*topic).topicName}, subscriptionOptions) if err != nil { return nil, nil, err } return ds, func() {}, nil } func (h *harness) MakeNonexistentSubscription(ctx context.Context) (driver.Subscription, error) { return openSubscription(localBrokerAddrs, MinimalConfig(), "unused-group", []string{"nonexistent-topic"}, subscriptionOptions) } func (h *harness) Close() {} func (h *harness) MaxBatchSizes() (int, int) { return sendBatcherOpts.MaxBatchSize, 0 } func (*harness) SupportsMultipleSubscriptions() bool { return true } func TestConformance(t *testing.T) { asTests := []drivertest.AsTest{asTest{}} drivertest.RunConformanceTests(t, newHarness, asTests) } type asTest struct{} func (asTest) Name() string { return "kafka" } func (asTest) TopicCheck(topic *pubsub.Topic) error { var sp sarama.SyncProducer if !topic.As(&sp) { return fmt.Errorf("cast failed for %T", sp) } return nil } func (asTest) SubscriptionCheck(sub *pubsub.Subscription) error { var cg sarama.ConsumerGroup if !sub.As(&cg) { return fmt.Errorf("cast failed for %T", cg) } var cgs sarama.ConsumerGroupSession if !sub.As(&cgs) { return fmt.Errorf("cast failed for %T", cgs) } return nil } func (asTest) TopicErrorCheck(t *pubsub.Topic, err error) error { var pe sarama.ProducerErrors if !t.ErrorAs(err, &pe) { return fmt.Errorf("failed to convert %v (%T)", err, err) } return nil } func (asTest) SubscriptionErrorCheck(s *pubsub.Subscription, err error) error { var ke sarama.KError if !s.ErrorAs(err, &ke) { return fmt.Errorf("failed to convert %v (%T)", err, err) } return nil } func (asTest) MessageCheck(m *pubsub.Message) error { var cm *sarama.ConsumerMessage if !m.As(&cm) { return fmt.Errorf("cast failed for %T", cm) } return nil } func (asTest) BeforeSend(as func(interface{}) bool) error { var pm *sarama.ProducerMessage if !as(&pm) { return fmt.Errorf("cast failed for %T", &pm) } return nil } // TestKafkaKey tests sending/receiving a message with the Kafka message key set. func TestKafkaKey(t *testing.T) { if !setup.HasDockerTestEnvironment() { t.Skip("Skipping Kafka tests since the Kafka server is not available") } const ( keyName = "kafkakey" keyValue = "kafkakeyvalue" ) uniqueID := rand.Int() ctx := context.Background() topicName := fmt.Sprintf("%s-topic-%d", sanitize(t.Name()), uniqueID) topicCleanup, err := createKafkaTopic(topicName, 1) defer topicCleanup() if err != nil { t.Fatal(err) } topic, err := OpenTopic(localBrokerAddrs, MinimalConfig(), topicName, &TopicOptions{KeyName: keyName}) if err != nil { t.Fatal(err) } defer func() { if err := topic.Shutdown(ctx); err != nil { t.Error(err) } }() groupID := fmt.Sprintf("%s-sub-%d", sanitize(t.Name()), uniqueID) subOpts := *subscriptionOptions subOpts.KeyName = keyName sub, err := OpenSubscription(localBrokerAddrs, MinimalConfig(), groupID, []string{topicName}, &subOpts) if err != nil { t.Fatal(err) } defer func() { if err := sub.Shutdown(ctx); err != nil { t.Error(err) } }() m := &pubsub.Message{ Metadata: map[string]string{ "foo": "bar", keyName: keyValue, }, Body: []byte("hello world"), BeforeSend: func(as func(interface{}) bool) error { // Verify that the Key field was set correctly on the outgoing Kafka // message. var pm *sarama.ProducerMessage if !as(&pm) { return errors.New("failed to convert to ProducerMessage") } gotKeyBytes, err := pm.Key.Encode() if err != nil { return fmt.Errorf("failed to Encode Kafka Key: %v", err) } if gotKey := string(gotKeyBytes); gotKey != keyValue { return errors.New("Kafka key wasn't set appropriately") } return nil }, } err = topic.Send(ctx, m) if err != nil { t.Fatal(err) } // The test will hang here if the message isn't available, so use a shorter timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() got, err := sub.Receive(ctx2) if err != nil { t.Fatal(err) } got.Ack() m.BeforeSend = nil // don't expect this in the received message if diff := cmp.Diff(got, m, cmpopts.IgnoreUnexported(pubsub.Message{})); diff != "" { t.Errorf("got\n%v\nwant\n%v\ndiff\n%v", got, m, diff) } // Verify that Key was set in the received Kafka message via As. var cm *sarama.ConsumerMessage if !got.As(&cm) { t.Fatal("failed to get message As ConsumerMessage") } if gotKey := string(cm.Key); gotKey != keyValue { t.Errorf("got key %q want %q", gotKey, keyValue) } } // TestMultiplePartionsWithRebalancing tests use of a topic with multiple // partitions, including the rebalancing that happens when a new consumer // appears in the group. func TestMultiplePartionsWithRebalancing(t *testing.T) { if !setup.HasDockerTestEnvironment() { t.Skip("Skipping Kafka tests since the Kafka server is not available") } const ( keyName = "kafkakey" nMessages = 10 ) uniqueID := rand.Int() ctx := context.Background() // Create a topic with 10 partitions. Using 10 instead of just 2 because // that also tests having multiple claims. topicName := fmt.Sprintf("%s-topic-%d", sanitize(t.Name()), uniqueID) topicCleanup, err := createKafkaTopic(topicName, 10) defer topicCleanup() if err != nil { t.Fatal(err) } topic, err := OpenTopic(localBrokerAddrs, MinimalConfig(), topicName, &TopicOptions{KeyName: keyName}) if err != nil { t.Fatal(err) } defer func() { if err := topic.Shutdown(ctx); err != nil { t.Error(err) } }() // Open a subscription. groupID := fmt.Sprintf("%s-sub-%d", sanitize(t.Name()), uniqueID) subOpts := *subscriptionOptions subOpts.KeyName = keyName sub, err := OpenSubscription(localBrokerAddrs, MinimalConfig(), groupID, []string{topicName}, &subOpts) if err != nil { t.Fatal(err) } defer func() { if err := sub.Shutdown(ctx); err != nil { t.Error(err) } }() // Send some messages. send := func() { for i := 0; i < nMessages; i++ { m := &pubsub.Message{ Metadata: map[string]string{ keyName: fmt.Sprintf("key%d", i), }, Body: []byte("hello world"), } if err := topic.Send(ctx, m); err != nil { t.Fatal(err) } } } send() // Receive the messages via the subscription. got := make(chan int) done := make(chan error) read := func(ctx context.Context, subNum int, sub *pubsub.Subscription) { for { m, err := sub.Receive(ctx) if err != nil { if err == context.Canceled { // Expected after all messages are received, no error. done <- nil } else { done <- err } return } m.Ack() got <- subNum } } // The test will hang here if the messages aren't available, so use a shorter // timeout. ctx2, cancel := context.WithTimeout(ctx, 30*time.Second) go read(ctx2, 0, sub) for i := 0; i < nMessages; i++ { select { case <-got: case err := <-done: // Premature error. if err != nil { t.Fatal(err) } } } cancel() if err := <-done; err != nil { t.Fatal(err) } // Add another subscription to the same group. Kafka will rebalance the // consumer group, causing the Cleanup/Setup/ConsumeClaim loop. Each of the // two subscriptions should get claims for 50% of the partitions. sub2, err := OpenSubscription(localBrokerAddrs, MinimalConfig(), groupID, []string{topicName}, &subOpts) if err != nil { t.Fatal(err) } defer func() { if err := sub2.Shutdown(ctx); err != nil { t.Error(err) } }() // Send and receive some messages. // Now both subscriptions should get some messages. send() // The test will hang here if the message isn't available, so use a shorter timeout. ctx3, cancel := context.WithTimeout(ctx, 30*time.Second) go read(ctx3, 0, sub) go read(ctx3, 1, sub2) counts := []int{0, 0} for i := 0; i < nMessages; i++ { select { case sub := <-got: counts[sub]++ case err := <-done: // Premature error. if err != nil { t.Fatal(err) } } } cancel() for i := 0; i < 2; i++ { if err := <-done; err != nil { t.Fatal(err) } } if counts[0] == 0 || counts[1] == 0 { t.Errorf("one of the partitioned subscriptions didn't get any messages: %v", counts) } } func sanitize(testName string) string { return strings.Replace(testName, "/", "_", -1) } func BenchmarkKafka(b *testing.B) { ctx := context.Background() uniqueID := rand.Int() // Create the topic. topicName := fmt.Sprintf("%s-topic-%d", b.Name(), uniqueID) cleanup, err := createKafkaTopic(topicName, 1) defer cleanup() if err != nil { b.Fatal(err) } topic, err := OpenTopic(localBrokerAddrs, MinimalConfig(), topicName, nil) if err != nil { b.Fatal(err) } defer topic.Shutdown(ctx) groupID := fmt.Sprintf("%s-subscription-%d", b.Name(), uniqueID) sub, err := OpenSubscription(localBrokerAddrs, MinimalConfig(), groupID, []string{topicName}, subscriptionOptions) if err != nil { b.Fatal(err) } defer sub.Shutdown(ctx) drivertest.RunBenchmarks(b, topic, sub) } func fakeConnectionStringInEnv() func() { oldEnvVal := os.Getenv("KAFKA_BROKERS") os.Setenv("KAFKA_BROKERS", "localhost:10000") return func() { os.Setenv("KAFKA_BROKERS", oldEnvVal) } } func TestOpenTopicFromURL(t *testing.T) { cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK, but still error because broker doesn't exist. {"kafka://mytopic", true}, // Invalid parameter. {"kafka://mytopic?param=value", true}, } ctx := context.Background() for _, test := range tests { topic, err := pubsub.OpenTopic(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if topic != nil { topic.Shutdown(ctx) } } } func TestOpenSubscriptionFromURL(t *testing.T) { cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK, but still error because broker doesn't exist. {"kafka://mygroup?topic=mytopic", true}, // Invalid parameter. {"kafka://mygroup?topic=mytopic¶m=value", true}, } ctx := context.Background() for _, test := range tests { sub, err := pubsub.OpenSubscription(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if sub != nil { sub.Shutdown(ctx) } } } go-cloud-0.20.0/pubsub/kafkapubsub/localkafka.sh000077500000000000000000000030571367004507500215430ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Starts a local Kafka instance (plus supporting Zookeeper) via Docker. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail set -euo pipefail # Clean up and run Zookeeper. echo "Starting Zookeeper (for Kafka)..." docker rm -f zookeeper &> /dev/null || : docker run -d --net=host --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=2181 confluentinc/cp-zookeeper:4.1.0 &> /dev/null echo "...done. Run \"docker rm -f zookeeper\" to clean up the container." echo # Clean up and run Kafka. echo "Starting Kafka..." docker rm -f kafka &> /dev/null || : docker run -d --net=host -p 9092:9092 --name=kafka -e KAFKA_ZOOKEEPER_CONNECT=localhost:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 -e KAFKA_AUTO_CREATE_TOPICS_ENABLE=false -e KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=100 confluentinc/cp-kafka:4.1.0 &> /dev/null echo "...done. Run \"docker rm -f kafka\" to clean up the container." echo go-cloud-0.20.0/pubsub/mempubsub/000077500000000000000000000000001367004507500166105ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/mempubsub/conformance_test.go000066400000000000000000000040401367004507500224660ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mempubsub import ( "context" "testing" "time" "gocloud.dev/pubsub/driver" "gocloud.dev/pubsub/drivertest" ) type harness struct{} func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return &harness{}, nil } func (h *harness) CreateTopic(ctx context.Context, testName string) (dt driver.Topic, cleanup func(), err error) { cleanup = func() {} return &topic{}, cleanup, nil } func (h *harness) MakeNonexistentTopic(ctx context.Context) (driver.Topic, error) { // A nil *topic behaves like a nonexistent topic. return (*topic)(nil), nil } func (h *harness) CreateSubscription(ctx context.Context, dt driver.Topic, testName string) (ds driver.Subscription, cleanup func(), err error) { ds = newSubscription(dt.(*topic), time.Second) cleanup = func() {} return ds, cleanup, nil } func (h *harness) MakeNonexistentSubscription(ctx context.Context) (driver.Subscription, error) { return newSubscription(nil, time.Second), nil } func (h *harness) Close() {} func (h *harness) MaxBatchSizes() (int, int) { return 0, 0 } func (*harness) SupportsMultipleSubscriptions() bool { return true } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, nil) } func BenchmarkMemPubSub(b *testing.B) { ctx := context.Background() topic := NewTopic() defer topic.Shutdown(ctx) sub := NewSubscription(topic, time.Second) defer sub.Shutdown(ctx) drivertest.RunBenchmarks(b, topic, sub) } go-cloud-0.20.0/pubsub/mempubsub/example_test.go000066400000000000000000000050671367004507500216410ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mempubsub_test import ( "context" "log" "time" "gocloud.dev/pubsub" "gocloud.dev/pubsub/mempubsub" ) func ExampleNewSubscription() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Construct a *pubsub.Topic. topic := mempubsub.NewTopic() defer topic.Shutdown(ctx) // Construct a *pubsub.Subscription for the topic. subscription := mempubsub.NewSubscription(topic, 1*time.Minute /* ack deadline */) defer subscription.Shutdown(ctx) } func ExampleNewTopic() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() topic := mempubsub.NewTopic() defer topic.Shutdown(ctx) } func Example_openSubscriptionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/mempubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Create a topic. topic, err := pubsub.OpenTopic(ctx, "mem://topicA") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) // Create a subscription connected to that topic. subscription, err := pubsub.OpenSubscription(ctx, "mem://topicA") if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } func Example_openTopicFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/mempubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() topic, err := pubsub.OpenTopic(ctx, "mem://topicA") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } go-cloud-0.20.0/pubsub/mempubsub/mem.go000066400000000000000000000241641367004507500177240ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package mempubsub provides an in-memory pubsub implementation. // Use NewTopic to construct a *pubsub.Topic, and/or NewSubscription // to construct a *pubsub.Subscription. // // mempubsub should not be used for production: it is intended for local // development and testing. // // URLs // // For pubsub.OpenTopic and pubsub.OpenSubscription, mempubsub registers // for the scheme "mem". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Message Delivery Semantics // // mempubsub supports at-least-once semantics; applications must // call Message.Ack after processing a message, or it will be redelivered. // See https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // for more background. // // As // // mempubsub does not support any types for As. package mempubsub // import "gocloud.dev/pubsub/mempubsub" import ( "context" "errors" "fmt" "net/url" "path" "sync" "time" "gocloud.dev/gcerrors" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" ) func init() { o := new(URLOpener) pubsub.DefaultURLMux().RegisterTopic(Scheme, o) pubsub.DefaultURLMux().RegisterSubscription(Scheme, o) } // Scheme is the URL scheme mempubsub registers its URLOpeners under on pubsub.DefaultMux. const Scheme = "mem" // URLOpener opens mempubsub URLs like "mem://topic". // // The URL's host+path is used as the topic to create or subscribe to. // // Query parameters: // - ackdeadline: The ack deadline for OpenSubscription, in time.ParseDuration formats. // Defaults to 1m. type URLOpener struct { mu sync.Mutex topics map[string]*pubsub.Topic } // OpenTopicURL opens a pubsub.Topic based on u. func (o *URLOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { for param := range u.Query() { return nil, fmt.Errorf("open topic %v: invalid query parameter %q", u, param) } topicName := path.Join(u.Host, u.Path) o.mu.Lock() defer o.mu.Unlock() if o.topics == nil { o.topics = map[string]*pubsub.Topic{} } t := o.topics[topicName] if t == nil { t = NewTopic() o.topics[topicName] = t } return t, nil } // OpenSubscriptionURL opens a pubsub.Subscription based on u. func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { q := u.Query() ackDeadline := 1 * time.Minute if s := q.Get("ackdeadline"); s != "" { var err error ackDeadline, err = time.ParseDuration(s) if err != nil { return nil, fmt.Errorf("open subscription %v: invalid ackdeadline %q: %v", u, s, err) } q.Del("ackdeadline") } for param := range q { return nil, fmt.Errorf("open subscription %v: invalid query parameter %q", u, param) } topicName := path.Join(u.Host, u.Path) o.mu.Lock() defer o.mu.Unlock() if o.topics == nil { o.topics = map[string]*pubsub.Topic{} } t := o.topics[topicName] if t == nil { return nil, fmt.Errorf("open subscription %v: no topic %q has been created", u, topicName) } return NewSubscription(t, ackDeadline), nil } var errNotExist = errors.New("mempubsub: topic does not exist") type topic struct { mu sync.Mutex subs []*subscription nextAckID int } // NewTopic creates a new in-memory topic. func NewTopic() *pubsub.Topic { return pubsub.NewTopic(&topic{}, nil) } // SendBatch implements driver.Topic.SendBatch. // It is error if the topic is closed or has no subscriptions. func (t *topic) SendBatch(ctx context.Context, ms []*driver.Message) error { if err := ctx.Err(); err != nil { return err } if t == nil { return errNotExist } t.mu.Lock() defer t.mu.Unlock() // Associate ack IDs with messages here. It would be a bit better if each subscription's // messages had their own ack IDs, so we could catch one subscription using ack IDs from another, // but that would require copying all the messages. for i, m := range ms { m.AckID = t.nextAckID + i m.AsFunc = func(interface{}) bool { return false } if m.BeforeSend != nil { if err := m.BeforeSend(func(interface{}) bool { return false }); err != nil { return err } } } t.nextAckID += len(ms) for _, s := range t.subs { s.add(ms) } return nil } // IsRetryable implements driver.Topic.IsRetryable. func (*topic) IsRetryable(error) bool { return false } // As implements driver.Topic.As. // It supports *topic so that NewSubscription can recover a *topic // from the portable type (see below). External users won't be able // to use As because topic isn't exported. func (t *topic) As(i interface{}) bool { x, ok := i.(**topic) if !ok { return false } *x = t return true } // ErrorAs implements driver.Topic.ErrorAs func (*topic) ErrorAs(error, interface{}) bool { return false } // ErrorCode implements driver.Topic.ErrorCode func (*topic) ErrorCode(err error) gcerrors.ErrorCode { if err == errNotExist { return gcerrors.NotFound } return gcerrors.Unknown } // Close implements driver.Topic.Close. func (*topic) Close() error { return nil } type subscription struct { mu sync.Mutex topic *topic ackDeadline time.Duration msgs map[driver.AckID]*message // all unacknowledged messages } // NewSubscription creates a new subscription for the given topic. // It panics if the given topic did not come from mempubsub. // If a message is not acked within in the given ack deadline from when // it is received, then it will be redelivered. func NewSubscription(pstopic *pubsub.Topic, ackDeadline time.Duration) *pubsub.Subscription { var t *topic if !pstopic.As(&t) { panic("mempubsub: NewSubscription passed a Topic not from mempubsub") } return pubsub.NewSubscription(newSubscription(t, ackDeadline), nil, nil) } func newSubscription(topic *topic, ackDeadline time.Duration) *subscription { s := &subscription{ topic: topic, ackDeadline: ackDeadline, msgs: map[driver.AckID]*message{}, } if topic != nil { topic.mu.Lock() defer topic.mu.Unlock() topic.subs = append(topic.subs, s) } return s } type message struct { msg *driver.Message expiration time.Time } func (s *subscription) add(ms []*driver.Message) { s.mu.Lock() defer s.mu.Unlock() for _, m := range ms { // The new message will expire at the zero time, which means it will be // immediately eligible for delivery. s.msgs[m.AckID] = &message{msg: m} } } // Collect some messages available for delivery. Since we're iterating over a map, // the order of the messages won't match the publish order, which mimics the actual // behavior of most pub/sub services. func (s *subscription) receiveNoWait(now time.Time, max int) []*driver.Message { var msgs []*driver.Message s.mu.Lock() defer s.mu.Unlock() for _, m := range s.msgs { if now.After(m.expiration) { msgs = append(msgs, m.msg) m.expiration = now.Add(s.ackDeadline) if len(msgs) == max { return msgs } } } return msgs } // How long ReceiveBatch should wait if no messages are available, to avoid // spinning. const pollDuration = 250 * time.Millisecond // ReceiveBatch implements driver.ReceiveBatch. func (s *subscription) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { // Check for closed or cancelled before doing any work. if err := s.wait(ctx, 0); err != nil { return nil, err } msgs := s.receiveNoWait(time.Now(), maxMessages) if len(msgs) == 0 { // When we return no messages and no error, the portable type will call // ReceiveBatch again immediately. Sleep for a bit to avoid spinning. time.Sleep(pollDuration) } return msgs, nil } func (s *subscription) wait(ctx context.Context, dur time.Duration) error { if s.topic == nil { return errNotExist } select { case <-ctx.Done(): return ctx.Err() case <-time.After(dur): return nil } } // SendAcks implements driver.SendAcks. func (s *subscription) SendAcks(ctx context.Context, ackIDs []driver.AckID) error { if s.topic == nil { return errNotExist } // Check for context done before doing any work. if err := ctx.Err(); err != nil { return err } // Acknowledge messages by removing them from the map. // Since there is a single map, this correctly handles the case where a message // is redelivered, but the first receiver acknowledges it. s.mu.Lock() defer s.mu.Unlock() for _, id := range ackIDs { // It is OK if the message is not in the map; that just means it has been // previously acked. delete(s.msgs, id) } return nil } // CanNack implements driver.CanNack. func (s *subscription) CanNack() bool { return true } // SendNacks implements driver.SendNacks. func (s *subscription) SendNacks(ctx context.Context, ackIDs []driver.AckID) error { if s.topic == nil { return errNotExist } // Check for context done before doing any work. if err := ctx.Err(); err != nil { return err } // Nack messages by setting their expiration to the zero time. s.mu.Lock() defer s.mu.Unlock() for _, id := range ackIDs { if m := s.msgs[id]; m != nil { m.expiration = time.Time{} } } return nil } // IsRetryable implements driver.Subscription.IsRetryable. func (*subscription) IsRetryable(error) bool { return false } // As implements driver.Subscription.As. func (s *subscription) As(i interface{}) bool { return false } // ErrorAs implements driver.Subscription.ErrorAs func (*subscription) ErrorAs(error, interface{}) bool { return false } // ErrorCode implements driver.Subscription.ErrorCode func (*subscription) ErrorCode(err error) gcerrors.ErrorCode { if err == errNotExist { return gcerrors.NotFound } return gcerrors.Unknown } // Close implements driver.Subscription.Close. func (*subscription) Close() error { return nil } go-cloud-0.20.0/pubsub/mempubsub/mem_test.go000066400000000000000000000070361367004507500207620ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mempubsub import ( "context" "testing" "time" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" ) func TestReceive(t *testing.T) { ctx := context.Background() topic := &topic{} sub := newSubscription(topic, 3*time.Second) if err := topic.SendBatch(ctx, []*driver.Message{ {Body: []byte("a")}, {Body: []byte("b")}, {Body: []byte("c")}, }); err != nil { t.Fatal(err) } now := time.Now() // We should get only two of the published messages. msgs := sub.receiveNoWait(now, 2) if got, want := len(msgs), 2; got != want { t.Fatalf("got %d, want %d", got, want) } // We should get the remaining message. msgs = sub.receiveNoWait(now, 2) if got, want := len(msgs), 1; got != want { t.Fatalf("got %d, want %d", got, want) } // Since all the messages are outstanding, we shouldn't get any. msgs2 := sub.receiveNoWait(now, 10) if got, want := len(msgs2), 0; got != want { t.Fatalf("got %d, want %d", got, want) } // Advance time past expiration, and we should get all the messages again, // since we didn't ack any. now = now.Add(time.Hour) msgs = sub.receiveNoWait(now, 10) if got, want := len(msgs), 3; got != want { t.Fatalf("got %d, want %d", got, want) } // Again, since all the messages are outstanding, we shouldn't get any. msgs2 = sub.receiveNoWait(now, 10) if got, want := len(msgs2), 0; got != want { t.Fatalf("got %d, want %d", got, want) } // Now ack the messages. var ackIDs []driver.AckID for _, m := range msgs { ackIDs = append(ackIDs, m.AckID) } sub.SendAcks(ctx, ackIDs) // They will never be delivered again, even if we wait past the ack deadline. now = now.Add(time.Hour) msgs = sub.receiveNoWait(now, 10) if got, want := len(msgs), 0; got != want { t.Fatalf("got %d, want %d", got, want) } } func TestOpenTopicFromURL(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"mem://mytopic", false}, // Invalid parameter. {"mem://mytopic?param=value", true}, } ctx := context.Background() for _, test := range tests { topic, err := pubsub.OpenTopic(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if topic != nil { topic.Shutdown(ctx) } } } func TestOpenSubscriptionFromURL(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"mem://mytopic", false}, // OK with ackdeadline {"mem://mytopic?ackdeadline=30s", false}, // Invalid ackdeadline {"mem://mytopic?ackdeadline=notaduration", true}, // Nonexistent topic. {"mem://nonexistenttopic", true}, // Invalid parameter. {"mem://myproject/mysub?param=value", true}, } ctx := context.Background() pubsub.OpenTopic(ctx, "mem://mytopic") for _, test := range tests { sub, err := pubsub.OpenSubscription(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if sub != nil { sub.Shutdown(ctx) } } } go-cloud-0.20.0/pubsub/natspubsub/000077500000000000000000000000001367004507500167775ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/natspubsub/example_test.go000066400000000000000000000107101367004507500220170ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package natspubsub_test import ( "context" "log" "github.com/nats-io/nats.go" "gocloud.dev/pubsub" "gocloud.dev/pubsub/natspubsub" ) func ExampleOpenTopic() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() natsConn, err := nats.Connect("nats://nats.example.com") if err != nil { log.Fatal(err) } defer natsConn.Close() topic, err := natspubsub.OpenTopic(natsConn, "example.mysubject", nil) if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func ExampleOpenSubscription() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() natsConn, err := nats.Connect("nats://nats.example.com") if err != nil { log.Fatal(err) } defer natsConn.Close() subscription, err := natspubsub.OpenSubscription( natsConn, "example.mysubject", nil) if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } func ExampleOpenQueueSubscription() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() natsConn, err := nats.Connect("nats://nats.example.com") if err != nil { log.Fatal(err) } defer natsConn.Close() subscription, err := natspubsub.OpenSubscription( natsConn, "example.mysubject", &natspubsub.SubscriptionOptions{Queue: "queue1"}) if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } func Example_openTopicFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/natspubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenTopic creates a *pubsub.Topic from a URL. // This URL will Dial the NATS server at the URL in the environment variable // NATS_SERVER_URL and send messages with subject "example.mysubject". topic, err := pubsub.OpenTopic(ctx, "nats://example.mysubject") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func Example_openSubscriptionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/natspubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenSubscription creates a *pubsub.Subscription from a URL. // This URL will Dial the NATS server at the URL in the environment variable // NATS_SERVER_URL and receive messages with subject "example.mysubject". subscription, err := pubsub.OpenSubscription(ctx, "nats://example.mysubject") if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } func Example_openQueueSubscriptionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/natspubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenSubscription creates a *pubsub.Subscription from a URL. // This URL will Dial the NATS server at the URL in the environment variable // NATS_SERVER_URL and receive messages with subject "example.mysubject" // This URL will be parsed and the queue attribute will be used as the Queue parameter when creating the NATS Subscription. subscription, err := pubsub.OpenSubscription(ctx, "nats://example.mysubject?queue=myqueue") if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } go-cloud-0.20.0/pubsub/natspubsub/go.mod000066400000000000000000000017071367004507500201120ustar00rootroot00000000000000// Copyright 2018-2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev/pubsub/natspubsub go 1.12 require ( github.com/google/go-cmp v0.4.1 github.com/nats-io/jwt v1.0.1 // indirect github.com/nats-io/nats-server/v2 v2.0.0 github.com/nats-io/nats.go v1.10.0 github.com/nats-io/nkeys v0.2.0 // indirect gocloud.dev v0.20.0 golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 // indirect ) go-cloud-0.20.0/pubsub/natspubsub/go.sum000066400000000000000000001363731367004507500201470ustar00rootroot00000000000000bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3 h1:0sMegbmn/8uTwpNkB0q9cLEpZ2W5a6kl+wtBQgPWBJQ= cloud.google.com/go v0.44.3/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.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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 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/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= 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/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 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/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/nats-io/jwt v0.2.6 h1:eAyoYvGgGLXR2EpnsBUvi/FcFrBqN6YKFVbOoEfPN4k= github.com/nats-io/jwt v0.2.6/go.mod h1:mQxQ0uHQ9FhEVPIcTSKwx2lqZEpXWWcCgA7R6NrWvvY= github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/jwt v1.0.1 h1:71ivoESdfT2K/qDiw5YwX/3W9/dR7c+m83xiGOj/EZ4= github.com/nats-io/jwt v1.0.1/go.mod h1:n3cvmLfBfnpV4JJRN7lRYCyZnw48ksGsbThGXEk4w9M= github.com/nats-io/nats-server/v2 v2.0.0 h1:rbFV7gfUPErVdKImVMOlW8Qb1V22nlcpqup5cb9rYa8= github.com/nats-io/nats-server/v2 v2.0.0/go.mod h1:RyVdsHHvY4B6c9pWG+uRLpZ0h0XsqiuKp2XCTurP5LI= github.com/nats-io/nats.go v1.8.1 h1:6lF/f1/NN6kzUDBz6pyvQDEXO39jqXcWRLu/tKjtOUQ= github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nats.go v1.10.0 h1:L8qnKaofSfNFbXg0C5F71LdjPRnmQwSsA4ukmkt1TvY= github.com/nats-io/nats.go v1.10.0/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE= github.com/nats-io/nkeys v0.0.2 h1:+qM7QpgXnvDDixitZtQUBDY9w/s9mu1ghS+JIbsrx6M= github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nkeys v0.1.3 h1:6JrEfig+HzTH85yxzhSVbjHRJv9cn0p6n3IngIcM5/k= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nkeys v0.2.0 h1:WXKF7diOaPU9cJdLD7nuzwasQy9vT1tBqzXZZf3AMJM= github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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/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/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/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.5.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 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= 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/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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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-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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 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/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 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= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= go-cloud-0.20.0/pubsub/natspubsub/nats.go000066400000000000000000000316041367004507500202770ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package natspubsub provides a pubsub implementation for NATS.io. Use OpenTopic to // construct a *pubsub.Topic, and/or OpenSubscription to construct a // *pubsub.Subscription. This package uses gob to encode and decode driver.Message to // []byte. // // URLs // // For pubsub.OpenTopic and pubsub.OpenSubscription, natspubsub registers // for the scheme "nats". // The default URL opener will connect to a default server based on the // environment variable "NATS_SERVER_URL". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Message Delivery Semantics // // NATS supports at-most-semantics; applications need not call Message.Ack, // and must not call Message.Nack. // See https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // for more background. // // As // // natspubsub exposes the following types for As: // - Topic: *nats.Conn // - Subscription: *nats.Subscription // - Message.BeforeSend: None. // - Message: *nats.Msg package natspubsub // import "gocloud.dev/pubsub/natspubsub" import ( "bytes" "context" "encoding/gob" "errors" "fmt" "net/url" "os" "path" "strings" "sync" "time" "github.com/nats-io/nats.go" "gocloud.dev/gcerrors" "gocloud.dev/pubsub" "gocloud.dev/pubsub/batcher" "gocloud.dev/pubsub/driver" ) var errNotInitialized = errors.New("natspubsub: topic not initialized") var recvBatcherOpts = &batcher.Options{ // NATS has at-most-once semantics, meaning once it delivers a message, the // message won't be delivered again. // Therefore, we can't allow the portable type to read-ahead and queue any // messages; they might end up undelivered if the user never calls Receive // to get them. Setting both the MaxBatchSize and MaxHandlers to one means // that we'll only return a message at a time, which should be immediately // returned to the user. // // Note: there is a race condition where the original Receive that // triggered a call to ReceiveBatch ends up failing (e.g., due to a // Done context), and ReceiveBatch returns a message that ends up being // queued for the next Receive. That message is at risk of being dropped. // This seems OK. MaxBatchSize: 1, MaxHandlers: 1, // max concurrency for receives } func init() { o := new(defaultDialer) pubsub.DefaultURLMux().RegisterTopic(Scheme, o) pubsub.DefaultURLMux().RegisterSubscription(Scheme, o) } // defaultDialer dials a default NATS server based on the environment // variable "NATS_SERVER_URL". type defaultDialer struct { init sync.Once opener *URLOpener err error } func (o *defaultDialer) defaultConn(ctx context.Context) (*URLOpener, error) { o.init.Do(func() { serverURL := os.Getenv("NATS_SERVER_URL") if serverURL == "" { o.err = errors.New("NATS_SERVER_URL environment variable not set") return } conn, err := nats.Connect(serverURL) if err != nil { o.err = fmt.Errorf("failed to dial NATS_SERVER_URL %q: %v", serverURL, err) return } o.opener = &URLOpener{Connection: conn} }) return o.opener, o.err } func (o *defaultDialer) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { opener, err := o.defaultConn(ctx) if err != nil { return nil, fmt.Errorf("open topic %v: failed to open default connection: %v", u, err) } return opener.OpenTopicURL(ctx, u) } func (o *defaultDialer) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { opener, err := o.defaultConn(ctx) if err != nil { return nil, fmt.Errorf("open subscription %v: failed to open default connection: %v", u, err) } return opener.OpenSubscriptionURL(ctx, u) } // Scheme is the URL scheme natspubsub registers its URLOpeners under on pubsub.DefaultMux. const Scheme = "nats" // URLOpener opens NATS URLs like "nats://mysubject". // // The URL host+path is used as the subject. // // No query parameters are supported. type URLOpener struct { // Connection to use for communication with the server. Connection *nats.Conn // TopicOptions specifies the options to pass to OpenTopic. TopicOptions TopicOptions // SubscriptionOptions specifies the options to pass to OpenSubscription. SubscriptionOptions SubscriptionOptions } // OpenTopicURL opens a pubsub.Topic based on u. func (o *URLOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { for param := range u.Query() { return nil, fmt.Errorf("open topic %v: invalid query parameter %s", u, param) } subject := path.Join(u.Host, u.Path) return OpenTopic(o.Connection, subject, &o.TopicOptions) } // OpenSubscriptionURL opens a pubsub.Subscription based on u. func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { opts := o.SubscriptionOptions for param, values := range u.Query() { if strings.ToLower(param) == "queue" && values != nil { opts.Queue = values[0] } else { return nil, fmt.Errorf("open subscription %v: invalid query parameter %s", u, param) } } subject := path.Join(u.Host, u.Path) return OpenSubscription(o.Connection, subject, &opts) } // TopicOptions sets options for constructing a *pubsub.Topic backed by NATS. type TopicOptions struct{} // SubscriptionOptions sets options for constructing a *pubsub.Subscription // backed by NATS. type SubscriptionOptions struct { // Queue sets the subscription as a QueueSubcription. // For more info, see https://docs.nats.io/nats-concepts/queue. Queue string } type topic struct { nc *nats.Conn subj string } // OpenTopic returns a *pubsub.Topic for use with NATS. // The subject is the NATS Subject; for more info, see // https://nats.io/documentation/writing_applications/subjects. func OpenTopic(nc *nats.Conn, subject string, _ *TopicOptions) (*pubsub.Topic, error) { dt, err := openTopic(nc, subject) if err != nil { return nil, err } return pubsub.NewTopic(dt, nil), nil } // openTopic returns the driver for OpenTopic. This function exists so the test // harness can get the driver interface implementation if it needs to. func openTopic(nc *nats.Conn, subject string) (driver.Topic, error) { if nc == nil { return nil, errors.New("natspubsub: nats.Conn is required") } return &topic{nc, subject}, nil } // SendBatch implements driver.Topic.SendBatch. func (t *topic) SendBatch(ctx context.Context, msgs []*driver.Message) error { if t == nil || t.nc == nil { return errNotInitialized } for _, m := range msgs { if err := ctx.Err(); err != nil { return err } // TODO(jba): benchmark message encoding to see if it's // worth reusing a buffer. payload, err := encodeMessage(m) if err != nil { return err } if m.BeforeSend != nil { asFunc := func(i interface{}) bool { return false } if err := m.BeforeSend(asFunc); err != nil { return err } } if err := t.nc.Publish(t.subj, payload); err != nil { return err } } // Per specification this is supposed to only return after // a message has been sent. Normally NATS is very efficient // at sending messages in batches on its own and also handles // disconnected buffering during a reconnect event. We will // let NATS handle this for now. If needed we could add a // FlushWithContext() call which ensures the connected server // has processed all the messages. return nil } // IsRetryable implements driver.Topic.IsRetryable. func (*topic) IsRetryable(error) bool { return false } // As implements driver.Topic.As. func (t *topic) As(i interface{}) bool { c, ok := i.(**nats.Conn) if !ok { return false } *c = t.nc return true } // ErrorAs implements driver.Topic.ErrorAs func (*topic) ErrorAs(error, interface{}) bool { return false } // ErrorCode implements driver.Topic.ErrorCode func (*topic) ErrorCode(err error) gcerrors.ErrorCode { switch err { case nil: return gcerrors.OK case context.Canceled: return gcerrors.Canceled case errNotInitialized: return gcerrors.NotFound case nats.ErrBadSubject: return gcerrors.FailedPrecondition case nats.ErrAuthorization: return gcerrors.PermissionDenied case nats.ErrMaxPayload, nats.ErrReconnectBufExceeded: return gcerrors.ResourceExhausted } return gcerrors.Unknown } // Close implements driver.Topic.Close. func (*topic) Close() error { return nil } type subscription struct { nc *nats.Conn nsub *nats.Subscription } // OpenSubscription returns a *pubsub.Subscription representing a NATS subscription or NATS queue subscription. // The subject is the NATS Subject to subscribe to; // for more info, see https://nats.io/documentation/writing_applications/subjects. func OpenSubscription(nc *nats.Conn, subject string, opts *SubscriptionOptions) (*pubsub.Subscription, error) { ds, err := openSubscription(nc, subject, opts) if err != nil { return nil, err } return pubsub.NewSubscription(ds, recvBatcherOpts, nil), nil } func openSubscription(nc *nats.Conn, subject string, opts *SubscriptionOptions) (driver.Subscription, error) { var sub *nats.Subscription var err error if opts != nil && opts.Queue != "" { sub, err = nc.QueueSubscribeSync(subject, opts.Queue) } else { sub, err = nc.SubscribeSync(subject) } if err != nil { return nil, err } return &subscription{nc, sub}, nil } // ReceiveBatch implements driver.ReceiveBatch. func (s *subscription) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { if s == nil || s.nsub == nil { return nil, nats.ErrBadSubscription } msg, err := s.nsub.NextMsg(100 * time.Millisecond) if err != nil { if err == nats.ErrTimeout { return nil, nil } return nil, err } dm, err := decode(msg) if err != nil { return nil, err } return []*driver.Message{dm}, nil } // Convert NATS msgs to *driver.Message. func decode(msg *nats.Msg) (*driver.Message, error) { if msg == nil { return nil, nats.ErrInvalidMsg } var dm driver.Message if err := decodeMessage(msg.Data, &dm); err != nil { return nil, err } dm.AckID = -1 // Not applicable to NATS dm.AsFunc = messageAsFunc(msg) return &dm, nil } func messageAsFunc(msg *nats.Msg) func(interface{}) bool { return func(i interface{}) bool { p, ok := i.(**nats.Msg) if !ok { return false } *p = msg return true } } // SendAcks implements driver.Subscription.SendAcks. func (s *subscription) SendAcks(ctx context.Context, ids []driver.AckID) error { // Ack is a no-op. return nil } // CanNack implements driver.CanNack. func (s *subscription) CanNack() bool { return false } // SendNacks implements driver.Subscription.SendNacks. It should never be called // because we return false for CanNack. func (s *subscription) SendNacks(ctx context.Context, ids []driver.AckID) error { panic("unreachable") } // IsRetryable implements driver.Subscription.IsRetryable. func (s *subscription) IsRetryable(error) bool { return false } // As implements driver.Subscription.As. func (s *subscription) As(i interface{}) bool { c, ok := i.(**nats.Subscription) if !ok { return false } *c = s.nsub return true } // ErrorAs implements driver.Subscription.ErrorAs func (*subscription) ErrorAs(error, interface{}) bool { return false } // ErrorCode implements driver.Subscription.ErrorCode func (*subscription) ErrorCode(err error) gcerrors.ErrorCode { switch err { case nil: return gcerrors.OK case context.Canceled: return gcerrors.Canceled case errNotInitialized, nats.ErrBadSubscription: return gcerrors.NotFound case nats.ErrBadSubject, nats.ErrTypeSubscription: return gcerrors.FailedPrecondition case nats.ErrAuthorization: return gcerrors.PermissionDenied case nats.ErrMaxMessages, nats.ErrSlowConsumer: return gcerrors.ResourceExhausted case nats.ErrTimeout: return gcerrors.DeadlineExceeded } return gcerrors.Unknown } // Close implements driver.Subscription.Close. func (*subscription) Close() error { return nil } func encodeMessage(dm *driver.Message) ([]byte, error) { var buf bytes.Buffer enc := gob.NewEncoder(&buf) if len(dm.Metadata) == 0 { return dm.Body, nil } if err := enc.Encode(dm.Metadata); err != nil { return nil, err } if err := enc.Encode(dm.Body); err != nil { return nil, err } return buf.Bytes(), nil } func decodeMessage(data []byte, dm *driver.Message) error { buf := bytes.NewBuffer(data) dec := gob.NewDecoder(buf) if err := dec.Decode(&dm.Metadata); err != nil { // This may indicate a normal NATS message, so just treat as the body. dm.Metadata = nil dm.Body = data return nil } return dec.Decode(&dm.Body) } go-cloud-0.20.0/pubsub/natspubsub/nats_test.go000066400000000000000000000320501367004507500213320ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package natspubsub import ( "bytes" "context" "fmt" "os" "testing" "gocloud.dev/gcerrors" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" "gocloud.dev/pubsub/drivertest" "github.com/google/go-cmp/cmp" "github.com/nats-io/nats-server/v2/server" gnatsd "github.com/nats-io/nats-server/v2/test" "github.com/nats-io/nats.go" ) const ( testPort = 11222 benchPort = 9222 ) type harness struct { s *server.Server nc *nats.Conn } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { opts := gnatsd.DefaultTestOptions opts.Port = testPort s := gnatsd.RunServer(&opts) nc, err := nats.Connect(fmt.Sprintf("nats://127.0.0.1:%d", testPort)) if err != nil { return nil, err } return &harness{s, nc}, nil } func (h *harness) CreateTopic(ctx context.Context, testName string) (driver.Topic, func(), error) { cleanup := func() {} dt, err := openTopic(h.nc, testName) if err != nil { return nil, nil, err } return dt, cleanup, nil } func (h *harness) MakeNonexistentTopic(ctx context.Context) (driver.Topic, error) { // A nil *topic behaves like a nonexistent topic. return (*topic)(nil), nil } func (h *harness) CreateSubscription(ctx context.Context, dt driver.Topic, testName string) (driver.Subscription, func(), error) { ds, err := openSubscription(h.nc, testName, nil) if err != nil { return nil, nil, err } cleanup := func() { var sub *nats.Subscription if ds.As(&sub) { sub.Unsubscribe() } } return ds, cleanup, nil } func (h *harness) CreateQueueSubscription(ctx context.Context, dt driver.Topic, testName string) (driver.Subscription, func(), error) { ds, err := openSubscription(h.nc, testName, &SubscriptionOptions{Queue: testName}) if err != nil { return nil, nil, err } cleanup := func() { var sub *nats.Subscription if ds.As(&sub) { sub.Unsubscribe() } } return ds, cleanup, nil } func (h *harness) MakeNonexistentSubscription(ctx context.Context) (driver.Subscription, error) { return (*subscription)(nil), nil } func (h *harness) Close() { h.nc.Close() h.s.Shutdown() } func (h *harness) MaxBatchSizes() (int, int) { return 0, 0 } func (*harness) SupportsMultipleSubscriptions() bool { return true } type natsAsTest struct{} func (natsAsTest) Name() string { return "nats test" } func (natsAsTest) TopicCheck(topic *pubsub.Topic) error { var c2 nats.Conn if topic.As(&c2) { return fmt.Errorf("cast succeeded for %T, want failure", &c2) } var c3 *nats.Conn if !topic.As(&c3) { return fmt.Errorf("cast failed for %T", &c3) } return nil } func (natsAsTest) SubscriptionCheck(sub *pubsub.Subscription) error { var c2 nats.Subscription if sub.As(&c2) { return fmt.Errorf("cast succeeded for %T, want failure", &c2) } var c3 *nats.Subscription if !sub.As(&c3) { return fmt.Errorf("cast failed for %T", &c3) } return nil } func (natsAsTest) TopicErrorCheck(t *pubsub.Topic, err error) error { var dummy string if t.ErrorAs(err, &dummy) { return fmt.Errorf("cast succeeded for %T, want failure", &dummy) } return nil } func (natsAsTest) SubscriptionErrorCheck(s *pubsub.Subscription, err error) error { var dummy string if s.ErrorAs(err, &dummy) { return fmt.Errorf("cast succeeded for %T, want failure", &dummy) } return nil } func (natsAsTest) MessageCheck(m *pubsub.Message) error { var pm nats.Msg if m.As(&pm) { return fmt.Errorf("cast succeeded for %T, want failure", &pm) } var ppm *nats.Msg if !m.As(&ppm) { return fmt.Errorf("cast failed for %T", &ppm) } return nil } func (natsAsTest) BeforeSend(as func(interface{}) bool) error { return nil } func TestConformance(t *testing.T) { asTests := []drivertest.AsTest{natsAsTest{}} drivertest.RunConformanceTests(t, newHarness, asTests) } // These are natspubsub specific to increase coverage. // If we only send a body we should be able to get that from a direct NATS subscriber. func TestInteropWithDirectNATS(t *testing.T) { ctx := context.Background() dh, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer dh.Close() conn := dh.(*harness).nc const topic = "foo" body := []byte("hello") // Send a message using Go CDK and receive it using NATS directly. pt, err := OpenTopic(conn, topic, nil) if err != nil { t.Fatal(err) } defer pt.Shutdown(ctx) nsub, _ := conn.SubscribeSync(topic) if err = pt.Send(ctx, &pubsub.Message{Body: body}); err != nil { t.Fatal(err) } m, err := nsub.NextMsgWithContext(ctx) if err != nil { t.Fatalf(err.Error()) } if !bytes.Equal(m.Data, body) { t.Fatalf("Data did not match. %q vs %q\n", m.Data, body) } // Send a message using NATS directly and receive it using Go CDK. ps, err := OpenSubscription(conn, topic, nil) if err != nil { t.Fatal(err) } defer ps.Shutdown(ctx) if err := conn.Publish(topic, body); err != nil { t.Fatal(err) } msg, err := ps.Receive(ctx) if err != nil { t.Fatal(err) } defer msg.Ack() if !bytes.Equal(msg.Body, body) { t.Fatalf("Data did not match. %q vs %q\n", m.Data, body) } } func TestErrorCode(t *testing.T) { ctx := context.Background() dh, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer dh.Close() h := dh.(*harness) // Topics dt, err := openTopic(h.nc, "bar") if err != nil { t.Fatal(err) } if gce := dt.ErrorCode(nil); gce != gcerrors.OK { t.Fatalf("Expected %v, got %v", gcerrors.OK, gce) } if gce := dt.ErrorCode(context.Canceled); gce != gcerrors.Canceled { t.Fatalf("Expected %v, got %v", gcerrors.Canceled, gce) } if gce := dt.ErrorCode(nats.ErrBadSubject); gce != gcerrors.FailedPrecondition { t.Fatalf("Expected %v, got %v", gcerrors.FailedPrecondition, gce) } if gce := dt.ErrorCode(nats.ErrAuthorization); gce != gcerrors.PermissionDenied { t.Fatalf("Expected %v, got %v", gcerrors.PermissionDenied, gce) } if gce := dt.ErrorCode(nats.ErrMaxPayload); gce != gcerrors.ResourceExhausted { t.Fatalf("Expected %v, got %v", gcerrors.ResourceExhausted, gce) } if gce := dt.ErrorCode(nats.ErrReconnectBufExceeded); gce != gcerrors.ResourceExhausted { t.Fatalf("Expected %v, got %v", gcerrors.ResourceExhausted, gce) } // Subscriptions ds, err := openSubscription(h.nc, "bar", nil) if err != nil { t.Fatal(err) } if gce := ds.ErrorCode(nil); gce != gcerrors.OK { t.Fatalf("Expected %v, got %v", gcerrors.OK, gce) } if gce := ds.ErrorCode(context.Canceled); gce != gcerrors.Canceled { t.Fatalf("Expected %v, got %v", gcerrors.Canceled, gce) } if gce := ds.ErrorCode(nats.ErrBadSubject); gce != gcerrors.FailedPrecondition { t.Fatalf("Expected %v, got %v", gcerrors.FailedPrecondition, gce) } if gce := ds.ErrorCode(nats.ErrBadSubscription); gce != gcerrors.NotFound { t.Fatalf("Expected %v, got %v", gcerrors.NotFound, gce) } if gce := ds.ErrorCode(nats.ErrTypeSubscription); gce != gcerrors.FailedPrecondition { t.Fatalf("Expected %v, got %v", gcerrors.FailedPrecondition, gce) } if gce := ds.ErrorCode(nats.ErrAuthorization); gce != gcerrors.PermissionDenied { t.Fatalf("Expected %v, got %v", gcerrors.PermissionDenied, gce) } if gce := ds.ErrorCode(nats.ErrMaxMessages); gce != gcerrors.ResourceExhausted { t.Fatalf("Expected %v, got %v", gcerrors.ResourceExhausted, gce) } if gce := ds.ErrorCode(nats.ErrSlowConsumer); gce != gcerrors.ResourceExhausted { t.Fatalf("Expected %v, got %v", gcerrors.ResourceExhausted, gce) } if gce := ds.ErrorCode(nats.ErrTimeout); gce != gcerrors.DeadlineExceeded { t.Fatalf("Expected %v, got %v", gcerrors.DeadlineExceeded, gce) } // Queue Subscription qs, err := openSubscription(h.nc, "bar", &SubscriptionOptions{Queue: t.Name()}) if err != nil { t.Fatal(err) } if gce := qs.ErrorCode(nil); gce != gcerrors.OK { t.Fatalf("Expected %v, got %v", gcerrors.OK, gce) } if gce := qs.ErrorCode(context.Canceled); gce != gcerrors.Canceled { t.Fatalf("Expected %v, got %v", gcerrors.Canceled, gce) } if gce := qs.ErrorCode(nats.ErrBadSubject); gce != gcerrors.FailedPrecondition { t.Fatalf("Expected %v, got %v", gcerrors.FailedPrecondition, gce) } if gce := qs.ErrorCode(nats.ErrBadSubscription); gce != gcerrors.NotFound { t.Fatalf("Expected %v, got %v", gcerrors.NotFound, gce) } if gce := qs.ErrorCode(nats.ErrTypeSubscription); gce != gcerrors.FailedPrecondition { t.Fatalf("Expected %v, got %v", gcerrors.FailedPrecondition, gce) } if gce := qs.ErrorCode(nats.ErrAuthorization); gce != gcerrors.PermissionDenied { t.Fatalf("Expected %v, got %v", gcerrors.PermissionDenied, gce) } if gce := qs.ErrorCode(nats.ErrMaxMessages); gce != gcerrors.ResourceExhausted { t.Fatalf("Expected %v, got %v", gcerrors.ResourceExhausted, gce) } if gce := qs.ErrorCode(nats.ErrSlowConsumer); gce != gcerrors.ResourceExhausted { t.Fatalf("Expected %v, got %v", gcerrors.ResourceExhausted, gce) } if gce := qs.ErrorCode(nats.ErrTimeout); gce != gcerrors.DeadlineExceeded { t.Fatalf("Expected %v, got %v", gcerrors.DeadlineExceeded, gce) } } func BenchmarkNatsQueuePubSub(b *testing.B) { ctx := context.Background() opts := gnatsd.DefaultTestOptions opts.Port = benchPort s := gnatsd.RunServer(&opts) defer s.Shutdown() nc, err := nats.Connect(fmt.Sprintf("nats://127.0.0.1:%d", benchPort)) if err != nil { b.Fatal(err) } defer nc.Close() h := &harness{s, nc} dt, cleanup, err := h.CreateTopic(ctx, b.Name()) if err != nil { b.Fatal(err) } defer cleanup() qs, cleanup, err := h.CreateQueueSubscription(ctx, dt, b.Name()) if err != nil { b.Fatal(err) } defer cleanup() topic := pubsub.NewTopic(dt, nil) defer topic.Shutdown(ctx) queueSub := pubsub.NewSubscription(qs, recvBatcherOpts, nil) defer queueSub.Shutdown(ctx) drivertest.RunBenchmarks(b, topic, queueSub) } func BenchmarkNatsPubSub(b *testing.B) { ctx := context.Background() opts := gnatsd.DefaultTestOptions opts.Port = benchPort s := gnatsd.RunServer(&opts) defer s.Shutdown() nc, err := nats.Connect(fmt.Sprintf("nats://127.0.0.1:%d", benchPort)) if err != nil { b.Fatal(err) } defer nc.Close() h := &harness{s, nc} dt, cleanup, err := h.CreateTopic(ctx, b.Name()) if err != nil { b.Fatal(err) } defer cleanup() ds, cleanup, err := h.CreateSubscription(ctx, dt, b.Name()) if err != nil { b.Fatal(err) } defer cleanup() topic := pubsub.NewTopic(dt, nil) defer topic.Shutdown(ctx) sub := pubsub.NewSubscription(ds, recvBatcherOpts, nil) defer sub.Shutdown(ctx) drivertest.RunBenchmarks(b, topic, sub) } func fakeConnectionStringInEnv() func() { oldEnvVal := os.Getenv("NATS_SERVER_URL") os.Setenv("NATS_SERVER_URL", fmt.Sprintf("nats://localhost:%d", testPort)) return func() { os.Setenv("NATS_SERVER_URL", oldEnvVal) } } func TestOpenTopicFromURL(t *testing.T) { ctx := context.Background() dh, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer dh.Close() cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"nats://mytopic", false}, // Invalid parameter. {"nats://mytopic?param=value", true}, } for _, test := range tests { topic, err := pubsub.OpenTopic(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if topic != nil { topic.Shutdown(ctx) } } } func TestOpenSubscriptionFromURL(t *testing.T) { ctx := context.Background() dh, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer dh.Close() cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"nats://mytopic", false}, // Invalid parameter. {"nats://mytopic?param=value", true}, // Queue URL Parameter for QueueSubscription. {"nats://mytopic?queue=queue1", false}, } for _, test := range tests { sub, err := pubsub.OpenSubscription(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if sub != nil { sub.Shutdown(ctx) } } } func TestCodec(t *testing.T) { for _, dm := range []*driver.Message{ {Metadata: nil, Body: nil}, {Metadata: map[string]string{"a": "1"}, Body: nil}, {Metadata: nil, Body: []byte("hello")}, {Metadata: map[string]string{"a": "1"}, Body: []byte("hello")}, {Metadata: map[string]string{"a": "1"}, Body: []byte("hello"), AckID: "foo", AsFunc: func(interface{}) bool { return true }}, } { bytes, err := encodeMessage(dm) if err != nil { t.Fatal(err) } var got driver.Message if err := decodeMessage(bytes, &got); err != nil { t.Fatal(err) } want := *dm want.AckID = nil want.AsFunc = nil if diff := cmp.Diff(got, want); diff != "" { t.Errorf("%+v:\n%s", want, diff) } } } go-cloud-0.20.0/pubsub/pub_test.go000066400000000000000000000042201367004507500167630ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pubsub_test import ( "context" "testing" "time" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" ) type funcTopic struct { driver.Topic sendBatch func(ctx context.Context, ms []*driver.Message) error closed bool } func (t *funcTopic) SendBatch(ctx context.Context, ms []*driver.Message) error { return t.sendBatch(ctx, ms) } func (t *funcTopic) IsRetryable(error) bool { return false } func (t *funcTopic) Close() error { t.closed = true return nil } func TestTopicShutdownCanBeCanceledEvenWithHangingSend(t *testing.T) { dt := &funcTopic{ sendBatch: func(ctx context.Context, ms []*driver.Message) error { <-ctx.Done() return ctx.Err() }, } topic := pubsub.NewTopic(dt, nil) go func() { m := &pubsub.Message{} if err := topic.Send(context.Background(), m); err == nil { t.Fatal("nil err from Send, expected context cancellation error") } }() done := make(chan struct{}) ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond) defer cancel() go func() { topic.Shutdown(ctx) close(done) }() // Now cancel the context being used by topic.Shutdown. cancel() // It shouldn't take too long before topic.Shutdown stops. tooLong := 5 * time.Second select { case <-done: case <-time.After(tooLong): t.Fatalf("waited too long(%v) for Shutdown(ctx) to run", tooLong) } } func TestTopicCloseIsCalled(t *testing.T) { ctx := context.Background() dt := &funcTopic{} topic := pubsub.NewTopic(dt, nil) topic.Shutdown(ctx) if !dt.closed { t.Error("want Topic.Close to have been called") } } go-cloud-0.20.0/pubsub/pubsub.go000066400000000000000000001003041367004507500164360ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package pubsub provides an easy and portable way to interact with // publish/subscribe systems. Subpackages contain driver implementations of // pubsub for supported services // // See https://gocloud.dev/howto/pubsub/ for a detailed how-to guide. // // // At-most-once and At-least-once Delivery // // The semantics of message delivery vary across PubSub services. // Some services guarantee that messages received by subscribers but not // acknowledged are delivered again (at-least-once semantics). In others, // a message will be delivered only once, if it is delivered at all // (at-most-once semantics). Some services support both modes via options. // // This package accommodates both kinds of systems, but application developers // should think carefully about which kind of semantics the application needs. // Even though the application code may look similar, system-level // characteristics are quite different. See the driver package // documentation for more information about message delivery semantics. // // After receiving a Message via Subscription.Receive: // - Always call Message.Ack or Message.Nack after processing the message. // - For some drivers, Ack will be a no-op. // - For some drivers, Nack is not supported and will panic; you can call // Message.Nackable to see. // // OpenCensus Integration // // OpenCensus supports tracing and metric collection for multiple languages and // backend providers. See https://opencensus.io. // // This API collects OpenCensus traces and metrics for the following methods: // - Topic.Send // - Topic.Shutdown // - Subscription.Receive // - Subscription.Shutdown // - The internal driver methods SendBatch, SendAcks and ReceiveBatch. // All trace and metric names begin with the package import path. // The traces add the method name. // For example, "gocloud.dev/pubsub/Topic.Send". // The metrics are "completed_calls", a count of completed method calls by driver, // method and status (error code); and "latency", a distribution of method latency // by driver and method. // For example, "gocloud.dev/pubsub/latency". // // To enable trace collection in your application, see "Configure Exporter" at // https://opencensus.io/quickstart/go/tracing. // To enable metric collection in your application, see "Exporting stats" at // https://opencensus.io/quickstart/go/metrics. package pubsub // import "gocloud.dev/pubsub" import ( "context" "fmt" "log" "math" "net/url" "reflect" "runtime" "sync" "time" "unicode/utf8" gax "github.com/googleapis/gax-go" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/oc" "gocloud.dev/internal/openurl" "gocloud.dev/internal/retry" "gocloud.dev/pubsub/batcher" "gocloud.dev/pubsub/driver" "golang.org/x/sync/errgroup" ) // Message contains data to be published. type Message struct { // Body contains the content of the message. Body []byte // Metadata has key/value metadata for the message. // // When sending a message, set any key/value pairs you want associated with // the message. It is acceptable for Metadata to be nil. // Note that some services limit the number of key/value pairs per message. // // When receiving a message, Metadata will be nil if the message has no // associated metadata. Metadata map[string]string // BeforeSend is a callback used when sending a message. It will always be // set to nil for received messages. // // The callback will be called exactly once, before the message is sent. // // asFunc converts its argument to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. BeforeSend func(asFunc func(interface{}) bool) error // asFunc invokes driver.Message.AsFunc. asFunc func(interface{}) bool // ack is a closure that queues this message for the action (ack or nack). ack func(isAck bool) // nackable is true iff Nack can be called without panicking. nackable bool // mu guards isAcked in case Ack/Nack is called concurrently. mu sync.Mutex // isAcked tells whether this message has already had its Ack or Nack // method called. isAcked bool } // Ack acknowledges the message, telling the server that it does not need to be // sent again to the associated Subscription. It will be a no-op for some // drivers; see // https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // for more info. // // Ack returns immediately, but the actual ack is sent in the background, and // is not guaranteed to succeed. If background acks persistently fail, the error // will be returned from a subsequent Receive. func (m *Message) Ack() { m.mu.Lock() defer m.mu.Unlock() if m.isAcked { panic(fmt.Sprintf("Ack/Nack called twice on message: %+v", m)) } m.ack(true) m.isAcked = true } // Nackable returns true iff Nack can be called without panicking. // // Some services do not support Nack; for example, at-most-once services // can't redeliver a message. See // https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // for more info. func (m *Message) Nackable() bool { return m.nackable } // Nack (short for negative acknowledgment) tells the server that this Message // was not processed and should be redelivered. // // Nack panics for some drivers, as Nack is meaningless when messages can't be // redelivered. You can call Nackable to determine if Nack is available. See // https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // fore more info. // // Nack returns immediately, but the actual nack is sent in the background, // and is not guaranteed to succeed. // // Nack is a performance optimization for retrying transient failures. It // must not be used for message parse errors or other messages that the // application will never be able to process: calling Nack will cause them to // be redelivered and overload the server. Instead, an application should call // Ack and log the failure in some monitored way. func (m *Message) Nack() { m.mu.Lock() defer m.mu.Unlock() if m.isAcked { panic(fmt.Sprintf("Ack/Nack called twice on message: %+v", m)) } if !m.nackable { panic("Message.Nack is not supported by this driver") } m.ack(false) m.isAcked = true } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. // As panics unless it is called on a message obtained from Subscription.Receive. func (m *Message) As(i interface{}) bool { if m.asFunc == nil { panic("As called on a Message that was not obtained from Receive") } return m.asFunc(i) } // Topic publishes messages to all its subscribers. type Topic struct { driver driver.Topic batcher *batcher.Batcher tracer *oc.Tracer mu sync.Mutex err error // cancel cancels all SendBatch calls. cancel func() } type msgErrChan struct { msg *Message errChan chan error } // Send publishes a message. It only returns after the message has been // sent, or failed to be sent. Send can be called from multiple goroutines // at once. func (t *Topic) Send(ctx context.Context, m *Message) (err error) { ctx = t.tracer.Start(ctx, "Topic.Send") defer func() { t.tracer.End(ctx, err) }() // Check for doneness before we do any work. if err := ctx.Err(); err != nil { return err // Return context errors unwrapped. } t.mu.Lock() err = t.err t.mu.Unlock() if err != nil { return err // t.err wrapped when set } for k, v := range m.Metadata { if !utf8.ValidString(k) { return gcerr.Newf(gcerr.InvalidArgument, nil, "pubsub: Message.Metadata keys must be valid UTF-8 strings: %q", k) } if !utf8.ValidString(v) { return gcerr.Newf(gcerr.InvalidArgument, nil, "pubsub: Message.Metadata values must be valid UTF-8 strings: %q", v) } } dm := &driver.Message{ Body: m.Body, Metadata: m.Metadata, BeforeSend: m.BeforeSend, } return t.batcher.Add(ctx, dm) } var errTopicShutdown = gcerr.Newf(gcerr.FailedPrecondition, nil, "pubsub: Topic has been Shutdown") // Shutdown flushes pending message sends and disconnects the Topic. // It only returns after all pending messages have been sent. func (t *Topic) Shutdown(ctx context.Context) (err error) { ctx = t.tracer.Start(ctx, "Topic.Shutdown") defer func() { t.tracer.End(ctx, err) }() t.mu.Lock() if t.err == errTopicShutdown { t.mu.Unlock() return t.err } t.err = errTopicShutdown t.mu.Unlock() c := make(chan struct{}) go func() { defer close(c) t.batcher.Shutdown() }() select { case <-ctx.Done(): case <-c: } t.cancel() if err := t.driver.Close(); err != nil { return wrapError(t.driver, err) } return ctx.Err() } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (t *Topic) As(i interface{}) bool { return t.driver.As(i) } // ErrorAs converts err to driver-specific types. // ErrorAs panics if i is nil or not a pointer. // ErrorAs returns false if err == nil. // See https://gocloud.dev/concepts/as/ for background information. func (t *Topic) ErrorAs(err error, i interface{}) bool { return gcerr.ErrorAs(err, i, t.driver.ErrorAs) } // NewTopic is for use by drivers only. Do not use in application code. var NewTopic = newTopic // newSendBatcher creates a batcher for topics, for use with NewTopic. func newSendBatcher(ctx context.Context, t *Topic, dt driver.Topic, opts *batcher.Options) *batcher.Batcher { const maxHandlers = 1 handler := func(items interface{}) error { dms := items.([]*driver.Message) err := retry.Call(ctx, gax.Backoff{}, dt.IsRetryable, func() (err error) { ctx2 := t.tracer.Start(ctx, "driver.Topic.SendBatch") defer func() { t.tracer.End(ctx2, err) }() return dt.SendBatch(ctx2, dms) }) if err != nil { return wrapError(dt, err) } return nil } return batcher.New(reflect.TypeOf(&driver.Message{}), opts, handler) } // newTopic makes a pubsub.Topic from a driver.Topic. // // opts may be nil to accept defaults. func newTopic(d driver.Topic, opts *batcher.Options) *Topic { ctx, cancel := context.WithCancel(context.Background()) t := &Topic{ driver: d, tracer: newTracer(d), cancel: cancel, } t.batcher = newSendBatcher(ctx, t, d, opts) return t } const pkgName = "gocloud.dev/pubsub" var ( latencyMeasure = oc.LatencyMeasure(pkgName) // OpenCensusViews are predefined views for OpenCensus metrics. // The views include counts and latency distributions for API method calls. // See the example at https://godoc.org/go.opencensus.io/stats/view for usage. OpenCensusViews = oc.Views(pkgName, latencyMeasure) ) func newTracer(driver interface{}) *oc.Tracer { return &oc.Tracer{ Package: pkgName, Provider: oc.ProviderName(driver), LatencyMeasure: latencyMeasure, } } // Subscription receives published messages. type Subscription struct { driver driver.Subscription tracer *oc.Tracer // ackBatcher makes batches of acks and nacks and sends them to the server. ackBatcher *batcher.Batcher canNack bool // true iff the driver supports Nack backgroundCtx context.Context // for background SendAcks and ReceiveBatch calls cancel func() // for canceling backgroundCtx recvBatchOpts *batcher.Options mu sync.Mutex // protects everything below q []*driver.Message // local queue of messages downloaded from server err error // permanent error unreportedAckErr error // permanent error from background SendAcks that hasn't been returned to the user yet waitc chan struct{} // for goroutines waiting on ReceiveBatch runningBatchSize float64 // running number of messages to request via ReceiveBatch throughputStart time.Time // start time for throughput measurement, or the zero Time if queue is empty throughputEnd time.Time // end time for throughput measurement, or the zero Time if queue is not empty throughputCount int // number of msgs given out via Receive since throughputStart // Used in tests. preReceiveBatchHook func(maxMessages int) } const ( // The desired duration of a subscription's queue of messages (the messages pulled // and waiting in memory to be doled out to Receive callers). This is how long // it would take to drain the queue at the current processing rate. // The relationship to queue length (number of messages) is // // lengthInMessages = desiredQueueDuration / averageProcessTimePerMessage // // In other words, if it takes 100ms to process a message on average, and we want // 2s worth of queued messages, then we need 2/.1 = 20 messages in the queue. // // If desiredQueueDuration is too small, then there won't be a large enough buffer // of messages to handle fluctuations in processing time, and the queue is likely // to become empty, reducing throughput. If desiredQueueDuration is too large, then // messages will wait in memory for a long time, possibly timing out (that is, // their ack deadline will be exceeded). Those messages could have been handled // by another process receiving from the same subscription. desiredQueueDuration = 2 * time.Second // Expected duration of calls to driver.ReceiveBatch, at some high percentile. // We'll try to fetch more messages when the current queue is predicted // to be used up in expectedReceiveBatchDuration. expectedReceiveBatchDuration = 1 * time.Second // s.runningBatchSize holds our current best guess for how many messages to // fetch in order to have a buffer of desiredQueueDuration. When we have // fewer than prefetchRatio * s.runningBatchSize messages left, that means // we expect to run out of messages in expectedReceiveBatchDuration, so we // should initiate another ReceiveBatch call. prefetchRatio = float64(expectedReceiveBatchDuration) / float64(desiredQueueDuration) // The initial # of messages to request via ReceiveBatch. initialBatchSize = 1 // The factor by which old batch sizes decay when a new value is added to the // running value. The larger this number, the more weight will be given to the // newest value in preference to older ones. // // The delta based on a single value is capped by the constants below. decay = 0.5 // The maximum growth factor in a single jump. Higher values mean that the // batch size can increase more aggressively. For example, 2.0 means that the // batch size will at most double from one ReceiveBatch call to the next. maxGrowthFactor = 2.0 // Similarly, the maximum shrink factor. Lower values mean that the batch size // can shrink more aggressively. For example; 0.75 means that the batch size // will at most shrink to 75% of what it was before. Note that values less // than (1-decay) will have no effect because the running value can't change // by more than that. maxShrinkFactor = 0.75 // The maximum batch size to request. Setting this too low doesn't allow // drivers to get lots of messages at once; setting it too small risks having // drivers spend a long time in ReceiveBatch trying to achieve it. maxBatchSize = 3000 ) // updateBatchSize updates the number of messages to request in ReceiveBatch // based on the previous batch size and the rate of messages being pulled from // the queue, measured using s.throughput*. // // It returns the number of messages to request in this ReceiveBatch call. // // s.mu must be held. func (s *Subscription) updateBatchSize() int { // If we're always only doing one at a time, there's no point in this. if s.recvBatchOpts != nil && s.recvBatchOpts.MaxBatchSize == 1 && s.recvBatchOpts.MaxHandlers == 1 { return 1 } now := time.Now() if s.throughputStart.IsZero() { // No throughput measurement; don't update s.runningBatchSize. } else { // Update s.runningBatchSize based on throughput since our last time here, // as measured by the ratio of the number of messages returned to elapsed // time when there were messages available in the queue. if s.throughputEnd.IsZero() { s.throughputEnd = now } elapsed := s.throughputEnd.Sub(s.throughputStart) if elapsed == 0 { // Avoid divide-by-zero. elapsed = 1 * time.Millisecond } msgsPerSec := float64(s.throughputCount) / elapsed.Seconds() // The "ideal" batch size is how many messages we'd need in the queue to // support desiredQueueDuration at the msgsPerSec rate. idealBatchSize := desiredQueueDuration.Seconds() * msgsPerSec // Move s.runningBatchSize towards the ideal. // We first combine the previous value and the new value, with weighting // based on decay, and then cap the growth/shrinkage. newBatchSize := s.runningBatchSize*(1-decay) + idealBatchSize*decay if max := s.runningBatchSize * maxGrowthFactor; newBatchSize > max { s.runningBatchSize = max } else if min := s.runningBatchSize * maxShrinkFactor; newBatchSize < min { s.runningBatchSize = min } else { s.runningBatchSize = newBatchSize } } // Reset throughput measurement markers. if len(s.q) > 0 { s.throughputStart = now } else { // Will get set to non-zero value when we receive some messages. s.throughputStart = time.Time{} } s.throughputEnd = time.Time{} s.throughputCount = 0 // Using Ceil guarantees at least one message. return int(math.Ceil(math.Min(s.runningBatchSize, maxBatchSize))) } // Receive receives and returns the next message from the Subscription's queue, // blocking and polling if none are available. It can be called // concurrently from multiple goroutines. // // Receive retries retryable errors from the underlying driver forever. // Therefore, if Receive returns an error, either: // 1. It is a non-retryable error from the underlying driver, either from // an attempt to fetch more messages or from an attempt to ack messages. // Operator intervention may be required (e.g., invalid resource, quota // error, etc.). Receive will return the same error from then on, so the // application should log the error and either recreate the Subscription, // or exit. // 2. The provided ctx is Done. Error() on the returned error will include both // the ctx error and the underlying driver error, and ErrorAs on it // can access the underlying driver error type if needed. Receive may // be called again with a fresh ctx. // // Callers can distinguish between the two by checking if the ctx they passed // is Done, or via xerrors.Is(err, context.DeadlineExceeded or context.Canceled) // on the returned error. // // The Ack method of the returned Message must be called once the message has // been processed, to prevent it from being received again. func (s *Subscription) Receive(ctx context.Context) (_ *Message, err error) { ctx = s.tracer.Start(ctx, "Subscription.Receive") defer func() { s.tracer.End(ctx, err) }() s.mu.Lock() defer s.mu.Unlock() for { // The lock is always held here, at the top of the loop. if s.err != nil { // The Subscription is in a permanent error state. Return the error. s.unreportedAckErr = nil return nil, s.err // s.err wrapped when set } // Short circuit if ctx is Done. // Otherwise, we'll continue to return messages from the queue, and even // get new messages if driver.ReceiveBatch doesn't return an error when // ctx is done. if err := ctx.Err(); err != nil { return nil, err } if s.waitc == nil && float64(len(s.q)) <= s.runningBatchSize*prefetchRatio { // We think we're going to run out of messages in expectedReceiveBatchDuration, // and there's no outstanding ReceiveBatch call, so initiate one in the // background. // Completion will be signalled to this goroutine, and to any other // waiting goroutines, by closing s.waitc. s.waitc = make(chan struct{}) batchSize := s.updateBatchSize() go func() { if s.preReceiveBatchHook != nil { s.preReceiveBatchHook(batchSize) } msgs, err := s.getNextBatch(batchSize) s.mu.Lock() defer s.mu.Unlock() if err != nil { // Non-retryable error from ReceiveBatch -> permanent error. s.err = err } else if len(msgs) > 0 { s.q = append(s.q, msgs...) if s.throughputStart.IsZero() { s.throughputStart = time.Now() } } close(s.waitc) s.waitc = nil }() } if len(s.q) > 0 { // At least one message is available. Return it. m := s.q[0] s.q = s.q[1:] s.throughputCount++ // Convert driver.Message to Message. id := m.AckID md := m.Metadata if len(md) == 0 { md = nil } m2 := &Message{ Body: m.Body, Metadata: md, asFunc: m.AsFunc, nackable: s.canNack, } m2.ack = func(isAck bool) { // Ignore the error channel. Errors are dealt with // in the ackBatcher handler. _ = s.ackBatcher.AddNoWait(&driver.AckInfo{AckID: id, IsAck: isAck}) } // Add a finalizer that complains if the Message we return isn't // acked or nacked. _, file, lineno, ok := runtime.Caller(1) // the caller of Receive runtime.SetFinalizer(m2, func(m *Message) { m.mu.Lock() defer m.mu.Unlock() if !m.isAcked { var caller string if ok { caller = fmt.Sprintf(" (%s:%d)", file, lineno) } log.Printf("A pubsub.Message was never Acked or Nacked%s", caller) } }) return m2, nil } // No messages are available. if s.throughputEnd.IsZero() && !s.throughputStart.IsZero() { s.throughputEnd = time.Now() } // A call to ReceiveBatch must be in flight. Wait for it. waitc := s.waitc s.mu.Unlock() select { case <-waitc: s.mu.Lock() // Continue to top of loop. case <-ctx.Done(): s.mu.Lock() return nil, ctx.Err() } } } // getNextBatch gets the next batch of messages from the server and returns it. func (s *Subscription) getNextBatch(nMessages int) ([]*driver.Message, error) { var mu sync.Mutex var q []*driver.Message // Split nMessages into batches based on recvBatchOpts; we'll make a // separate ReceiveBatch call for each batch, and aggregate the results in // msgs. batches := batcher.Split(nMessages, s.recvBatchOpts) g, ctx := errgroup.WithContext(s.backgroundCtx) for _, maxMessagesInBatch := range batches { // Make a copy of the loop variable since it will be used by a goroutine. curMaxMessagesInBatch := maxMessagesInBatch g.Go(func() error { var msgs []*driver.Message err := retry.Call(ctx, gax.Backoff{}, s.driver.IsRetryable, func() error { var err error ctx2 := s.tracer.Start(ctx, "driver.Subscription.ReceiveBatch") defer func() { s.tracer.End(ctx2, err) }() msgs, err = s.driver.ReceiveBatch(ctx2, curMaxMessagesInBatch) return err }) if err != nil { return wrapError(s.driver, err) } mu.Lock() defer mu.Unlock() q = append(q, msgs...) return nil }) } if err := g.Wait(); err != nil { return nil, err } return q, nil } var errSubscriptionShutdown = gcerr.Newf(gcerr.FailedPrecondition, nil, "pubsub: Subscription has been Shutdown") // Shutdown flushes pending ack sends and disconnects the Subscription. func (s *Subscription) Shutdown(ctx context.Context) (err error) { ctx = s.tracer.Start(ctx, "Subscription.Shutdown") defer func() { s.tracer.End(ctx, err) }() s.mu.Lock() if s.err == errSubscriptionShutdown { // Already Shutdown. s.mu.Unlock() return s.err } s.err = errSubscriptionShutdown s.mu.Unlock() c := make(chan struct{}) go func() { defer close(c) if s.ackBatcher != nil { s.ackBatcher.Shutdown() } }() select { case <-ctx.Done(): case <-c: } s.cancel() if err := s.driver.Close(); err != nil { return wrapError(s.driver, err) } s.mu.Lock() defer s.mu.Unlock() if err := s.unreportedAckErr; err != nil { s.unreportedAckErr = nil return err } return ctx.Err() } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (s *Subscription) As(i interface{}) bool { return s.driver.As(i) } // ErrorAs converts err to driver-specific types. // ErrorAs panics if i is nil or not a pointer. // ErrorAs returns false if err == nil. // See Topic.As for more details. func (s *Subscription) ErrorAs(err error, i interface{}) bool { return gcerr.ErrorAs(err, i, s.driver.ErrorAs) } // NewSubscription is for use by drivers only. Do not use in application code. var NewSubscription = newSubscription // newSubscription creates a Subscription from a driver.Subscription. // // recvBatchOpts sets options for Receive batching. May be nil to accept // defaults. The ideal number of messages to receive at a time is determined // dynamically, then split into multiple possibly concurrent calls to // driver.ReceiveBatch based on recvBatchOptions. // // ackBatcherOpts sets options for ack+nack batching. May be nil to accept // defaults. func newSubscription(ds driver.Subscription, recvBatchOpts, ackBatcherOpts *batcher.Options) *Subscription { ctx, cancel := context.WithCancel(context.Background()) s := &Subscription{ driver: ds, tracer: newTracer(ds), cancel: cancel, backgroundCtx: ctx, recvBatchOpts: recvBatchOpts, runningBatchSize: initialBatchSize, canNack: ds.CanNack(), } s.ackBatcher = newAckBatcher(ctx, s, ds, ackBatcherOpts) return s } func newAckBatcher(ctx context.Context, s *Subscription, ds driver.Subscription, opts *batcher.Options) *batcher.Batcher { const maxHandlers = 1 handler := func(items interface{}) error { var acks, nacks []driver.AckID for _, a := range items.([]*driver.AckInfo) { if a.IsAck { acks = append(acks, a.AckID) } else { nacks = append(nacks, a.AckID) } } g, ctx := errgroup.WithContext(ctx) if len(acks) > 0 { g.Go(func() error { return retry.Call(ctx, gax.Backoff{}, ds.IsRetryable, func() (err error) { ctx2 := s.tracer.Start(ctx, "driver.Subscription.SendAcks") defer func() { s.tracer.End(ctx2, err) }() return ds.SendAcks(ctx2, acks) }) }) } if len(nacks) > 0 { g.Go(func() error { return retry.Call(ctx, gax.Backoff{}, ds.IsRetryable, func() (err error) { ctx2 := s.tracer.Start(ctx, "driver.Subscription.SendNacks") defer func() { s.tracer.End(ctx2, err) }() return ds.SendNacks(ctx2, nacks) }) }) } err := g.Wait() // Remember a non-retryable error from SendAcks/Nacks. It will be returned on the // next call to Receive. if err != nil { err = wrapError(s.driver, err) s.mu.Lock() s.err = err s.unreportedAckErr = err s.mu.Unlock() } return err } return batcher.New(reflect.TypeOf([]*driver.AckInfo{}).Elem(), opts, handler) } type errorCoder interface { ErrorCode(error) gcerrors.ErrorCode } func wrapError(ec errorCoder, err error) error { if err == nil { return nil } if gcerr.DoNotWrap(err) { return err } return gcerr.New(ec.ErrorCode(err), err, 2, "pubsub") } // TopicURLOpener represents types than can open Topics based on a URL. // The opener must not modify the URL argument. OpenTopicURL must be safe to // call from multiple goroutines. // // This interface is generally implemented by types in driver packages. type TopicURLOpener interface { OpenTopicURL(ctx context.Context, u *url.URL) (*Topic, error) } // SubscriptionURLOpener represents types than can open Subscriptions based on a URL. // The opener must not modify the URL argument. OpenSubscriptionURL must be safe to // call from multiple goroutines. // // This interface is generally implemented by types in driver packages. type SubscriptionURLOpener interface { OpenSubscriptionURL(ctx context.Context, u *url.URL) (*Subscription, error) } // URLMux is a URL opener multiplexer. It matches the scheme of the URLs // against a set of registered schemes and calls the opener that matches the // URL's scheme. // See https://gocloud.dev/concepts/urls/ for more information. // // The zero value is a multiplexer with no registered schemes. type URLMux struct { subscriptionSchemes openurl.SchemeMap topicSchemes openurl.SchemeMap } // TopicSchemes returns a sorted slice of the registered Topic schemes. func (mux *URLMux) TopicSchemes() []string { return mux.topicSchemes.Schemes() } // ValidTopicScheme returns true iff scheme has been registered for Topics. func (mux *URLMux) ValidTopicScheme(scheme string) bool { return mux.topicSchemes.ValidScheme(scheme) } // SubscriptionSchemes returns a sorted slice of the registered Subscription schemes. func (mux *URLMux) SubscriptionSchemes() []string { return mux.subscriptionSchemes.Schemes() } // ValidSubscriptionScheme returns true iff scheme has been registered for Subscriptions. func (mux *URLMux) ValidSubscriptionScheme(scheme string) bool { return mux.subscriptionSchemes.ValidScheme(scheme) } // RegisterTopic registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterTopic panics. func (mux *URLMux) RegisterTopic(scheme string, opener TopicURLOpener) { mux.topicSchemes.Register("pubsub", "Topic", scheme, opener) } // RegisterSubscription registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterSubscription panics. func (mux *URLMux) RegisterSubscription(scheme string, opener SubscriptionURLOpener) { mux.subscriptionSchemes.Register("pubsub", "Subscription", scheme, opener) } // OpenTopic calls OpenTopicURL with the URL parsed from urlstr. // OpenTopic is safe to call from multiple goroutines. func (mux *URLMux) OpenTopic(ctx context.Context, urlstr string) (*Topic, error) { opener, u, err := mux.topicSchemes.FromString("Topic", urlstr) if err != nil { return nil, err } return opener.(TopicURLOpener).OpenTopicURL(ctx, u) } // OpenSubscription calls OpenSubscriptionURL with the URL parsed from urlstr. // OpenSubscription is safe to call from multiple goroutines. func (mux *URLMux) OpenSubscription(ctx context.Context, urlstr string) (*Subscription, error) { opener, u, err := mux.subscriptionSchemes.FromString("Subscription", urlstr) if err != nil { return nil, err } return opener.(SubscriptionURLOpener).OpenSubscriptionURL(ctx, u) } // OpenTopicURL dispatches the URL to the opener that is registered with the // URL's scheme. OpenTopicURL is safe to call from multiple goroutines. func (mux *URLMux) OpenTopicURL(ctx context.Context, u *url.URL) (*Topic, error) { opener, err := mux.topicSchemes.FromURL("Topic", u) if err != nil { return nil, err } return opener.(TopicURLOpener).OpenTopicURL(ctx, u) } // OpenSubscriptionURL dispatches the URL to the opener that is registered with the // URL's scheme. OpenSubscriptionURL is safe to call from multiple goroutines. func (mux *URLMux) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*Subscription, error) { opener, err := mux.subscriptionSchemes.FromURL("Subscription", u) if err != nil { return nil, err } return opener.(SubscriptionURLOpener).OpenSubscriptionURL(ctx, u) } var defaultURLMux = &URLMux{} // DefaultURLMux returns the URLMux used by OpenTopic and OpenSubscription. // // Driver packages can use this to register their TopicURLOpener and/or // SubscriptionURLOpener on the mux. func DefaultURLMux() *URLMux { return defaultURLMux } // OpenTopic opens the Topic identified by the URL given. // See the URLOpener documentation in driver subpackages for // details on supported URL formats, and https://gocloud.dev/concepts/urls // for more information. func OpenTopic(ctx context.Context, urlstr string) (*Topic, error) { return defaultURLMux.OpenTopic(ctx, urlstr) } // OpenSubscription opens the Subscription identified by the URL given. // See the URLOpener documentation in driver subpackages for // details on supported URL formats, and https://gocloud.dev/concepts/urls // for more information. func OpenSubscription(ctx context.Context, urlstr string) (*Subscription, error) { return defaultURLMux.OpenSubscription(ctx, urlstr) } go-cloud-0.20.0/pubsub/pubsub_test.go000066400000000000000000000435541367004507500175120ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pubsub_test import ( "context" "errors" "fmt" "net/url" "strings" "sync" "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/testing/octest" "gocloud.dev/pubsub" "gocloud.dev/pubsub/batcher" "gocloud.dev/pubsub/driver" "gocloud.dev/pubsub/mempubsub" ) type driverTopic struct { driver.Topic subs []*driverSub } func (t *driverTopic) SendBatch(ctx context.Context, ms []*driver.Message) error { for _, s := range t.subs { select { case <-s.sem: s.q = append(s.q, ms...) s.sem <- struct{}{} case <-ctx.Done(): return ctx.Err() } } return nil } func (*driverTopic) IsRetryable(error) bool { return false } func (*driverTopic) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.Unknown } func (*driverTopic) Close() error { return nil } type driverSub struct { driver.Subscription sem chan struct{} // Normally this queue would live on a separate server in the cloud. q []*driver.Message } func NewDriverSub() *driverSub { ds := &driverSub{ sem: make(chan struct{}, 1), } ds.sem <- struct{}{} return ds } func (s *driverSub) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { for { select { case <-s.sem: ms := s.grabQueue(maxMessages) if len(ms) != 0 { return ms, nil } case <-ctx.Done(): return nil, ctx.Err() default: } } } func (s *driverSub) grabQueue(maxMessages int) []*driver.Message { defer func() { s.sem <- struct{}{} }() if len(s.q) > 0 { if len(s.q) <= maxMessages { ms := s.q s.q = nil return ms } ms := s.q[:maxMessages] s.q = s.q[maxMessages:] return ms } return nil } func (s *driverSub) SendAcks(ctx context.Context, ackIDs []driver.AckID) error { return nil } func (*driverSub) IsRetryable(error) bool { return false } func (*driverSub) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.Internal } func (*driverSub) CanNack() bool { return false } func (*driverSub) Close() error { return nil } func TestSendReceive(t *testing.T) { ctx := context.Background() ds := NewDriverSub() dt := &driverTopic{ subs: []*driverSub{ds}, } topic := pubsub.NewTopic(dt, nil) defer topic.Shutdown(ctx) m := &pubsub.Message{Body: []byte("user signed up")} if err := topic.Send(ctx, m); err != nil { t.Fatal(err) } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) m2, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } if string(m2.Body) != string(m.Body) { t.Fatalf("received message has body %q, want %q", m2.Body, m.Body) } m2.Ack() } func TestConcurrentReceivesGetAllTheMessages(t *testing.T) { howManyToSend := int(1e3) ctx, cancel := context.WithCancel(context.Background()) dt := &driverTopic{} // wg is used to wait until all messages are received. var wg sync.WaitGroup wg.Add(howManyToSend) // Make a subscription. ds := NewDriverSub() dt.subs = append(dt.subs, ds) s := pubsub.NewSubscription(ds, nil, nil) defer s.Shutdown(ctx) // Start 10 goroutines to receive from it. var mu sync.Mutex receivedMsgs := make(map[string]bool) for i := 0; i < 10; i++ { go func() { for { m, err := s.Receive(ctx) if err != nil { // Permanent error; ctx cancelled or subscription closed is // expected once we've received all the messages. mu.Lock() n := len(receivedMsgs) mu.Unlock() if n != howManyToSend { t.Errorf("Worker's Receive failed before all messages were received (%d)", n) } return } m.Ack() mu.Lock() receivedMsgs[string(m.Body)] = true mu.Unlock() wg.Done() } }() } // Send messages. Each message has a unique body used as a key to receivedMsgs. topic := pubsub.NewTopic(dt, nil) defer topic.Shutdown(ctx) for i := 0; i < howManyToSend; i++ { key := fmt.Sprintf("message #%d", i) m := &pubsub.Message{Body: []byte(key)} if err := topic.Send(ctx, m); err != nil { t.Fatal(err) } } // Wait for the goroutines to receive all of the messages, then cancel the // ctx so they all exit. wg.Wait() defer cancel() // Check that all the messages were received. for i := 0; i < howManyToSend; i++ { key := fmt.Sprintf("message #%d", i) if !receivedMsgs[key] { t.Errorf("message %q was not received", key) } } } func TestCancelSend(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) ds := NewDriverSub() dt := &driverTopic{ subs: []*driverSub{ds}, } topic := pubsub.NewTopic(dt, nil) defer topic.Shutdown(ctx) m := &pubsub.Message{} // Intentionally break the driver subscription by acquiring its semaphore. // Now topic.Send will have to wait for cancellation. <-ds.sem cancel() if err := topic.Send(ctx, m); err == nil { t.Error("got nil, want cancellation error") } } func TestCancelReceive(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) ds := NewDriverSub() s := pubsub.NewSubscription(ds, nil, nil) defer s.Shutdown(ctx) cancel() // Without cancellation, this Receive would hang. if _, err := s.Receive(ctx); err == nil { t.Error("got nil, want cancellation error") } } type blockingDriverSub struct { driver.Subscription inReceiveBatch chan struct{} } func (b blockingDriverSub) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { b.inReceiveBatch <- struct{}{} <-ctx.Done() return nil, ctx.Err() } func (blockingDriverSub) CanNack() bool { return false } func (blockingDriverSub) IsRetryable(error) bool { return false } func (blockingDriverSub) Close() error { return nil } func TestCancelTwoReceives(t *testing.T) { // We want to create the following situation: // 1. Goroutine 1 calls Receive, obtains the lock (Subscription.mu), // then releases the lock and calls driver.ReceiveBatch, which hangs. // 2. Goroutine 2 calls Receive. // 3. The context passed to the Goroutine 2 call is canceled. // We expect Goroutine 2's Receive to exit immediately. That won't // happen if Receive holds the lock during the call to ReceiveBatch. inReceiveBatch := make(chan struct{}) s := pubsub.NewSubscription(blockingDriverSub{inReceiveBatch: inReceiveBatch}, nil, nil) defer s.Shutdown(context.Background()) go func() { _, err := s.Receive(context.Background()) // This should happen at the very end of the test, during Shutdown. if err != context.Canceled { t.Errorf("got %v, want context.Canceled", err) } }() <-inReceiveBatch // Give the Receive call time to block on the mutex before timing out. ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) defer cancel() errc := make(chan error) go func() { _, err := s.Receive(ctx) errc <- err }() err := <-errc if err != context.DeadlineExceeded { t.Errorf("got %v, want context.DeadlineExceeded", err) } } func TestRetryTopic(t *testing.T) { // Test that Send is retried if the driver returns a retryable error. ctx := context.Background() ft := &failTopic{} topic := pubsub.NewTopic(ft, nil) defer topic.Shutdown(ctx) err := topic.Send(ctx, &pubsub.Message{}) if err != nil { t.Errorf("Send: got %v, want nil", err) } if got, want := ft.calls, nRetryCalls+1; got != want { t.Errorf("calls: got %d, want %d", got, want) } } var errRetry = errors.New("retry") func isRetryable(err error) bool { return err == errRetry } const nRetryCalls = 2 // failTopic helps test retries for SendBatch. // // SendBatch will fail nRetryCall times before succeeding. type failTopic struct { driver.Topic calls int } func (t *failTopic) SendBatch(ctx context.Context, ms []*driver.Message) error { t.calls++ if t.calls <= nRetryCalls { return errRetry } return nil } func (*failTopic) IsRetryable(err error) bool { return isRetryable(err) } func (*failTopic) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.Unknown } func (*failTopic) Close() error { return nil } func TestRetryReceive(t *testing.T) { ctx := context.Background() fs := &failSub{start: true} sub := pubsub.NewSubscription(fs, nil, nil) defer sub.Shutdown(ctx) m, err := sub.Receive(ctx) if err != nil { t.Fatalf("Receive: got %v, want nil", err) } m.Ack() if got, want := fs.calls, nRetryCalls+1; got != want { t.Errorf("calls: got %d, want %d", got, want) } } // TestRetryReceiveBatches verifies that batching and retries work without races // (see https://github.com/google/go-cloud/issues/2676). func TestRetryReceiveInBatchesDoesntRace(t *testing.T) { ctx := context.Background() fs := &failSub{} // Allow multiple handlers and cap max batch size to ensure we get concurrency. sub := pubsub.NewSubscription(fs, &batcher.Options{MaxHandlers: 10, MaxBatchSize: 2}, nil) defer sub.Shutdown(ctx) // Do some receives to allow the number of batches to increase past 1. for n := 0; n < 100; n++ { m, err := sub.Receive(ctx) if err != nil { t.Fatalf("Receive: got %v, want nil", err) } m.Ack() } // Tell the failSub to start failing. fs.mu.Lock() fs.start = true fs.mu.Unlock() // This call to Receive should result in nRetryCalls+1 calls to ReceiveBatch for // each batch. In the issue noted above, this would cause a race. for n := 0; n < 100; n++ { m, err := sub.Receive(ctx) if err != nil { t.Fatalf("Receive: got %v, want nil", err) } m.Ack() } // Don't try to verify the exact number of calls, as it is unpredictable // based on the timing of the batching. } // failSub helps test retries for ReceiveBatch. // // Once start=true, ReceiveBatch will fail nRetryCalls times before succeeding. type failSub struct { driver.Subscription start bool calls int mu sync.Mutex } func (t *failSub) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { t.mu.Lock() defer t.mu.Unlock() if t.start { t.calls++ if t.calls <= nRetryCalls { return nil, errRetry } } return []*driver.Message{{Body: []byte("")}}, nil } func (*failSub) SendAcks(ctx context.Context, ackIDs []driver.AckID) error { return nil } func (*failSub) IsRetryable(err error) bool { return isRetryable(err) } func (*failSub) CanNack() bool { return false } func (*failSub) Close() error { return nil } // TODO(jba): add a test for retry of SendAcks. var errDriver = errors.New("driver error") type erroringTopic struct { driver.Topic } func (erroringTopic) SendBatch(context.Context, []*driver.Message) error { return errDriver } func (erroringTopic) IsRetryable(err error) bool { return isRetryable(err) } func (erroringTopic) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.AlreadyExists } func (erroringTopic) Close() error { return errDriver } type erroringSubscription struct { driver.Subscription } func (erroringSubscription) ReceiveBatch(context.Context, int) ([]*driver.Message, error) { return nil, errDriver } func (erroringSubscription) SendAcks(context.Context, []driver.AckID) error { return errDriver } func (erroringSubscription) IsRetryable(err error) bool { return isRetryable(err) } func (erroringSubscription) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.AlreadyExists } func (erroringSubscription) CanNack() bool { return false } func (erroringSubscription) Close() error { return errDriver } // TestErrorsAreWrapped tests that all errors returned from the driver are // wrapped exactly once by the portable type. func TestErrorsAreWrapped(t *testing.T) { ctx := context.Background() verify := func(err error) { t.Helper() if err == nil { t.Errorf("got nil error, wanted non-nil") return } if e, ok := err.(*gcerr.Error); !ok { t.Errorf("not wrapped: %v", err) } else if got := e.Unwrap(); got != errDriver { t.Errorf("got %v for wrapped error, not errDriver", got) } if s := err.Error(); !strings.HasPrefix(s, "pubsub ") { t.Errorf("Error() for wrapped error doesn't start with 'pubsub': prefix: %s", s) } } topic := pubsub.NewTopic(erroringTopic{}, nil) verify(topic.Send(ctx, &pubsub.Message{})) err := topic.Shutdown(ctx) verify(err) sub := pubsub.NewSubscription(erroringSubscription{}, nil, nil) _, err = sub.Receive(ctx) verify(err) err = sub.Shutdown(ctx) verify(err) } func TestOpenCensus(t *testing.T) { ctx := context.Background() te := octest.NewTestExporter(pubsub.OpenCensusViews) defer te.Unregister() topic := mempubsub.NewTopic() defer topic.Shutdown(ctx) sub := mempubsub.NewSubscription(topic, time.Second) defer sub.Shutdown(ctx) if err := topic.Send(ctx, &pubsub.Message{Body: []byte("x")}); err != nil { t.Fatal(err) } if err := topic.Shutdown(ctx); err != nil { t.Fatal(err) } msg, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } msg.Ack() if err := sub.Shutdown(ctx); err != nil { t.Fatal(err) } _, _ = sub.Receive(ctx) diff := octest.Diff(te.Spans(), te.Counts(), "gocloud.dev/pubsub", "gocloud.dev/pubsub/mempubsub", []octest.Call{ {Method: "driver.Topic.SendBatch", Code: gcerrors.OK}, {Method: "Topic.Send", Code: gcerrors.OK}, {Method: "Topic.Shutdown", Code: gcerrors.OK}, {Method: "driver.Subscription.ReceiveBatch", Code: gcerrors.OK}, {Method: "Subscription.Receive", Code: gcerrors.OK}, {Method: "driver.Subscription.SendAcks", Code: gcerrors.OK}, {Method: "Subscription.Shutdown", Code: gcerrors.OK}, {Method: "Subscription.Receive", Code: gcerrors.FailedPrecondition}, }) if diff != "" { t.Error(diff) } } var ( testOpenOnce sync.Once testOpenGot *url.URL ) func TestURLMux(t *testing.T) { ctx := context.Background() mux := new(pubsub.URLMux) fake := &fakeOpener{} mux.RegisterTopic("foo", fake) mux.RegisterTopic("err", fake) mux.RegisterSubscription("foo", fake) mux.RegisterSubscription("err", fake) if diff := cmp.Diff(mux.TopicSchemes(), []string{"err", "foo"}); diff != "" { t.Errorf("Schemes: %s", diff) } if !mux.ValidTopicScheme("foo") || !mux.ValidTopicScheme("err") { t.Errorf("ValidTopicScheme didn't return true for valid scheme") } if mux.ValidTopicScheme("foo2") || mux.ValidTopicScheme("http") { t.Errorf("ValidTopicScheme didn't return false for invalid scheme") } if diff := cmp.Diff(mux.SubscriptionSchemes(), []string{"err", "foo"}); diff != "" { t.Errorf("Schemes: %s", diff) } if !mux.ValidSubscriptionScheme("foo") || !mux.ValidSubscriptionScheme("err") { t.Errorf("ValidSubscriptionScheme didn't return true for valid scheme") } if mux.ValidSubscriptionScheme("foo2") || mux.ValidSubscriptionScheme("http") { t.Errorf("ValidSubscriptionScheme didn't return false for invalid scheme") } for _, tc := range []struct { name string url string wantErr bool }{ { name: "empty URL", wantErr: true, }, { name: "invalid URL", url: ":foo", wantErr: true, }, { name: "invalid URL no scheme", url: "foo", wantErr: true, }, { name: "unregistered scheme", url: "bar://myps", wantErr: true, }, { name: "func returns error", url: "err://myps", wantErr: true, }, { name: "no query options", url: "foo://myps", }, { name: "empty query options", url: "foo://myps?", }, { name: "query options", url: "foo://myps?aAa=bBb&cCc=dDd", }, { name: "multiple query options", url: "foo://myps?x=a&x=b&x=c", }, { name: "fancy ps name", url: "foo:///foo/bar/baz", }, { name: "using api schema prefix", url: "pubsub+foo://foo", }, } { t.Run("topic: "+tc.name, func(t *testing.T) { _, gotErr := mux.OpenTopic(ctx, tc.url) if (gotErr != nil) != tc.wantErr { t.Fatalf("got err %v, want error %v", gotErr, tc.wantErr) } if gotErr != nil { return } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } // Repeat with OpenTopicURL. parsed, err := url.Parse(tc.url) if err != nil { t.Fatal(err) } _, gotErr = mux.OpenTopicURL(ctx, parsed) if gotErr != nil { t.Fatalf("got err %v, want nil", gotErr) } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } }) t.Run("subscription: "+tc.name, func(t *testing.T) { _, gotErr := mux.OpenSubscription(ctx, tc.url) if (gotErr != nil) != tc.wantErr { t.Fatalf("got err %v, want error %v", gotErr, tc.wantErr) } if gotErr != nil { return } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } // Repeat with OpenSubscriptionURL. parsed, err := url.Parse(tc.url) if err != nil { t.Fatal(err) } _, gotErr = mux.OpenSubscriptionURL(ctx, parsed) if gotErr != nil { t.Fatalf("got err %v, want nil", gotErr) } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } }) } } type fakeOpener struct { u *url.URL // last url passed to OpenTopicURL/OpenSubscriptionURL } func (o *fakeOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { if u.Scheme == "err" { return nil, errors.New("fail") } o.u = u return nil, nil } func (o *fakeOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { if u.Scheme == "err" { return nil, errors.New("fail") } o.u = u return nil, nil } go-cloud-0.20.0/pubsub/rabbitpubsub/000077500000000000000000000000001367004507500172755ustar00rootroot00000000000000go-cloud-0.20.0/pubsub/rabbitpubsub/amqp.go000066400000000000000000000115611367004507500205660ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package rabbitpubsub // Interfaces for the AMQP protocol, and adapters for the real amqp client. // Fake implementations of the interfaces are in fake_test.go import "github.com/streadway/amqp" // Values we use for the amqp client. // See https://www.rabbitmq.com/amqp-0-9-1-reference.html. const ( // Many methods of the amqp client take a "no-wait" parameter, which // if true causes the client to return without waiting for a server // response. We always want to wait. wait = false // Always use the empty routing key. This driver expects to be used with topic // exchanges, which disregard the routing key. routingKey = "" // If the message can't be enqueued, return it to the sender rather than silently // dropping it. mandatory = true // If there are no waiting consumers, enqueue the message instead of dropping it. immediate = false ) // See https://godoc.org/github.com/streadway/amqp#Connection for the documentation of these methods. type amqpConnection interface { Channel() (amqpChannel, error) Close() error } // See https://godoc.org/github.com/streadway/amqp#Channel for the documentation of these methods. type amqpChannel interface { Publish(exchange string, msg amqp.Publishing) error Consume(queue, consumer string) (<-chan amqp.Delivery, error) Ack(tag uint64) error Nack(tag uint64) error Cancel(consumer string) error Close() error NotifyPublish(chan amqp.Confirmation) chan amqp.Confirmation NotifyReturn(chan amqp.Return) chan amqp.Return NotifyClose(chan *amqp.Error) chan *amqp.Error ExchangeDeclare(string) error QueueDeclareAndBind(qname, ename string) error ExchangeDelete(string) error QueueDelete(qname string) error } // connection adapts an *amqp.Connection to the amqpConnection interface. type connection struct { conn *amqp.Connection } // Channel creates a new channel. We always want the channel in confirm mode (where // confirmations are delivered for each publish), so we do that here as well. func (c *connection) Channel() (amqpChannel, error) { ch, err := c.conn.Channel() if err != nil { return nil, err } if err := ch.Confirm(wait); err != nil { return nil, err } return &channel{ch}, nil } func (c *connection) Close() error { return c.conn.Close() } // channel adapts an *amqp.Channel to the amqpChannel interface. type channel struct { ch *amqp.Channel } func (ch *channel) Publish(exchange string, msg amqp.Publishing) error { return ch.ch.Publish(exchange, routingKey, mandatory, immediate, msg) } func (ch *channel) Consume(queue, consumer string) (<-chan amqp.Delivery, error) { return ch.ch.Consume(queue, consumer, false, // autoAck false, // exclusive false, // noLocal wait, nil) // args } func (ch *channel) Ack(tag uint64) error { return ch.ch.Ack(tag, false) // multiple=false: acking only this ID } func (ch *channel) Nack(tag uint64) error { return ch.ch.Nack(tag, false, true) // multiple=false: acking only this ID, requeue: true to redeliver } func (ch *channel) Confirm() error { return ch.ch.Confirm(wait) } func (ch *channel) Cancel(consumer string) error { return ch.ch.Cancel(consumer, wait) } func (ch *channel) Close() error { return ch.ch.Close() } func (ch *channel) NotifyPublish(c chan amqp.Confirmation) chan amqp.Confirmation { return ch.ch.NotifyPublish(c) } func (ch *channel) NotifyReturn(c chan amqp.Return) chan amqp.Return { return ch.ch.NotifyReturn(c) } func (ch *channel) NotifyClose(c chan *amqp.Error) chan *amqp.Error { return ch.ch.NotifyClose(c) } func (ch *channel) ExchangeDeclare(name string) error { return ch.ch.ExchangeDeclare(name, "fanout", // kind false, // durable false, // delete when unused false, // internal wait, nil) // args } // QueueDeclareAndBind declares a queue and binds it to an exchange. func (ch *channel) QueueDeclareAndBind(queueName, exchangeName string) error { q, err := ch.ch.QueueDeclare(queueName, false, // durable false, // delete when unused false, // exclusive wait, nil) // args if err != nil { return err } return ch.ch.QueueBind(q.Name, q.Name, exchangeName, wait, nil) } func (ch *channel) ExchangeDelete(name string) error { return ch.ch.ExchangeDelete(name, false, false) } func (ch *channel) QueueDelete(qname string) error { _, err := ch.ch.QueueDelete(qname, false, false, false) return err } go-cloud-0.20.0/pubsub/rabbitpubsub/doc.go000066400000000000000000000042671367004507500204020ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package rabbitpubsub provides an pubsub implementation for RabbitMQ. // Use OpenTopic to construct a *pubsub.Topic, and/or OpenSubscription // to construct a *pubsub.Subscription. // // RabbitMQ follows the AMQP specification, which uses different terminology // than the Go CDK Pub/Sub. // // A Pub/Sub topic is an AMQP exchange. The exchange kind should be "fanout" to match // the Pub/Sub model, although publishing will work with any kind of exchange. // // A Pub/Sub subscription is an AMQP queue. The queue should be bound to the exchange // that is the topic of the subscription. See the package example for details. // // URLs // // For pubsub.OpenTopic and pubsub.OpenSubscription, rabbitpubsub registers // for the scheme "rabbit". // The default URL opener will connect to a default server based on the // environment variable "RABBIT_SERVER_URL". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // Message Delivery Semantics // // RabbitMQ supports at-least-once semantics; applications must // call Message.Ack after processing a message, or it will be redelivered. // See https://godoc.org/gocloud.dev/pubsub#hdr-At_most_once_and_At_least_once_Delivery // for more background. // // As // // rabbitpubsub exposes the following types for As: // - Topic: *amqp.Connection // - Subscription: *amqp.Connection // - Message.BeforeSend: *amqp.Publishing // - Message: amqp.Delivery // - Error: *amqp.Error and MultiError package rabbitpubsub // import "gocloud.dev/pubsub/rabbitpubsub" go-cloud-0.20.0/pubsub/rabbitpubsub/example_test.go000066400000000000000000000057121367004507500223230ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package rabbitpubsub_test import ( "context" "log" "github.com/streadway/amqp" "gocloud.dev/pubsub" "gocloud.dev/pubsub/rabbitpubsub" ) func ExampleOpenTopic() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() rabbitConn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { log.Fatal(err) } defer rabbitConn.Close() topic := rabbitpubsub.OpenTopic(rabbitConn, "myexchange", nil) defer topic.Shutdown(ctx) } func ExampleOpenSubscription() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() rabbitConn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { log.Fatal(err) } defer rabbitConn.Close() subscription := rabbitpubsub.OpenSubscription(rabbitConn, "myqueue", nil) defer subscription.Shutdown(ctx) } func Example_openTopicFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/rabbitpubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenTopic creates a *pubsub.Topic from a URL. // This URL will Dial the RabbitMQ server at the URL in the environment // variable RABBIT_SERVER_URL and open the exchange "myexchange". topic, err := pubsub.OpenTopic(ctx, "rabbit://myexchange") if err != nil { log.Fatal(err) } defer topic.Shutdown(ctx) } func Example_openSubscriptionFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/pubsub/rabbitpubsub" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // pubsub.OpenSubscription creates a *pubsub.Subscription from a URL. // This URL will Dial the RabbitMQ server at the URL in the environment // variable RABBIT_SERVER_URL and open the queue "myqueue". subscription, err := pubsub.OpenSubscription(ctx, "rabbit://myqueue") if err != nil { log.Fatal(err) } defer subscription.Shutdown(ctx) } go-cloud-0.20.0/pubsub/rabbitpubsub/fake_test.go000066400000000000000000000254411367004507500215770ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package rabbitpubsub // This file implements a fake for the parts of the AMQP protocol used by our RabbitMQ // implementation. import ( "context" "fmt" "sync" "time" "github.com/streadway/amqp" ) // fakeConnection implements the amqpConnection interface. // It also doubles as the state of the fake server. type fakeConnection struct { mu sync.Mutex closed chan struct{} exchanges map[string]*exchange // exchange names are server-scoped queues map[string]*queue // queue names are server-scoped } // fakeChannel implements the amqpChannel interface. type fakeChannel struct { conn *fakeConnection // The following fields are protected by conn.mu. deliveryTag uint64 // counter; used to distinguish published messages pubChans []chan<- amqp.Confirmation returnChans []chan<- amqp.Return closeChans []chan<- *amqp.Error consumerCancels map[string]func() // from consumer name to cancel func for the context closeMu sync.Mutex closed chan struct{} } // An exchange is a collection of queues. // Every queue is also in the fakeConnection.queues map, so they can be looked up // by name. An exchange needs a list of its own queues (the ones bound to it) so // it can deliver incoming messages to them. type exchange struct { queues []*queue } // A queue holds a set of messages to be delivered. type queue struct { messages []amqp.Delivery pendingAck map[uint64]amqp.Delivery } func newFakeConnection() *fakeConnection { return &fakeConnection{ exchanges: map[string]*exchange{}, queues: map[string]*queue{}, closed: make(chan struct{}), } } // Channel creates a new AMQP fake channel. func (c *fakeConnection) Channel() (amqpChannel, error) { if chanIsClosed(c.closed) { return nil, amqp.ErrClosed } return &fakeChannel{ conn: c, consumerCancels: map[string]func(){}, closed: make(chan struct{}), }, nil } func (c *fakeConnection) Close() error { c.mu.Lock() defer c.mu.Unlock() closeChan(c.closed) return nil } // getExchange returns the named exchange, or error if it doesn't exist. // It closes the channel on error. // It must be called with the lock held. func (ch *fakeChannel) getExchange(name string) (*exchange, error) { if ex := ch.conn.exchanges[name]; ex != nil { return ex, nil } return nil, ch.errorf(amqp.NotFound, "exchange %q not found", name) } // errorf returns an amqp.Error and closes the channel. (In the AMQP protocol, any channel error // closes the channel and makes it unusable.) // It must be called with ch.conn.mu held. func (ch *fakeChannel) errorf(code int, reasonFormat string, args ...interface{}) error { _ = ch.Close() return &amqp.Error{Code: code, Reason: fmt.Sprintf(reasonFormat, args...)} } // Report whether the channel or its connection is closed. Does not require the lock. func (ch *fakeChannel) isClosed() bool { return chanIsClosed(ch.closed) || chanIsClosed(ch.conn.closed) } // ExchangeDeclare creates a new exchange with the given name if one doesn't already // exist. func (ch *fakeChannel) ExchangeDeclare(name string) error { if ch.isClosed() { return amqp.ErrClosed } ch.conn.mu.Lock() defer ch.conn.mu.Unlock() if _, ok := ch.conn.exchanges[name]; !ok { ch.conn.exchanges[name] = &exchange{} } return nil } // QueueDeclareAndBind binds a queue to the given exchange. // The exchange must exist. // If the queue doesn't exist, it's created. func (ch *fakeChannel) QueueDeclareAndBind(queueName, exchangeName string) error { if ch.isClosed() { return amqp.ErrClosed } ch.conn.mu.Lock() defer ch.conn.mu.Unlock() ex, err := ch.getExchange(exchangeName) if err != nil { return err } if _, ok := ch.conn.queues[queueName]; ok { return nil } q := &queue{pendingAck: map[uint64]amqp.Delivery{}} ch.conn.queues[queueName] = q ex.queues = append(ex.queues, q) return nil } func (ch *fakeChannel) Publish(exchangeName string, pub amqp.Publishing) error { if ch.isClosed() { return amqp.ErrClosed } ch.conn.mu.Lock() defer ch.conn.mu.Unlock() ex, err := ch.getExchange(exchangeName) if err != nil { return err } if len(ex.queues) == 0 { // The message is unroutable. Send a Return to all channels registered with // NotifyReturn. ret := amqp.Return{ Exchange: exchangeName, ReplyCode: amqp.NoRoute, ReplyText: "NO_ROUTE: no queues bound to exchange", } for _, c := range ch.returnChans { select { case c <- ret: case <-ch.closed: return amqp.ErrClosed case <-ch.conn.closed: return amqp.ErrClosed } } } else { // Each published message in the channel gets a new delivery tag, starting at 1. ch.deliveryTag++ // Convert the Publishing into a Delivery. del := amqp.Delivery{ Headers: pub.Headers, Body: pub.Body, DeliveryTag: ch.deliveryTag, // We don't care about the other fields. } // All exchanges are "fanout" exchanges, so the message is sent to all queues. for _, q := range ex.queues { q.messages = append(q.messages, del) } } // Every Go channel registered with NotifyPublish gets a confirmation message. // Ack is true even if the message was unroutable. for _, c := range ch.pubChans { select { case c <- amqp.Confirmation{DeliveryTag: ch.deliveryTag, Ack: true}: case <-ch.closed: return amqp.ErrClosed case <-ch.conn.closed: return amqp.ErrClosed } } return nil } // Consume starts a consumer that reads from the given queue. // The consumerName can be used in a Cancel call to stop the consumer. func (ch *fakeChannel) Consume(queueName, consumerName string) (<-chan amqp.Delivery, error) { if ch.isClosed() { return nil, amqp.ErrClosed } ch.conn.mu.Lock() defer ch.conn.mu.Unlock() q, ok := ch.conn.queues[queueName] if !ok { return nil, ch.errorf(amqp.NotFound, "queue %q not found", queueName) } if _, ok := ch.consumerCancels[consumerName]; ok { return nil, ch.errorf(amqp.PreconditionFailed, "consumer %q already exists", consumerName) } ctx, cancel := context.WithCancel(context.Background()) ch.consumerCancels[consumerName] = cancel // used by fakeChannel.Cancel delc := make(chan amqp.Delivery) go func() { // For this simple fake, just deliver one message every once in a while if // any are available, until the consumer is canceled. for { m, ok := ch.takeOneMessage(q) if ok { select { case delc <- m: case <-ctx.Done(): // ignore errors here and below return case <-ch.closed: return case <-ch.conn.closed: return } } select { case <-time.After(10 * time.Millisecond): case <-ctx.Done(): // ignore error return } } }() return delc, nil } // Take a message from q, if one is available. We just remove // the message from the queue permanently. In a more sophisticated implementation // we'd mark it as outstanding and keep it around until it got acked, but we don't // need acks for this fake. func (ch *fakeChannel) takeOneMessage(q *queue) (amqp.Delivery, bool) { ch.conn.mu.Lock() defer ch.conn.mu.Unlock() if len(q.messages) == 0 { return amqp.Delivery{}, false } m := q.messages[0] q.messages = q.messages[1:] q.pendingAck[m.DeliveryTag] = m return m, true } // Ack removes the message from q.pendingAck. func (ch *fakeChannel) Ack(tag uint64) error { if ch.isClosed() { return amqp.ErrClosed } ch.conn.mu.Lock() defer ch.conn.mu.Unlock() for _, q := range ch.conn.queues { if _, ok := q.pendingAck[tag]; ok { delete(q.pendingAck, tag) return nil } } // No error if we couldn't find it to ack it. return nil } // Nack moves the message from q.pendingAck back to q.messages // to be redelivered. func (ch *fakeChannel) Nack(tag uint64) error { if ch.isClosed() { return amqp.ErrClosed } ch.conn.mu.Lock() defer ch.conn.mu.Unlock() for _, q := range ch.conn.queues { if m, ok := q.pendingAck[tag]; ok { delete(q.pendingAck, tag) q.messages = append(q.messages, m) return nil } } // No error if we couldn't find it to nack it. return nil } // Cancel stops the consumer's goroutine. func (ch *fakeChannel) Cancel(consumerName string) error { if ch.isClosed() { return amqp.ErrClosed } ch.conn.mu.Lock() defer ch.conn.mu.Unlock() cancel, ok := ch.consumerCancels[consumerName] if !ok { return ch.errorf(amqp.NotFound, "consumer %q not found", consumerName) } cancel() delete(ch.consumerCancels, consumerName) return nil } // NotifyPublish remembers its argument channel so it can be notified for every // published message. It returns its argument. func (ch *fakeChannel) NotifyPublish(c chan amqp.Confirmation) chan amqp.Confirmation { ch.conn.mu.Lock() defer ch.conn.mu.Unlock() ch.pubChans = append(ch.pubChans, c) return c } // NotifyReturn remembers its argument channel so it can be notified for every // published message that's returned due to being unroutable. func (ch *fakeChannel) NotifyReturn(c chan amqp.Return) chan amqp.Return { ch.conn.mu.Lock() defer ch.conn.mu.Unlock() ch.returnChans = append(ch.returnChans, c) return c } // NotifyClose remembers its argument channel so it can be notified when // the channel is closed. func (ch *fakeChannel) NotifyClose(c chan *amqp.Error) chan *amqp.Error { ch.conn.mu.Lock() defer ch.conn.mu.Unlock() ch.closeChans = append(ch.closeChans, c) return c } // Close marks the fakeChannel as closed and sends an error to all channels // registered with NotifyClose. func (ch *fakeChannel) Close() error { if chanIsClosed(ch.conn.closed) { return amqp.ErrClosed } ch.closeMu.Lock() closeChans := ch.closeChans closeChan(ch.closed) ch.closeMu.Unlock() for _, c := range closeChans { // Don't block on notifying. select { case c <- amqp.ErrClosed: default: } } return nil } func (ch *fakeChannel) ExchangeDelete(name string) error { ch.conn.mu.Lock() defer ch.conn.mu.Unlock() delete(ch.conn.exchanges, name) return nil } func (ch *fakeChannel) QueueDelete(name string) error { ch.conn.mu.Lock() defer ch.conn.mu.Unlock() delete(ch.conn.queues, name) return nil } // Assumes nothing is ever written to the channel. func chanIsClosed(ch chan struct{}) bool { select { case <-ch: return true default: return false } } // Avoid panic when closing a closed channel. // Must be called with the lock held. func closeChan(ch chan struct{}) { select { case <-ch: default: close(ch) } } go-cloud-0.20.0/pubsub/rabbitpubsub/go.mod000066400000000000000000000013741367004507500204100ustar00rootroot00000000000000// Copyright 2018-2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev/pubsub/rabbitpubsub go 1.12 require ( github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71 gocloud.dev v0.20.0 ) go-cloud-0.20.0/pubsub/rabbitpubsub/go.sum000066400000000000000000001414651367004507500204430ustar00rootroot00000000000000bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3 h1:0sMegbmn/8uTwpNkB0q9cLEpZ2W5a6kl+wtBQgPWBJQ= cloud.google.com/go v0.44.3/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.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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 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/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= 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/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= 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/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149 h1:HfxbT6/JcvIljmERptWhwa8XzP7H3T+Z2N26gTsaDaA= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71 h1:2MR0pKUzlP3SGgj5NYJe/zRYDwOu9ku6YHy+Iw7l5DM= github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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/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/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.5.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 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= 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/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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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-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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 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/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= go-cloud-0.20.0/pubsub/rabbitpubsub/localrabbit.sh000077500000000000000000000017131367004507500221140ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Starts a local RabbitMQ instance via Docker. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail set -euo pipefail echo "Starting RabbitMQ..." docker rm -f rabbit &> /dev/null || : docker run -d --name rabbit -p 5672:5672 rabbitmq:3 &> /dev/null echo "...done. Run \"docker rm -f rabbit\" to clean up the container." echo go-cloud-0.20.0/pubsub/rabbitpubsub/rabbit.go000066400000000000000000000523711367004507500210770ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package rabbitpubsub import ( "context" "errors" "fmt" "net/url" "os" "path" "strings" "sync" "sync/atomic" "time" "github.com/streadway/amqp" "gocloud.dev/gcerrors" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" ) func init() { o := new(defaultDialer) pubsub.DefaultURLMux().RegisterTopic(Scheme, o) pubsub.DefaultURLMux().RegisterSubscription(Scheme, o) } // defaultDialer dials a default Rabbit server based on the environment // variable "RABBIT_SERVER_URL". type defaultDialer struct { init sync.Once opener *URLOpener err error } func (o *defaultDialer) defaultConn(ctx context.Context) (*URLOpener, error) { o.init.Do(func() { serverURL := os.Getenv("RABBIT_SERVER_URL") if serverURL == "" { o.err = errors.New("RABBIT_SERVER_URL environment variable not set") return } conn, err := amqp.Dial(serverURL) if err != nil { o.err = fmt.Errorf("failed to dial RABBIT_SERVER_URL %q: %v", serverURL, err) return } o.opener = &URLOpener{Connection: conn} }) return o.opener, o.err } func (o *defaultDialer) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { opener, err := o.defaultConn(ctx) if err != nil { return nil, fmt.Errorf("open topic %v: failed to open default connection: %v", u, err) } return opener.OpenTopicURL(ctx, u) } func (o *defaultDialer) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { opener, err := o.defaultConn(ctx) if err != nil { return nil, fmt.Errorf("open subscription %v: failed to open default connection: %v", u, err) } return opener.OpenSubscriptionURL(ctx, u) } // Scheme is the URL scheme rabbitpubsub registers its URLOpeners under on pubsub.DefaultMux. const Scheme = "rabbit" // URLOpener opens RabbitMQ URLs like "rabbit://myexchange" for // topics or "rabbit://myqueue" for subscriptions. // // For topics, the URL's host+path is used as the exchange name. // // For subscriptions, the URL's host+path is used as the queue name. // // No query parameters are supported. type URLOpener struct { // Connection to use for communication with the server. Connection *amqp.Connection // TopicOptions specifies the options to pass to OpenTopic. TopicOptions TopicOptions // SubscriptionOptions specifies the options to pass to OpenSubscription. SubscriptionOptions SubscriptionOptions } // OpenTopicURL opens a pubsub.Topic based on u. func (o *URLOpener) OpenTopicURL(ctx context.Context, u *url.URL) (*pubsub.Topic, error) { for param := range u.Query() { return nil, fmt.Errorf("open topic %v: invalid query parameter %q", u, param) } exchangeName := path.Join(u.Host, u.Path) return OpenTopic(o.Connection, exchangeName, &o.TopicOptions), nil } // OpenSubscriptionURL opens a pubsub.Subscription based on u. func (o *URLOpener) OpenSubscriptionURL(ctx context.Context, u *url.URL) (*pubsub.Subscription, error) { for param := range u.Query() { return nil, fmt.Errorf("open subscription %v: invalid query parameter %q", u, param) } queueName := path.Join(u.Host, u.Path) return OpenSubscription(o.Connection, queueName, &o.SubscriptionOptions), nil } type topic struct { exchange string // the AMQP exchange conn amqpConnection mu sync.Mutex ch amqpChannel // AMQP channel used for all communication. pubc <-chan amqp.Confirmation // Go channel for server acks of publishes retc <-chan amqp.Return // Go channel for "returned" undeliverable messages closec <-chan *amqp.Error // Go channel for AMQP channel close notifications } // TopicOptions sets options for constructing a *pubsub.Topic backed by // RabbitMQ. type TopicOptions struct{} // SubscriptionOptions sets options for constructing a *pubsub.Subscription // backed by RabbitMQ. type SubscriptionOptions struct{} // OpenTopic returns a *pubsub.Topic corresponding to the named exchange. // See the package documentation for an example. // // The exchange should already exist (for instance, by using // amqp.Channel.ExchangeDeclare), although this won't be checked until the first call // to SendBatch. For the Go CDK Pub/Sub model to make sense, the exchange should // be a fanout exchange, although nothing in this package enforces that. // // OpenTopic uses the supplied amqp.Connection for all communication. It is the // caller's responsibility to establish this connection before calling OpenTopic, and // to close it when Close has been called on all Topics opened with it. // // The documentation of the amqp package recommends using separate connections for // publishing and subscribing. func OpenTopic(conn *amqp.Connection, name string, opts *TopicOptions) *pubsub.Topic { return pubsub.NewTopic(newTopic(&connection{conn}, name), nil) } func newTopic(conn amqpConnection, name string) *topic { return &topic{ conn: conn, exchange: name, } } // establishChannel creates an AMQP channel if necessary. According to the amqp // package docs, once an error is returned from the channel, it must be discarded and // a new one created. // // Must be called with t.mu held. func (t *topic) establishChannel(ctx context.Context) error { if t.ch != nil { // We already have a channel. select { // If it was closed, open a new one. // (Ignore the error, if any.) case <-t.closec: // If it isn't closed, nothing to do. default: return nil } } var ch amqpChannel err := runWithContext(ctx, func() error { // Create a new channel in confirm mode. var err error ch, err = t.conn.Channel() return err }) if err != nil { return err } t.ch = ch // Get Go channels which will hold acks and returns from the server. The server // will send an ack for each published message to confirm that it was received. // It will return undeliverable messages. // All the Notify methods return their arg. t.pubc = ch.NotifyPublish(make(chan amqp.Confirmation)) t.retc = ch.NotifyReturn(make(chan amqp.Return)) t.closec = ch.NotifyClose(make(chan *amqp.Error, 1)) // closec will get at most one element return nil } // Run f while checking to see if ctx is done. // Return the error from f if it completes, or ctx.Err() if ctx is done. func runWithContext(ctx context.Context, f func() error) error { c := make(chan error, 1) // buffer so the goroutine can finish even if ctx is done go func() { c <- f() }() select { case <-ctx.Done(): return ctx.Err() case err := <-c: return err } } // SendBatch implements driver.SendBatch. func (t *topic) SendBatch(ctx context.Context, ms []*driver.Message) error { // It is simplest to allow only one SendBatch at a time. Allowing concurrent // calls to SendBatch would complicate the logic of receiving publish // confirmations and returns. We can go that route if performance warrants it. t.mu.Lock() defer t.mu.Unlock() if err := t.establishChannel(ctx); err != nil { return err } // Receive from Go channels concurrently or we will deadlock with the Publish // RPC. (The amqp package docs recommend setting the capacity of the Go channel // to the number of messages to be published, but we can't do that because we // want to reuse the channel for all calls to SendBatch--it takes two RPCs to set // up.) errc := make(chan error, 1) cctx, cancel := context.WithCancel(ctx) defer cancel() ch := t.ch // Avoid touching t.ch while goroutine is running. go func() { // This goroutine runs with t.mu held because its lifetime is within the // lifetime of the t.mu.Lock call at the start of SendBatch. errc <- t.receiveFromPublishChannels(cctx, len(ms)) }() var perr error for _, m := range ms { pub := toPublishing(m) if m.BeforeSend != nil { asFunc := func(i interface{}) bool { if p, ok := i.(**amqp.Publishing); ok { *p = &pub return true } return false } if err := m.BeforeSend(asFunc); err != nil { return err } } if perr = ch.Publish(t.exchange, pub); perr != nil { cancel() break } } // Wait for the goroutine to finish. err := <-errc // If we got an error from Publish, prefer that. if perr != nil { // Set t.ch to nil because an AMQP channel is broken after error. // Do this here, after the goroutine has finished, rather than in the Publish loop // above, to avoid a race condition. t.ch = nil err = perr } // If there is only one error, return it rather than a MultiError. That // will work better with ErrorCode and ErrorAs. if merr, ok := err.(MultiError); ok && len(merr) == 1 { return merr[0] } return err } // Read from the channels established with NotifyPublish and NotifyReturn. // Must be called with t.mu held. func (t *topic) receiveFromPublishChannels(ctx context.Context, nMessages int) error { // Consume all the acknowledgments for the messages we are publishing, and also // get returned messages. The server will send exactly one ack for each published // message (successful or not), and one return for each undeliverable message. // Since SendBatch (the only caller of this method) holds the lock, we expect // exactly as many acks as messages. var merr MultiError nAcks := 0 for nAcks < nMessages { select { case <-ctx.Done(): if t.ch != nil { // Channel will be in a weird state (not all publish acks consumed, perhaps) // so re-create it next time. t.ch.Close() t.ch = nil } return ctx.Err() case ret, ok := <-t.retc: if !ok { // Channel closed. Handled in the pubc case below. But set // the channel to nil to prevent it from being selected again. t.retc = nil } else { // The message was returned from the server because it is unroutable. // Record the error and continue so we drain all // items from pubc. We don't need to re-establish the channel on this // error. merr = append(merr, fmt.Errorf("rabbitpubsub: message returned from %s: %s (code %d)", ret.Exchange, ret.ReplyText, ret.ReplyCode)) } case conf, ok := <-t.pubc: if !ok { // t.pubc was closed unexpectedly. t.ch = nil // re-create the channel on next use if merr != nil { return merr } // t.closec must be closed too. See if it has an error. if err := closeErr(t.closec); err != nil { merr = append(merr, err) return merr } // We shouldn't be here, but if we are, we still want to return an // error. merr = append(merr, errors.New("rabbitpubsub: publish listener closed unexpectedly")) return merr } nAcks++ if !conf.Ack { merr = append(merr, errors.New("rabbitpubsub: ack failed on publish")) } } } if merr != nil { return merr } // Returning a nil merr would mean the returned error interface value is non-nil, so return nil explicitly. return nil } // A MultiError is an error that contains multiple errors. type MultiError []error func (m MultiError) Error() string { var s []string for _, e := range m { s = append(s, e.Error()) } return strings.Join(s, "; ") } // Return the error from a Go channel monitoring the closing of an AMQP channel. // closec must have been registered via Channel.NotifyClose. // When closeErr is called, we expect closec to be closed. If it isn't, we also // consider that an error. func closeErr(closec <-chan *amqp.Error) error { select { case aerr := <-closec: // This nil check is necessary. aerr is of type *amqp.Error. If we // returned it directly (effectively assigning it to a variable of // type error), then the return value would not be a nil interface // value even if aerr was a nil pointer, and that would break tests // like "if err == nil ...". if aerr == nil { return nil } return aerr default: return errors.New("rabbitpubsub: NotifyClose Go channel is unexpectedly open") } } // toPublishing converts a driver.Message to an amqp.Publishing. func toPublishing(m *driver.Message) amqp.Publishing { h := amqp.Table{} for k, v := range m.Metadata { h[k] = v } return amqp.Publishing{ Headers: h, Body: m.Body, } } // IsRetryable implements driver.Topic.IsRetryable. func (*topic) IsRetryable(err error) bool { return isRetryable(err) } func (*topic) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } var errorCodes = map[int]gcerrors.ErrorCode{ amqp.NotFound: gcerrors.NotFound, amqp.PreconditionFailed: gcerrors.FailedPrecondition, // These next indicate a bug in our driver, not the user's code. amqp.SyntaxError: gcerrors.Internal, amqp.CommandInvalid: gcerrors.Internal, amqp.InternalError: gcerrors.Internal, amqp.NotImplemented: gcerrors.Unimplemented, amqp.ChannelError: gcerrors.FailedPrecondition, // typically channel closed } func errorCode(err error) gcerrors.ErrorCode { aerr, ok := err.(*amqp.Error) if !ok { return gcerrors.Unknown } if ec, ok := errorCodes[aerr.Code]; ok { return ec } return gcerrors.Unknown } func isRetryable(err error) bool { aerr, ok := err.(*amqp.Error) if !ok { return false } // amqp.Error has a Recover field which sounds like it should mean "retryable". // But it actually means "can be recovered by retrying later or with different // parameters," which is not what we want. The error codes for which Recover is // true, defined in the isSoftExceptionCode function of // github.com/streadway/amqp/spec091.go, include things like NotFound and // AccessRefused, which require outside action. // // The following are the codes which might be resolved by retry without external // action, according to the AMQP 0.91 spec // (https://www.rabbitmq.com/amqp-0-9-1-reference.html#constants). The quotations // are from that page. switch aerr.Code { case amqp.ContentTooLarge: // "The client attempted to transfer content larger than the server could // accept at the present time. The client may retry at a later time." return true case amqp.ConnectionForced: // "An operator intervened to close the connection for some reason. The // client may retry at some later date." return true default: return false } } // As implements driver.Topic.As. func (t *topic) As(i interface{}) bool { c, ok := i.(**amqp.Connection) if !ok { return false } conn, ok := t.conn.(*connection) if !ok { // running against the fake return false } *c = conn.conn return true } // ErrorAs implements driver.Topic.ErrorAs func (*topic) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } func errorAs(err error, i interface{}) bool { switch e := err.(type) { case *amqp.Error: if p, ok := i.(**amqp.Error); ok { *p = e return true } case MultiError: if p, ok := i.(*MultiError); ok { *p = e return true } } return false } // Close implements driver.Topic.Close. func (*topic) Close() error { return nil } // OpenSubscription returns a *pubsub.Subscription corresponding to the named queue. // See the package documentation for an example. // // The queue must have been previously created (for instance, by using // amqp.Channel.QueueDeclare) and bound to an exchange. // // OpenSubscription uses the supplied amqp.Connection for all communication. It is // the caller's responsibility to establish this connection before calling // OpenSubscription and to close it when Close has been called on all Subscriptions // opened with it. // // The documentation of the amqp package recommends using separate connections for // publishing and subscribing. func OpenSubscription(conn *amqp.Connection, name string, opts *SubscriptionOptions) *pubsub.Subscription { return pubsub.NewSubscription(newSubscription(&connection{conn}, name), nil, nil) } type subscription struct { conn amqpConnection queue string // the AMQP queue name consumer string // the client-generated name for this particular subscriber mu sync.Mutex ch amqpChannel // AMQP channel used for all communication. delc <-chan amqp.Delivery closec <-chan *amqp.Error receiveBatchHook func() // for testing } var nextConsumer int64 // atomic func newSubscription(conn amqpConnection, name string) *subscription { return &subscription{ conn: conn, queue: name, consumer: fmt.Sprintf("c%d", atomic.AddInt64(&nextConsumer, 1)), receiveBatchHook: func() {}, } } // Must be called with s.mu held. func (s *subscription) establishChannel(ctx context.Context) error { if s.ch != nil { // We already have a channel. select { // If it was closed, open a new one. // (Ignore the error, if any.) case <-s.closec: // If it isn't closed, nothing to do. default: return nil } } var ch amqpChannel err := runWithContext(ctx, func() error { // Create a new channel. var err error ch, err = s.conn.Channel() if err != nil { return err } // Subscribe to messages from the queue. s.delc, err = ch.Consume(s.queue, s.consumer) return err }) if err != nil { return err } s.ch = ch s.closec = ch.NotifyClose(make(chan *amqp.Error, 1)) // closec will get at most one element return nil } // ReceiveBatch implements driver.Subscription.ReceiveBatch. func (s *subscription) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { s.mu.Lock() defer s.mu.Unlock() if err := s.establishChannel(ctx); err != nil { return nil, err } s.receiveBatchHook() // Get up to maxMessages waiting messages, but don't take too long. var ms []*driver.Message maxTime := time.NewTimer(50 * time.Millisecond) for { select { case <-ctx.Done(): // Cancel the Consume. _ = s.ch.Cancel(s.consumer) // ignore the error s.ch = nil return nil, ctx.Err() case d, ok := <-s.delc: if !ok { // channel closed s.ch = nil // re-establish the channel next time if len(ms) > 0 { return ms, nil } // s.closec must be closed too. See if it has an error. if err := closeErr(s.closec); err != nil { // PreconditionFailed can happen if we send an Ack or Nack for a // message that has already been acked/nacked. Ignore those errors. if aerr, ok := err.(*amqp.Error); ok && aerr.Code == amqp.PreconditionFailed { return nil, nil } return nil, err } // We shouldn't be here, but if we are, we still want to return an // error. return nil, errors.New("rabbitpubsub: delivery channel closed unexpectedly") } ms = append(ms, toMessage(d)) if len(ms) >= maxMessages { return ms, nil } case <-maxTime.C: // Timed out. Return whatever we have. If we have nothing, we'll get // called again soon, but returning allows us to give up the lock in // case there are acks/nacks to be sent. return ms, nil } } } // toMessage converts an amqp.Delivery (a received message) to a driver.Message. func toMessage(d amqp.Delivery) *driver.Message { // Delivery.Headers is a map[string]interface{}, so we have to // convert each value to a string. md := map[string]string{} for k, v := range d.Headers { md[k] = fmt.Sprint(v) } return &driver.Message{ Body: d.Body, AckID: d.DeliveryTag, Metadata: md, AsFunc: func(i interface{}) bool { p, ok := i.(*amqp.Delivery) if !ok { return false } *p = d return true }, } } // SendAcks implements driver.Subscription.SendAcks. func (s *subscription) SendAcks(ctx context.Context, ackIDs []driver.AckID) error { return s.sendAcksOrNacks(ctx, ackIDs, true) } // CanNack implements driver.CanNack. func (s *subscription) CanNack() bool { return true } // SendNacks implements driver.Subscription.SendNacks. func (s *subscription) SendNacks(ctx context.Context, ackIDs []driver.AckID) error { return s.sendAcksOrNacks(ctx, ackIDs, false) } func (s *subscription) sendAcksOrNacks(ctx context.Context, ackIDs []driver.AckID, ack bool) error { s.mu.Lock() defer s.mu.Unlock() if err := s.establishChannel(ctx); err != nil { return err } // Ack/Nack calls don't wait for a response, so this loop should execute relatively // quickly. // It wouldn't help to make it concurrent, because Channel.Ack/Nack grabs a // channel-wide mutex. (We could consider using multiple channels if performance // becomes an issue.) for _, id := range ackIDs { if ctx.Err() != nil { return ctx.Err() } var err error if ack { err = s.ch.Ack(id.(uint64)) } else { err = s.ch.Nack(id.(uint64)) } if err != nil { s.ch = nil // re-establish channel after an error return err } } return nil } // IsRetryable implements driver.Subscription.IsRetryable. func (*subscription) IsRetryable(err error) bool { return isRetryable(err) } func (*subscription) ErrorCode(err error) gcerrors.ErrorCode { return errorCode(err) } // As implements driver.Subscription.As. func (s *subscription) As(i interface{}) bool { c, ok := i.(**amqp.Connection) if !ok { return false } conn, ok := s.conn.(*connection) if !ok { // running against the fake return false } *c = conn.conn return true } // ErrorAs implements driver.Subscription.ErrorAs func (*subscription) ErrorAs(err error, i interface{}) bool { return errorAs(err, i) } // Close implements driver.Subscription.Close. func (*subscription) Close() error { return nil } go-cloud-0.20.0/pubsub/rabbitpubsub/rabbit_test.go000066400000000000000000000263301367004507500221320ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package rabbitpubsub // To run these tests against a real RabbitMQ server, first run localrabbit.sh. // Then wait a few seconds for the server to be ready. // If no server is running, the tests will use a fake (see fake_test.go). import ( "context" "errors" "fmt" "io" "os" "strings" "sync" "sync/atomic" "testing" "time" "github.com/streadway/amqp" "gocloud.dev/gcerrors" "gocloud.dev/internal/testing/setup" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" "gocloud.dev/pubsub/drivertest" ) const rabbitURL = "amqp://guest:guest@localhost:5672/" var logOnce sync.Once func mustDialRabbit(t testing.TB) amqpConnection { if !setup.HasDockerTestEnvironment() { logOnce.Do(func() { t.Log("using the fake because the RabbitMQ server is not available") }) return newFakeConnection() } conn, err := amqp.Dial(rabbitURL) if err != nil { t.Fatal(err) } logOnce.Do(func() { t.Logf("using the RabbitMQ server at %s", rabbitURL) }) return &connection{conn} } func TestConformance(t *testing.T) { harnessMaker := func(_ context.Context, t *testing.T) (drivertest.Harness, error) { return &harness{conn: mustDialRabbit(t)}, nil } _, isFake := mustDialRabbit(t).(*fakeConnection) asTests := []drivertest.AsTest{rabbitAsTest{isFake}} drivertest.RunConformanceTests(t, harnessMaker, asTests) // Run the conformance tests with the fake if we haven't. if isFake { return } t.Logf("now running tests with the fake") harnessMaker = func(_ context.Context, t *testing.T) (drivertest.Harness, error) { return &harness{conn: newFakeConnection()}, nil } asTests = []drivertest.AsTest{rabbitAsTest{true}} drivertest.RunConformanceTests(t, harnessMaker, asTests) } func BenchmarkRabbit(b *testing.B) { ctx := context.Background() h := &harness{conn: mustDialRabbit(b)} dt, cleanup, err := h.CreateTopic(ctx, b.Name()) if err != nil { b.Fatal(err) } defer cleanup() ds, cleanup, err := h.CreateSubscription(ctx, dt, b.Name()) if err != nil { b.Fatal(err) } defer cleanup() topic := pubsub.NewTopic(dt, nil) defer topic.Shutdown(ctx) sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) drivertest.RunBenchmarks(b, topic, sub) } type harness struct { conn amqpConnection numTopics uint32 numSubs uint32 } func (h *harness) CreateTopic(_ context.Context, testName string) (dt driver.Topic, cleanup func(), err error) { exchange := fmt.Sprintf("%s-topic-%d", testName, atomic.AddUint32(&h.numTopics, 1)) if err := declareExchange(h.conn, exchange); err != nil { return nil, nil, err } cleanup = func() { ch, err := h.conn.Channel() if err != nil { panic(err) } ch.ExchangeDelete(exchange) } return newTopic(h.conn, exchange), cleanup, nil } func (h *harness) MakeNonexistentTopic(context.Context) (driver.Topic, error) { return newTopic(h.conn, "nonexistent-topic"), nil } func (h *harness) CreateSubscription(_ context.Context, dt driver.Topic, testName string) (ds driver.Subscription, cleanup func(), err error) { queue := fmt.Sprintf("%s-subscription-%d", testName, atomic.AddUint32(&h.numSubs, 1)) if err := bindQueue(h.conn, queue, dt.(*topic).exchange); err != nil { return nil, nil, err } cleanup = func() { ch, err := h.conn.Channel() if err != nil { panic(err) } ch.QueueDelete(queue) } ds = newSubscription(h.conn, queue) return ds, cleanup, nil } func (h *harness) MakeNonexistentSubscription(_ context.Context) (driver.Subscription, error) { return newSubscription(h.conn, "nonexistent-subscription"), nil } func (h *harness) Close() { h.conn.Close() } func (h *harness) MaxBatchSizes() (int, int) { return 0, 0 } func (*harness) SupportsMultipleSubscriptions() bool { return true } func TestUnroutable(t *testing.T) { // Expect that we get an error on publish if the exchange has no queue bound to it. // The error should be a MultiError containing one error per message. ctx := context.Background() conn := mustDialRabbit(t) defer conn.Close() if err := declareExchange(conn, "u"); err != nil { t.Fatal(err) } topic := newTopic(conn, "u") msgs := []*driver.Message{ {Body: []byte("")}, {Body: []byte("")}, } err := topic.SendBatch(ctx, msgs) var merr MultiError if !topic.ErrorAs(err, &merr) { t.Fatalf("got error of type %T, want MultiError", err) } if got, want := len(merr), len(msgs); got != want { t.Fatalf("got %d errors, want %d", got, want) } // Test MultiError.Error. if got, want := strings.Count(merr.Error(), ";")+1, len(merr); got != want { t.Errorf("got %d semicolon-separated messages, want %d", got, want) } // Test each individual error. for i, err := range merr { if !strings.Contains(err.Error(), "NO_ROUTE") { t.Errorf("%d: got %v, want an error with 'NO_ROUTE'", i, err) } } } func TestErrorCode(t *testing.T) { for _, test := range []struct { in error want gcerrors.ErrorCode }{ {nil, gcerrors.Unknown}, {&os.PathError{}, gcerrors.Unknown}, {&amqp.Error{Code: amqp.SyntaxError}, gcerrors.Internal}, {&amqp.Error{Code: amqp.NotImplemented}, gcerrors.Unimplemented}, {&amqp.Error{Code: amqp.ContentTooLarge}, gcerrors.Unknown}, } { if got := errorCode(test.in); got != test.want { t.Errorf("%v: got %s, want %s", test.in, got, test.want) } } } func TestOpens(t *testing.T) { ctx := context.Background() if got := OpenTopic(nil, "t", nil); got == nil { t.Error("got nil, want non-nil") } else { got.Shutdown(ctx) } if got := OpenSubscription(nil, "s", nil); got == nil { t.Error("got nil, want non-nil") } else { got.Shutdown(ctx) } } func TestIsRetryable(t *testing.T) { for _, test := range []struct { err error want bool }{ {errors.New("xyz"), false}, {io.ErrUnexpectedEOF, false}, {&amqp.Error{Code: amqp.AccessRefused}, false}, {&amqp.Error{Code: amqp.ContentTooLarge}, true}, {&amqp.Error{Code: amqp.ConnectionForced}, true}, } { got := isRetryable(test.err) if got != test.want { t.Errorf("%+v: got %t, want %t", test.err, got, test.want) } } } func TestRunWithContext(t *testing.T) { // runWithContext will run its argument to completion if the context isn't done. e := errors.New("") // f sleeps for a bit just to give the scheduler a chance to run. f := func() error { time.Sleep(100 * time.Millisecond); return e } got := runWithContext(context.Background(), f) if want := e; got != want { t.Errorf("got %v, want %v", got, want) } // runWithContext will return ctx.Err if context is done. ctx, cancel := context.WithCancel(context.Background()) cancel() got = runWithContext(ctx, f) if want := context.Canceled; got != want { t.Errorf("got %v, want %v", got, want) } } func declareExchange(conn amqpConnection, name string) error { ch, err := conn.Channel() if err != nil { panic(err) } defer ch.Close() return ch.ExchangeDeclare(name) } func bindQueue(conn amqpConnection, queueName, exchangeName string) error { ch, err := conn.Channel() if err != nil { return err } defer ch.Close() return ch.QueueDeclareAndBind(queueName, exchangeName) } type rabbitAsTest struct { usingFake bool } func (rabbitAsTest) Name() string { return "rabbit test" } func (r rabbitAsTest) TopicCheck(topic *pubsub.Topic) error { var conn2 amqp.Connection if topic.As(&conn2) { return fmt.Errorf("cast succeeded for %T, want failure", &conn2) } if !r.usingFake { var conn3 *amqp.Connection if !topic.As(&conn3) { return fmt.Errorf("cast failed for %T", &conn3) } } return nil } func (r rabbitAsTest) SubscriptionCheck(sub *pubsub.Subscription) error { var conn2 amqp.Connection if sub.As(&conn2) { return fmt.Errorf("cast succeeded for %T, want failure", &conn2) } if !r.usingFake { var conn3 *amqp.Connection if !sub.As(&conn3) { return fmt.Errorf("cast failed for %T", &conn3) } } return nil } func (rabbitAsTest) TopicErrorCheck(t *pubsub.Topic, err error) error { var aerr *amqp.Error if !t.ErrorAs(err, &aerr) { return fmt.Errorf("failed to convert %v (%T) to an amqp.Error", err, err) } if aerr.Code != amqp.NotFound { return fmt.Errorf("got code %v, want NotFound", aerr.Code) } err = MultiError{err} var merr MultiError if !t.ErrorAs(err, &merr) { return fmt.Errorf("failed to convert %v (%T) to a MultiError", err, err) } var perr *os.PathError if t.ErrorAs(err, &perr) { return errors.New("got true for PathError, want false") } return nil } func (rabbitAsTest) SubscriptionErrorCheck(s *pubsub.Subscription, err error) error { var aerr *amqp.Error if !s.ErrorAs(err, &aerr) { return fmt.Errorf("failed to convert %v (%T) to an amqp.Error", err, err) } if aerr.Code != amqp.NotFound { return fmt.Errorf("got code %v, want NotFound", aerr.Code) } err = MultiError{err} var merr MultiError if !s.ErrorAs(err, &merr) { return fmt.Errorf("failed to convert %v (%T) to a MultiError", err, err) } var perr *os.PathError if s.ErrorAs(err, &perr) { return errors.New("got true for PathError, want false") } return nil } func (r rabbitAsTest) MessageCheck(m *pubsub.Message) error { var pd *amqp.Delivery if m.As(&pd) { return fmt.Errorf("cast succeeded for %T, want failure", &pd) } if !r.usingFake { var d amqp.Delivery if !m.As(&d) { return fmt.Errorf("cast failed for %T", &d) } } return nil } func (rabbitAsTest) BeforeSend(as func(interface{}) bool) error { var pub *amqp.Publishing if !as(&pub) { return fmt.Errorf("cast failed for %T", &pub) } return nil } func fakeConnectionStringInEnv() func() { oldEnvVal := os.Getenv("RABBIT_SERVER_URL") os.Setenv("RABBIT_SERVER_URL", "amqp://localhost:10000/vhost") return func() { os.Setenv("RABBIT_SERVER_URL", oldEnvVal) } } func TestOpenTopicFromURL(t *testing.T) { cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK, but still error because Dial fails. {"rabbit://myexchange", true}, // Invalid parameter. {"rabbit://myexchange?param=value", true}, } ctx := context.Background() for _, test := range tests { topic, err := pubsub.OpenTopic(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if topic != nil { topic.Shutdown(ctx) } } } func TestOpenSubscriptionFromURL(t *testing.T) { cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK, but error because Dial fails. {"rabbit://myqueue", true}, // Invalid parameter. {"rabbit://myqueue?param=value", true}, } ctx := context.Background() for _, test := range tests { sub, err := pubsub.OpenSubscription(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if sub != nil { sub.Shutdown(ctx) } } } go-cloud-0.20.0/pubsub/sub_test.go000066400000000000000000000041351367004507500167730ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pubsub_test import ( "context" "testing" "gocloud.dev/pubsub" "gocloud.dev/pubsub/driver" ) // scriptedSub returns batches of messages in a predefined order from // ReceiveBatch. type scriptedSub struct { driver.Subscription // batches contains slices of messages to return from ReceiveBatch, one // after the other. batches [][]*driver.Message // calls counts how many times ReceiveBatch has been called. calls int // closed records if Close was called. closed bool } func (s *scriptedSub) ReceiveBatch(ctx context.Context, maxMessages int) ([]*driver.Message, error) { b := s.batches[s.calls] s.calls++ return b, nil } func (s *scriptedSub) SendAcks(ctx context.Context, ackIDs []driver.AckID) error { return nil } func (*scriptedSub) CanNack() bool { return false } func (s *scriptedSub) Close() error { s.closed = true return nil } func TestReceiveWithEmptyBatchReturnedFromDriver(t *testing.T) { ctx := context.Background() ds := &scriptedSub{ batches: [][]*driver.Message{ // First call gets an empty batch. {}, // Second call gets a non-empty batch. {&driver.Message{}}, }, } sub := pubsub.NewSubscription(ds, nil, nil) defer sub.Shutdown(ctx) m, err := sub.Receive(ctx) if err != nil { t.Fatal(err) } m.Ack() } func TestSubscriptionCloseIsCalled(t *testing.T) { ctx := context.Background() ds := &scriptedSub{} sub := pubsub.NewSubscription(ds, nil, nil) sub.Shutdown(ctx) if !ds.closed { t.Error("want Subscription.Close to have been called") } } go-cloud-0.20.0/runtimevar/000077500000000000000000000000001367004507500155055ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/awsparamstore/000077500000000000000000000000001367004507500203755ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/awsparamstore/awsparamstore.go000066400000000000000000000225261367004507500236230ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package awsparamstore provides a runtimevar implementation with variables // read from AWS Systems Manager Parameter Store // (https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html) // Use OpenVariable to construct a *runtimevar.Variable. // // URLs // // For runtimevar.OpenVariable, awsparamstore registers for the scheme "awsparamstore". // The default URL opener will use an AWS session with the default credentials // and configuration; see https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ // for more details. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // awsparamstore exposes the following types for As: // - Snapshot: *ssm.GetParameterOutput, *ssm.DescribeParametersOutput // - Error: awserr.Error package awsparamstore // import "gocloud.dev/runtimevar/awsparamstore" import ( "context" "fmt" "net/url" "path" "sync" "time" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/service/ssm" "github.com/google/wire" gcaws "gocloud.dev/aws" "gocloud.dev/gcerrors" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" ) func init() { runtimevar.DefaultURLMux().RegisterVariable(Scheme, new(lazySessionOpener)) } // Set holds Wire providers for this package. var Set = wire.NewSet( wire.Struct(new(URLOpener), "ConfigProvider"), ) // URLOpener opens AWS Paramstore URLs like "awsparamstore://myvar". // See gocloud.dev/aws/ConfigFromURLParams for supported query parameters // that affect the default AWS session. // // In addition, the following URL parameters are supported: // - decoder: The decoder to use. Defaults to URLOpener.Decoder, or // runtimevar.BytesDecoder if URLOpener.Decoder is nil. // See runtimevar.DecoderByName for supported values. type URLOpener struct { // ConfigProvider must be set to a non-nil value. ConfigProvider client.ConfigProvider // Decoder specifies the decoder to use if one is not specified in the URL. // Defaults to runtimevar.BytesDecoder. Decoder *runtimevar.Decoder // Options specifies the options to pass to New. Options Options } // lazySessionOpener obtains the AWS session from the environment on the first // call to OpenVariableURL. type lazySessionOpener struct { init sync.Once opener *URLOpener err error } func (o *lazySessionOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { o.init.Do(func() { sess, err := gcaws.NewDefaultSession() if err != nil { o.err = err return } o.opener = &URLOpener{ ConfigProvider: sess, } }) if o.err != nil { return nil, fmt.Errorf("open variable %v: %v", u, o.err) } return o.opener.OpenVariableURL(ctx, u) } // Scheme is the URL scheme awsparamstore registers its URLOpener under on runtimevar.DefaultMux. const Scheme = "awsparamstore" // OpenVariableURL opens the variable at the URL's path. See the package doc // for more details. func (o *URLOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { q := u.Query() decoderName := q.Get("decoder") q.Del("decoder") decoder, err := runtimevar.DecoderByName(ctx, decoderName, o.Decoder) if err != nil { return nil, fmt.Errorf("open variable %v: invalid decoder: %v", u, err) } configProvider := &gcaws.ConfigOverrider{ Base: o.ConfigProvider, } overrideCfg, err := gcaws.ConfigFromURLParams(q) if err != nil { return nil, fmt.Errorf("open variable %v: %v", u, err) } configProvider.Configs = append(configProvider.Configs, overrideCfg) return OpenVariable(configProvider, path.Join(u.Host, u.Path), decoder, &o.Options) } // Options sets options. type Options struct { // WaitDuration controls the rate at which Parameter Store is polled. // Defaults to 30 seconds. WaitDuration time.Duration } // OpenVariable constructs a *runtimevar.Variable backed by the variable name in // AWS Systems Manager Parameter Store. // Parameter Store returns raw bytes; provide a decoder to decode the raw bytes // into the appropriate type for runtimevar.Snapshot.Value. // See the runtimevar package documentation for examples of decoders. func OpenVariable(sess client.ConfigProvider, name string, decoder *runtimevar.Decoder, opts *Options) (*runtimevar.Variable, error) { return runtimevar.New(newWatcher(sess, name, decoder, opts)), nil } func newWatcher(sess client.ConfigProvider, name string, decoder *runtimevar.Decoder, opts *Options) *watcher { if opts == nil { opts = &Options{} } return &watcher{ sess: sess, name: name, wait: driver.WaitDuration(opts.WaitDuration), decoder: decoder, } } // state implements driver.State. type state struct { val interface{} rawGet *ssm.GetParameterOutput rawDesc *ssm.DescribeParametersOutput updateTime time.Time version int64 err error } // Value implements driver.State.Value. func (s *state) Value() (interface{}, error) { return s.val, s.err } // UpdateTime implements driver.State.UpdateTime. func (s *state) UpdateTime() time.Time { return s.updateTime } // As implements driver.State.As. func (s *state) As(i interface{}) bool { if s.rawGet == nil { return false } switch p := i.(type) { case **ssm.GetParameterOutput: *p = s.rawGet case **ssm.DescribeParametersOutput: *p = s.rawDesc default: return false } return true } // errorState returns a new State with err, unless prevS also represents // the same error, in which case it returns nil. func errorState(err error, prevS driver.State) driver.State { s := &state{err: err} if prevS == nil { return s } prev := prevS.(*state) if prev.err == nil { // New error. return s } if equivalentError(err, prev.err) { // Same error, return nil to indicate no change. return nil } return s } // equivalentError returns true iff err1 and err2 represent an equivalent error; // i.e., we don't want to return it to the user as a different error. func equivalentError(err1, err2 error) bool { if err1 == err2 || err1.Error() == err2.Error() { return true } var code1, code2 string if awsErr, ok := err1.(awserr.Error); ok { code1 = awsErr.Code() } if awsErr, ok := err2.(awserr.Error); ok { code2 = awsErr.Code() } return code1 != "" && code1 == code2 } type watcher struct { // sess is the AWS session to use to talk to AWS. sess client.ConfigProvider // name is the parameter to retrieve. name string // wait is the amount of time to wait between querying AWS. wait time.Duration // decoder is the decoder that unmarshals the value in the param. decoder *runtimevar.Decoder } // WatchVariable implements driver.WatchVariable. func (w *watcher) WatchVariable(ctx context.Context, prev driver.State) (driver.State, time.Duration) { lastVersion := int64(-1) if prev != nil { lastVersion = prev.(*state).version } // GetParameter from S3 to get the current value and version. svc := ssm.New(w.sess) getResp, err := svc.GetParameter(&ssm.GetParameterInput{ Name: aws.String(w.name), // Ignored if the parameter is not encrypted. WithDecryption: aws.Bool(true), }) if err != nil { return errorState(err, prev), w.wait } if getResp.Parameter == nil { return errorState(fmt.Errorf("unable to get %q parameter", w.name), prev), w.wait } getP := getResp.Parameter if *getP.Version == lastVersion { // Version hasn't changed, so no change; return nil. return nil, w.wait } // DescribeParameters from S3 to get the LastModified date. descResp, err := svc.DescribeParameters(&ssm.DescribeParametersInput{ Filters: []*ssm.ParametersFilter{ {Key: aws.String("Name"), Values: []*string{&w.name}}, }, }) if err != nil { return errorState(err, prev), w.wait } if len(descResp.Parameters) != 1 || *descResp.Parameters[0].Name != w.name { return errorState(fmt.Errorf("unable to get single %q parameter", w.name), prev), w.wait } descP := descResp.Parameters[0] // New value (or at least, new version). Decode it. val, err := w.decoder.Decode(ctx, []byte(*getP.Value)) if err != nil { return errorState(err, prev), w.wait } return &state{val: val, rawGet: getResp, rawDesc: descResp, updateTime: *descP.LastModifiedDate, version: *getP.Version}, w.wait } // Close implements driver.Close. func (w *watcher) Close() error { return nil } // ErrorAs implements driver.ErrorAs. func (w *watcher) ErrorAs(err error, i interface{}) bool { switch v := err.(type) { case awserr.Error: if p, ok := i.(*awserr.Error); ok { *p = v return true } } return false } // ErrorCode implements driver.ErrorCode. func (*watcher) ErrorCode(err error) gcerrors.ErrorCode { if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "ParameterNotFound" { return gcerrors.NotFound } return gcerrors.Unknown } go-cloud-0.20.0/runtimevar/awsparamstore/awsparamstore_test.go000066400000000000000000000123071367004507500246560ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsparamstore import ( "context" "errors" "os" "testing" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/ssm" "gocloud.dev/internal/testing/setup" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" "gocloud.dev/runtimevar/drivertest" ) // This constant records the region used for the last --record. // If you want to use --record mode, // 1. Update this constant to your AWS region. // TODO(issue #300): Use Terraform to get this. const region = "us-east-2" type harness struct { session client.ConfigProvider closer func() } func newHarness(t *testing.T) (drivertest.Harness, error) { sess, _, done, _ := setup.NewAWSSession(context.Background(), t, region) return &harness{session: sess, closer: done}, nil } func (h *harness) MakeWatcher(ctx context.Context, name string, decoder *runtimevar.Decoder) (driver.Watcher, error) { return newWatcher(h.session, name, decoder, nil), nil } func (h *harness) CreateVariable(ctx context.Context, name string, val []byte) error { svc := ssm.New(h.session) _, err := svc.PutParameter(&ssm.PutParameterInput{ Name: aws.String(name), Type: aws.String("String"), Value: aws.String(string(val)), Overwrite: aws.Bool(true), }) return err } func (h *harness) UpdateVariable(ctx context.Context, name string, val []byte) error { return h.CreateVariable(ctx, name, val) } func (h *harness) DeleteVariable(ctx context.Context, name string) error { svc := ssm.New(h.session) _, err := svc.DeleteParameter(&ssm.DeleteParameterInput{Name: aws.String(name)}) return err } func (h *harness) Close() { h.closer() } func (h *harness) Mutable() bool { return true } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) SnapshotCheck(s *runtimevar.Snapshot) error { var getParam *ssm.GetParameterOutput if !s.As(&getParam) { return errors.New("Snapshot.As failed for GetParameterOutput") } var descParam *ssm.DescribeParametersOutput if !s.As(&descParam) { return errors.New("Snapshot.As failed for DescribeParametersOutput") } return nil } func (verifyAs) ErrorCheck(v *runtimevar.Variable, err error) error { var e awserr.Error if !v.ErrorAs(err, &e) { return errors.New("runtimevar.ErrorAs failed") } return nil } // Paramstore-specific tests. func TestEquivalentError(t *testing.T) { tests := []struct { Err1, Err2 error Want bool }{ {Err1: errors.New("not aws"), Err2: errors.New("not aws"), Want: true}, {Err1: errors.New("not aws"), Err2: errors.New("not aws but different")}, {Err1: errors.New("not aws"), Err2: awserr.New("code1", "fail", nil)}, {Err1: awserr.New("code1", "fail", nil), Err2: awserr.New("code2", "fail", nil)}, {Err1: awserr.New("code1", "fail", nil), Err2: awserr.New("code1", "fail", nil), Want: true}, } for _, test := range tests { got := equivalentError(test.Err1, test.Err2) if got != test.Want { t.Errorf("%v vs %v: got %v want %v", test.Err1, test.Err2, got, test.Want) } } } func TestNoConnectionError(t *testing.T) { prevAccessKey := os.Getenv("AWS_ACCESS_KEY") prevSecretKey := os.Getenv("AWS_SECRET_KEY") prevRegion := os.Getenv("AWS_REGION") os.Setenv("AWS_ACCESS_KEY", "myaccesskey") os.Setenv("AWS_SECRET_KEY", "mysecretkey") os.Setenv("AWS_REGION", "us-east-1") defer func() { os.Setenv("AWS_ACCESS_KEY", prevAccessKey) os.Setenv("AWS_SECRET_KEY", prevSecretKey) os.Setenv("AWS_REGION", prevRegion) }() sess, err := session.NewSession() if err != nil { t.Fatal(err) } v, err := OpenVariable(sess, "variable-name", nil, nil) if err != nil { t.Fatal(err) } defer v.Close() _, err = v.Watch(context.Background()) if err == nil { t.Error("got nil want error") } } func TestOpenVariable(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"awsparamstore://myvar", false}, // OK, setting region. {"awsparamstore://myvar?region=us-west-1", false}, // OK, setting decoder. {"awsparamstore://myvar?decoder=string", false}, // Invalid decoder. {"awsparamstore://myvar?decoder=notadecoder", true}, // Invalid parameter. {"awsparamstore://myvar?param=value", true}, } ctx := context.Background() for _, test := range tests { v, err := runtimevar.OpenVariable(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err == nil { v.Close() } } } go-cloud-0.20.0/runtimevar/awsparamstore/example_test.go000066400000000000000000000035241367004507500234220ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awsparamstore_test import ( "context" "log" "github.com/aws/aws-sdk-go/aws/session" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/awsparamstore" ) func ExampleOpenVariable() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Establish an AWS session. // See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info. sess, err := session.NewSession(nil) if err != nil { log.Fatal(err) } // Construct a *runtimevar.Variable that watches the variable. v, err := awsparamstore.OpenVariable(sess, "cfg-variable-name", runtimevar.StringDecoder, nil) if err != nil { log.Fatal(err) } defer v.Close() } func Example_openVariableFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/runtimevar/awsparamstore" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // runtimevar.OpenVariable creates a *runtimevar.Variable from a URL. v, err := runtimevar.OpenVariable(ctx, "awsparamstore://myvar?region=us-west-1&decoder=string") if err != nil { log.Fatal(err) } defer v.Close() } go-cloud-0.20.0/runtimevar/awsparamstore/testdata/000077500000000000000000000000001367004507500222065ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/000077500000000000000000000000001367004507500253005ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestAs/000077500000000000000000000000001367004507500265035ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestAs/verify_As.replay000066400000000000000000000170511367004507500316540ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSVnFIAIpf5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "b921b2c0edaa8966", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "48" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidmFyaWFibGUtZm9yLWFzIiwiV2l0aERlY3J5cHRpb24iOnRydWV9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "50" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:31 GMT" ], "X-Amzn-Requestid": [ "b8f9242b-e4d6-4204-9615-5fd105b2063c" ] }, "Body": "H4sIAAAAAAAAAKtWio8vqSxIVbJSCkgsSsxNLUkt8ssvccsvzUtRqgUAF48DRR4AAAA=" } }, { "ID": "b2c4332b29c76626", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "81" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidmFyaWFibGUtZm9yLWFzIiwiT3ZlcndyaXRlIjp0cnVlLCJUeXBlIjoiU3RyaW5nIiwiVmFsdWUiOiJoZWxsbyB3b3JsZCJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:31 GMT" ], "X-Amzn-Requestid": [ "111efd8d-07c6-47f1-868a-aecde1f69692" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqwFAFB+6N8fAAAA" } }, { "ID": "3a7d0ed7edfda472", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "48" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidmFyaWFibGUtZm9yLWFzIiwiV2l0aERlY3J5cHRpb24iOnRydWV9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:31 GMT" ], "X-Amzn-Requestid": [ "7d51f905-9270-4df1-971d-35e8f04aea42" ] }, "Body": "H4sIAAAAAAAAAGXMzQrCMBAE4FeRnFs16X9ugt60iIr3lW41kDYlSa1S+u5uQU8eZ4b5RnYECw16tEyObHMqmWRgWwmDk841snchgvOhkHEqonwtRJIJIbvfa/UEq+CmMayNDcGxgG3Bw+XdIUkeX56aPQkHU6laYUUrLXyZFDzN44zzIop2RcBK8ujxz32ps7eqvVO+gu7n4oFam8VgrK7mFq1TpiV5mj783X8q1QAAAA==" } }, { "ID": "6d3670bda34feb4e", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "57" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInZhcmlhYmxlLWZvci1hcyJdfV19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "188" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:32 GMT" ], "X-Amzn-Requestid": [ "db9d9c1d-61d2-4c37-8945-152d7d7a4e5b" ] }, "Body": "H4sIAAAAAAAAAFWPuQ7CMBBE/8U1V5yQwzV0gCJxNIhiwZtopcRBa3MJ5d/ZIBrK1ZvZmXmrEhhaDMhemeNbLSDA7nVFZVTAZ1AjtQIf1p2litAKFRJN5kWU5kkWRUUcL4t/zd4jixvYGXh4Q9Aak6Q6zmdazzOtzU0EU76Dq9ENARvJF8MdmODc4LjqeAxeQNk1dCEcip1Gakffv9sAzgJb4b+e28DkarkPMoI6JwX7U/8BH0Vt69oAAAA=" } }, { "ID": "e2fca0ab9fa5178e", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "26" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DeleteParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidmFyaWFibGUtZm9yLWFzIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "22" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:32 GMT" ], "X-Amzn-Requestid": [ "c418a67d-e207-4762-8991-e6e85d003935" ] }, "Body": "H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA==" } } ] }verify_As_returns_false_when_passed_nil.replay000066400000000000000000000170511367004507500377530ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestAs{ "Initial": "AQAAAA7WcSVoECqOHv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "f24d755b25841266", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "48" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidmFyaWFibGUtZm9yLWFzIiwiV2l0aERlY3J5cHRpb24iOnRydWV9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "50" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:31 GMT" ], "X-Amzn-Requestid": [ "6461348c-a142-4a0e-952a-5b568ebea34e" ] }, "Body": "H4sIAAAAAAAAAKtWio8vqSxIVbJSCkgsSsxNLUkt8ssvccsvzUtRqgUAF48DRR4AAAA=" } }, { "ID": "741d79987c85b169", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "81" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidmFyaWFibGUtZm9yLWFzIiwiT3ZlcndyaXRlIjp0cnVlLCJUeXBlIjoiU3RyaW5nIiwiVmFsdWUiOiJoZWxsbyB3b3JsZCJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:31 GMT" ], "X-Amzn-Requestid": [ "dbe1e5ec-9af0-4ee6-9b74-555c8e8c42c4" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqwFAFB+6N8fAAAA" } }, { "ID": "e592d429e266cca4", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "48" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidmFyaWFibGUtZm9yLWFzIiwiV2l0aERlY3J5cHRpb24iOnRydWV9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "178" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:32 GMT" ], "X-Amzn-Requestid": [ "2db78fee-bd8d-419b-af14-1bf8e7982dd7" ] }, "Body": "H4sIAAAAAAAAAGXMzQrCMBAE4FeRPVu1sb+5CXrTIireV7rVQNqUJLVK6bu7BT15nBnmG+CIFmvyZEEOsDkVIAFtI7F30rladi4gdD4QMkrEOlsJEadCyPb3Wj7RKrxpCipjA3Qwhy16vLxbYsnTy3OzZ+FgSlUpKnnlJVzEeZhkURqKLIl3+RwK9vjxz32ps7equXO+ou6m4kFam1lvrC6nlqxTpmF5HD872fig1QAAAA==" } }, { "ID": "2f40808286c714fc", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "57" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInZhcmlhYmxlLWZvci1hcyJdfV19" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "188" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:32 GMT" ], "X-Amzn-Requestid": [ "04194615-71da-46a3-a85e-5d7318368dbb" ] }, "Body": "H4sIAAAAAAAAAFWPuQ7CMBBE/8U1V5yQwzV0gCJxNIhiwZtopcRBa3MJ5d/ZIBrK1ZvZmXmrEhhaDMhemeNbLSDA7nVFZVTAZ1AjtQIf1p2litAKFRJN5kWU5kkWRUUcL4t/zd4jixvYGXh4Q9Aak6Q6zmdazzOtzU0EU76Dq9ENARvJF8MdmODc4LjqeAxeQNk1dCEcip1Gakffv9sAzgJb4b+e28DkarkPMoI6JwX7U/8BH0Vt69oAAAA=" } }, { "ID": "87b8293f5791f44d", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "26" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DeleteParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidmFyaWFibGUtZm9yLWFzIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "22" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:32 GMT" ], "X-Amzn-Requestid": [ "ecf9ca2d-95ef-4081-ae6d-ec22207b8d4c" ] }, "Body": "H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA==" } } ] }go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestDelete.replay000066400000000000000000000320701367004507500305620ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSVkNf6pNv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "5b1b1bd0b072d58a", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "86" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJPdmVyd3JpdGUiOnRydWUsIlR5cGUiOiJTdHJpbmciLCJWYWx1ZSI6ImhlbGxvIHdvcmxkIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "b1daeee4-d3fc-4dd3-832a-b9f034ad4bea" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqwFAFB+6N8fAAAA" } }, { "ID": "c32739b0fa084163", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "182" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "595ff11e-50b0-4bc8-9b0f-51ab3b13d461" ] }, "Body": "H4sIAAAAAAAAAG2Myw6CMBBFf8V0LQqVZ3cmulNi1LgfZcAmhZK2iIbw7w5Gdy7vOblnYAcwUKNDw8TA1secCQamEdBbYW0tOushWOdxEcZ8lfqcRwnnov29lg7J3nRTysp7gJFwVcjmbAMOzq8WKefw6YjsKLPXhSwlFmTJBIsoC+I0TPwsSLNtNmc5RT+Pv81v7+SMbCraF1DdBO6olJ712qhiomis1A3lx/ENGqFOI98AAAA=" } }, { "ID": "01f95da29061a9e4", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "62" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtY29uZmlnLXZhcmlhYmxlIl19XX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "a3ad23a0-78e3-469b-9ac3-5f99eb9c90ec" ] }, "Body": "H4sIAAAAAAAAAFWPyw6CQAxF/2XW+GDkOWvdqSEB3RgXFQppAoOZGVFD+HcrceOyObe9p6PIwECHDo0V6jKKLTgo3ncUSjh8OeGJPVh36CuqCSumTPxlmPpREsTrKEnjXfqfOVk0vA1GK3haRdApFURyk6ylDGMp1YMDKzOAblB/C47cP9dZtyh7XVOzGMAQ3FpkmvUtlYRfu6snCpqP5w50BaZi/pPNnSHd8HzmT6jXbDldpw85AKjY3wAAAA==" } }, { "ID": "37e13c1e121c4a57", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DeleteParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "22" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "00d48ddf-75db-457d-8cf1-5a712d7af550" ] }, "Body": "H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA==" } }, { "ID": "b72df83282049c4a", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "50" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "5339440f-bc4e-4d60-961d-e0e819fba9ee" ] }, "Body": "H4sIAAAAAAAAAKtWio8vqSxIVbJSCkgsSsxNLUkt8ssvccsvzUtRqgUAF48DRR4AAAA=" } }, { "ID": "44165eafe02903f1", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "88" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJPdmVyd3JpdGUiOnRydWUsIlR5cGUiOiJTdHJpbmciLCJWYWx1ZSI6Imdvb2RieWUgd29ybGQifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:29 GMT" ], "X-Amzn-Requestid": [ "2fed95a3-e487-4119-8aca-6e7017d184ef" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqwFAFB+6N8fAAAA" } }, { "ID": "13ebef2785ab2f7c", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "184" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:29 GMT" ], "X-Amzn-Requestid": [ "3c9dfee6-fb90-458c-acac-59161d21c862" ] }, "Body": "H4sIAAAAAAAAAG2NzQ6CMBAGX8X0DAqV395M9KbEqPG+yEKaACVtEQnh3V2M3jzuTL7ZiZ1BQ4MWNRMT210yJhjoVsBghDGN6I2LYKzLRRDxbeJxHsaci+632lgk+1BtKSv3CVpCXiNz2B4s3MYOKWfxZYkcKXNShSwlFmTJ+Osw9aMkiL00ScJD6rCMop/F3+a3d7VathXdd6j7BVRKFfmIq0Hpulg4aiNVSw/m+Q0tVurJ4QAAAA==" } }, { "ID": "65fc5e472d8ac398", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "62" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtY29uZmlnLXZhcmlhYmxlIl19XX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:29 GMT" ], "X-Amzn-Requestid": [ "352555fa-3c2a-42b6-b9b3-b04306e7a166" ] }, "Body": "H4sIAAAAAAAAAFWPyw6CQAxF/2XW+GDkOWvdqSEB3RgXFQppAoOZGVFD+HcrceOyObe9p6PIwECHDo0V6jKKLTgo3ncUSjh8OeGJPVh36CuqCSumTPxlmPpREsTrKEnjXfqfOVk0vA1GK3haRdApFURyk6ylDGMp1YMDKzOAblB/C47cP9dZtyh7XVOzGMAQ3FpkmvUtlYRfu6snCpqP5w50BaZi/pPNnSHd8HzmT6jXbDldpw85AKjY3wAAAA==" } }, { "ID": "d14c82fafa2c36c8", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DeleteParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "22" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:29 GMT" ], "X-Amzn-Requestid": [ "2a052e07-0101-4c63-b7df-cd6418fdc12c" ] }, "Body": "H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA==" } } ] }go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestInvalidJSON.replay000066400000000000000000000144671367004507500314520ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSVjD5y9sP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "7167d81e9c16e801", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "83" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJPdmVyd3JpdGUiOnRydWUsIlR5cGUiOiJTdHJpbmciLCJWYWx1ZSI6Im5vdC1qc29uIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:27 GMT" ], "X-Amzn-Requestid": [ "57eef06e-3960-4768-aa20-8ff94882647f" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqwFAFB+6N8fAAAA" } }, { "ID": "101cc9f1393ef73d", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "180" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:27 GMT" ], "X-Amzn-Requestid": [ "5a92107a-ff86-4062-bec2-5f1b2af91710" ] }, "Body": "H4sIAAAAAAAAAG2Myw6CMBBF/6VrUKiUR3cmulNi1LgfdSA10JK2+Ajh3x2M7tzNnJN7BrYDCy16tEwObLkvmWRgtYSHk861snchgvMhl0nKF3nEucg4l91vNfdI9mJ0perwDlbBuUEWsBV4OL46pJzHpyeyoczWXFWl8EqWTDwTRZzmSRZlIhHrImAlRT+Lv81v7+Ct0jX9J2j6CWjjw5szekJonaJLxuP4BigWaU7cAAAA" } }, { "ID": "39e59e81a2652823", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "62" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtY29uZmlnLXZhcmlhYmxlIl19XX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:27 GMT" ], "X-Amzn-Requestid": [ "783b9087-b55d-4fc1-be80-ecfe0152e9b7" ] }, "Body": "H4sIAAAAAAAAAFWPyw6CQAxF/2XW+GDkOWvdqSEB3RgXFQppAoOZGVFD+HcrceOyObe9p6PIwECHDo0V6jKKLTgo3ncUSjh8OeGJPVh36CuqCSumTPxlmPpREsTrKEnjXfqfOVk0vA1GK3haRdApFURyk6ylDGMp1YMDKzOAblB/C47cP9dZtyh7XVOzGMAQ3FpkmvUtlYRfu6snCpqP5w50BaZi/pPNnSHd8HzmT6jXbDldpw85AKjY3wAAAA==" } }, { "ID": "1baa2caf7ce5d911", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DeleteParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "22" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:27 GMT" ], "X-Amzn-Requestid": [ "3dc7c2b2-463f-440c-8423-f99519e4e11a" ] }, "Body": "H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA==" } } ] }go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestJSON.replay000066400000000000000000000150001367004507500301230ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSViJFl9wv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "03e11b6b55bac447", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "177" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJPdmVyd3JpdGUiOnRydWUsIlR5cGUiOiJTdHJpbmciLCJWYWx1ZSI6IltcbntcIk5hbWVcIjogXCJFZFwiLCBcIlRleHRcIjogXCJLbm9jayBrbm9jay5cIn0sXG57XCJOYW1lXCI6IFwiU2FtXCIsIFwiVGV4dFwiOiBcIldobydzIHRoZXJlP1wifVxuXSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:26 GMT" ], "X-Amzn-Requestid": [ "4b55f999-ed70-46d6-ae72-cf87441bd411" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqwFAFB+6N8fAAAA" } }, { "ID": "cfe6762b7b9c7915", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "235" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:26 GMT" ], "X-Amzn-Requestid": [ "2e070442-dee7-4f37-818b-a14004b0ff13" ] }, "Body": "H4sIAAAAAAAAAG2Oy27CMBBFfyWaTTcJBRfy8KaqVFZtESoIFnUXUzKABbGRbR5VlH9nAnSDuhlr7tU54xrG6LCiQA5kDS+fI5CAzkg8eul9Jfc+IfQhEbKfiqe8K8QgE0Lu/qjHQNwurFnqVXJAp/FnSxDDKwac/u6IdYFOgZN31nzYUi81ldxy0+sMil6a97NumhfZsIhhxNIL8a/z5psEp82K9xlu923wpUytLqwCGSkYlgpifqd8+Jq8GbvYRJt2dhQ08R0wweqemK/tg4/Cmhw9M6HMd3uQnNfW8M+b5gx8sw17OgEAAA==" } }, { "ID": "4e026e23edf7a4b6", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "62" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtY29uZmlnLXZhcmlhYmxlIl19XX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:26 GMT" ], "X-Amzn-Requestid": [ "068d1d36-78c6-47ae-851b-db97a4518466" ] }, "Body": "H4sIAAAAAAAAAFWPyw6CQAxF/2XW+GDkOWvdqSEB3RgXFQppAoOZGVFD+HcrceOyObe9p6PIwECHDo0V6jKKLTgo3ncUSjh8OeGJPVh36CuqCSumTPxlmPpREsTrKEnjXfqfOVk0vA1GK3haRdApFURyk6ylDGMp1YMDKzOAblB/C47cP9dZtyh7XVOzGMAQ3FpkmvUtlYRfu6snCpqP5w50BaZi/pPNnSHd8HzmT6jXbDldpw85AKjY3wAAAA==" } }, { "ID": "c61b2eefe96e9d6b", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DeleteParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "22" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:26 GMT" ], "X-Amzn-Requestid": [ "7a1a2952-c15c-42aa-8c1b-5400638cffbb" ] }, "Body": "H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA==" } } ] }go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestNonExistentVariable.replay000066400000000000000000000041721367004507500333060ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSVbOMm+xP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "cb0a2c5a95188554", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "47" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoiZG9lcy1ub3QtZXhpc3QiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "50" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:20 GMT" ], "X-Amzn-Requestid": [ "aebb2072-f9b2-41cc-b6c6-d519f4044a75" ] }, "Body": "H4sIAAAAAAAAAKtWio8vqSxIVbJSCkgsSsxNLUkt8ssvccsvzUtRqgUAF48DRR4AAAA=" } } ] }go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestString.replay000066400000000000000000000144771367004507500306410ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSVcOB5qwP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "17643322785d7b2b", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "86" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJPdmVyd3JpdGUiOnRydWUsIlR5cGUiOiJTdHJpbmciLCJWYWx1ZSI6ImhlbGxvIHdvcmxkIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:20 GMT" ], "X-Amzn-Requestid": [ "a6dff6ed-4191-4814-b2d6-1b144dca43b9" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqwFAFB+6N8fAAAA" } }, { "ID": "0156303937ed41f7", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "182" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:20 GMT" ], "X-Amzn-Requestid": [ "82a518d1-5c16-4022-8ecf-322f3ca5cbc6" ] }, "Body": "H4sIAAAAAAAAAG2MwQ6CMBAFf8X0DAoVBHoz0ZsSo8b7Kgs2KS1pq2gI/+5q9ObxzeTNwHZgoUWPlomBLfclEwysFtA74Vwrbi5EcD7kIlnweR5xnmaci+73mnkkezG6lk14ByvhrJAFbAUejs8OKefx4YlsKLM1lawlVmTJxNO0iBd5kkUxn/N1EbCSop/H3+a3d/BW6ob2CdTtDa6olJn0xqrqTdE6aTTlx/EFbv4n598AAAA=" } }, { "ID": "74ca46bee1f671a9", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "62" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtY29uZmlnLXZhcmlhYmxlIl19XX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:20 GMT" ], "X-Amzn-Requestid": [ "85c95f6d-8f86-4402-8482-e8cec3ce5daa" ] }, "Body": "H4sIAAAAAAAAAFWPuw7CMAxF/yVzeTQtr8ywAUKisCAGQ0xliSbIMS9V/DsGsTBa59r3uDUrYGhQkJNxu9ZMQaB6XtA4I/gQk5k5JFlETydCr1RJ3h1M8uG4HPVzW9jZ5D+zSci6DRwc3JMjaJwrh7YY960djKx1Vw30+AahxvApWGr/ty5J5xjDierODZjgcEalq3imI+HHbp+Zir7H1wLBA3vlP9m1MIVa561+QjGo5Wv/egOaSAJc3wAAAA==" } }, { "ID": "39593465548883b5", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DeleteParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "22" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:25 GMT" ], "X-Amzn-Requestid": [ "53c3a8f8-2d20-442e-a683-6afa0ea1919d" ] }, "Body": "H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA==" } } ] }go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestUpdate.replay000066400000000000000000000300141367004507500305760ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSVjNXF5Af5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "f03d9147d5c22ab2", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "86" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJPdmVyd3JpdGUiOnRydWUsIlR5cGUiOiJTdHJpbmciLCJWYWx1ZSI6ImhlbGxvIHdvcmxkIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:27 GMT" ], "X-Amzn-Requestid": [ "00bb37a7-e888-4bea-8e8a-611c9693e949" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqwFAFB+6N8fAAAA" } }, { "ID": "fba2d164840461c3", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "182" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:27 GMT" ], "X-Amzn-Requestid": [ "844e6802-42c9-4332-bde3-9cd8cca79079" ] }, "Body": "H4sIAAAAAAAAAG2Myw6CMBBFf8V0LQqVZ3cmulNi1LgfZcAmhZK2iIbw7w5Gdy7vOblnYAcwUKNDw8TA1secCQamEdBbYW0tOushWOdxEcZ8lfqcRwnnov29lg7J3nRTysp7gJFwVcjmbAMOzq8WKefw6YjsKLPXhSwlFmTJBIsoC+I0TPw0SJJtNmc5RT+Pv81v7+SMbCraF1DdBO6olJ712qhiomis1A3lx/ENT9PobN8AAAA=" } }, { "ID": "3ceebd4dd69da3e1", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "62" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtY29uZmlnLXZhcmlhYmxlIl19XX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:27 GMT" ], "X-Amzn-Requestid": [ "cd45cf49-a622-4067-97a5-272b753bce8d" ] }, "Body": "H4sIAAAAAAAAAFWPyw6CQAxF/2XW+GDkOWvdqSEB3RgXFQppAoOZGVFD+HcrceOyObe9p6PIwECHDo0V6jKKLTgo3ncUSjh8OeGJPVh36CuqCSumTPxlmPpREsTrKEnjXfqfOVk0vA1GK3haRdApFURyk6ylDGMp1YMDKzOAblB/C47cP9dZtyh7XVOzGMAQ3FpkmvUtlYRfu6snCpqP5w50BaZi/pPNnSHd8HzmT6jXbDldpw85AKjY3wAAAA==" } }, { "ID": "8e3e96089a5c4f1f", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "182" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "e31bc578-7d1a-444b-9130-0838c295a388" ] }, "Body": "H4sIAAAAAAAAAG2Myw6CMBBFf8V0LQqVZ3cmulNi1LgfZcAmhZK2iIbw7w5Gdy7vOblnYAcwUKNDw8TA1secCQamEdBbYW0tOushWOdxEcZ8lfqcRwnnov29lg7J3nRTysp7gJFwVcjmbAMOzq8WKefw6YjsKLPXhSwlFmTJBIsoC+I0TPw0SJJtNmc5RT+Pv81v7+SMbCraF1DdBO6olJ712qhiomis1A3lx/ENT9PobN8AAAA=" } }, { "ID": "69002c04d3ab1581", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "88" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJPdmVyd3JpdGUiOnRydWUsIlR5cGUiOiJTdHJpbmciLCJWYWx1ZSI6Imdvb2RieWUgd29ybGQifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "51" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "85cb4906-3936-476a-ad27-229d053a94fe" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMqoFAJMtxfQfAAAA" } }, { "ID": "b82d12060385c39d", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUiLCJXaXRoRGVjcnlwdGlvbiI6dHJ1ZX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "184" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "c2f8ece4-7338-41b7-996d-4d7a2af018e4" ] }, "Body": "H4sIAAAAAAAAAG2Myw6CMBBFf8XMGlTKuzsT3SkxatwPMpAmQElbREL4d4vRnct7Tu6Z4IwKGzKkgE+wu2TAAVXLcdBc64b32iXUxmU8iJifbBkLY8Z493ttDFn7kG0pKveJSmBeEziwR4O3sSObM/Qylhxt5iQLUQoqrLXGW4epFyVBvE3CwD+kDmQ2+nn8bX57V6NEW9l9x7pfQCVlkY+0GqSqi4WT0kK2wNk8vwG0iyed4QAAAA==" } }, { "ID": "580a9553bea1a4b3", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "62" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtY29uZmlnLXZhcmlhYmxlIl19XX0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "190" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "4337da43-9ed4-4759-ac96-07e48bfb0f2d" ] }, "Body": "H4sIAAAAAAAAAFWPyw6CQAxF/2XW+GDkOWvdqSEB3RgXFQppAoOZGVFD+HcrceOyObe9p6PIwECHDo0V6jKKLTgo3ncUSjh8OeGJPVh36CuqCSumTPxlmPpREsTrKEnjXfqfOVk0vA1GK3haRdApFURyk6ylDGMp1YMDKzOAblB/C47cP9dZtyh7XVOzGMAQ3FpkmvUtlYRfu6snCpqP5w50BaZi/pPNnSHd8HzmT6jXbDldpw85AKjY3wAAAA==" } }, { "ID": "4d358746fb99fe90", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "31" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DeleteParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC1jb25maWctdmFyaWFibGUifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "22" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:28 GMT" ], "X-Amzn-Requestid": [ "c4a513ba-5094-41e0-b287-da4edc5570e9" ] }, "Body": "H4sIAAAAAAAAAKuuBQBDv6ajAgAAAA==" } } ] }go-cloud-0.20.0/runtimevar/awsparamstore/testdata/TestConformance/TestUpdateWithErrors.replay000066400000000000000000000335371367004507500326440ustar00rootroot00000000000000{ "Initial": "AQAAAA7WcSVmDn37X/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "7118b9e6b258d985", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "126" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC11cGRhdGluZy12YXJpYWJsZS10by1lcnJvciIsIk92ZXJ3cml0ZSI6dHJ1ZSwiVHlwZSI6IlN0cmluZyIsIlZhbHVlIjoiW3tcIk5hbWVcIjogXCJGb29cIiwgXCJUZXh0XCI6IFwiQmFyXCJ9XSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "52" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:30 GMT" ], "X-Amzn-Requestid": [ "06502a88-3224-4aeb-acfd-b9e233efca3d" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMjWqBQCQoOrnIAAAAA==" } }, { "ID": "32fc1f99287264bc", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "64" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC11cGRhdGluZy12YXJpYWJsZS10by1lcnJvciIsIldpdGhEZWNyeXB0aW9uIjp0cnVlfQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "212" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:30 GMT" ], "X-Amzn-Requestid": [ "4c06f9bc-52e4-458d-90bb-c0e7d875b64f" ] }, "Body": "H4sIAAAAAAAAAIWOy07DQAxFfwV5nYFmaNrGu1aFFVQIKjZMF65i0EhtJvI4PBTl33ELrNnZ9/oceYAHEjqysgAOsHzcAAJJi/SRMecj9tkxZXUepzN/vZh4X829x+6PulK2tu8a0ti+uXeSSPsDO02ORZJAAWtS2n51bGblT7Xkzoz3qYmvkRtrrSkvq7qcLabzclL5+qYuYGP+M/Gf/lf9pGIXtj/ToT8FL0M4SwLgRYDblAIUNmzthZ9oRRJg3J0QlhxTC1j5cfwG8TDuMxMBAAA=" } }, { "ID": "c897f0c1da829495", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtdXBkYXRpbmctdmFyaWFibGUtdG8tZXJyb3IiXX1dfQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "195" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:30 GMT" ], "X-Amzn-Requestid": [ "f3292a8c-f512-433c-9708-8346791ea8ce" ] }, "Body": "H4sIAAAAAAAAAFWPTQ9BQQxF/0vXHt7w8GbNDpH42IhFmZImzEinviL+uxIby+ae9tw+YYaCJ1KSDH79hCEqLh5nAg9Kd4UGjDHrJAXeMwVLLSmbVV32Bt1+2a5cPar/mWUmsW2U6PGWPePJ+27PdQZt56q+c/5iQEuuGA8UP4Kp+b+6rMXlHFA5HoorCuP2SIWmgkSSGDhLR94xfYpuGrDgr2euGANKsPzXe65iF2xe2VOcIvjKvTavN8iZg0rrAAAA" } }, { "ID": "19bbd3eccb8fd784", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "98" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC11cGRhdGluZy12YXJpYWJsZS10by1lcnJvciIsIk92ZXJ3cml0ZSI6dHJ1ZSwiVHlwZSI6IlN0cmluZyIsIlZhbHVlIjoiaW52YWxpZC1qc29uIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "52" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:30 GMT" ], "X-Amzn-Requestid": [ "340486c1-c7ae-4122-b59e-223360d62812" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMjWuBQDRkfH+IAAAAA==" } }, { "ID": "4e13359153a87c27", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "64" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC11cGRhdGluZy12YXJpYWJsZS10by1lcnJvciIsIldpdGhEZWNyeXB0aW9uIjp0cnVlfQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "189" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:30 GMT" ], "X-Amzn-Requestid": [ "78fd1b2d-d057-4595-9b06-9e5751c322dc" ] }, "Body": "H4sIAAAAAAAAAIWMuw7CMAxF/yVzAzRtoWRDgg0QAsRuVIOC2qRyXB6q+HcMgpnNvufe06sNEDTISMr2arZdK6uAvIVbtDE2tosaIbI2Nh+brBwZU0yMse1vNWQU2rUVsPNnfQVycKxRc9BIFEglag4M+0eLYma8syRLMa5C5U4OK6FC0kExTcdlPklHpVlME7UW/Wfwz/4175ikIf8B6u4dOH+F2lX6EoN/x0jRyWWL7Pl8AQ49L8j2AAAA" } }, { "ID": "587222c3f130a8a0", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtdXBkYXRpbmctdmFyaWFibGUtdG8tZXJyb3IiXX1dfQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "195" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:30 GMT" ], "X-Amzn-Requestid": [ "33ab9b3e-fdf7-49aa-9eab-9091aa8495f6" ] }, "Body": "H4sIAAAAAAAAAFWPTQ9BQQxF/0vXHt7w8GbNDpH42IhFmZImzEinviL+uxIby+ae9tw+YYaCJ1KSDH79hCEqLh5nAg9Kd4UGjDHrJAXeMwVLLSmbVV32Bt1+2a5cPar/mWUmsW2U6PGWPePJ+27PdQZt56q+c/5iQEuuGA8UP4Kp+b+6rMXlHFA5HoorCuP2SIWmgkSSGDhLR94xfYpuGrDgr2euGANKsPzXe65iF2xe2VOcIvjKvTavN8iZg0rrAAAA" } }, { "ID": "f13b540f7fe6b7b8", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "99" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.PutParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC11cGRhdGluZy12YXJpYWJsZS10by1lcnJvciIsIk92ZXJ3cml0ZSI6dHJ1ZSwiVHlwZSI6IlN0cmluZyIsIlZhbHVlIjoiaW52YWxpZC1qc29uMiJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "52" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:30 GMT" ], "X-Amzn-Requestid": [ "1ffd7cfd-7135-436d-9046-98c64d54f928" ] }, "Body": "H4sIAAAAAAAAAKtWCslMLVKyUgouScxLSSxKUdJRCkstKs7Mz1OyMjWpBQAWB7CxIAAAAA==" } }, { "ID": "406bd4037ed67885", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "64" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.GetParameter" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJOYW1lIjoidGVzdC11cGRhdGluZy12YXJpYWJsZS10by1lcnJvciIsIldpdGhEZWNyeXB0aW9uIjp0cnVlfQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "192" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:31 GMT" ], "X-Amzn-Requestid": [ "1a938436-ae4d-4910-b58e-e9426e1de124" ] }, "Body": "H4sIAAAAAAAAAIWMT2/CMAxHv4vPDZDQ8ic3JLgxNAHi7qlmytQmleOyoYrvjkFw3tHv+fcG+ETGloQY/ACr/Q48IEePv9nn3Po+G8Isxvly5qaLiXPV3DnfvVdjIbV9V6OE+G0uyAG/GjKSDDEnhgLWKHi8dqRloT9RstXiR6rDOVCtVo0dVUs7W5Rza+2k2iwL2Gn/ufgv/0ofhPVD7xM2/QOEeMEm1OYnp+genDiHFMFX5e12B8qyUVz4AAAA" } }, { "ID": "ac04b1edf46436b1", "Request": { "Method": "POST", "URL": "https://ssm.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "AmazonSSM.DescribeParameters" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJGaWx0ZXJzIjpbeyJLZXkiOiJOYW1lIiwiVmFsdWVzIjpbInRlc3QtdXBkYXRpbmctdmFyaWFibGUtdG8tZXJyb3IiXX1dfQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Content-Encoding": [ "gzip" ], "Content-Length": [ "195" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 09 Jun 2020 06:38:31 GMT" ], "X-Amzn-Requestid": [ "e393caf8-d5bf-4afd-ba49-097381ba315c" ] }, "Body": "H4sIAAAAAAAAAFWPTQ9BQQxF/0vXHt7w8GbNDpH42IhFmZImzEinviL+uxIby+ae9tw+YYaCJ1KSDH79hCEqLh5nAg9Kd4UGjDHrJAXeMwVLLSmbVV32Bt1+2a5cPar/mWUmsW2U6PGWPePJ+27PdQZt56q+c/5iQEuuGA8UP4Kp+b+6rMXlHFA5HoorCuP2SIWmgkSSGDhLR94xfYpuGrDgr2euGANKsPzXe65iF2xe2VOcIvjKvTavN8iZg0rrAAAA" } } ] }go-cloud-0.20.0/runtimevar/blobvar/000077500000000000000000000000001367004507500171345ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/blobvar/blobvar.go000066400000000000000000000155221367004507500211170ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package blobvar provides a runtimevar implementation with // variables read from a blob.Bucket. // Use OpenVariable to construct a *runtimevar.Variable. // // URLs // // For runtimevar.OpenVariable, blobvar registers for the scheme "blob". // The default URL opener will open a blob.Bucket based on the environment // variable "BLOBVAR_BUCKET_URL". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // blobvar exposes the following types for As: // - Snapshot: Not supported. // - Error: error, which can be passed to blob.ErrorAs. package blobvar // import "gocloud.dev/runtimevar/blobvar" import ( "bytes" "context" "errors" "fmt" "net/url" "os" "path" "sync" "time" "gocloud.dev/blob" "gocloud.dev/gcerrors" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" ) func init() { runtimevar.DefaultURLMux().RegisterVariable(Scheme, &defaultOpener{}) } type defaultOpener struct { init sync.Once opener *URLOpener err error } func (o *defaultOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { o.init.Do(func() { bucketURL := os.Getenv("BLOBVAR_BUCKET_URL") if bucketURL == "" { o.err = errors.New("BLOBVAR_BUCKET_URL environment variable is not set") return } bucket, err := blob.OpenBucket(ctx, bucketURL) if err != nil { o.err = fmt.Errorf("failed to open default bucket %q: %v", bucketURL, err) return } o.opener = &URLOpener{Bucket: bucket} }) if o.err != nil { return nil, fmt.Errorf("open variable %v: %v", u, o.err) } return o.opener.OpenVariableURL(ctx, u) } // Scheme is the URL scheme blobvar registers its URLOpener under on runtimevar.DefaultMux. const Scheme = "blob" // URLOpener opens blob-backed URLs like "blob://myblobkey?decoder=string". // It supports the following URL parameters: // - decoder: The decoder to use. Defaults to URLOpener.Decoder, or // runtimevar.BytesDecoder if URLOpener.Decoder is nil. // See runtimevar.DecoderByName for supported values. type URLOpener struct { // Bucket is required. Bucket *blob.Bucket // Decoder specifies the decoder to use if one is not specified in the URL. // Defaults to runtimevar.BytesDecoder. Decoder *runtimevar.Decoder // Options specifies the Options for OpenVariable. Options Options } // OpenVariableURL opens the variable at the URL's path. See the package doc // for more details. func (o *URLOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { q := u.Query() if o.Bucket == nil { return nil, fmt.Errorf("open variable %v: bucket is required", u) } decoderName := q.Get("decoder") q.Del("decoder") decoder, err := runtimevar.DecoderByName(ctx, decoderName, o.Decoder) if err != nil { return nil, fmt.Errorf("open variable %v: invalid decoder: %v", u, err) } for param := range q { return nil, fmt.Errorf("open variable %v: invalid query parameter %q", u, param) } return OpenVariable(o.Bucket, path.Join(u.Host, u.Path), decoder, &o.Options) } // Options sets options. type Options struct { // WaitDuration controls the rate at which the blob is polled. // Defaults to 30 seconds. WaitDuration time.Duration } // OpenVariable constructs a *runtimevar.Variable backed by the referenced blob. // Reads of the blob return raw bytes; provide a decoder to decode the raw bytes // into the appropriate type for runtimevar.Snapshot.Value. // See the runtimevar package documentation for examples of decoders. func OpenVariable(bucket *blob.Bucket, key string, decoder *runtimevar.Decoder, opts *Options) (*runtimevar.Variable, error) { return runtimevar.New(newWatcher(bucket, key, decoder, nil, opts)), nil } func newWatcher(bucket *blob.Bucket, key string, decoder *runtimevar.Decoder, opener *URLOpener, opts *Options) driver.Watcher { if opts == nil { opts = &Options{} } return &watcher{ bucket: bucket, opener: opener, key: key, wait: driver.WaitDuration(opts.WaitDuration), decoder: decoder, } } // state implements driver.State. type state struct { val interface{} updateTime time.Time rawBytes []byte err error } // Value implements driver.State.Value. func (s *state) Value() (interface{}, error) { return s.val, s.err } // UpdateTime implements driver.State.UpdateTime. func (s *state) UpdateTime() time.Time { return s.updateTime } // As implements driver.State.As. func (s *state) As(i interface{}) bool { return false } // errorState returns a new State with err, unless prevS also represents // the same error, in which case it returns nil. func errorState(err error, prevS driver.State) driver.State { s := &state{err: err} if prevS == nil { return s } prev := prevS.(*state) if prev.err == nil { // New error. return s } if err == prev.err || err.Error() == prev.err.Error() { // Same error, return nil to indicate no change. return nil } return s } // watcher implements driver.Watcher for configurations provided by the Runtime Configurator // service. type watcher struct { bucket *blob.Bucket opener *URLOpener key string wait time.Duration decoder *runtimevar.Decoder } // WatchVariable implements driver.WatchVariable. func (w *watcher) WatchVariable(ctx context.Context, prev driver.State) (driver.State, time.Duration) { // Read the blob. b, err := w.bucket.ReadAll(ctx, w.key) if err != nil { return errorState(err, prev), w.wait } // See if it's the same raw bytes as before. if prev != nil && bytes.Equal(b, prev.(*state).rawBytes) { // No change! return nil, w.wait } // Decode the value. val, err := w.decoder.Decode(ctx, b) if err != nil { return errorState(err, prev), w.wait } return &state{val: val, updateTime: time.Now(), rawBytes: b}, w.wait } // Close implements driver.Close. func (w *watcher) Close() error { return nil } // ErrorAs implements driver.ErrorAs. // Since blobvar uses the blob package, ErrorAs delegates // to the bucket's ErrorAs method. func (w *watcher) ErrorAs(err error, i interface{}) bool { return w.bucket.ErrorAs(err, i) } // ErrorCode implements driver.ErrorCode. func (*watcher) ErrorCode(err error) gcerrors.ErrorCode { // err might have come from blob, in which case use its code. return gcerrors.Code(err) } go-cloud-0.20.0/runtimevar/blobvar/blobvar_test.go000066400000000000000000000125161367004507500221560ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package blobvar import ( "context" "errors" "io/ioutil" "net/url" "os" "path" "path/filepath" "strings" "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/blob" "gocloud.dev/blob/fileblob" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" "gocloud.dev/runtimevar/drivertest" ) type harness struct { dir string bucket *blob.Bucket } func newHarness(t *testing.T) (drivertest.Harness, error) { dir := path.Join(os.TempDir(), "go-cloud-blobvar") if err := os.MkdirAll(dir, os.ModePerm); err != nil { return nil, err } b, err := fileblob.OpenBucket(dir, nil) if err != nil { return nil, err } return &harness{dir: dir, bucket: b}, nil } func (h *harness) MakeWatcher(ctx context.Context, name string, decoder *runtimevar.Decoder) (driver.Watcher, error) { return newWatcher(h.bucket, name, decoder, nil, nil), nil } func (h *harness) CreateVariable(ctx context.Context, name string, val []byte) error { return h.bucket.WriteAll(ctx, name, val, nil) } func (h *harness) UpdateVariable(ctx context.Context, name string, val []byte) error { return h.bucket.WriteAll(ctx, name, val, nil) } func (h *harness) DeleteVariable(ctx context.Context, name string) error { return h.bucket.Delete(ctx, name) } func (h *harness) Close() { h.bucket.Close() _ = os.RemoveAll(h.dir) } func (h *harness) Mutable() bool { return true } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) SnapshotCheck(s *runtimevar.Snapshot) error { return nil } func (verifyAs) ErrorCheck(v *runtimevar.Variable, err error) error { var perr *os.PathError if !v.ErrorAs(err, &perr) { return errors.New("runtimevar.ErrorAs failed with *os.PathError") } return nil } func TestOpenVariable(t *testing.T) { dir, err := ioutil.TempDir("", "gcdk-blob-var-example") if err != nil { t.Fatal(err) } if err := ioutil.WriteFile(filepath.Join(dir, "myvar.json"), []byte(`{"Foo": "Bar"}`), 0666); err != nil { t.Fatal(err) } if err := ioutil.WriteFile(filepath.Join(dir, "myvar.txt"), []byte("hello world!"), 0666); err != nil { t.Fatal(err) } defer os.RemoveAll(dir) // Convert dir to a URL path, adding a leading "/" if needed on Windows // (on Unix, dirpath already has a leading "/"). dirpath := filepath.ToSlash(dir) if os.PathSeparator != '/' && !strings.HasPrefix(dirpath, "/") { dirpath = "/" + dirpath } bucketURL := "file://" + dirpath tests := []struct { BucketURL string URL string WantErr bool WantWatchErr bool Want interface{} }{ // myvar does not exist. {"mem://", "blob://myvar", false, true, nil}, // badscheme does not exist. {"badscheme://", "blob://myvar", true, false, nil}, // directory dirnotfound does not exist, so Bucket creation fails. {"file:///dirnotfound", "blob://myvar.txt", true, false, nil}, // filenotfound does not exist so Watch returns an error. {bucketURL, "blob://filenotfound", false, true, nil}, // Missing bucket env variable. {"", "blob://myvar.txt", true, false, nil}, // Invalid decoder. {bucketURL, "blob://myvar.txt?decoder=notadecoder", true, false, nil}, // Invalid arg. {bucketURL, "blob://myvar.txt?param=value", true, false, nil}, // Working example with default decoder. {bucketURL, "blob://myvar.txt", false, false, []byte("hello world!")}, // Working example with string decoder. {bucketURL, "blob://myvar.txt?decoder=string", false, false, "hello world!"}, // Working example with JSON decoder. {bucketURL, "blob://myvar.json?decoder=jsonmap", false, false, &map[string]interface{}{"Foo": "Bar"}}, } ctx := context.Background() for _, test := range tests { t.Run(test.BucketURL, func(t *testing.T) { os.Setenv("BLOBVAR_BUCKET_URL", test.BucketURL) opener := &defaultOpener{} defer func() { if opener.opener != nil && opener.opener.Bucket != nil { opener.opener.Bucket.Close() } }() u, err := url.Parse(test.URL) if err != nil { t.Error(err) } v, err := opener.OpenVariableURL(ctx, u) if v != nil { defer v.Close() } if (err != nil) != test.WantErr { t.Errorf("BucketURL %s URL %s: got error %v, want error %v", test.BucketURL, test.URL, err, test.WantErr) } if err != nil { return } defer v.Close() snapshot, err := v.Watch(ctx) if (err != nil) != test.WantWatchErr { t.Errorf("BucketURL %s URL %s: got Watch error %v, want error %v", test.BucketURL, test.URL, err, test.WantWatchErr) } if err != nil { return } if !cmp.Equal(snapshot.Value, test.Want) { t.Errorf("BucketURL %s URL %s: got snapshot value\n%v\n want\n%v", test.BucketURL, test.URL, snapshot.Value, test.Want) } }) } } go-cloud-0.20.0/runtimevar/blobvar/example_test.go000066400000000000000000000042211367004507500221540ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package blobvar_test import ( "context" "fmt" "log" "gocloud.dev/blob/memblob" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/blobvar" ) func ExampleOpenVariable() { // Create a *blob.Bucket. // Here, we use an in-memory implementation and write a sample value. bucket := memblob.OpenBucket(nil) defer bucket.Close() ctx := context.Background() err := bucket.WriteAll(ctx, "cfg-variable-name", []byte("hello world"), nil) if err != nil { log.Fatal(err) } // Construct a *runtimevar.Variable that watches the blob. v, err := blobvar.OpenVariable(bucket, "cfg-variable-name", runtimevar.StringDecoder, nil) if err != nil { log.Fatal(err) } defer v.Close() // We can now read the current value of the variable from v. snapshot, err := v.Latest(ctx) if err != nil { log.Fatal(err) } // runtimevar.Snapshot.Value is decoded to a string. fmt.Println(snapshot.Value.(string)) // Output: // hello world } func Example_openVariableFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/runtimevar/blobvar" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // runtimevar.OpenVariable creates a *runtimevar.Variable from a URL. // The default opener opens a blob.Bucket via a URL, based on the environment // variable BLOBVAR_BUCKET_URL. v, err := runtimevar.OpenVariable(ctx, "blob://myvar.txt?decoder=string") if err != nil { log.Fatal(err) } defer v.Close() } go-cloud-0.20.0/runtimevar/constantvar/000077500000000000000000000000001367004507500200475ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/constantvar/constantvar.go000066400000000000000000000117311367004507500227430ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package constantvar provides a runtimevar implementation with Variables // that never change. Use New, NewBytes, or NewError to construct a // *runtimevar.Variable. // // URLs // // For runtimevar.OpenVariable, constantvar registers for the scheme "constant". // For more details on the URL format, see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // constantvar does not support any types for As. package constantvar // import "gocloud.dev/runtimevar/constantvar" import ( "context" "errors" "fmt" "net/url" "time" "gocloud.dev/gcerrors" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" ) func init() { runtimevar.DefaultURLMux().RegisterVariable(Scheme, &URLOpener{}) } // Scheme is the URL scheme constantvar registers its URLOpener under on blob.DefaultMux. const Scheme = "constant" // URLOpener opens constantvar URLs like "constant://?val=foo&decoder=string". // // The host and path are ignored. // // The following URL parameters are supported: // - val: The value to use for the constant Variable. The bytes from val // are passed to NewBytes. // - err: The error to use for the constant Variable. A new error is created // using errors.New and passed to NewError. // - decoder: The decoder to use. Defaults to runtimevar.BytesDecoder. // See runtimevar.DecoderByName for supported values. // // If both "err" and "val" are provided, "val" is ignored. type URLOpener struct { // Decoder specifies the decoder to use if one is not specified in the URL. // Defaults to runtimevar.BytesDecoder. Decoder *runtimevar.Decoder } // OpenVariableURL opens the variable at the URL's path. See the package doc // for more details. func (o *URLOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { q := u.Query() val := q.Get("val") q.Del("val") errVal := q.Get("err") q.Del("err") decoderName := q.Get("decoder") q.Del("decoder") decoder, err := runtimevar.DecoderByName(ctx, decoderName, o.Decoder) if err != nil { return nil, fmt.Errorf("open variable %v: invalid decoder: %v", u, err) } for param := range q { return nil, fmt.Errorf("open variable %v: invalid query parameter %q", u, param) } if errVal != "" { return NewError(errors.New(errVal)), nil } return NewBytes([]byte(val), decoder), nil } var errNotExist = errors.New("variable does not exist") // New constructs a *runtimevar.Variable holding value. func New(value interface{}) *runtimevar.Variable { return runtimevar.New(&watcher{value: value, t: time.Now()}) } // NewBytes uses decoder to decode b. If the decode succeeds, it constructs // a *runtimevar.Variable holding the decoded value. If the decode fails, it // constructs a runtimevar.Variable that always fails with the error. func NewBytes(b []byte, decoder *runtimevar.Decoder) *runtimevar.Variable { value, err := decoder.Decode(context.Background(), b) if err != nil { return NewError(err) } return New(value) } // NewError constructs a *runtimevar.Variable that always fails. Runtimevar // wraps errors returned by drivers, so the error returned // by runtimevar will not equal err. func NewError(err error) *runtimevar.Variable { return runtimevar.New(&watcher{err: err}) } // watcher implements driver.Watcher and driver.State. type watcher struct { value interface{} err error t time.Time } // Value implements driver.State.Value. func (w *watcher) Value() (interface{}, error) { return w.value, w.err } // UpdateTime implements driver.State.UpdateTime. func (w *watcher) UpdateTime() time.Time { return w.t } // As implements driver.State.As. func (w *watcher) As(i interface{}) bool { return false } // WatchVariable implements driver.WatchVariable. func (w *watcher) WatchVariable(ctx context.Context, prev driver.State) (driver.State, time.Duration) { // The first time this is called, return the constant value. if prev == nil { return w, 0 } // On subsequent calls, block forever as the value will never change. <-ctx.Done() w.err = ctx.Err() return w, 0 } // Close implements driver.Close. func (*watcher) Close() error { return nil } // ErrorAs implements driver.ErrorAs. func (*watcher) ErrorAs(err error, i interface{}) bool { return false } // ErrorCode implements driver.ErrorCode func (*watcher) ErrorCode(err error) gcerrors.ErrorCode { if err == errNotExist { return gcerrors.NotFound } return gcerrors.Unknown } go-cloud-0.20.0/runtimevar/constantvar/constantvar_test.go000066400000000000000000000122221367004507500237760ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package constantvar import ( "context" "errors" "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" "gocloud.dev/runtimevar/drivertest" ) type harness struct { // vars stores the variable value(s) that have been set using CreateVariable. vars map[string][]byte } func newHarness(t *testing.T) (drivertest.Harness, error) { return &harness{vars: map[string][]byte{}}, nil } func (h *harness) MakeWatcher(ctx context.Context, name string, decoder *runtimevar.Decoder) (driver.Watcher, error) { rawVal, found := h.vars[name] if !found { // The variable isn't set. Create a Variable that always returns an error. return &watcher{err: errNotExist}, nil } val, err := decoder.Decode(ctx, rawVal) if err != nil { // The variable didn't decode. return &watcher{err: err}, nil } return &watcher{value: val, t: time.Now()}, nil } func (h *harness) CreateVariable(ctx context.Context, name string, val []byte) error { h.vars[name] = val return nil } func (h *harness) UpdateVariable(ctx context.Context, name string, val []byte) error { return errors.New("not supported") } func (h *harness) DeleteVariable(ctx context.Context, name string) error { return errors.New("not supported") } func (h *harness) Close() {} func (h *harness) Mutable() bool { return false } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) SnapshotCheck(s *runtimevar.Snapshot) error { var ss string if s.As(&ss) { return errors.New("Snapshot.As expected to fail") } return nil } func (verifyAs) ErrorCheck(v *runtimevar.Variable, err error) error { var ss string if v.ErrorAs(err, &ss) { return errors.New("runtimevar.ErrorAs expected to fail") } return nil } func TestNew(t *testing.T) { ctx := context.Background() // Use New with an error value; it should be plumbed through as a Value. errFail := errors.New("fail") v := New(errFail) defer v.Close() val, err := v.Watch(ctx) if err != nil { t.Fatal(err) } if val.Value != errFail { t.Errorf("got %v want %v", val.Value, errFail) } } func TestNewBytes(t *testing.T) { ctx := context.Background() content := "hello world" // Decode succeeds. v := NewBytes([]byte(content), runtimevar.StringDecoder) defer v.Close() val, err := v.Watch(ctx) if err != nil { t.Fatal(err) } if val.Value != content { t.Errorf("got %v want %v", val.Value, content) } // Decode fails. var jsonData []string v = NewBytes([]byte(content), runtimevar.NewDecoder(jsonData, runtimevar.JSONDecode)) defer v.Close() val, err = v.Watch(ctx) if err == nil { t.Errorf("got nil error and %v, want error", val) } } func TestNewError(t *testing.T) { ctx := context.Background() v := NewError(errors.New("fail")) defer v.Close() _, err := v.Watch(ctx) if err == nil { t.Errorf("got nil err want fail err") } } func TestOpenVariable(t *testing.T) { tests := []struct { URL string WantErr bool WantWatchErr bool Want interface{} }{ // Empty URL results in empty byte slice. {"constant://", false, false, []byte("")}, // Invalid query param. {"constant://?param=value", true, false, nil}, // String value. {"constant://?val=hello+world&decoder=string", false, false, "hello world"}, // JSON value; val parameter is {"Foo": "Bar"}, URL-encoded. {"constant://?val=%7B%22Foo%22%3A%22Bar%22%7d&decoder=jsonmap", false, false, &map[string]interface{}{"Foo": "Bar"}}, // Error. {"constant://?err=fail", false, true, nil}, // Invalid decoder. {"constant://?decoder=notadecoder", true, false, nil}, } ctx := context.Background() for _, test := range tests { t.Run(test.URL, func(t *testing.T) { v, err := runtimevar.OpenVariable(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err != nil { return } defer v.Close() snapshot, err := v.Watch(ctx) if (err != nil) != test.WantWatchErr { t.Errorf("%s: got Watch error %v, want error %v", test.URL, err, test.WantWatchErr) } if err != nil { return } if !cmp.Equal(snapshot.Value, test.Want) { t.Errorf("%s: got snapshot value\n%v\n want\n%v", test.URL, snapshot.Value, test.Want) } }) } } func TestDecryptWithNoURLEnv(t *testing.T) { if _, err := runtimevar.OpenVariable(context.Background(), "constant://?decoder=decrypt"); err == nil { t.Error("got nil error, want environment variable not set") } } go-cloud-0.20.0/runtimevar/constantvar/example_test.go000066400000000000000000000054001367004507500230670ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package constantvar_test import ( "context" "errors" "fmt" "log" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/constantvar" ) func ExampleNew() { // Construct a *runtimevar.Variable that always returns "hello world". v := constantvar.New("hello world") defer v.Close() // We can now read the current value of the variable from v. snapshot, err := v.Latest(context.Background()) if err != nil { log.Fatal(err) } fmt.Println(snapshot.Value.(string)) // Output: // hello world } func ExampleNewBytes() { // Construct a *runtimevar.Variable with a []byte. v := constantvar.NewBytes([]byte(`hello world`), runtimevar.BytesDecoder) defer v.Close() // We can now read the current value of the variable from v. snapshot, err := v.Latest(context.Background()) if err != nil { log.Fatal(err) } fmt.Printf("byte slice of length %d\n", len(snapshot.Value.([]byte))) // Output: // byte slice of length 11 } func ExampleNewError() { // Construct a runtimevar.Variable that always returns errFake. var errFake = errors.New("my error") v := constantvar.NewError(errFake) defer v.Close() // We can now use Watch to read the current value of the variable // from v. Note that Latest would block here since it waits for // a "good" value, and v will never get one. _, err := v.Watch(context.Background()) if err == nil { log.Fatal("Expected an error!") } fmt.Println(err) // Output: // runtimevar (code=Unknown): my error } func Example_openVariableFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/runtimevar/constantvar" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // runtimevar.OpenVariable creates a *runtimevar.Variable from a URL. v, err := runtimevar.OpenVariable(ctx, "constant://?val=hello+world&decoder=string") if err != nil { log.Fatal(err) } defer v.Close() // PRAGMA: On gocloud.dev, hide the rest of the function. snapshot, err := v.Latest(ctx) if err != nil { log.Fatal(err) } fmt.Println(snapshot.Value.(string)) // Output // hello world } go-cloud-0.20.0/runtimevar/driver/000077500000000000000000000000001367004507500170005ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/driver/driver.go000066400000000000000000000075451367004507500206350ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package driver defines interfaces to be implemented by runtimevar drivers, which // will be used by the runtimevar package to interact with the underlying services. // Application code should use package runtimevar. package driver // import "gocloud.dev/runtimevar/driver" import ( "context" "time" "gocloud.dev/gcerrors" ) // DefaultWaitDuration is the default value for WaitDuration. const DefaultWaitDuration = 30 * time.Second // WaitDuration returns DefaultWaitDuration if d is <= 0, otherwise it returns d. func WaitDuration(d time.Duration) time.Duration { if d <= 0 { return DefaultWaitDuration } return d } // State represents the current state of a variable. type State interface { // Value returns the current variable value. Value() (interface{}, error) // UpdateTime returns the update time for the variable. UpdateTime() time.Time // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information. As(interface{}) bool } // Watcher watches for updates on a variable and returns an updated Variable object if // there are changes. A Watcher object is associated with a variable upon construction. // // An application can have more than one Watcher, one for each variable. It is typical // to only have one Watcher per variable. // // Many services store their configuration data as raw bytes; drivers for such // services should include a runtimevar.Decoder in their constructor to allow // users to decode the raw bytes into a particular format (e.g., parsing a // JSON string). // // Drivers for services that don't have raw bytes may dictate the type of the exposed // Snapshot.Value, or expose custom decoding logic. type Watcher interface { // WatchVariable returns the current State of the variable. // If the State has not changed, it returns nil. // // If WatchVariable returns a wait time > 0, the portable type uses // it as a hint to not call WatchVariable again for the wait time. // // Implementations *may* block, but must return if ctx is Done. If the // variable has changed, then implementations *must* eventually return // it. // // A polling implementation should return (State, ) for // a new State, or (nil, ) if State hasn't changed. // // An implementation that receives notifications from an external source // about changes to the underlying variable should: // 1. If prev != nil, subscribe to change notifications. // 2. Fetch the current State. // 3. If prev == nil or if the State has changed, return (State, 0). // A non-zero wait should be returned if State holds an error, to avoid // spinning. // 4. Block until it detects a change or ctx is Done, then fetch and return // (State, 0). // Note that the subscription in 1 must occur before 2 to avoid race conditions. WatchVariable(ctx context.Context, prev State) (state State, wait time.Duration) // Close cleans up any resources used by the Watcher object. Close() error // ErrorAs allows drivers to expose driver-specific types for returned // errors; see State.As for more details. ErrorAs(error, interface{}) bool // ErrorCode should return a code that describes the error, which was returned by // one of the other methods in this interface. ErrorCode(error) gcerrors.ErrorCode } go-cloud-0.20.0/runtimevar/drivertest/000077500000000000000000000000001367004507500177005ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/drivertest/drivertest.go000066400000000000000000000432721367004507500224320ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package drivertest provides a conformance test for implementations of // runtimevar. package drivertest // import "gocloud.dev/runtimevar/drivertest" import ( "context" "errors" "strings" "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/gcerrors" "gocloud.dev/internal/testing/setup" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" ) // Harness descibes the functionality test harnesses must provide to run conformance tests. type Harness interface { // MakeWatcher creates a driver.Watcher to watch the given variable. MakeWatcher(ctx context.Context, name string, decoder *runtimevar.Decoder) (driver.Watcher, error) // CreateVariable creates the variable with the given contents. CreateVariable(ctx context.Context, name string, val []byte) error // UpdateVariable updates an existing variable to have the given contents. UpdateVariable(ctx context.Context, name string, val []byte) error // DeleteVariable deletes an existing variable. DeleteVariable(ctx context.Context, name string) error // Close is called when the test is complete. Close() // Mutable returns true iff the driver supports UpdateVariable/DeleteVariable. // If false, those functions should return errors, and the conformance tests // will skip and/or ignore errors for tests that require them. Mutable() bool } // HarnessMaker describes functions that construct a harness for running tests. // It is called exactly once per test; Harness.Close() will be called when the test is complete. type HarnessMaker func(t *testing.T) (Harness, error) // AsTest represents a test of As functionality. // The conformance test: // 1. Reads a Snapshot of the variable before it exists. // 2. Calls ErrorCheck. // 3. Creates the variable and reads a Snapshot of it. // 4. Calls SnapshotCheck. type AsTest interface { // Name should return a descriptive name for the test. Name() string // SnapshotCheck will be called to allow verification of Snapshot.As. SnapshotCheck(s *runtimevar.Snapshot) error // ErrorCheck will be called to allow verification of Variable.ErrorAs. // driver is provided so that errors other than err can be checked; // Variable.ErrorAs won't work since it expects driver errors to be wrapped. ErrorCheck(v *runtimevar.Variable, err error) error } type verifyAsFailsOnNil struct{} func (verifyAsFailsOnNil) Name() string { return "verify As returns false when passed nil" } func (verifyAsFailsOnNil) SnapshotCheck(v *runtimevar.Snapshot) error { if v.As(nil) { return errors.New("want Snapshot.As to return false when passed nil") } return nil } func (verifyAsFailsOnNil) ErrorCheck(v *runtimevar.Variable, err error) (ret error) { defer func() { if recover() == nil { ret = errors.New("want ErrorAs to panic when passed nil") } }() v.ErrorAs(err, nil) return nil } // RunConformanceTests runs conformance tests for driver implementations // of runtimevar. func RunConformanceTests(t *testing.T, newHarness HarnessMaker, asTests []AsTest) { t.Run("TestNonExistentVariable", func(t *testing.T) { testNonExistentVariable(t, newHarness) }) t.Run("TestString", func(t *testing.T) { testString(t, newHarness) }) t.Run("TestJSON", func(t *testing.T) { testJSON(t, newHarness) }) t.Run("TestInvalidJSON", func(t *testing.T) { testInvalidJSON(t, newHarness) }) t.Run("TestUpdate", func(t *testing.T) { testUpdate(t, newHarness) }) t.Run("TestDelete", func(t *testing.T) { testDelete(t, newHarness) }) t.Run("TestUpdateWithErrors", func(t *testing.T) { testUpdateWithErrors(t, newHarness) }) asTests = append(asTests, verifyAsFailsOnNil{}) t.Run("TestAs", func(t *testing.T) { for _, st := range asTests { if st.Name() == "" { t.Fatalf("AsTest.Name is required") } t.Run(st.Name(), func(t *testing.T) { testAs(t, newHarness, st) }) } }) } // deadlineExceeded returns true if err represents a context exceeded error. // It can either be a true context.DeadlineExceeded, or an RPC aborted due to // ctx cancellation; we don't have a good way of checking for the latter // explicitly so we check the Error() string. func deadlineExceeded(err error) bool { return err == context.DeadlineExceeded || strings.Contains(err.Error(), "context deadline exceeded") } // waitTimeForBlockingCheck returns a duration to wait when verifying that a // call blocks. When in replay mode, it can be quite short to make tests run // quickly. When in record mode, it has to be long enough that RPCs can // consistently finish. func waitTimeForBlockingCheck() time.Duration { if *setup.Record { return 5 * time.Second } return 10 * time.Millisecond } func testNonExistentVariable(t *testing.T, newHarness HarnessMaker) { h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() ctx := context.Background() drv, err := h.MakeWatcher(ctx, "does-not-exist", runtimevar.StringDecoder) if err != nil { t.Fatal(err) } v := runtimevar.New(drv) defer func() { if err := v.Close(); err != nil { t.Error(err) } }() got, err := v.Watch(ctx) if err == nil { t.Errorf("got %v expected not-found error", got.Value) } else if gcerrors.Code(err) != gcerrors.NotFound { t.Error("got IsNotExist false, expected true") } } func testString(t *testing.T, newHarness HarnessMaker) { const ( name = "test-config-variable" content = "hello world" ) h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() ctx := context.Background() if err := h.CreateVariable(ctx, name, []byte(content)); err != nil { t.Fatal(err) } if h.Mutable() { defer func() { if err := h.DeleteVariable(ctx, name); err != nil { t.Fatal(err) } }() } drv, err := h.MakeWatcher(ctx, name, runtimevar.StringDecoder) if err != nil { t.Fatal(err) } v := runtimevar.New(drv) defer func() { if err := v.Close(); err != nil { t.Error(err) } }() got, err := v.Watch(ctx) if err != nil { t.Fatal(err) } // The variable is decoded to a string and matches the expected content. if gotS, ok := got.Value.(string); !ok { t.Fatalf("got value of type %T expected string", got.Value) } else if gotS != content { t.Errorf("got %q want %q", got.Value, content) } // A second watch should block forever since the value hasn't changed. // A short wait here doesn't guarantee that this is working, but will catch // most problems. tCtx, cancel := context.WithTimeout(ctx, waitTimeForBlockingCheck()) defer cancel() got, err = v.Watch(tCtx) if err == nil { t.Errorf("got %v want error", got) } // tCtx should be cancelled. However, tests using record/replay mode can // be in the middle of an RPC when that happens, and save the resulting // RPC error during record. During replay, that error can be returned // immediately (before tCtx is cancelled). So, we accept deadline exceeded // errors as well. if tCtx.Err() == nil && !deadlineExceeded(err) { t.Errorf("got err %v; want Watch to have blocked until context was Done, or for the error to be deadline exceeded", err) } } // Message is used as a target for JSON decoding. type Message struct { Name, Text string } func testJSON(t *testing.T, newHarness HarnessMaker) { const ( name = "test-config-variable" jsonContent = `[ {"Name": "Ed", "Text": "Knock knock."}, {"Name": "Sam", "Text": "Who's there?"} ]` ) want := []*Message{{Name: "Ed", Text: "Knock knock."}, {Name: "Sam", Text: "Who's there?"}} h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() ctx := context.Background() if err := h.CreateVariable(ctx, name, []byte(jsonContent)); err != nil { t.Fatal(err) } if h.Mutable() { defer func() { if err := h.DeleteVariable(ctx, name); err != nil { t.Fatal(err) } }() } var jsonData []*Message drv, err := h.MakeWatcher(ctx, name, runtimevar.NewDecoder(jsonData, runtimevar.JSONDecode)) if err != nil { t.Fatal(err) } v := runtimevar.New(drv) defer func() { if err := v.Close(); err != nil { t.Error(err) } }() got, err := v.Watch(ctx) if err != nil { t.Fatal(err) } // The variable is decoded to a []*Message and matches the expected content. if gotSlice, ok := got.Value.([]*Message); !ok { t.Fatalf("got value of type %T expected []*Message", got.Value) } else if !cmp.Equal(gotSlice, want) { t.Errorf("got %v want %v", gotSlice, want) } } func testInvalidJSON(t *testing.T, newHarness HarnessMaker) { const ( name = "test-config-variable" content = "not-json" ) h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() ctx := context.Background() if err := h.CreateVariable(ctx, name, []byte(content)); err != nil { t.Fatal(err) } if h.Mutable() { defer func() { if err := h.DeleteVariable(ctx, name); err != nil { t.Fatal(err) } }() } var jsonData []*Message drv, err := h.MakeWatcher(ctx, name, runtimevar.NewDecoder(jsonData, runtimevar.JSONDecode)) if err != nil { t.Fatal(err) } v := runtimevar.New(drv) defer func() { if err := v.Close(); err != nil { t.Error(err) } }() got, err := v.Watch(ctx) if err == nil { t.Errorf("got %v wanted invalid-json error", got.Value) } } func testUpdate(t *testing.T, newHarness HarnessMaker) { const ( name = "test-config-variable" content1 = "hello world" content2 = "goodbye world" ) h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() if !h.Mutable() { return } ctx := context.Background() // Create the variable and verify WatchVariable sees the value. if err := h.CreateVariable(ctx, name, []byte(content1)); err != nil { t.Fatal(err) } defer func() { _ = h.DeleteVariable(ctx, name) }() drv, err := h.MakeWatcher(ctx, name, runtimevar.StringDecoder) if err != nil { t.Fatal(err) } defer func() { if err := drv.Close(); err != nil { t.Error(err) } }() state, _ := drv.WatchVariable(ctx, nil) if state == nil { t.Fatalf("got nil state, want a non-nil state with a value") } got, err := state.Value() if err != nil { t.Fatal(err) } if gotS, ok := got.(string); !ok { t.Fatalf("got value of type %T expected string", got) } else if gotS != content1 { t.Errorf("got %q want %q", got, content1) } // The variable hasn't changed, so drv.WatchVariable should either // return nil or block. cancelCtx, cancel := context.WithTimeout(ctx, waitTimeForBlockingCheck()) defer cancel() unchangedState, _ := drv.WatchVariable(cancelCtx, state) if unchangedState == nil { // OK } else { got, err = unchangedState.Value() if err != context.DeadlineExceeded { t.Fatalf("got state %v/%v, wanted nil or nil/DeadlineExceeded after no change", got, err) } } // Update the variable and verify WatchVariable sees the updated value. if err := h.UpdateVariable(ctx, name, []byte(content2)); err != nil { t.Fatal(err) } state, _ = drv.WatchVariable(ctx, state) if state == nil { t.Fatalf("got nil state, want a non-nil state with a value") } got, err = state.Value() if err != nil { t.Fatal(err) } if gotS, ok := got.(string); !ok { t.Fatalf("got value of type %T expected string", got) } else if gotS != content2 { t.Errorf("got %q want %q", got, content2) } } func testDelete(t *testing.T, newHarness HarnessMaker) { const ( name = "test-config-variable" content1 = "hello world" content2 = "goodbye world" ) h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() if !h.Mutable() { return } ctx := context.Background() // Create the variable and verify WatchVariable sees the value. if err := h.CreateVariable(ctx, name, []byte(content1)); err != nil { t.Fatal(err) } defer func() { _ = h.DeleteVariable(ctx, name) }() drv, err := h.MakeWatcher(ctx, name, runtimevar.StringDecoder) if err != nil { t.Fatal(err) } defer func() { if err := drv.Close(); err != nil { t.Error(err) } }() state, _ := drv.WatchVariable(ctx, nil) if state == nil { t.Fatalf("got nil state, want a non-nil state with a value") } got, err := state.Value() if err != nil { t.Fatal(err) } if gotS, ok := got.(string); !ok { t.Fatalf("got value of type %T expected string", got) } else if gotS != content1 { t.Errorf("got %q want %q", got, content1) } prev := state // Delete the variable. if err := h.DeleteVariable(ctx, name); err != nil { t.Fatal(err) } // WatchVariable should return a state with an error now. state, _ = drv.WatchVariable(ctx, state) if state == nil { t.Fatalf("got nil state, want a non-nil state with an error") } got, err = state.Value() if err == nil { t.Fatalf("got %v want error because variable is deleted", got) } // Reset the variable with new content and verify via WatchVariable. if err := h.CreateVariable(ctx, name, []byte(content2)); err != nil { t.Fatal(err) } state, _ = drv.WatchVariable(ctx, state) if state == nil { t.Fatalf("got nil state, want a non-nil state with a value") } got, err = state.Value() if err != nil { t.Fatal(err) } if gotS, ok := got.(string); !ok { t.Fatalf("got value of type %T expected string", got) } else if gotS != content2 { t.Errorf("got %q want %q", got, content2) } if state.UpdateTime().Before(prev.UpdateTime()) { t.Errorf("got UpdateTime %v < previous %v, want >=", state.UpdateTime(), prev.UpdateTime()) } } func testUpdateWithErrors(t *testing.T, newHarness HarnessMaker) { const ( name = "test-updating-variable-to-error" content1 = `[{"Name": "Foo", "Text": "Bar"}]` content2 = "invalid-json" content3 = "invalid-json2" ) want := []*Message{{Name: "Foo", Text: "Bar"}} h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() if !h.Mutable() { return } ctx := context.Background() // Create the variable and verify WatchVariable sees the value. if err := h.CreateVariable(ctx, name, []byte(content1)); err != nil { t.Fatal(err) } var jsonData []*Message drv, err := h.MakeWatcher(ctx, name, runtimevar.NewDecoder(jsonData, runtimevar.JSONDecode)) if err != nil { t.Fatal(err) } defer func() { if err := drv.Close(); err != nil { t.Error(err) } }() state, _ := drv.WatchVariable(ctx, nil) if state == nil { t.Fatal("got nil state, want a non-nil state with a value") } got, err := state.Value() if err != nil { t.Fatal(err) } if gotSlice, ok := got.([]*Message); !ok { t.Fatalf("got value of type %T expected []*Message", got) } else if !cmp.Equal(gotSlice, want) { t.Errorf("got %v want %v", gotSlice, want) } // Update the variable to invalid JSON and verify WatchVariable returns an error. if err := h.UpdateVariable(ctx, name, []byte(content2)); err != nil { t.Fatal(err) } state, _ = drv.WatchVariable(ctx, state) if state == nil { t.Fatal("got nil state, want a non-nil state with an error") } _, err = state.Value() if err == nil { t.Fatal("got nil err want invalid JSON error") } // Update the variable again, with different invalid JSON. // WatchVariable should block or return nil since it's the same error as before. if err := h.UpdateVariable(ctx, name, []byte(content3)); err != nil { t.Fatal(err) } tCtx, cancel := context.WithTimeout(ctx, waitTimeForBlockingCheck()) defer cancel() state, _ = drv.WatchVariable(tCtx, state) if state == nil { // OK: nil indicates no change. } else { // WatchVariable should have blocked until tCtx was cancelled, and we // should have gotten that error back. got, err := state.Value() if err == nil { t.Fatalf("got %v and nil error, want non-nil error", got) } // tCtx should be cancelled. However, tests using record/replay mode can // be in the middle of an RPC when that happens, and save the resulting // RPC error during record. During replay, that error can be returned // immediately (before tCtx is cancelled). So, we accept deadline exceeded // errors as well. if tCtx.Err() == nil && !deadlineExceeded(err) { t.Errorf("got err %v; want Watch to have blocked until context was Done, or for the error to be deadline exceeded", err) } } } // testAs tests the various As functions, using AsTest. func testAs(t *testing.T, newHarness HarnessMaker, st AsTest) { const ( name = "variable-for-as" content = "hello world" ) h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() ctx := context.Background() // Try to read the variable before it exists. drv, err := h.MakeWatcher(ctx, name, runtimevar.StringDecoder) if err != nil { t.Fatal(err) } v := runtimevar.New(drv) s, gotErr := v.Watch(ctx) if gotErr == nil { t.Fatalf("got nil error and %v, expected non-nil error", v) } if err := st.ErrorCheck(v, gotErr); err != nil { t.Error(err) } var dummy string if s.As(&dummy) { t.Error(errors.New("want Snapshot.As to return false when Snapshot is zero value")) } if err := v.Close(); err != nil { t.Error(err) } // Create the variable and verify WatchVariable sees the value. if err := h.CreateVariable(ctx, name, []byte(content)); err != nil { t.Fatal(err) } if h.Mutable() { defer func() { if err := h.DeleteVariable(ctx, name); err != nil { t.Fatal(err) } }() } drv, err = h.MakeWatcher(ctx, name, runtimevar.StringDecoder) if err != nil { t.Fatal(err) } v = runtimevar.New(drv) defer func() { if err := v.Close(); err != nil { t.Error(err) } }() s, err = v.Watch(ctx) if err != nil { t.Fatal(err) } if err := st.SnapshotCheck(&s); err != nil { t.Error(err) } } go-cloud-0.20.0/runtimevar/etcdvar/000077500000000000000000000000001367004507500171355ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/etcdvar/etcdvar.go000066400000000000000000000227501367004507500211220ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package etcdvar provides a runtimevar implementation with variables // backed by etcd. Use OpenVariable to construct a *runtimevar.Variable. // // URLs // // For runtimevar.OpenVariable, etcdvar registers for the scheme "etcd". // The default URL opener will dial an etcd server based on the environment // variable "ETCD_SERVER_URL". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // etcdvar exposes the following types for As: // - Snapshot: *clientv3.GetResponse // - Error: rpctypes.EtcdError package etcdvar // import "gocloud.dev/runtimevar/etcdvar" import ( "context" "errors" "fmt" "net/url" "os" "path" "sync" "time" "go.etcd.io/etcd/clientv3" "go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes" "gocloud.dev/gcerrors" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" "google.golang.org/grpc/codes" ) func init() { runtimevar.DefaultURLMux().RegisterVariable(Scheme, &defaultDialer{}) } // Scheme is the URL scheme etcdvar registers its URLOpener under on runtimevar.DefaultMux. const Scheme = "etcd" type defaultDialer struct { init sync.Once opener *URLOpener err error } func (o *defaultDialer) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { o.init.Do(func() { serverURL := os.Getenv("ETCD_SERVER_URL") if serverURL == "" { o.err = errors.New("ETCD_SERVER_URL environment variable is not set") return } client, err := clientv3.NewFromURL(serverURL) if err != nil { o.err = fmt.Errorf("failed to connect to default client %q: %v", serverURL, err) return } o.opener = &URLOpener{Client: client} }) if o.err != nil { return nil, fmt.Errorf("open variable %v: %v", u, o.err) } return o.opener.OpenVariableURL(ctx, u) } // URLOpener opens etcd URLs like "etcd://mykey?decoder=string". // // The host+path is used as the variable name. // // The following URL parameters are supported: // - decoder: The decoder to use. Defaults to runtimevar.BytesDecoder. // See runtimevar.DecoderByName for supported values. type URLOpener struct { // The Client to use; required. Client *clientv3.Client // Decoder specifies the decoder to use if one is not specified in the URL. // Defaults to runtimevar.BytesDecoder. Decoder *runtimevar.Decoder // Options specifies the options to pass to OpenVariable. Options Options } // OpenVariableURL opens a etcdvar Variable for u. func (o *URLOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { q := u.Query() decoderName := q.Get("decoder") q.Del("decoder") decoder, err := runtimevar.DecoderByName(ctx, decoderName, o.Decoder) if err != nil { return nil, fmt.Errorf("open variable %v: invalid decoder: %v", u, err) } for param := range q { return nil, fmt.Errorf("open variable %v: invalid query parameter %q", u, param) } return OpenVariable(o.Client, path.Join(u.Host, u.Path), decoder, &o.Options) } // Options sets options. type Options struct { // Timeout controls the timeout on RPCs to etcd; timeouts will result in // errors being returned from Watch. Defaults to 30 seconds. Timeout time.Duration } // OpenVariable constructs a *runtimevar.Variable that uses client to watch the variable // name on an etcd server. // etcd returns raw bytes; provide a decoder to decode the raw bytes into the // appropriate type for runtimevar.Snapshot.Value. // See the runtimevar package documentation for examples of decoders. func OpenVariable(cli *clientv3.Client, name string, decoder *runtimevar.Decoder, opts *Options) (*runtimevar.Variable, error) { return runtimevar.New(newWatcher(cli, name, decoder, opts)), nil } func newWatcher(cli *clientv3.Client, name string, decoder *runtimevar.Decoder, opts *Options) *watcher { if opts == nil { opts = &Options{} } // Create a ctx for the background goroutine that does all of the reading. // The cancel function will be used to shut it down during Close. ctx, cancel := context.WithCancel(context.Background()) w := &watcher{ // See struct comments for why it's buffered. ch: make(chan *state, 1), shutdown: cancel, } go w.watch(ctx, cli, name, decoder, driver.WaitDuration(opts.Timeout)) return w } // errNotExist is a sentinel error for nonexistent variables. var errNotExist = errors.New("variable does not exist") // state implements driver.State. type state struct { val interface{} raw *clientv3.GetResponse updateTime time.Time version int64 err error } // Value implements driver.State.Value. func (s *state) Value() (interface{}, error) { return s.val, s.err } // UpdateTime implements driver.State.UpdateTime. func (s *state) UpdateTime() time.Time { return s.updateTime } // As implements driver.State.As. func (s *state) As(i interface{}) bool { if s.raw == nil { return false } p, ok := i.(**clientv3.GetResponse) if !ok { return false } *p = s.raw return true } // watcher implements driver.Watcher. type watcher struct { // The background goroutine writes new *state values to ch. // It is buffered so that the background goroutine can write without // blocking; it always drains the buffer before writing so that the latest // write is buffered. If writes could block, the background goroutine could be // blocked indefinitely from reading etcd's Watch events. // The background goroutine closes ch during shutdown. ch chan *state // shutdown tells the background goroutine to exit. shutdown func() } // WatchVariable implements driver.WatchVariable. func (w *watcher) WatchVariable(ctx context.Context, _ driver.State) (driver.State, time.Duration) { select { case <-ctx.Done(): return &state{err: ctx.Err()}, 0 case cur := <-w.ch: return cur, 0 } } // updateState checks to see if s and prev both represent the same error. // If not, it drains any previous state buffered in w.ch, then writes s to it. // It always return s. func (w *watcher) updateState(s, prev *state) *state { if s.err != nil && prev != nil && prev.err != nil { if equivalentError(s.err, prev.err) { // s represents the same error as prev. return s } } // Drain any buffered value on ch; it is now stale. select { case <-w.ch: default: } // This write can't block, since we're the only writer, ch has a buffer // size of 1, and we just read anything that was buffered. w.ch <- s return s } // equivalentError returns true iff err1 and err2 represent an equivalent error; // i.e., we don't want to return it to the user as a different error. func equivalentError(err1, err2 error) bool { if err1 == err2 || err1.Error() == err2.Error() { return true } var code1, code2 codes.Code if etcdErr, ok := err1.(rpctypes.EtcdError); ok { code1 = etcdErr.Code() } if etcdErr, ok := err2.(rpctypes.EtcdError); ok { code2 = etcdErr.Code() } return code1 != codes.OK && code1 == code2 } // watch is run by a background goroutine. // It watches file using cli.Watch, and writes new states to w.ch. // It exits when ctx is canceled, and closes w.ch. func (w *watcher) watch(ctx context.Context, cli *clientv3.Client, name string, decoder *runtimevar.Decoder, timeout time.Duration) { var cur *state defer close(w.ch) var watchCh clientv3.WatchChan for { if watchCh == nil { ctxWithTimeout, cancel := context.WithTimeout(ctx, timeout) watchCh = cli.Watch(ctxWithTimeout, name) cancel() } ctxWithTimeout, cancel := context.WithTimeout(ctx, timeout) resp, err := cli.Get(ctxWithTimeout, name) cancel() if err != nil { cur = w.updateState(&state{err: err}, cur) } else if len(resp.Kvs) == 0 { cur = w.updateState(&state{err: errNotExist}, cur) } else if len(resp.Kvs) > 1 { cur = w.updateState(&state{err: fmt.Errorf("%q has multiple values", name)}, cur) } else { kv := resp.Kvs[0] if cur == nil || cur.err != nil || kv.Version != cur.version { val, err := decoder.Decode(ctx, kv.Value) if err != nil { cur = w.updateState(&state{err: err}, cur) } else { cur = w.updateState(&state{val: val, raw: resp, updateTime: time.Now(), version: kv.Version}, cur) } } } // Value hasn't changed. Wait for change events. select { case <-ctx.Done(): return case _, ok := <-watchCh: if !ok { // watchCh has closed; retry in next loop iteration. watchCh = nil } } } } // Close implements driver.Close. func (w *watcher) Close() error { // Tell the background goroutine to shut down by canceling its ctx. w.shutdown() // Wait for it to exit. for range w.ch { } return nil } // ErrorAs implements driver.ErrorAs. func (w *watcher) ErrorAs(err error, i interface{}) bool { switch v := err.(type) { case rpctypes.EtcdError: if p, ok := i.(*rpctypes.EtcdError); ok { *p = v return true } } return false } // ErrorCode implements driver.ErrorCode. func (*watcher) ErrorCode(err error) gcerrors.ErrorCode { if err == errNotExist { return gcerrors.NotFound } return gcerrors.Unknown } go-cloud-0.20.0/runtimevar/etcdvar/etcdvar_test.go000066400000000000000000000134541367004507500221620ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package etcdvar import ( "context" "errors" "os" "testing" "time" "github.com/google/go-cmp/cmp" "go.etcd.io/etcd/clientv3" "go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes" "gocloud.dev/internal/testing/setup" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" "gocloud.dev/runtimevar/drivertest" ) // To run these tests against a local etcd server, first run ./localetcd.sh. // Then wait a few seconds for the server to be ready. type harness struct { client *clientv3.Client } func newHarness(t *testing.T) (drivertest.Harness, error) { if !setup.HasDockerTestEnvironment() { t.Skip("Skipping etcd tests since the etcd server is not available") } c, err := clientv3.NewFromURL("http://localhost:2379") if err != nil { t.Fatalf("No local etcd server running: %v; see runtimevar/etcdvar/localetcd.sh", err) } return &harness{client: c}, nil } func (h *harness) MakeWatcher(ctx context.Context, name string, decoder *runtimevar.Decoder) (driver.Watcher, error) { return newWatcher(h.client, name, decoder, nil), nil } func (h *harness) CreateVariable(ctx context.Context, name string, val []byte) error { _, err := h.client.Put(ctx, name, string(val)) return err } func (h *harness) UpdateVariable(ctx context.Context, name string, val []byte) error { return h.CreateVariable(ctx, name, val) } func (h *harness) DeleteVariable(ctx context.Context, name string) error { _, err := h.client.Delete(ctx, name) return err } func (h *harness) Mutable() bool { return true } func (h *harness) Close() {} func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) SnapshotCheck(s *runtimevar.Snapshot) error { var resp *clientv3.GetResponse if !s.As(&resp) { return errors.New("Snapshot.As failed") } return nil } func (verifyAs) ErrorCheck(v *runtimevar.Variable, err error) error { // etcdvar returns a fmt.Errorf error for "not found", so this is expected // to fail. var to rpctypes.EtcdError if v.ErrorAs(err, &to) { return errors.New("ErrorAs expected to fail") } // Try with a real etcd error. if !v.ErrorAs(rpctypes.ErrUnhealthy, &to) { return errors.New("ErrorAs expected to succeed with real etcd error") } return nil } // Etcd-specific tests. func TestEquivalentError(t *testing.T) { tests := []struct { Err1, Err2 error Want bool }{ {Err1: errors.New("not etcd"), Err2: errors.New("not etcd"), Want: true}, {Err1: errors.New("not etcd"), Err2: errors.New("not etcd but different")}, {Err1: errors.New("not etcd"), Err2: rpctypes.ErrUnhealthy}, {Err1: rpctypes.ErrUnhealthy, Err2: rpctypes.ErrRequestTooLarge}, {Err1: rpctypes.ErrUnhealthy, Err2: rpctypes.ErrUnhealthy, Want: true}, } for _, test := range tests { got := equivalentError(test.Err1, test.Err2) if got != test.Want { t.Errorf("%v vs %v: got %v want %v", test.Err1, test.Err2, got, test.Want) } } } func TestNoConnectionError(t *testing.T) { cli, err := clientv3.NewFromURL("http://no.server.here:999") if err != nil { t.Fatal(err) } v, err := OpenVariable(cli, "variable-name", nil, nil) if err != nil { t.Fatal(err) } defer v.Close() // Watch will block for quite a while trying to connect, // so use a short timeout. ctx, cancel := context.WithTimeout(context.Background(), 1*time.Millisecond) defer cancel() _, err = v.Watch(ctx) if err == nil { t.Error("got nil want error") } } func TestOpenVariable(t *testing.T) { h, err := newHarness(t) if err != nil { t.Fatal(err) } os.Setenv("ETCD_SERVER_URL", "http://localhost:2379") ctx := context.Background() if err := h.CreateVariable(ctx, "string-var", []byte("hello world")); err != nil { t.Fatal(err) } if err := h.CreateVariable(ctx, "json-var", []byte(`{"Foo": "Bar"}`)); err != nil { t.Fatal(err) } tests := []struct { URL string WantErr bool WantWatchErr bool Want interface{} }{ // Nonexistentvar does not exist, so we get an error from Watch. {"etcd://nonexistentvar", false, true, nil}, // Invalid decoder arg. {"etcd://string-var?decoder=notadecoder", true, false, nil}, // Invalid parameter. {"etcd://string-var?param=value", true, false, nil}, // Working example with string decoder. {"etcd://string-var?decoder=string", false, false, "hello world"}, // Working example with default decoder. {"etcd://string-var", false, false, []byte("hello world")}, // Working example with JSON decoder. {"etcd://json-var?decoder=jsonmap", false, false, &map[string]interface{}{"Foo": "Bar"}}, } for _, test := range tests { t.Run(test.URL, func(t *testing.T) { v, err := runtimevar.OpenVariable(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err != nil { return } defer v.Close() snapshot, err := v.Watch(ctx) if (err != nil) != test.WantWatchErr { t.Errorf("%s: got Watch error %v, want error %v", test.URL, err, test.WantWatchErr) } if err != nil { return } if !cmp.Equal(snapshot.Value, test.Want) { t.Errorf("%s: got snapshot value\n%v\n want\n%v", test.URL, snapshot.Value, test.Want) } }) } } go-cloud-0.20.0/runtimevar/etcdvar/example_test.go000066400000000000000000000035251367004507500221630ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package etcdvar_test import ( "context" "log" "go.etcd.io/etcd/clientv3" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/etcdvar" ) func ExampleOpenVariable() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Connect to the etcd server. client, err := clientv3.NewFromURL("http://your.etcd.server:9999") if err != nil { log.Fatal(err) } // Construct a *runtimevar.Variable that watches the variable. v, err := etcdvar.OpenVariable(client, "cfg-variable-name", runtimevar.StringDecoder, nil) if err != nil { log.Fatal(err) } defer v.Close() } func Example_openVariableFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/runtimevar/etcdvar" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // runtimevar.OpenVariable creates a *runtimevar.Variable from a URL. // The default opener connects to an etcd server based on the environment // variable ETCD_SERVER_URL. v, err := runtimevar.OpenVariable(ctx, "etcd://myvarname?decoder=string") if err != nil { log.Fatal(err) } defer v.Close() } go-cloud-0.20.0/runtimevar/etcdvar/go.mod000066400000000000000000000042261367004507500202470ustar00rootroot00000000000000// Copyright 2018-2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev/runtimevar/etcdvar go 1.12 require ( github.com/coreos/bbolt v1.3.2 // indirect github.com/coreos/etcd v3.3.13+incompatible // indirect github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e // indirect github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect github.com/google/go-cmp v0.4.1 github.com/gorilla/websocket v1.4.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.14.5 // indirect github.com/jonboulle/clockwork v0.1.0 // indirect github.com/json-iterator/go v1.1.6 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.1 // indirect github.com/prometheus/client_golang v0.9.3 // indirect github.com/prometheus/common v0.4.1 // indirect github.com/prometheus/procfs v0.0.2 // indirect github.com/sirupsen/logrus v1.4.2 // indirect github.com/soheilhy/cmux v0.1.4 // indirect github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect go.etcd.io/bbolt v1.3.2 // indirect go.etcd.io/etcd v3.3.13+incompatible go.uber.org/atomic v1.4.0 // indirect go.uber.org/multierr v1.1.0 // indirect go.uber.org/zap v1.10.0 // indirect gocloud.dev v0.20.0 google.golang.org/grpc v1.29.1 ) go-cloud-0.20.0/runtimevar/etcdvar/go.sum000066400000000000000000001666721367004507500203120ustar00rootroot00000000000000bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3 h1:0sMegbmn/8uTwpNkB0q9cLEpZ2W5a6kl+wtBQgPWBJQ= cloud.google.com/go v0.44.3/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.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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 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/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= 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/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.14.5 h1:aiLxiiVzAXb7wb3lAmubA69IokWOoUNe+E7TdGKh8yw= github.com/grpc-ecosystem/grpc-gateway v1.14.5/go.mod h1:UJ0EZAp832vCd54Wev9N1BMKEyvcZ5+IM0AwDrnlkEc= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= 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/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149 h1:HfxbT6/JcvIljmERptWhwa8XzP7H3T+Z2N26gTsaDaA= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3 h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v3.3.13+incompatible h1:jCejD5EMnlGxFvcGRyEV4VGlENZc7oPQX6o0t7n3xbw= go.etcd.io/etcd v3.3.13+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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/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/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.5.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 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= 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/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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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 h1:hrpEMCZ2O7DR5gC1n2AJGVhrwiEjOi35+jxtIuZpTMo= 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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= 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/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/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 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 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= go-cloud-0.20.0/runtimevar/etcdvar/localetcd.sh000077500000000000000000000021321367004507500214240ustar00rootroot00000000000000#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Starts a local etcd instance via Docker. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail set -euo pipefail # Clean up and run etcd. echo "Starting etcd..." docker rm -f etcd &> /dev/null || : docker run -d -p 2379:2379 -p 4001:4001 --name etcd quay.io/coreos/etcd:v3.3 /usr/local/bin/etcd --advertise-client-urls http://0.0.0.0:2379 --listen-client-urls http://0.0.0.0:2379 &> /dev/null echo "...done. Run \"docker rm -f etcd\" to clean up the container." echo go-cloud-0.20.0/runtimevar/example_openvariable_test.go000066400000000000000000000033161367004507500232600ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package runtimevar_test import ( "context" "fmt" "log" "gocloud.dev/runtimevar" _ "gocloud.dev/runtimevar/constantvar" ) func Example_openVariableFromURL() { // Connect to a Variable using a URL. // This example uses "constantvar", an in-memory implementation. // We need to add a blank import line to register the constantvar driver's // URLOpener, which implements runtimevar.VariableURLOpener: // import _ "gocloud.dev/runtimevar/constantvar" // constantvar registers for the "constant" scheme. // All runtimevar.OpenVariable URLs also work with "runtimevar+" or "runtimevar+variable+" prefixes, // e.g., "runtimevar+constant://..." or "runtimevar+variable+constant://...". ctx := context.Background() v, err := runtimevar.OpenVariable(ctx, "constant://?val=hello+world&decoder=string") if err != nil { log.Fatal(err) } defer v.Close() // Now we can use the Variable as normal. snapshot, err := v.Latest(ctx) if err != nil { log.Fatal(err) } // It's safe to cast the Value to string since we used the string decoder. fmt.Printf("%s\n", snapshot.Value.(string)) // Output: // hello world } go-cloud-0.20.0/runtimevar/example_test.go000066400000000000000000000136701367004507500205350ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package runtimevar_test import ( "context" "fmt" "log" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/constantvar" "gocloud.dev/secrets" _ "gocloud.dev/runtimevar/gcpruntimeconfig" runtimeconfig "google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1" "google.golang.org/grpc/status" ) func Example_jsonDecoder() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Config is the sample config struct we're going to parse our JSON into. type Config struct { Host string Port int } // A sample JSON config that will decode into Config. const jsonConfig = `{"Host": "gocloud.dev", "Port": 8080}` // Construct a Decoder that decodes raw bytes into our config. decoder := runtimevar.NewDecoder(Config{}, runtimevar.JSONDecode) // Next, a construct a *Variable using a constructor or URL opener. // This example uses constantvar. // If you're using a URL opener, you can't decode JSON into a struct, but // you can use the query parameter "decoder=jsonmap" to decode into a map. v := constantvar.NewBytes([]byte(jsonConfig), decoder) defer v.Close() // snapshot.Value will be of type Config. // PRAGMA: On gocloud.dev, hide the rest of the function. snapshot, err := v.Latest(ctx) if err != nil { log.Fatalf("Error in retrieving variable: %v", err) } fmt.Printf("Config: %+v\n", snapshot.Value.(Config)) // Output: // Config: {Host:gocloud.dev Port:8080} } func Example_stringDecoder() { // Construct a *Variable using a constructor from one of the // runtimevar subpackages. This example uses constantvar. // The variable value is of type string, so we use StringDecoder. v := constantvar.NewBytes([]byte("hello world"), runtimevar.StringDecoder) defer v.Close() // Call Latest to retrieve the value. snapshot, err := v.Latest(context.Background()) if err != nil { log.Fatalf("Error in retrieving variable: %v", err) } // snapshot.Value will be of type string. fmt.Printf("%q\n", snapshot.Value.(string)) // Output: // "hello world" } func ExampleVariable_Latest() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. var v *runtimevar.Variable snapshot, err := v.Latest(context.Background()) if err != nil { log.Fatalf("Error in retrieving variable: %v", err) } // PRAGMA: On gocloud.dev, hide the rest of the function. _ = snapshot } func ExampleSnapshot_As() { // This example is specific to the gcpruntimeconfig implementation; it // demonstrates access to the underlying // google.golang.org/genproto/googleapis/cloud/runtimeconfig.Variable type. // The types exposed for As by gcpruntimeconfig are documented in // https://godoc.org/gocloud.dev/runtimevar/gcpruntimeconfig#hdr-As ctx := context.Background() const url = "gcpruntimeconfig://proj/config/key" v, err := runtimevar.OpenVariable(ctx, url) if err != nil { log.Fatal(err) } s, err := v.Latest(ctx) if err != nil { log.Fatal(err) } var rcv *runtimeconfig.Variable if s.As(&rcv) { fmt.Println(rcv.UpdateTime) } } func ExampleVariable_ErrorAs() { // This example is specific to the gcpruntimeconfig implementation; it // demonstrates access to the underlying google.golang.org/grpc/status.Status // type. // The types exposed for As by gcpruntimeconfig are documented in // https://godoc.org/gocloud.dev/runtimevar/gcpruntimeconfig#hdr-As ctx := context.Background() const url = "gcpruntimeconfig://proj/wrongconfig/key" v, err := runtimevar.OpenVariable(ctx, url) if err != nil { log.Fatal(err) } _, err = v.Watch(ctx) if err != nil { var s *status.Status if v.ErrorAs(err, &s) { fmt.Println(s.Code()) } } } func ExampleVariable_Watch() { // Construct a *Variable using a constructor from one of the // runtimevar subpackages. This example uses constantvar. // The variable value is of type string, so we use StringDecoder. v := constantvar.NewBytes([]byte("hello world"), runtimevar.StringDecoder) defer v.Close() // Call Watch in a loop from a background goroutine to see all changes, // including errors. // // You can use this for logging, or to trigger behaviors when the // config changes. // // Note that Latest always returns the latest "good" config, so seeing // an error from Watch doesn't mean that Latest will return one. go func() { for { snapshot, err := v.Watch(context.Background()) if err == runtimevar.ErrClosed { // v has been closed; exit. return } if err == nil { // Casting to a string here because we used StringDecoder. log.Printf("New config: %v", snapshot.Value.(string)) } else { log.Printf("Error loading config: %v", err) // Even though there's been an error loading the config, // v.Latest will continue to return the latest "good" value. } } }() } func ExampleDecryptDecode() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. var keeper *secrets.Keeper decodeFunc := runtimevar.DecryptDecode(keeper, runtimevar.StringDecode) decoder := runtimevar.NewDecoder("", decodeFunc) // PRAGMA: On gocloud.dev, hide the rest of the function. _ = decoder } go-cloud-0.20.0/runtimevar/filevar/000077500000000000000000000000001367004507500171355ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/filevar/example_test.go000066400000000000000000000036561367004507500221700ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package filevar_test import ( "context" "fmt" "io/ioutil" "log" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/filevar" ) func ExampleOpenVariable() { // Create a temporary file to hold our config. f, err := ioutil.TempFile("", "") if err != nil { log.Fatal(err) } if _, err := f.Write([]byte("hello world")); err != nil { log.Fatal(err) } // Construct a *runtimevar.Variable pointing at f. v, err := filevar.OpenVariable(f.Name(), runtimevar.StringDecoder, nil) if err != nil { log.Fatal(err) } defer v.Close() // We can now read the current value of the variable from v. snapshot, err := v.Latest(context.Background()) if err != nil { log.Fatal(err) } // runtimevar.Snapshot.Value is decoded to a string. fmt.Println(snapshot.Value.(string)) // Output: // hello world } func Example_openVariableFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/runtimevar/filevar" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // runtimevar.OpenVariable creates a *runtimevar.Variable from a URL. v, err := runtimevar.OpenVariable(ctx, "file:///path/to/config.txt?decoder=string") if err != nil { log.Fatal(err) } defer v.Close() } go-cloud-0.20.0/runtimevar/filevar/filevar.go000066400000000000000000000236721367004507500211260ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package filevar provides a runtimevar implementation with variables // backed by the filesystem. Use OpenVariable to construct a *runtimevar.Variable. // // Configuration files can be updated using any commands (cp, mv) or // tools/editors. This package does not guarantee read consistency since // it does not have control over the writes. For example, some kinds of // updates might result in filevar temporarily receiving an error or an // empty value. // // Known Issues: // // * On macOS, if an empty file is copied into a configuration file, // filevar will not detect the change. // // URLs // // For runtimevar.OpenVariable, filevar registers for the scheme "file". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // filevar does not support any types for As. package filevar // import "gocloud.dev/runtimevar/filevar" import ( "bytes" "context" "errors" "fmt" "io/ioutil" "net/url" "os" "path/filepath" "strings" "time" "github.com/fsnotify/fsnotify" "gocloud.dev/gcerrors" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" ) func init() { runtimevar.DefaultURLMux().RegisterVariable(Scheme, &URLOpener{}) } // Scheme is the URL scheme filevar registers its URLOpener under on runtimevar.DefaultMux. const Scheme = "file" // URLOpener opens filevar URLs like "file:///path/to/config.json?decoder=json". // // The URL's host+path is used as the path to the file to watch. // If os.PathSeparator != "/", any leading "/" from the path is dropped // and remaining '/' characters are converted to os.PathSeparator. // // The following URL parameters are supported: // - decoder: The decoder to use. Defaults to URLOpener.Decoder, or // runtimevar.BytesDecoder if URLOpener.Decoder is nil. // See runtimevar.DecoderByName for supported values. type URLOpener struct { // Decoder specifies the decoder to use if one is not specified in the URL. // Defaults to runtimevar.BytesDecoder. Decoder *runtimevar.Decoder // Options specifies the options to pass to OpenVariable. Options Options } // OpenVariableURL opens the variable at the URL's path. See the package doc // for more details. func (o *URLOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { q := u.Query() decoderName := q.Get("decoder") q.Del("decoder") decoder, err := runtimevar.DecoderByName(ctx, decoderName, o.Decoder) if err != nil { return nil, fmt.Errorf("open variable %v: invalid decoder: %v", u, err) } for param := range q { return nil, fmt.Errorf("open variable %v: invalid query parameter %q", u, param) } path := u.Path if os.PathSeparator != '/' { path = strings.TrimPrefix(path, "/") } return OpenVariable(filepath.FromSlash(path), decoder, &o.Options) } // Options sets options. type Options struct { // WaitDuration controls the frequency of retries after an error. For example, // if the file does not exist. Defaults to 30 seconds. WaitDuration time.Duration } // OpenVariable constructs a *runtimevar.Variable backed by the file at path. // The file holds raw bytes; provide a decoder to decode the raw bytes into the // appropriate type for runtimevar.Snapshot.Value. // See the runtimevar package documentation for examples of decoders. func OpenVariable(path string, decoder *runtimevar.Decoder, opts *Options) (*runtimevar.Variable, error) { w, err := newWatcher(path, decoder, opts) if err != nil { return nil, err } return runtimevar.New(w), nil } func newWatcher(path string, decoder *runtimevar.Decoder, opts *Options) (*watcher, error) { if opts == nil { opts = &Options{} } if path == "" { return nil, errors.New("path is required") } if decoder == nil { return nil, errors.New("decoder is required") } // Use absolute file path. abspath, err := filepath.Abs(path) if err != nil { return nil, err } // Construct a fsnotify.Watcher. notifier, err := fsnotify.NewWatcher() if err != nil { return nil, err } // Create a ctx for the background goroutine that does all of the reading. // The cancel function will be used to shut it down during Close, with the // result being passed back via closeCh. ctx, cancel := context.WithCancel(context.Background()) w := &watcher{ path: abspath, // See struct comments for why it's buffered. ch: make(chan *state, 1), closeCh: make(chan error), shutdown: cancel, } go w.watch(ctx, notifier, abspath, decoder, driver.WaitDuration(opts.WaitDuration)) return w, nil } // errNotExist wraps an underlying error in cases where the file likely doesn't // exist. type errNotExist struct { err error } func (e *errNotExist) Error() string { return e.err.Error() } // state implements driver.State. type state struct { val interface{} updateTime time.Time raw []byte err error } func (s *state) Value() (interface{}, error) { return s.val, s.err } func (s *state) UpdateTime() time.Time { return s.updateTime } func (s *state) As(i interface{}) bool { return false } // watcher implements driver.Watcher for configurations stored in files. type watcher struct { // The path for the file we're watching. path string // The background goroutine writes new *state values to ch. // It is buffered so that the background goroutine can write without // blocking; it always drains the buffer before writing so that the latest // write is buffered. If writes could block, the background goroutine could be // blocked indefinitely from reading fsnotify events. ch chan *state // closeCh is used to return any errors from closing the notifier // back to watcher.Close. closeCh chan error // shutdown tells the background goroutine to exit. shutdown func() } // WatchVariable implements driver.WatchVariable. func (w *watcher) WatchVariable(ctx context.Context, _ driver.State) (driver.State, time.Duration) { select { case <-ctx.Done(): return &state{err: ctx.Err()}, 0 case cur := <-w.ch: return cur, 0 } } // updateState checks to see if s and prev both represent the same error. // If not, it drains any previous state buffered in w.ch, then writes s to it. // It always return s. func (w *watcher) updateState(s, prev *state) *state { if s.err != nil && prev != nil && prev.err != nil && (s.err == prev.err || s.err.Error() == prev.err.Error() || (os.IsNotExist(s.err) && os.IsNotExist(prev.err))) { // s represents the same error as prev. return s } // Drain any buffered value on ch; it is now stale. select { case <-w.ch: default: } // This write can't block, since we're the only writer, ch has a buffer // size of 1, and we just read anything that was buffered. w.ch <- s return s } // watch is run by a background goroutine. // It watches file using notifier, and writes new states to w.ch. // If it can't read or watch the file, it re-checks every wait. // It exits when ctx is canceled, and writes any shutdown errors (or // nil if there weren't any) to w.closeCh. func (w *watcher) watch(ctx context.Context, notifier *fsnotify.Watcher, file string, decoder *runtimevar.Decoder, wait time.Duration) { var cur *state for { // If the current state is an error, pause between attempts // to avoid spin loops. In particular, this happens when the file // doesn't exist. if cur != nil && cur.err != nil { select { case <-ctx.Done(): w.closeCh <- notifier.Close() return case <-time.After(wait): } } // Add the file to the notifier to be watched. It's fine to be // added multiple times, and fsnotifier is a bit flaky about when // it's needed during renames, so just always try. if err := notifier.Add(file); err != nil { // File probably does not exist. Try again later. cur = w.updateState(&state{err: &errNotExist{err}}, cur) continue } // Read the file. b, err := ioutil.ReadFile(file) if err != nil { // File probably does not exist. Try again later. cur = w.updateState(&state{err: &errNotExist{err}}, cur) continue } // If it's a new value, decode and return it. if cur == nil || cur.err != nil || !bytes.Equal(cur.raw, b) { if val, err := decoder.Decode(ctx, b); err != nil { cur = w.updateState(&state{err: err}, cur) } else { cur = w.updateState(&state{val: val, updateTime: time.Now(), raw: b}, cur) } } // Block until notifier tells us something relevant changed. wait := true for wait { select { case <-ctx.Done(): w.closeCh <- notifier.Close() return case event := <-notifier.Events: if event.Name != file { continue } // Ignore if not one of the following operations. if event.Op&(fsnotify.Create|fsnotify.Write|fsnotify.Remove|fsnotify.Rename) == 0 { continue } wait = false case err := <-notifier.Errors: cur = w.updateState(&state{err: err}, cur) } } } } // Close implements driver.WatchVariable. func (w *watcher) Close() error { // Tell the background goroutine to shut down by canceling its ctx. w.shutdown() // Wait for it to return the result of closing the notifier. err := <-w.closeCh // Cleanup our channels. close(w.ch) close(w.closeCh) return err } // ErrorAs implements driver.ErrorAs. func (w *watcher) ErrorAs(err error, i interface{}) bool { return false } // ErrorCode implements driver.ErrorCode. func (*watcher) ErrorCode(err error) gcerrors.ErrorCode { if _, ok := err.(*errNotExist); ok { return gcerrors.NotFound } return gcerrors.Unknown } go-cloud-0.20.0/runtimevar/filevar/filevar_test.go000066400000000000000000000205731367004507500221620ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package filevar import ( "context" "errors" "io/ioutil" "net/url" "os" "path/filepath" "strings" "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" "gocloud.dev/runtimevar/drivertest" "gocloud.dev/secrets" _ "gocloud.dev/secrets/localsecrets" ) type harness struct { dir string closer func() } func newHarness(t *testing.T) (drivertest.Harness, error) { dir, err := ioutil.TempDir("", "filevar_test-") if err != nil { return nil, err } return &harness{ dir: dir, closer: func() { _ = os.RemoveAll(dir) }, }, nil } func (h *harness) MakeWatcher(ctx context.Context, name string, decoder *runtimevar.Decoder) (driver.Watcher, error) { // filevar uses a goroutine in the background that poll every WaitDuration if // the file is deleted. Make this fast for tests. return newWatcher(filepath.Join(h.dir, name), decoder, &Options{WaitDuration: 1 * time.Millisecond}) } func (h *harness) CreateVariable(ctx context.Context, name string, val []byte) error { // Write to a temporary file and rename; otherwise, // Watch can read an empty file during the write. tmp, err := ioutil.TempFile(h.dir, "tmp") if err != nil { return err } if _, err := tmp.Write(val); err != nil { tmp.Close() return err } tmp.Close() return os.Rename(tmp.Name(), filepath.Join(h.dir, name)) } func (h *harness) UpdateVariable(ctx context.Context, name string, val []byte) error { return h.CreateVariable(ctx, name, val) } func (h *harness) DeleteVariable(ctx context.Context, name string) error { path := filepath.Join(h.dir, name) return os.Remove(path) } func (h *harness) Close() { h.closer() } func (h *harness) Mutable() bool { return true } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) SnapshotCheck(s *runtimevar.Snapshot) error { var ss string if s.As(&ss) { return errors.New("Snapshot.As expected to fail") } return nil } func (verifyAs) ErrorCheck(v *runtimevar.Variable, err error) error { var ss string if v.ErrorAs(err, &ss) { return errors.New("runtimevar.ErrorAs expected to fail") } return nil } // Filevar-specific tests. func TestOpenVariable(t *testing.T) { dir, err := ioutil.TempDir("", "filevar_test-") if err != nil { t.Fatal(err) } tests := []struct { description string path string decoder *runtimevar.Decoder want string wantErr bool }{ { description: "empty path results in error", decoder: runtimevar.StringDecoder, wantErr: true, }, { description: "empty decoder results in error", path: filepath.Join(dir, "foo.txt"), wantErr: true, }, { description: "basic path works", path: filepath.Join(dir, "foo.txt"), decoder: runtimevar.StringDecoder, want: filepath.Join(dir, "foo.txt"), }, { description: "path with extra relative dirs works and is cleaned up", path: filepath.Join(dir, "bar/../foo.txt"), decoder: runtimevar.StringDecoder, want: filepath.Join(dir, "foo.txt"), }, } for _, test := range tests { t.Run(test.description, func(t *testing.T) { // Create driver impl. drv, err := newWatcher(test.path, test.decoder, nil) if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } if drv != nil { if drv.path != test.want { t.Errorf("got %q want %q", drv.path, test.want) } drv.Close() } // Create portable type. w, err := OpenVariable(test.path, test.decoder, nil) if (err != nil) != test.wantErr { t.Errorf("got err %v want error %v", err, test.wantErr) } if w != nil { w.Close() } }) } } func TestOpenVariableURL(t *testing.T) { dir, err := ioutil.TempDir("", "gcdk-filevar-example") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) jsonPath := filepath.Join(dir, "myvar.json") if err := ioutil.WriteFile(jsonPath, []byte(`{"Foo": "Bar"}`), 0666); err != nil { t.Fatal(err) } txtPath := filepath.Join(dir, "myvar.txt") if err := ioutil.WriteFile(txtPath, []byte("hello world!"), 0666); err != nil { t.Fatal(err) } nonexistentPath := filepath.Join(dir, "filenotfound") ctx := context.Background() secretsPath := filepath.Join(dir, "mysecret.txt") cleanup, err := setupTestSecrets(ctx, dir, secretsPath) if err != nil { t.Fatal(err) } defer cleanup() // Convert paths to a URL path, adding a leading "/" if needed on Windows // (on Unix, dirpath already has a leading "/"). jsonPath = filepath.ToSlash(jsonPath) txtPath = filepath.ToSlash(txtPath) nonexistentPath = filepath.ToSlash(nonexistentPath) secretsPath = filepath.ToSlash(secretsPath) if os.PathSeparator != '/' { if !strings.HasPrefix(jsonPath, "/") { jsonPath = "/" + jsonPath } if !strings.HasPrefix(txtPath, "/") { txtPath = "/" + txtPath } if !strings.HasPrefix(nonexistentPath, "/") { nonexistentPath = "/" + nonexistentPath } if !strings.HasPrefix(secretsPath, "/") { secretsPath = "/" + secretsPath } } tests := []struct { URL string WantErr bool WantWatchErr bool Want interface{} }{ // Variable construction succeeds, but the file does not exist. {"file://" + nonexistentPath, false, true, nil}, // Variable construction fails due to invalid decoder arg. {"file://" + txtPath + "?decoder=notadecoder", true, false, nil}, // Variable construction fails due to invalid arg. {"file://" + txtPath + "?param=value", true, false, nil}, // Working example with default decoder. {"file://" + txtPath, false, false, []byte("hello world!")}, // Working example with string decoder. {"file://" + txtPath + "?decoder=string", false, false, "hello world!"}, // Working example with JSON decoder. {"file://" + jsonPath + "?decoder=jsonmap", false, false, &map[string]interface{}{"Foo": "Bar"}}, // Working example with decrypt (default) decoder. {"file://" + secretsPath + "?decoder=decrypt", false, false, []byte(`{"Foo":"Bar"}`)}, // Working example with decrypt+bytes decoder. {"file://" + secretsPath + "?decoder=decrypt+bytes", false, false, []byte(`{"Foo":"Bar"}`)}, // Working example with decrypt+json decoder. {"file://" + secretsPath + "?decoder=decrypt+jsonmap", false, false, &map[string]interface{}{"Foo": "Bar"}}, // Working example with escaped decrypt+json decoder {"file://" + secretsPath + "?decoder=" + url.QueryEscape("decrypt+jsonmap"), false, false, &map[string]interface{}{"Foo": "Bar"}}, } for _, test := range tests { t.Run(test.URL, func(t *testing.T) { v, err := runtimevar.OpenVariable(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err != nil { return } defer v.Close() snapshot, err := v.Watch(ctx) if (err != nil) != test.WantWatchErr { t.Errorf("%s: got Watch error %v, want error %v", test.URL, err, test.WantWatchErr) } if err != nil { return } if !cmp.Equal(snapshot.Value, test.Want) { t.Errorf("%s: got snapshot value\n%v\n want\n%v", test.URL, snapshot.Value, test.Want) } }) } } func setupTestSecrets(ctx context.Context, dir, secretsPath string) (func(), error) { const keeperEnv = "RUNTIMEVAR_KEEPER_URL" const keeperURL = "base64key://smGbjm71Nxd1Ig5FS0wj9SlbzAIrnolCz9bQQ6uAhl4=" oldURL := os.Getenv(keeperEnv) os.Setenv(keeperEnv, keeperURL) cleanup := func() { os.Setenv(keeperEnv, oldURL) } k, err := secrets.OpenKeeper(ctx, keeperURL) if err != nil { return cleanup, err } sc, err := k.Encrypt(ctx, []byte(`{"Foo":"Bar"}`)) if err != nil { return cleanup, err } if err := ioutil.WriteFile(secretsPath, sc, 0666); err != nil { return cleanup, err } return cleanup, nil } go-cloud-0.20.0/runtimevar/gcpruntimeconfig/000077500000000000000000000000001367004507500210505ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/gcpruntimeconfig/example_test.go000066400000000000000000000056231367004507500240770ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpruntimeconfig_test import ( "context" "log" "gocloud.dev/gcp" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/gcpruntimeconfig" ) func ExampleOpenVariable() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Your GCP credentials. // See https://cloud.google.com/docs/authentication/production // for more info on alternatives. creds, err := gcp.DefaultCredentials(ctx) if err != nil { log.Fatal(err) } // Connect to the Runtime Configurator service. client, cleanup, err := gcpruntimeconfig.Dial(ctx, creds.TokenSource) if err != nil { log.Fatal(err) } defer cleanup() // You can use the VariableKey helper to construct a Variable key from // your project ID, config ID, and the variable name; alternatively, // you can construct the full string yourself (e.g., // "projects/gcp-project-id/configs/config-id/variables/variable-name"). // See https://cloud.google.com/deployment-manager/runtime-configurator/ // for more details. // // For this example, the GCP Cloud Runtime Configurator variable being // referenced should have a JSON string that decodes into MyConfig. variableKey := gcpruntimeconfig.VariableKey("gcp-project-id", "config-id", "variable-name") // Construct a *runtimevar.Variable that watches the variable. v, err := gcpruntimeconfig.OpenVariable(client, variableKey, runtimevar.StringDecoder, nil) if err != nil { log.Fatal(err) } defer v.Close() } func Example_openVariableFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/runtimevar/gcpruntimeconfig" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // runtimevar.OpenVariable creates a *runtimevar.Variable from a URL. // The URL Host+Path are used as the GCP Runtime Configurator Variable key; // see https://cloud.google.com/deployment-manager/runtime-configurator/ // for more details. v, err := runtimevar.OpenVariable(ctx, "gcpruntimeconfig://projects/myproject/configs/myconfigid/variables/myvar?decoder=string") if err != nil { log.Fatal(err) } defer v.Close() } go-cloud-0.20.0/runtimevar/gcpruntimeconfig/gcpruntimeconfig.go000066400000000000000000000253601367004507500247500ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcpruntimeconfig provides a runtimevar implementation with // variables read from GCP Cloud Runtime Configurator // (https://cloud.google.com/deployment-manager/runtime-configurator). // Use OpenVariable to construct a *runtimevar.Variable. // // URLs // // For runtimevar.OpenVariable, gcpruntimeconfig registers for the scheme // "gcpruntimeconfig". // The default URL opener will creating a connection using use default // credentials from the environment, as described in // https://cloud.google.com/docs/authentication/production. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // gcpruntimeconfig exposes the following types for As: // - Snapshot: *pb.Variable // - Error: *status.Status package gcpruntimeconfig // import "gocloud.dev/runtimevar/gcpruntimeconfig" import ( "bytes" "context" "fmt" "net/url" "path" "regexp" "sync" "time" "github.com/golang/protobuf/ptypes" "github.com/google/wire" "gocloud.dev/gcerrors" "gocloud.dev/gcp" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/useragent" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" pb "google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/oauth" "google.golang.org/grpc/status" ) const ( // endpoint is the address of the GCP Runtime Configurator API. endPoint = "runtimeconfig.googleapis.com:443" ) // Dial opens a gRPC connection to the Runtime Configurator API using // credentials from ts. It is provided as an optional helper with useful // defaults. // // The second return value is a function that should be called to clean up // the connection opened by Dial. func Dial(ctx context.Context, ts gcp.TokenSource) (pb.RuntimeConfigManagerClient, func(), error) { conn, err := grpc.DialContext(ctx, endPoint, grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")), grpc.WithPerRPCCredentials(oauth.TokenSource{TokenSource: ts}), useragent.GRPCDialOption("runtimevar"), ) if err != nil { return nil, nil, err } return pb.NewRuntimeConfigManagerClient(conn), func() { conn.Close() }, nil } func init() { runtimevar.DefaultURLMux().RegisterVariable(Scheme, new(lazyCredsOpener)) } // Set holds Wire providers for this package. var Set = wire.NewSet( Dial, wire.Struct(new(URLOpener), "Client"), ) // lazyCredsOpener obtains Application Default Credentials on the first call // to OpenVariableURL. type lazyCredsOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyCredsOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { o.init.Do(func() { creds, err := gcp.DefaultCredentials(ctx) if err != nil { o.err = err return } client, _, err := Dial(ctx, creds.TokenSource) if err != nil { o.err = err return } o.opener = &URLOpener{Client: client} }) if o.err != nil { return nil, fmt.Errorf("open variable %v: %v", u, o.err) } return o.opener.OpenVariableURL(ctx, u) } // Scheme is the URL scheme gcpruntimeconfig registers its URLOpener under on runtimevar.DefaultMux. const Scheme = "gcpruntimeconfig" // URLOpener opens gcpruntimeconfig URLs like "gcpruntimeconfig://projects/[project_id]/configs/[CONFIG_ID]/variables/[VARIABLE_NAME]". // // The URL Host+Path are used as the GCP Runtime Configurator Variable key; // see https://cloud.google.com/deployment-manager/runtime-configurator/ // for more details. // // The following query parameters are supported: // // - decoder: The decoder to use. Defaults to URLOpener.Decoder, or // runtimevar.BytesDecoder if URLOpener.Decoder is nil. // See runtimevar.DecoderByName for supported values. type URLOpener struct { // Client must be set to a non-nil client authenticated with // Cloud RuntimeConfigurator scope or equivalent. Client pb.RuntimeConfigManagerClient // Decoder specifies the decoder to use if one is not specified in the URL. // Defaults to runtimevar.BytesDecoder. Decoder *runtimevar.Decoder // Options specifies the options to pass to New. Options Options } // OpenVariableURL opens a gcpruntimeconfig Variable for u. func (o *URLOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { q := u.Query() decoderName := q.Get("decoder") q.Del("decoder") decoder, err := runtimevar.DecoderByName(ctx, decoderName, o.Decoder) if err != nil { return nil, fmt.Errorf("open variable %v: invalid decoder: %v", u, err) } for param := range q { return nil, fmt.Errorf("open variable %v: invalid query parameter %q", u, param) } return OpenVariable(o.Client, path.Join(u.Host, u.Path), decoder, &o.Options) } // Options sets options. type Options struct { // WaitDuration controls the rate at which Parameter Store is polled. // Defaults to 30 seconds. WaitDuration time.Duration } // OpenVariable constructs a *runtimevar.Variable backed by variableKey in // GCP Cloud Runtime Configurator. // // A variableKey will look like: // projects/[project_id]/configs/[CONFIG_ID]/variables/[VARIABLE_NAME] // // You can use the full string (e.g., copied from the GCP Console), or // construct one from its parts using VariableKey. // // See https://cloud.google.com/deployment-manager/runtime-configurator/ for // more details. // // Runtime Configurator returns raw bytes; provide a decoder to decode the raw bytes // into the appropriate type for runtimevar.Snapshot.Value. // See the runtimevar package documentation for examples of decoders. func OpenVariable(client pb.RuntimeConfigManagerClient, variableKey string, decoder *runtimevar.Decoder, opts *Options) (*runtimevar.Variable, error) { w, err := newWatcher(client, variableKey, decoder, opts) if err != nil { return nil, err } return runtimevar.New(w), nil } var variableKeyRE = regexp.MustCompile("^projects/.+/configs/.+/variables/.+$") func newWatcher(client pb.RuntimeConfigManagerClient, variableKey string, decoder *runtimevar.Decoder, opts *Options) (driver.Watcher, error) { if opts == nil { opts = &Options{} } if !variableKeyRE.MatchString(variableKey) { return nil, fmt.Errorf("invalid variableKey %q; must match %v", variableKey, variableKeyRE) } return &watcher{ client: client, wait: driver.WaitDuration(opts.WaitDuration), name: variableKey, decoder: decoder, }, nil } // VariableKey constructs a GCP Runtime Configurator variable key from // component parts. See // https://cloud.google.com/deployment-manager/runtime-configurator/ // for more details. func VariableKey(projectID gcp.ProjectID, configID, variableName string) string { return fmt.Sprintf("projects/%s/configs/%s/variables/%s", projectID, configID, variableName) } // state implements driver.State. type state struct { val interface{} raw *pb.Variable updateTime time.Time rawBytes []byte err error } // Value implements driver.State.Value. func (s *state) Value() (interface{}, error) { return s.val, s.err } // UpdateTime implements driver.State.UpdateTime. func (s *state) UpdateTime() time.Time { return s.updateTime } // As implements driver.State.As. func (s *state) As(i interface{}) bool { if s.raw == nil { return false } p, ok := i.(**pb.Variable) if !ok { return false } *p = s.raw return true } // errorState returns a new State with err, unless prevS also represents // the same error, in which case it returns nil. func errorState(err error, prevS driver.State) driver.State { s := &state{err: err} if prevS == nil { return s } prev := prevS.(*state) if prev.err == nil { // New error. return s } if equivalentError(err, prev.err) { // Same error, return nil to indicate no change. return nil } return s } // equivalentError returns true iff err1 and err2 represent an equivalent error; // i.e., we don't want to return it to the user as a different error. func equivalentError(err1, err2 error) bool { if err1 == err2 || err1.Error() == err2.Error() { return true } code1, code2 := status.Code(err1), status.Code(err2) return code1 != codes.OK && code1 != codes.Unknown && code1 == code2 } // watcher implements driver.Watcher for configurations provided by the Runtime Configurator // service. type watcher struct { client pb.RuntimeConfigManagerClient wait time.Duration name string decoder *runtimevar.Decoder } // WatchVariable implements driver.WatchVariable. func (w *watcher) WatchVariable(ctx context.Context, prev driver.State) (driver.State, time.Duration) { // Get the variable from the backend. vpb, err := w.client.GetVariable(ctx, &pb.GetVariableRequest{Name: w.name}) if err != nil { return errorState(err, prev), w.wait } updateTime, err := parseUpdateTime(vpb) if err != nil { return errorState(err, prev), w.wait } // See if it's the same raw bytes as before. b := bytesFromProto(vpb) if prev != nil && bytes.Equal(b, prev.(*state).rawBytes) { // No change! return nil, w.wait } // Decode the value. val, err := w.decoder.Decode(ctx, b) if err != nil { return errorState(err, prev), w.wait } return &state{val: val, raw: vpb, updateTime: updateTime, rawBytes: b}, w.wait } // Close implements driver.Close. func (w *watcher) Close() error { return nil } // ErrorAs implements driver.ErrorAs. func (w *watcher) ErrorAs(err error, i interface{}) bool { // FromError converts err to a *status.Status. s, _ := status.FromError(err) if p, ok := i.(**status.Status); ok { *p = s return true } return false } // ErrorCode implements driver.ErrorCode. func (*watcher) ErrorCode(err error) gcerrors.ErrorCode { return gcerr.GRPCCode(err) } func bytesFromProto(vpb *pb.Variable) []byte { // Proto may contain either bytes or text. If it contains text content, convert that to []byte. if _, isBytes := vpb.GetContents().(*pb.Variable_Value); isBytes { return vpb.GetValue() } return []byte(vpb.GetText()) } func parseUpdateTime(vpb *pb.Variable) (time.Time, error) { updateTime, err := ptypes.Timestamp(vpb.GetUpdateTime()) if err != nil { return time.Time{}, fmt.Errorf( "variable message for name=%q contains invalid timestamp: %v", vpb.Name, err) } return updateTime, nil } go-cloud-0.20.0/runtimevar/gcpruntimeconfig/gcpruntimeconfig_test.go000066400000000000000000000152241367004507500260050ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpruntimeconfig import ( "context" "errors" "fmt" "testing" "gocloud.dev/internal/testing/setup" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" "gocloud.dev/runtimevar/drivertest" pb "google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) // This constant records the project used for the last --record. // If you want to use --record mode, // 1. Update this constant to your GCP project ID. // 2. Ensure that the "Runtime Configuration API" is enabled for your project. // TODO(issue #300): Use Terraform to get this. const projectID = "go-cloud-test-216917" const ( // configID is the runtimeconfig high-level config that variables sit under. configID = "go_cloud_runtimeconfigurator_test" ) func configPath() string { return fmt.Sprintf("projects/%s/configs/%s", projectID, configID) } func variableKey(variableName string) string { return VariableKey(projectID, configID, variableName) } type harness struct { client pb.RuntimeConfigManagerClient closer func() } func newHarness(t *testing.T) (drivertest.Harness, error) { ctx := context.Background() conn, done := setup.NewGCPgRPCConn(ctx, t, endPoint, "runtimevar") client := pb.NewRuntimeConfigManagerClient(conn) // Ignore errors if the config already exists. _, _ = client.CreateConfig(ctx, &pb.CreateConfigRequest{ Parent: "projects/" + projectID, Config: &pb.RuntimeConfig{ Name: configPath(), Description: t.Name(), }, }) return &harness{ client: client, closer: func() { _, _ = client.DeleteConfig(ctx, &pb.DeleteConfigRequest{Name: configPath()}) done() }, }, nil } func (h *harness) MakeWatcher(ctx context.Context, name string, decoder *runtimevar.Decoder) (driver.Watcher, error) { return newWatcher(h.client, variableKey(name), decoder, nil) } func (h *harness) CreateVariable(ctx context.Context, name string, val []byte) error { _, err := h.client.CreateVariable(ctx, &pb.CreateVariableRequest{ Parent: configPath(), Variable: &pb.Variable{ Name: variableKey(name), Contents: &pb.Variable_Value{Value: val}, }, }) return err } func (h *harness) UpdateVariable(ctx context.Context, name string, val []byte) error { _, err := h.client.UpdateVariable(ctx, &pb.UpdateVariableRequest{ Name: variableKey(name), Variable: &pb.Variable{ Contents: &pb.Variable_Value{Value: val}, }, }) return err } func (h *harness) DeleteVariable(ctx context.Context, name string) error { _, err := h.client.DeleteVariable(ctx, &pb.DeleteVariableRequest{Name: variableKey(name)}) return err } func (h *harness) Close() { h.closer() } func (h *harness) Mutable() bool { return true } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) SnapshotCheck(s *runtimevar.Snapshot) error { var v *pb.Variable if !s.As(&v) { return errors.New("Snapshot.As failed") } return nil } func (verifyAs) ErrorCheck(v *runtimevar.Variable, err error) error { var s *status.Status if !v.ErrorAs(err, &s) { return errors.New("runtimevar.ErrorAs failed") } return nil } // Runtimeconfigurator-specific tests. func TestEquivalentError(t *testing.T) { tests := []struct { Err1, Err2 error Want bool }{ {Err1: errors.New("not grpc"), Err2: errors.New("not grpc"), Want: true}, {Err1: errors.New("not grpc"), Err2: errors.New("not grpc but different")}, {Err1: errors.New("not grpc"), Err2: status.Errorf(codes.Internal, "fail")}, {Err1: status.Errorf(codes.Internal, "fail"), Err2: status.Errorf(codes.InvalidArgument, "fail")}, {Err1: status.Errorf(codes.Internal, "fail"), Err2: status.Errorf(codes.Internal, "fail"), Want: true}, } for _, test := range tests { got := equivalentError(test.Err1, test.Err2) if got != test.Want { t.Errorf("%v vs %v: got %v want %v", test.Err1, test.Err2, got, test.Want) } } } func TestNoConnectionError(t *testing.T) { ctx := context.Background() creds, err := setup.FakeGCPCredentials(ctx) if err != nil { t.Fatal(err) } // Connect to the Runtime Configurator service. client, cleanup, err := Dial(ctx, creds.TokenSource) if err != nil { t.Fatal(err) } defer cleanup() variableKey := VariableKey("gcp-project-id", "cfg-name", "cfg-variable-name") v, err := OpenVariable(client, variableKey, nil, nil) if err != nil { t.Fatal(err) } defer v.Close() _, err = v.Watch(context.Background()) if err == nil { t.Error("got nil want error") } } func TestOpenVariable(t *testing.T) { cleanup := setup.FakeGCPDefaultCredentials(t) defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"gcpruntimeconfig://projects/myproject/configs/mycfg/variables/myvar", false}, // OK, hierarchical key name. {"gcpruntimeconfig://projects/myproject/configs/mycfg/variables/myvar1/myvar2", false}, // OK, setting decoder. {"gcpruntimeconfig://projects/myproject/configs/mycfg/variables/myvar?decoder=string", false}, // Missing projects prefix. {"gcpruntimeconfig://project/myproject/configs/mycfg/variables/myvar", true}, // Missing project. {"gcpruntimeconfig://projects//configs/mycfg/variables/myvar", true}, // Missing configs. {"gcpruntimeconfig://projects/myproject/mycfg/variables/myvar", true}, // Missing configID. {"gcpruntimeconfig://projects/myproject/configs//variables/myvar", true}, // Missing variables. {"gcpruntimeconfig://projects/myproject/configs/mycfg//myvar", true}, // Missing variable name. {"gcpruntimeconfig://projects/myproject/configs/mycfg/variables/", true}, // Invalid decoder. {"gcpruntimeconfig://myproject/mycfg/myvar?decoder=notadecoder", true}, // Invalid param. {"gcpruntimeconfig://myproject/mycfg/myvar?param=value", true}, } ctx := context.Background() for _, test := range tests { v, err := runtimevar.OpenVariable(ctx, test.URL) if v != nil { defer v.Close() } if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } } } go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/000077500000000000000000000000001367004507500226615ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/000077500000000000000000000000001367004507500257535ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestAs/000077500000000000000000000000001367004507500271565ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestAs/verify_As.replay000066400000000000000000000051351367004507500323270ustar00rootroot00000000000000RPCReplay'E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917k Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test TestConformance/TestAs/verify_As Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfigk Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test TestConformance/TestAs/verify_As(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequestc aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as %type.googleapis.com/google.rpc.StatusRequested entity was not found. (type.googleapis.com/google.rpc.DebugInfo[ORIGINAL ERROR] generic::not_found: Variable projects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as (ZG/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testp aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as hello world ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable~ aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as  hello world(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequestc aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable~ aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as  hello world(G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteVariableRequestc aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as1+ )type.googleapis.com/google.protobuf.Empty( E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty( verify_As_returns_false_when_passed_nil.replay000066400000000000000000000052331367004507500404250ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestAsRPCReplayFE/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917 Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test>TestConformance/TestAs/verify_As_returns_false_when_passed_nil Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfig Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test>TestConformance/TestAs/verify_As_returns_false_when_passed_nil(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequestc aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as %type.googleapis.com/google.rpc.StatusRequested entity was not found. (type.googleapis.com/google.rpc.DebugInfo[ORIGINAL ERROR] generic::not_found: Variable projects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as (ZG/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testp aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as hello world ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable~ aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as  hello world(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequestc aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable~ aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as  hello world(G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteVariableRequestc aprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/variable-for-as1+ )type.googleapis.com/google.protobuf.Empty( E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty( go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestDelete.replay000066400000000000000000000077061367004507500312450ustar00rootroot00000000000000RPCReplay!E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917e Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestDelete Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfige Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestDelete(_G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testu fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable hello world ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable  hello world(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable  hello world(G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable1+ )type.googleapis.com/google.protobuf.Empty(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable %type.googleapis.com/google.rpc.StatusRequested entity was not found. (type.googleapis.com/google.rpc.DebugInfo[ORIGINAL ERROR] generic::not_found: Variable projects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ( aG/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testw fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable goodbye world ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ׺ goodbye world( D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ׺ goodbye world( G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable1+ )type.googleapis.com/google.protobuf.Empty(E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestInvalidJSON.replay000066400000000000000000000041211367004507500321070ustar00rootroot00000000000000RPCReplay&E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917j Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestInvalidJSON Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfigj Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestInvalidJSON(\G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testr fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variablenot-json ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable °not-json(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable °not-json(G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable1+ )type.googleapis.com/google.protobuf.Empty(E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty( go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestJSON.replay000066400000000000000000000044451367004507500306110ustar00rootroot00000000000000RPCReplayE/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917c Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestJSON Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfigc Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestJSON(G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variableS[ {"Name": "Ed", "Text": "Knock knock."}, {"Name": "Sam", "Text": "Who's there?"} ] ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable S[ {"Name": "Ed", "Text": "Knock knock."}, {"Name": "Sam", "Text": "Who's there?"} ](D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable S[ {"Name": "Ed", "Text": "Knock knock."}, {"Name": "Sam", "Text": "Who's there?"} ](G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable1+ )type.googleapis.com/google.protobuf.Empty(E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty( go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestNonExistentVariable.replay000066400000000000000000000024721367004507500337620ustar00rootroot00000000000000RPCReplay.E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917r Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test'TestConformance/TestNonExistentVariable Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfigr Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test'TestConformance/TestNonExistentVariable(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequestb `projects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/does-not-exist %type.googleapis.com/google.rpc.StatusRequested entity was not found. (type.googleapis.com/google.rpc.DebugInfo[ORIGINAL ERROR] generic::not_found: Variable projects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/does-not-exist (E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestString.replay000066400000000000000000000041201367004507500312740ustar00rootroot00000000000000RPCReplay!E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917e Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestString Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfige Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestString(_G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testu fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable hello world ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ϟ hello world(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ϟ hello world(G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable1+ )type.googleapis.com/google.protobuf.Empty(E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty( go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestUpdate.replay000066400000000000000000000067551367004507500312700ustar00rootroot00000000000000RPCReplay!E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917e Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestUpdate Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfige Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testTestConformance/TestUpdate(_G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_testu fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable hello world ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable  hello world(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable  hello world(D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable  hello world(G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/UpdateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.UpdateVariableRequesty fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable goodbye world ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ʌx  goodbye world( D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable ʌx goodbye world( G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteVariableRequesth fprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-config-variable1+ )type.googleapis.com/google.protobuf.Empty( E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/runtimevar/gcpruntimeconfig/testdata/TestConformance/TestUpdateWithErrors.replay000066400000000000000000000075721367004507500333170ustar00rootroot00000000000000RPCReplay+E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateConfigRequest projects/go-cloud-test-216917o Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test$TestConformance/TestUpdateWithErrors Dtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.RuntimeConfigo Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test$TestConformance/TestUpdateWithErrors(G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/CreateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.CreateVariableRequest Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error [{"Name": "Foo", "Text": "Bar"}] ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error  [{"Name": "Foo", "Text": "Bar"}]( D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequests qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error  [{"Name": "Foo", "Text": "Bar"}]("G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/UpdateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.UpdateVariableRequest qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error invalid-json ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error   invalid-json( D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequests qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error  invalid-json( #G/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/UpdateVariable Ltype.googleapis.com/google.cloud.runtimeconfig.v1beta1.UpdateVariableRequest qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error invalid-json2 ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error ״  invalid-json2( D/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/GetVariable Itype.googleapis.com/google.cloud.runtimeconfig.v1beta1.GetVariableRequests qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error ?type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Variable qprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test/variables/test-updating-variable-to-error ״ invalid-json2( E/google.cloud.runtimeconfig.v1beta1.RuntimeConfigManager/DeleteConfig Jtype.googleapis.com/google.cloud.runtimeconfig.v1beta1.DeleteConfigRequestI Gprojects/go-cloud-test-216917/configs/go_cloud_runtimeconfigurator_test1+ )type.googleapis.com/google.protobuf.Empty(go-cloud-0.20.0/runtimevar/httpvar/000077500000000000000000000000001367004507500171755ustar00rootroot00000000000000go-cloud-0.20.0/runtimevar/httpvar/example_test.go000066400000000000000000000034041367004507500222170ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package httpvar_test import ( "context" "log" "net/http" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/httpvar" ) func ExampleOpenVariable() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Create an HTTP.Client httpClient := http.DefaultClient // Construct a *runtimevar.Variable that watches the page. v, err := httpvar.OpenVariable(httpClient, "http://example.com", runtimevar.StringDecoder, nil) if err != nil { log.Fatal(err) } defer v.Close() } func Example_openVariableFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/runtimevar/httpvar" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // runtimevar.OpenVariable creates a *runtimevar.Variable from a URL. // The default opener connects to an etcd server based on the environment // variable ETCD_SERVER_URL. v, err := runtimevar.OpenVariable(ctx, "http://myserver.com/foo.txt?decoder=string") if err != nil { log.Fatal(err) } defer v.Close() } go-cloud-0.20.0/runtimevar/httpvar/httpvar.go000066400000000000000000000175301367004507500212220ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package httpvar provides a runtimevar implementation with variables // backed by http endpoint. Use OpenVariable to construct a *runtimevar.Variable. // // URLs // // For runtimevar.OpenVariable, httpvar registers for the schemes "http" and // "https". The default URL opener will use http.DefaultClient. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // httpvar exposes the following types for As: // - Snapshot: *http.Response // - Error: httpvar.RequestError, url.Error package httpvar // import "gocloud.dev/runtimevar/httpvar" import ( "bytes" "context" "fmt" "io/ioutil" "net/http" "net/url" "time" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" ) func init() { o := &URLOpener{Client: http.DefaultClient} for _, scheme := range Schemes { runtimevar.DefaultURLMux().RegisterVariable(scheme, o) } } // Schemes are the URL schemes httpvar registers its URLOpener under on runtimevar.DefaultMux. var Schemes = []string{"http", "https"} // URLOpener opens HTTP URLs like "http://myserver.com/foo.txt". // // The full URL, including scheme, is used as the endpoint, except that the // the following URL parameters are removed if present: // - decoder: The decoder to use. Defaults to runtimevar.BytesDecoder. // See runtimevar.DecoderByName for supported values. type URLOpener struct { // The Client to use; required. Client *http.Client // Decoder specifies the decoder to use if one is not specified in the URL. // Defaults to runtimevar.BytesDecoder. Decoder *runtimevar.Decoder // Options specifies the options to pass to OpenVariable. Options Options } // OpenVariableURL opens a httpvar Variable for u. func (o *URLOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*runtimevar.Variable, error) { // Clone u because we may strip some query parameters. u2 := *u q := u2.Query() decoderName := q.Get("decoder") q.Del("decoder") decoder, err := runtimevar.DecoderByName(ctx, decoderName, o.Decoder) if err != nil { return nil, fmt.Errorf("open variable %v: invalid decoder: %v", u, err) } // See if we changed the query parameters. if rawq := q.Encode(); rawq != u.Query().Encode() { u2.RawQuery = rawq } return OpenVariable(o.Client, u2.String(), decoder, &o.Options) } // Options sets options. type Options struct { // WaitDuration controls the rate at which the HTTP endpoint is called to check for changes. // Defaults to 30 seconds. WaitDuration time.Duration } // RequestError represents an HTTP error that occurred during endpoint call. type RequestError struct { Response *http.Response } func (e *RequestError) Error() string { return fmt.Sprintf("httpvar: received status code %d", e.Response.StatusCode) } func newRequestError(response *http.Response) *RequestError { return &RequestError{Response: response} } // OpenVariable constructs a *runtimevar.Variable that uses client // to retrieve the variable contents from the URL urlStr. func OpenVariable(client *http.Client, urlStr string, decoder *runtimevar.Decoder, opts *Options) (*runtimevar.Variable, error) { endpointURL, err := url.Parse(urlStr) if err != nil { return nil, fmt.Errorf("httpvar: failed to parse url %q: %v", urlStr, err) } return runtimevar.New(newWatcher(client, endpointURL, decoder, opts)), nil } type state struct { val interface{} raw *http.Response rawBytes []byte updateTime time.Time err error } // Value implements driver.State.Value. func (s *state) Value() (interface{}, error) { return s.val, s.err } // UpdateTime implements driver.State.UpdateTime. func (s *state) UpdateTime() time.Time { return s.updateTime } // As implements driver.State.As. func (s *state) As(i interface{}) bool { if s.raw == nil { return false } p, ok := i.(**http.Response) if !ok { return false } *p = s.raw return true } // errorState returns a new State with err, unless prevS also represents // the same error, in which case it returns nil. func errorState(err error, prevS driver.State) driver.State { s := &state{err: err} if prevS == nil { return s } prev := prevS.(*state) if prev.err == nil { // New error. return s } if equivalentError(err, prev.err) { // Same error, return nil to indicate no change. return nil } return s } // equivalentError returns true if err1 and err2 represent an equivalent error; // i.e., we don't want to return it to the user as a different error. func equivalentError(err1, err2 error) bool { if err1 == err2 || err1.Error() == err2.Error() { return true } var code1, code2 int if e, ok := err1.(*RequestError); ok { code1 = e.Response.StatusCode } if e, ok := err2.(*RequestError); ok { code2 = e.Response.StatusCode } return code1 != 0 && code1 == code2 } // watcher implements driver.Watcher for configurations provided by the Runtime Configurator // service. type watcher struct { client *http.Client endpoint *url.URL decoder *runtimevar.Decoder wait time.Duration } // WatchVariable implements driver.WatchVariable. func (w *watcher) WatchVariable(ctx context.Context, prev driver.State) (driver.State, time.Duration) { resp, err := w.client.Get(w.endpoint.String()) if err != nil { return errorState(err, prev), w.wait } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { err := newRequestError(resp) return errorState(err, prev), w.wait } respBodyBytes, err := ioutil.ReadAll(resp.Body) if err != nil { return errorState(err, prev), w.wait } // When endpoint returns the same response again, we return nil as state to not trigger variable update. if prev != nil && bytes.Equal(respBodyBytes, prev.(*state).rawBytes) { return nil, w.wait } val, err := w.decoder.Decode(ctx, respBodyBytes) if err != nil { return errorState(err, prev), w.wait } return &state{ val: val, raw: resp, rawBytes: respBodyBytes, updateTime: time.Now(), }, w.wait } // Close implements driver.Close. func (w *watcher) Close() error { return nil } // ErrorAs implements driver.ErrorAs. func (w *watcher) ErrorAs(err error, i interface{}) bool { switch v := err.(type) { case *url.Error: if p, ok := i.(*url.Error); ok { *p = *v return true } case *RequestError: if p, ok := i.(*RequestError); ok { *p = *v return true } } return false } // ErrorCode implements driver.ErrorCode. func (*watcher) ErrorCode(err error) gcerrors.ErrorCode { if requestErr, ok := err.(*RequestError); ok { switch requestErr.Response.StatusCode { case http.StatusBadRequest: return gcerr.InvalidArgument case http.StatusNotFound: return gcerr.NotFound case http.StatusUnauthorized: return gcerr.PermissionDenied case http.StatusGatewayTimeout, http.StatusRequestTimeout: return gcerr.DeadlineExceeded case http.StatusInternalServerError, http.StatusServiceUnavailable, http.StatusBadGateway: return gcerr.Internal } } return gcerr.Unknown } func newWatcher(client *http.Client, endpoint *url.URL, decoder *runtimevar.Decoder, opts *Options) driver.Watcher { if opts == nil { opts = &Options{} } return &watcher{ client: client, endpoint: endpoint, decoder: decoder, wait: driver.WaitDuration(opts.WaitDuration), } } go-cloud-0.20.0/runtimevar/httpvar/httpvar_test.go000066400000000000000000000214011367004507500222510ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package httpvar import ( "context" "errors" "fmt" "net/http" "net/http/httptest" "net/url" "strconv" "strings" "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/internal/gcerr" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/driver" "gocloud.dev/runtimevar/drivertest" ) type harness struct { mockServer *mockServer } func (h *harness) MakeWatcher(ctx context.Context, name string, decoder *runtimevar.Decoder) (driver.Watcher, error) { endpointURL, err := url.Parse(h.mockServer.baseURL + "/" + name) if err != nil { return nil, err } return newWatcher(http.DefaultClient, endpointURL, decoder, nil), nil } func (h *harness) CreateVariable(ctx context.Context, name string, val []byte) error { h.mockServer.SetResponse(name, string(val)) return nil } func (h *harness) UpdateVariable(ctx context.Context, name string, val []byte) error { h.mockServer.SetResponse(name, string(val)) return nil } func (h *harness) DeleteVariable(ctx context.Context, name string) error { h.mockServer.DeleteResponse(name) return nil } func (h *harness) Close() { h.mockServer.close() } func (h *harness) Mutable() bool { return true } func newHarness(t *testing.T) (drivertest.Harness, error) { return &harness{ mockServer: newMockServer(), }, nil } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (verifyAs) Name() string { return "verify As" } func (verifyAs) SnapshotCheck(s *runtimevar.Snapshot) error { var resp *http.Response if !s.As(&resp) { return errors.New("Snapshot.As failed") } s2 := state{raw: nil} if s2.As(nil) { return errors.New("Snapshot.As was expected to fail") } return nil } func (verifyAs) ErrorCheck(v *runtimevar.Variable, err error) error { var e RequestError if !v.ErrorAs(err, &e) { return errors.New("ErrorAs expected to succeed with *httpvar.RequestError") } if !strings.Contains(e.Error(), strconv.Itoa(e.Response.StatusCode)) { return errors.New("should contain url and status code") } var e2 url.Error urlError := &url.Error{URL: "http://example.com", Op: "GET", Err: errors.New("example error")} if !v.ErrorAs(urlError, &e2) { return errors.New("ErrorAs expected to succeed with *url.Error") } var e3 RequestError if v.ErrorAs(errors.New("example error"), &e3) { return errors.New("ErrorAs was expected to fail") } return nil } // httpvar-specific tests. func TestOpenVariable(t *testing.T) { tests := []struct { URL string WantErr bool }{ {"http://example.com/config", false}, {"%gh&%ij", true}, } for _, test := range tests { v, err := OpenVariable(http.DefaultClient, test.URL, runtimevar.StringDecoder, nil) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if v != nil { v.Close() } } } func TestEquivalentError(t *testing.T) { notFoundErr := newRequestError(&http.Response{StatusCode: http.StatusNotFound}) badGatewayErr := newRequestError(&http.Response{StatusCode: http.StatusBadGateway}) tests := []struct { Err1, Err2 error Want bool }{ {Err1: errors.New("error one"), Err2: errors.New("error one"), Want: true}, {Err1: errors.New("error one"), Err2: errors.New("error two"), Want: false}, {Err1: errors.New("error one"), Err2: notFoundErr, Want: false}, {Err1: notFoundErr, Err2: notFoundErr, Want: true}, {Err1: notFoundErr, Err2: badGatewayErr, Want: false}, } for _, test := range tests { got := equivalentError(test.Err1, test.Err2) if got != test.Want { t.Errorf("%v vs %v: got %v want %v", test.Err1, test.Err2, got, test.Want) } } } func TestWatcher_ErrorCode(t *testing.T) { tests := []struct { Err *RequestError GCErr gcerr.ErrorCode }{ {Err: newRequestError(&http.Response{StatusCode: http.StatusBadRequest}), GCErr: gcerr.InvalidArgument}, {Err: newRequestError(&http.Response{StatusCode: http.StatusNotFound}), GCErr: gcerr.NotFound}, {Err: newRequestError(&http.Response{StatusCode: http.StatusUnauthorized}), GCErr: gcerr.PermissionDenied}, {Err: newRequestError(&http.Response{StatusCode: http.StatusGatewayTimeout}), GCErr: gcerr.DeadlineExceeded}, {Err: newRequestError(&http.Response{StatusCode: http.StatusRequestTimeout}), GCErr: gcerr.DeadlineExceeded}, {Err: newRequestError(&http.Response{StatusCode: http.StatusInternalServerError}), GCErr: gcerr.Internal}, {Err: newRequestError(&http.Response{StatusCode: http.StatusServiceUnavailable}), GCErr: gcerr.Internal}, {Err: newRequestError(&http.Response{StatusCode: http.StatusBadGateway}), GCErr: gcerr.Internal}, } endpointURL, err := url.Parse("http://example.com") if err != nil { t.Fatal(err) } watcher := newWatcher(http.DefaultClient, endpointURL, runtimevar.StringDecoder, nil) defer watcher.Close() for _, test := range tests { actualGCErr := watcher.ErrorCode(test.Err) if test.GCErr != actualGCErr { t.Errorf("expected gcerr.ErrorCode to be %d, got %d", test.GCErr, actualGCErr) } } } func TestWatcher_WatchVariable(t *testing.T) { t.Run("client returns an error", func(t *testing.T) { endpointURL, err := url.Parse("http://example.com") if err != nil { t.Fatal(err) } // In order to force httpClient.Get to return an error, we pass custom *http.Client // with every short timeout, so that request will timed out and return an error. httpClient := &http.Client{ Timeout: time.Duration(1 * time.Millisecond), } watcher := newWatcher(httpClient, endpointURL, runtimevar.StringDecoder, nil) defer watcher.Close() state, _ := watcher.WatchVariable(context.Background(), &state{}) val, err := state.Value() if err == nil { t.Errorf("expected error got nil") } if val != nil { t.Errorf("expected state value to be nil, got %v", val) } }) } func TestOpenVariableURL(t *testing.T) { h, err := newHarness(t) if err != nil { t.Fatal(err) } defer h.Close() baseURL := h.(*harness).mockServer.baseURL ctx := context.Background() if err := h.CreateVariable(ctx, "string-var", []byte("hello world")); err != nil { t.Fatal(err) } if err := h.CreateVariable(ctx, "json-var", []byte(`{"Foo": "Bar"}`)); err != nil { t.Fatal(err) } tests := []struct { URL string WantErr bool WantWatchErr bool Want interface{} }{ // Nonexistentvar does not exist, so we get an error from Watch. {baseURL + "/nonexistentvar", false, true, nil}, // Invalid decoder arg. {baseURL + "/string-var?decoder=notadecoder", true, false, nil}, // Working example with string decoder. {baseURL + "/string-var?decoder=string", false, false, "hello world"}, // Working example with default decoder. {baseURL + "/string-var", false, false, []byte("hello world")}, // Working example with JSON decoder. {baseURL + "/json-var?decoder=jsonmap", false, false, &map[string]interface{}{"Foo": "Bar"}}, } for _, test := range tests { t.Run(test.URL, func(t *testing.T) { v, err := runtimevar.OpenVariable(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err != nil { return } defer v.Close() snapshot, err := v.Watch(ctx) if (err != nil) != test.WantWatchErr { t.Errorf("%s: got Watch error %v, want error %v", test.URL, err, test.WantWatchErr) } if err != nil { return } if !cmp.Equal(snapshot.Value, test.Want) { t.Errorf("%s: got snapshot value\n%v\n want\n%v", test.URL, snapshot.Value, test.Want) } }) } } type mockServer struct { baseURL string close func() responses map[string]interface{} } func (m *mockServer) SetResponse(name string, response interface{}) { m.responses[name] = response } func (m *mockServer) DeleteResponse(name string) { delete(m.responses, name) } func newMockServer() *mockServer { mock := &mockServer{responses: map[string]interface{}{}} mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { resp := mock.responses[strings.TrimPrefix(r.URL.String(), "/")] if resp == nil { w.WriteHeader(http.StatusNotFound) return } fmt.Fprint(w, resp) }) server := httptest.NewServer(mux) mock.baseURL = server.URL mock.close = server.Close return mock } go-cloud-0.20.0/runtimevar/oc_test.go000066400000000000000000000027421367004507500175010ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package runtimevar_test import ( "context" "testing" "go.opencensus.io/stats/view" "gocloud.dev/internal/oc" "gocloud.dev/internal/testing/octest" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/constantvar" ) func TestOpenCensus(t *testing.T) { ctx := context.Background() te := octest.NewTestExporter(runtimevar.OpenCensusViews) defer te.Unregister() v := constantvar.New(1) defer v.Close() if _, err := v.Watch(ctx); err != nil { t.Fatal(err) } cctx, cancel := context.WithCancel(ctx) cancel() _, _ = v.Watch(cctx) seen := false const driver = "gocloud.dev/runtimevar/constantvar" for _, row := range te.Counts() { if _, ok := row.Data.(*view.CountData); !ok { continue } if row.Tags[0].Key == oc.ProviderKey && row.Tags[0].Value == driver { seen = true break } } if !seen { t.Errorf("did not see count row with provider=%s", driver) } } go-cloud-0.20.0/runtimevar/runtimevar.go000066400000000000000000000432761367004507500202440ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package runtimevar provides an easy and portable way to watch runtime // configuration variables. Subpackages contain driver implementations of // runtimevar for supported services. // // See https://gocloud.dev/howto/runtimevar/ for a detailed how-to guide. // // // OpenCensus Integration // // OpenCensus supports tracing and metric collection for multiple languages and // backend providers. See https://opencensus.io. // // This API collects an OpenCensus metric "gocloud.dev/runtimevar/value_changes", // a count of the number of times all variables have changed values, by driver. // // To enable metric collection in your application, see "Exporting stats" at // https://opencensus.io/quickstart/go/metrics. package runtimevar // import "gocloud.dev/runtimevar" import ( "bytes" "context" "encoding/gob" "encoding/json" "errors" "fmt" "net/url" "os" "reflect" "strings" "sync" "time" "go.opencensus.io/stats" "go.opencensus.io/stats/view" "go.opencensus.io/tag" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/oc" "gocloud.dev/internal/openurl" "gocloud.dev/runtimevar/driver" "gocloud.dev/secrets" ) // Snapshot contains a snapshot of a variable's value and metadata about it. // It is intended to be read-only for users. type Snapshot struct { // Value contains the value of the variable. // The type for Value depends on the decoder used when creating the Variable. Value interface{} // UpdateTime is the time when the last change was detected. UpdateTime time.Time asFunc func(interface{}) bool } // As converts i to driver-specific types. // See https://gocloud.dev/concepts/as/ for background information, the "As" // examples in this package for examples, and the driver package // documentation for the specific types supported for that driver. func (s *Snapshot) As(i interface{}) bool { if s.asFunc == nil { return false } return s.asFunc(i) } const pkgName = "gocloud.dev/runtimevar" var ( changeMeasure = stats.Int64(pkgName+"/value_changes", "Count of variable value changes", stats.UnitDimensionless) // OpenCensusViews are predefined views for OpenCensus metrics. OpenCensusViews = []*view.View{ { Name: pkgName + "/value_changes", Measure: changeMeasure, Description: "Count of variable value changes by driver.", TagKeys: []tag.Key{oc.ProviderKey}, Aggregation: view.Count(), }, } ) // Variable provides an easy and portable way to watch runtime configuration // variables. To create a Variable, use constructors found in driver subpackages. type Variable struct { dw driver.Watcher provider string // for metric collection; refers to driver package name // For cancelling the background goroutine, and noticing when it has exited. backgroundCancel context.CancelFunc backgroundDone chan struct{} // haveGoodCh is closed when we get the first good value for the variable. haveGoodCh chan struct{} // A reference to changed at the last time Watch was called. // Not protected by mu because it's only referenced in Watch, which is not // supposed to be called from multiple goroutines. lastWatch <-chan struct{} mu sync.RWMutex changed chan struct{} // closed when changing any of the other variables and replaced with a new channel last Snapshot lastErr error lastGood Snapshot } // New is intended for use by drivers only. Do not use in application code. var New = newVar // newVar creates a new *Variable based on a specific driver implementation. func newVar(w driver.Watcher) *Variable { ctx, cancel := context.WithCancel(context.Background()) changed := make(chan struct{}) v := &Variable{ dw: w, provider: oc.ProviderName(w), backgroundCancel: cancel, backgroundDone: make(chan struct{}), haveGoodCh: make(chan struct{}), changed: changed, lastWatch: changed, lastErr: gcerr.Newf(gcerr.FailedPrecondition, nil, "no value yet"), } go v.background(ctx) return v } // ErrClosed is returned from Watch when the Variable has been Closed. var ErrClosed = gcerr.Newf(gcerr.FailedPrecondition, nil, "Variable has been Closed") // Watch returns when there is a new Snapshot of the current value of the // variable. // // The first call to Watch will block while reading the variable from the // driver, and will return the resulting Snapshot or error. If an error is // returned, the returned Snapshot is a zero value and should be ignored. // Subsequent calls will block until the variable's value changes or a different // error occurs. // // Watch returns an ErrClosed error if the Variable has been closed. // // Watch should not be called on the same variable from multiple goroutines // concurrently. The typical use case is to call it in a single goroutine in a // loop. // // If the variable does not exist, Watch returns an error for which // gcerrors.Code will return gcerrors.NotFound. // // Alternatively, use Latest to retrieve the latest good value. func (c *Variable) Watch(ctx context.Context) (Snapshot, error) { // Block until there's a change since the last Watch call, signaled // by lastWatch being closed by the background goroutine. var ctxErr error select { case <-c.lastWatch: case <-ctx.Done(): ctxErr = ctx.Err() } c.mu.Lock() defer c.mu.Unlock() if c.lastErr == ErrClosed { return Snapshot{}, ErrClosed } else if ctxErr != nil { return Snapshot{}, ctxErr } c.lastWatch = c.changed return c.last, c.lastErr } func (c *Variable) background(ctx context.Context) { var curState, prevState driver.State var wait time.Duration for { select { case <-ctx.Done(): // We're shutting down; exit the goroutine. close(c.backgroundDone) return case <-time.After(wait): // Continue. } curState, wait = c.dw.WatchVariable(ctx, prevState) if curState == nil { // No change. continue } // There's something new to return! prevState = curState _ = stats.RecordWithTags(ctx, []tag.Mutator{tag.Upsert(oc.ProviderKey, c.provider)}, changeMeasure.M(1)) // Error from RecordWithTags is not possible. // Updates under the lock. c.mu.Lock() if c.lastErr == ErrClosed { close(c.backgroundDone) c.mu.Unlock() return } if val, err := curState.Value(); err == nil { // We got a good value! c.last = Snapshot{ Value: val, UpdateTime: curState.UpdateTime(), asFunc: curState.As, } c.lastErr = nil c.lastGood = c.last // Close c.haveGoodCh if it's not already closed. select { case <-c.haveGoodCh: default: close(c.haveGoodCh) } } else { // We got an error value. c.last = Snapshot{} c.lastErr = wrapError(c.dw, err) } close(c.changed) c.changed = make(chan struct{}) c.mu.Unlock() } } func (c *Variable) haveGood() bool { select { case <-c.haveGoodCh: return true default: return false } } // Latest is intended to be called per request, with the request context. // It returns the latest good Snapshot of the variable value, blocking if no // good value has ever been received. If ctx is Done, it returns the latest // error indicating why no good value is available (not the ctx.Err()). // You can pass an already-Done ctx to make Latest not block. // // Latest returns ErrClosed if the Variable has been closed. func (c *Variable) Latest(ctx context.Context) (Snapshot, error) { haveGood := c.haveGood() if !haveGood { select { case <-c.haveGoodCh: haveGood = true case <-ctx.Done(): // We don't return ctx.Err(). } } c.mu.RLock() defer c.mu.RUnlock() if haveGood && c.lastErr != ErrClosed { return c.lastGood, nil } return Snapshot{}, c.lastErr } // CheckHealth returns an error unless Latest will return a good value // without blocking. func (c *Variable) CheckHealth() error { haveGood := c.haveGood() c.mu.RLock() defer c.mu.RUnlock() if haveGood && c.lastErr != ErrClosed { return nil } return c.lastErr } // Close closes the Variable. The Variable is unusable after Close returns. func (c *Variable) Close() error { // Record that we're closing. Subsequent calls to Watch/Latest will return ErrClosed. c.mu.Lock() if c.lastErr == ErrClosed { c.mu.Unlock() return ErrClosed } c.last = Snapshot{} c.lastErr = ErrClosed // Close any remaining channels to wake up any callers that are waiting on them. close(c.changed) // If it's the first good value, close haveGoodCh so that Latest doesn't block. select { case <-c.haveGoodCh: default: close(c.haveGoodCh) } c.mu.Unlock() // Shut down the background goroutine. c.backgroundCancel() <-c.backgroundDone // Close the driver. err := c.dw.Close() return wrapError(c.dw, err) } func wrapError(w driver.Watcher, err error) error { if err == nil { return nil } if gcerr.DoNotWrap(err) { return err } return gcerr.New(w.ErrorCode(err), err, 2, "runtimevar") } // ErrorAs converts err to driver-specific types. // ErrorAs panics if i is nil or not a pointer. // ErrorAs returns false if err == nil. // See https://gocloud.dev/concepts/as/ for background information. func (c *Variable) ErrorAs(err error, i interface{}) bool { return gcerr.ErrorAs(err, i, c.dw.ErrorAs) } // VariableURLOpener represents types than can open Variables based on a URL. // The opener must not modify the URL argument. OpenVariableURL must be safe to // call from multiple goroutines. // // This interface is generally implemented by types in driver packages. type VariableURLOpener interface { OpenVariableURL(ctx context.Context, u *url.URL) (*Variable, error) } // URLMux is a URL opener multiplexer. It matches the scheme of the URLs // against a set of registered schemes and calls the opener that matches the // URL's scheme. // See https://gocloud.dev/concepts/urls/ for more information. // // The zero value is a multiplexer with no registered schemes. type URLMux struct { schemes openurl.SchemeMap } // VariableSchemes returns a sorted slice of the registered Variable schemes. func (mux *URLMux) VariableSchemes() []string { return mux.schemes.Schemes() } // ValidVariableScheme returns true iff scheme has been registered for Variables. func (mux *URLMux) ValidVariableScheme(scheme string) bool { return mux.schemes.ValidScheme(scheme) } // RegisterVariable registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterVariable panics. func (mux *URLMux) RegisterVariable(scheme string, opener VariableURLOpener) { mux.schemes.Register("runtimevar", "Variable", scheme, opener) } // OpenVariable calls OpenVariableURL with the URL parsed from urlstr. // OpenVariable is safe to call from multiple goroutines. func (mux *URLMux) OpenVariable(ctx context.Context, urlstr string) (*Variable, error) { opener, u, err := mux.schemes.FromString("Variable", urlstr) if err != nil { return nil, err } return opener.(VariableURLOpener).OpenVariableURL(ctx, u) } // OpenVariableURL dispatches the URL to the opener that is registered with the // URL's scheme. OpenVariableURL is safe to call from multiple goroutines. func (mux *URLMux) OpenVariableURL(ctx context.Context, u *url.URL) (*Variable, error) { opener, err := mux.schemes.FromURL("Variable", u) if err != nil { return nil, err } return opener.(VariableURLOpener).OpenVariableURL(ctx, u) } var defaultURLMux = new(URLMux) // DefaultURLMux returns the URLMux used by OpenVariable. // // Driver packages can use this to register their VariableURLOpener on the mux. func DefaultURLMux() *URLMux { return defaultURLMux } // OpenVariable opens the variable identified by the URL given. // See the URLOpener documentation in driver subpackages for // details on supported URL formats, and https://gocloud.dev/concepts/urls // for more information. func OpenVariable(ctx context.Context, urlstr string) (*Variable, error) { return defaultURLMux.OpenVariable(ctx, urlstr) } // Decode is a function type for unmarshaling/decoding a slice of bytes into // an arbitrary type. Decode functions are used when creating a Decoder via // NewDecoder. This package provides common Decode functions including // GobDecode and JSONDecode. type Decode func(context.Context, []byte, interface{}) error // Decoder decodes a slice of bytes into a particular Go object. // // This package provides some common Decoders that you can use directly, // including StringDecoder and BytesDecoder. You can also NewDecoder to // construct other Decoders. type Decoder struct { typ reflect.Type fn Decode } // NewDecoder returns a Decoder that uses fn to decode a slice of bytes into // an object of type obj. // // This package provides some common Decode functions, including JSONDecode // and GobDecode, which can be passed to this function to create Decoders for // JSON and gob values. func NewDecoder(obj interface{}, fn Decode) *Decoder { return &Decoder{ typ: reflect.TypeOf(obj), fn: fn, } } // Decode decodes b into a new instance of the target type. func (d *Decoder) Decode(ctx context.Context, b []byte) (interface{}, error) { nv := reflect.New(d.typ).Interface() if err := d.fn(ctx, b, nv); err != nil { return nil, err } ptr := reflect.ValueOf(nv) return ptr.Elem().Interface(), nil } var ( // StringDecoder decodes into strings. StringDecoder = NewDecoder("", StringDecode) // BytesDecoder copies the slice of bytes. BytesDecoder = NewDecoder([]byte{}, BytesDecode) ) // JSONDecode can be passed to NewDecoder when decoding JSON (https://golang.org/pkg/encoding/json/). func JSONDecode(ctx context.Context, data []byte, obj interface{}) error { return json.Unmarshal(data, obj) } // GobDecode can be passed to NewDecoder when decoding gobs (https://golang.org/pkg/encoding/gob/). func GobDecode(ctx context.Context, data []byte, obj interface{}) error { return gob.NewDecoder(bytes.NewBuffer(data)).Decode(obj) } // StringDecode decodes raw bytes b into a string. func StringDecode(ctx context.Context, b []byte, obj interface{}) error { v := obj.(*string) *v = string(b) return nil } // BytesDecode copies the slice of bytes b into obj. func BytesDecode(ctx context.Context, b []byte, obj interface{}) error { v := obj.(*[]byte) *v = b[:] return nil } // DecryptDecode returns a decode function that can be passed to NewDecoder when // decoding an encrypted message (https://godoc.org/gocloud.dev/secrets). // // post defaults to BytesDecode. An optional decoder can be passed in to do // further decode operation based on the decrypted message. func DecryptDecode(k *secrets.Keeper, post Decode) Decode { return func(ctx context.Context, b []byte, obj interface{}) error { decrypted, err := k.Decrypt(ctx, b) if err != nil { return err } if post == nil { return BytesDecode(ctx, decrypted, obj) } return post(ctx, decrypted, obj) } } // DecoderByName returns a *Decoder based on decoderName. // // It is intended to be used by URL openers in driver packages. // // Supported values include: // - empty string: Returns the default from the URLOpener.Decoder, or // BytesDecoder if URLOpener.Decoder is nil (which is true if you're // using the default URLOpener). // - "bytes": Returns a BytesDecoder; Snapshot.Value will be of type []byte. // - "jsonmap": Returns a JSON decoder for a map[string]interface{}; // Snapshot.Value will be of type *map[string]interface{}. // - "string": Returns StringDecoder; Snapshot.Value will be of type string. // It also supports using "decrypt+" (or "decrypt" for default // decoder) to decrypt the data before decoding. It uses the secrets package to // open a keeper by the URL string stored in a environment variable // "RUNTIMEVAR_KEEPER_URL". See https://godoc.org/gocloud.dev/secrets#OpenKeeper // for more details. func DecoderByName(ctx context.Context, decoderName string, dflt *Decoder) (*Decoder, error) { // Open a *secrets.Keeper if the decoderName contains "decrypt". k, decoderName, err := decryptByName(ctx, decoderName) if err != nil { return nil, err } if dflt == nil { dflt = BytesDecoder } switch decoderName { case "": return maybeDecrypt(ctx, k, dflt), nil case "bytes": return maybeDecrypt(ctx, k, BytesDecoder), nil case "jsonmap": var m map[string]interface{} return maybeDecrypt(ctx, k, NewDecoder(&m, JSONDecode)), nil case "string": return maybeDecrypt(ctx, k, StringDecoder), nil default: return nil, fmt.Errorf("unsupported decoder %q", decoderName) } } // decryptByName returns a *secrets.Keeper for decryption when decoderName // contains "decrypt". func decryptByName(ctx context.Context, decoderName string) (*secrets.Keeper, string, error) { if !strings.HasPrefix(decoderName, "decrypt") { return nil, decoderName, nil } keeperURL := os.Getenv("RUNTIMEVAR_KEEPER_URL") if keeperURL == "" { return nil, "", errors.New("environment variable RUNTIMEVAR_KEEPER_URL needed to open a *secrets.Keeper for decryption") } k, err := secrets.OpenKeeper(ctx, keeperURL) if err != nil { return nil, "", err } decoderName = strings.TrimPrefix(decoderName, "decrypt") if decoderName != "" { decoderName = strings.TrimLeftFunc(decoderName, func(r rune) bool { return r == ' ' || r == '+' }) } // The parsed value is "decrypt ". return k, decoderName, nil } func maybeDecrypt(ctx context.Context, k *secrets.Keeper, dec *Decoder) *Decoder { if k == nil { return dec } return NewDecoder(reflect.New(dec.typ).Elem().Interface(), DecryptDecode(k, dec.fn)) } go-cloud-0.20.0/runtimevar/runtimevar_test.go000066400000000000000000000431061367004507500212730ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package runtimevar contains tests that exercises the runtimevar APIs. It does not test // driver implementations. package runtimevar import ( "bytes" "context" "encoding/gob" "encoding/json" "errors" "fmt" "net/url" "reflect" "sync" "testing" "time" "github.com/google/go-cmp/cmp" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/runtimevar/driver" "gocloud.dev/secrets/localsecrets" ) // How long we wait on a call that is expected to block forever before cancelling it. const blockingCheckDelay = 25 * time.Millisecond // state implements driver.State. type state struct { val string updateTime time.Time err error } func (s *state) Value() (interface{}, error) { return s.val, s.err } func (s *state) UpdateTime() time.Time { return s.updateTime } func (s *state) As(i interface{}) bool { return false } // fakeWatcher is a fake implementation of driver.Watcher that returns a set *state. type fakeWatcher struct { driver.Watcher mu sync.Mutex state *state newval bool // true iff WatchVariable should return state } func (w *fakeWatcher) Set(s *state) { w.mu.Lock() defer w.mu.Unlock() w.state = s w.newval = true } func (w *fakeWatcher) WatchVariable(ctx context.Context, prev driver.State) (driver.State, time.Duration) { if err := ctx.Err(); err != nil { w.Set(&state{err: err}) } w.mu.Lock() defer w.mu.Unlock() if !w.newval { return nil, 1 * time.Millisecond // to avoid spinning } w.newval = false return w.state, 0 } func (*fakeWatcher) Close() error { return nil } func (*fakeWatcher) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.Internal } func TestVariable_Watch(t *testing.T) { fake := &fakeWatcher{} v := New(fake) ctx := context.Background() // Watch should block when there's no value yet. ctx2, cancel := context.WithTimeout(ctx, blockingCheckDelay) defer cancel() if _, err := v.Watch(ctx2); err == nil { t.Errorf("Watch with no value yet should block: got nil err, want err") } if ctx2.Err() == nil { t.Error("Watch with no value yet should block") } // Setting an error value makes Watch return an error. fake.Set(&state{err: errFake}) if _, err := v.Watch(ctx); err == nil { t.Fatal("Watch returned non-nil error, want error") } // But calling Watch again blocks. ctx2, cancel = context.WithTimeout(ctx, blockingCheckDelay) defer cancel() if _, err := v.Watch(ctx2); err == nil { t.Errorf("Watch called again with error value should block: got nil err, want err") } if ctx2.Err() == nil { t.Error("Watch called again with error value should block") } // Setting a different error makes Watch return again. fake.Set(&state{err: errors.New("another fake error")}) if _, err := v.Watch(ctx); err == nil { t.Fatal("Watch returned non-nil error, want error") } // Setting a value makes Watch return again. fake.Set(&state{val: "hello"}) if _, err := v.Watch(ctx); err != nil { t.Fatalf("Watch returned error %v, want nil", err) } // Make a few updates. Each of these will try to write to the nextWatchCh, // but we should only keep the latest one. fake.Set(&state{val: "hello1"}) fake.Set(&state{val: "hello2"}) fake.Set(&state{val: "hello3"}) fake.Set(&state{val: "hello4"}) fake.Set(&state{val: "hello5"}) // Wait until we're sure the last one has been received. for { snap, err := v.Latest(ctx) if err != nil { t.Errorf("got unexpected error from Latest: %v", err) } if snap.Value == "hello5" { break } } // Watch should get the last one, hello5. if snap, err := v.Watch(ctx); err != nil { t.Fatalf("Watch returned error %v, want nil", err) } else if snap.Value != "hello5" { t.Errorf("Watch got %v, want hello5", snap.Value) } // And the next call should block. ctx2, cancel = context.WithTimeout(ctx, blockingCheckDelay) defer cancel() if _, err := v.Watch(ctx2); err == nil { t.Errorf("Watch after no change in good value should block: got nil err, want err") } if ctx2.Err() == nil { t.Error("Watch after no change in good value should block") } // Ensure a blocking Watch returns when a new value arrives. // Wait blockingCheckDelay to give some time to be blocking in Watch. // There's no guarantee it will get there, but if Watch doesn't handle // cancelation properly, then the test will fail whenever it does get there, // so at least we'll observe a flaky test. time.AfterFunc(blockingCheckDelay, func() { fake.Set(&state{val: "hello6"}) }) if snap, err := v.Watch(ctx); err != nil { t.Errorf("Watch interrupted by new value returned %v, want nil", err) } else if snap.Value != "hello6" { t.Errorf("Watch got %v, want hello6", snap.Value) } // Similarly, ensure a blocking Watch is interrupted by Close. time.AfterFunc(blockingCheckDelay, func() { if err := v.Close(); err != nil { t.Error(err) } }) if _, err := v.Watch(ctx); err != ErrClosed { t.Errorf("Watch interrupted by Close returned %v, want ErrClosed", err) } // Watch should now return ErrClosed. if _, err := v.Watch(ctx); err != ErrClosed { t.Errorf("Watch after Close returned %v, want ErrClosed", err) } } func TestVariable_Latest(t *testing.T) { const content1, content2 = "foo", "bar" const numGoroutines = 10 ctx := context.Background() fake := &fakeWatcher{} v := New(fake) // Not healthy at startup. if v.CheckHealth() == nil { t.Error("got nil from CheckHealth, want error") } // Latest should block until the context is done, as there's no value. ctx2, cancel := context.WithTimeout(ctx, blockingCheckDelay) defer cancel() if _, err := v.Latest(ctx2); err == nil { t.Errorf("Latest with no value yet should block: got nil err, want err") } if ctx2.Err() == nil { t.Error("Latest with no value yet should block") } // And we're not healthy. if v.CheckHealth() == nil { t.Error("got nil from CheckHealth, want error") } // Call Latest concurrently. There's still no value. var wg sync.WaitGroup wg.Add(numGoroutines) for i := 0; i < numGoroutines; i++ { go func() { ctx2, cancel := context.WithTimeout(ctx, blockingCheckDelay) cancel() if _, err := v.Latest(ctx2); err == nil { t.Errorf("Latest with no value yet: got nil err, want err") } wg.Done() }() } wg.Wait() // Set an error value. Latest should still block. fake.Set(&state{err: errFake}) ctx2, cancel = context.WithTimeout(ctx, blockingCheckDelay) defer cancel() if _, err := v.Latest(ctx2); err == nil { t.Errorf("Latest with error value should block: got nil err, want err") } if ctx2.Err() == nil { t.Error("Latest with error value should block") } // And we're still not healthy. if v.CheckHealth() == nil { t.Error("got nil from CheckHealth, want error") } // Call Latest concurrently, only exiting each goroutine when they // see the content1 value. wg.Add(numGoroutines) for i := 0; i < numGoroutines; i++ { go func() { for { val, err := v.Latest(ctx) if err != nil { continue } if val.Value != content1 { t.Errorf("got %v want %s", val, content1) } wg.Done() return } }() } // Set a good value, after a small delay to give the goroutines a chance // to get into Latest. time.Sleep(blockingCheckDelay) fake.Set(&state{val: content1}) wg.Wait() // And now we're healthy. if err := v.CheckHealth(); err != nil { t.Errorf("got %v from CheckHealth, want nil", err) } // Set a different value. At some point after this, Latest should start // returning a Snapshot with Value set to content2. fake.Set(&state{val: content2}) // Call Latest concurrently, only exiting each goroutine when they // see the content2 value. wg.Add(numGoroutines) for i := 0; i < numGoroutines; i++ { go func() { for { val, err := v.Latest(ctx) if err != nil { // Errors are unexpected at this point. t.Error(err) } if val.Value == content1 { // Still seeing the old value. continue } if val.Value != content2 { t.Errorf("got %v want %s", val, content2) } wg.Done() return } }() } wg.Wait() // Set an error value. Latest should still return content2. fake.Set(&state{err: errFake}) // Call Latest concurrently. The test will be flaky if some of them // start getting errors. wg.Add(numGoroutines) for i := 0; i < numGoroutines; i++ { go func() { for { val, err := v.Latest(ctx) if err != nil { // Errors are unexpected at this point. t.Error(err) } else if val.Value != content2 { t.Errorf("got %v want %s", val.Value, content2) } wg.Done() return } }() } wg.Wait() // Still healthy. if err := v.CheckHealth(); err != nil { t.Errorf("got %v from CheckHealth, want nil", err) } // Close the variable. if err := v.Close(); err != nil { t.Error(err) } // Latest should now return ErrClosed. if _, err := v.Latest(ctx); err != ErrClosed { t.Errorf("Latest after close returned %v, want ErrClosed", err) } // Unhealthy now. if err := v.CheckHealth(); err != ErrClosed { t.Errorf("got %v from CheckHealth, want ErrClosed", err) } } // Tests that Latest is interrupted by Close. func TestVariable_LatestBlockedDuringClose(t *testing.T) { fake := &fakeWatcher{} v := New(fake) ctx := context.Background() // Wait blockingCheckDelay to give some time to be blocking in Latest. // There's no guarantee it will get there, but if Latest doesn't handle // cancelation properly, then the test will fail whenever it does get there, // so at least we'll observe a flaky test. time.AfterFunc(blockingCheckDelay, func() { if err := v.Close(); err != nil { t.Error(err) } }) if _, err := v.Latest(ctx); err != ErrClosed { t.Errorf("Latest interrupted by Close got %v, want ErrClosed", err) } // Calling Close again should return ErrClosed. if err := v.Close(); err != ErrClosed { t.Errorf("calling Close 2x returned %v, want ErrClosed", err) } } var errFake = errors.New("fake") // erroringWatcher implements driver.Watcher. // WatchVariable always returns a state with errFake, and Close // always returns errFake. type erroringWatcher struct { driver.Watcher } func (b *erroringWatcher) WatchVariable(ctx context.Context, prev driver.State) (driver.State, time.Duration) { return &state{err: errFake}, 0 } func (b *erroringWatcher) Close() error { return errFake } func (b *erroringWatcher) ErrorCode(err error) gcerrors.ErrorCode { return gcerrors.Internal } // TestErrorsAreWrapped tests that all errors returned from the driver are // wrapped exactly once by the portable type. func TestErrorsAreWrapped(t *testing.T) { ctx := context.Background() v := New(&erroringWatcher{}) // verifyWrap ensures that err is wrapped exactly once. verifyWrap := func(description string, err error) { if unwrapped, ok := err.(*gcerr.Error); !ok { t.Errorf("%s: not wrapped: %v", description, err) } else if du, ok := unwrapped.Unwrap().(*gcerr.Error); ok { t.Errorf("%s: double wrapped: %v", description, du) } } _, err := v.Watch(ctx) verifyWrap("Watch", err) err = v.Close() verifyWrap("Close", err) } var ( testOpenOnce sync.Once testOpenGot *url.URL ) func TestURLMux(t *testing.T) { ctx := context.Background() mux := new(URLMux) fake := &fakeOpener{} mux.RegisterVariable("foo", fake) mux.RegisterVariable("err", fake) if diff := cmp.Diff(mux.VariableSchemes(), []string{"err", "foo"}); diff != "" { t.Errorf("Schemes: %s", diff) } if !mux.ValidVariableScheme("foo") || !mux.ValidVariableScheme("err") { t.Errorf("ValidVariableScheme didn't return true for valid scheme") } if mux.ValidVariableScheme("foo2") || mux.ValidVariableScheme("http") { t.Errorf("ValidVariableScheme didn't return false for invalid scheme") } for _, tc := range []struct { name string url string wantErr bool }{ { name: "empty URL", wantErr: true, }, { name: "invalid URL", url: ":foo", wantErr: true, }, { name: "invalid URL no scheme", url: "foo", wantErr: true, }, { name: "unregistered scheme", url: "bar://myvar", wantErr: true, }, { name: "func returns error", url: "err://myvar", wantErr: true, }, { name: "no query options", url: "foo://myvar", }, { name: "empty query options", url: "foo://myvar?", }, { name: "query options", url: "foo://myvar?aAa=bBb&cCc=dDd", }, { name: "multiple query options", url: "foo://myvar?x=a&x=b&x=c", }, { name: "fancy var name", url: "foo:///foo/bar/baz", }, { name: "using api scheme prefix", url: "runtimevar+foo:///foo/bar/baz", }, { name: "using api+type scheme prefix", url: "runtimevar+variable+foo:///foo/bar/baz", }, } { t.Run(tc.name, func(t *testing.T) { _, gotErr := mux.OpenVariable(ctx, tc.url) if (gotErr != nil) != tc.wantErr { t.Fatalf("got err %v, want error %v", gotErr, tc.wantErr) } if gotErr != nil { return } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } // Repeat with OpenVariableURL. parsed, err := url.Parse(tc.url) if err != nil { t.Fatal(err) } _, gotErr = mux.OpenVariableURL(ctx, parsed) if gotErr != nil { t.Fatalf("got err %v, want nil", gotErr) } if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } }) } } type fakeOpener struct { u *url.URL // last url passed to OpenVariableURL } func (o *fakeOpener) OpenVariableURL(ctx context.Context, u *url.URL) (*Variable, error) { if u.Scheme == "err" { return nil, errors.New("fail") } o.u = u return nil, nil } func TestDecoder(t *testing.T) { type Struct struct { FieldA string FieldB map[string]interface{} } num := 4321 numptr := &num str := "boring string" strptr := &str inputs := []interface{}{ str, strptr, num, numptr, 100.1, Struct{ FieldA: "hello", FieldB: map[string]interface{}{ "hello": "world", }, }, &Struct{ FieldA: "world", }, map[string]string{ "slice": "pizza", }, &map[string]interface{}{}, []string{"hello", "world"}, &[]int{1, 0, 1}, [...]float64{3.1415}, &[...]int64{4, 5, 6}, } for _, tc := range []struct { desc string encodeFn func(interface{}) ([]byte, error) decodeFn Decode }{ { desc: "JSON", encodeFn: json.Marshal, decodeFn: JSONDecode, }, { desc: "Gob", encodeFn: gobMarshal, decodeFn: GobDecode, }, } { for i, input := range inputs { t.Run(fmt.Sprintf("%s_%d", tc.desc, i), func(t *testing.T) { decoder := NewDecoder(input, tc.decodeFn) b, err := tc.encodeFn(input) if err != nil { t.Fatalf("marshal error %v", err) } got, err := decoder.Decode(context.Background(), b) if err != nil { t.Fatalf("parse input\n%s\nerror: %v", string(b), err) } if reflect.TypeOf(got) != reflect.TypeOf(input) { t.Errorf("type mismatch got %T, want %T", got, input) } if diff := cmp.Diff(got, input); diff != "" { t.Errorf("value diff:\n%v", diff) } }) } } } func gobMarshal(v interface{}) ([]byte, error) { var buf bytes.Buffer if err := gob.NewEncoder(&buf).Encode(v); err != nil { return nil, err } return buf.Bytes(), nil } func TestStringDecoder(t *testing.T) { input := "hello world" got, err := StringDecoder.Decode(context.Background(), []byte(input)) if err != nil { t.Fatalf("error: %v", err) } if input != got.(string) { t.Errorf("output got %v, want %q", got, input) } } func TestBytesDecoder(t *testing.T) { input := []byte("hello world") got, err := BytesDecoder.Decode(context.Background(), input) if err != nil { t.Fatalf("error: %v", err) } if diff := cmp.Diff(got, input); diff != "" { t.Errorf("output got %v, want %q", got, input) } } func TestDecryptDecoder(t *testing.T) { ctx := context.Background() secretKey, err := localsecrets.NewRandomKey() if err != nil { t.Fatal(err) } keeper := localsecrets.NewKeeper(secretKey) tests := []struct { desc string in interface{} encodeFn func(interface{}) ([]byte, error) postDecFn Decode }{ { desc: "Bytes", in: []byte("hello world"), encodeFn: func(obj interface{}) ([]byte, error) { return obj.([]byte), nil }, }, { desc: "String", in: "hello world", encodeFn: func(obj interface{}) ([]byte, error) { return []byte(obj.(string)), nil }, postDecFn: StringDecode, }, { desc: "JSON", in: map[string]string{ "slice": "pizza", }, encodeFn: json.Marshal, postDecFn: JSONDecode, }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { decoder := NewDecoder(tc.in, DecryptDecode(keeper, tc.postDecFn)) b, err := tc.encodeFn(tc.in) if err != nil { t.Fatalf("encode error %v", err) } encrypted, err := keeper.Encrypt(ctx, b) if err != nil { t.Fatalf("encrypt error: %v", err) } got, err := decoder.Decode(ctx, encrypted) if err != nil { t.Fatalf("parse input\n%s\nerror: %v", string(b), err) } if reflect.TypeOf(got) != reflect.TypeOf(tc.in) { t.Errorf("type mismatch got %T, want %T", got, tc.in) } if diff := cmp.Diff(got, tc.in); diff != "" { t.Errorf("value diff:\n%v", diff) } }) } } go-cloud-0.20.0/samples/000077500000000000000000000000001367004507500147555ustar00rootroot00000000000000go-cloud-0.20.0/samples/appengine/000077500000000000000000000000001367004507500167235ustar00rootroot00000000000000go-cloud-0.20.0/samples/appengine/.gcloudignore000066400000000000000000000012611367004507500214050ustar00rootroot00000000000000# This file specifies files that are *not* uploaded to Google Cloud Platform # using gcloud. It follows the same syntax as .gitignore, with the addition of # "#!include" directives (which insert the entries of the given .gitignore-style # file at that point). # # For more information, run: # $ gcloud topic gcloudignore # .gcloudignore # If you would like to upload your .git directory, .gitignore file or files # from your .gitignore file, remove the corresponding line # below: .git .gitignore # Binaries for programs and plugins *.exe *.exe~ *.dll *.so *.dylib # Test binary, build with `go test -c` *.test # Output of the go coverage tool, specifically when used with LiteIDE *.outgo-cloud-0.20.0/samples/appengine/.vscode/000077500000000000000000000000001367004507500202645ustar00rootroot00000000000000go-cloud-0.20.0/samples/appengine/.vscode/tasks.json000066400000000000000000000005751367004507500223130ustar00rootroot00000000000000{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "Test", "type": "shell", "command": "go test ./...", "group": { "kind": "test", "isDefault": true } } ] } go-cloud-0.20.0/samples/appengine/README.md000066400000000000000000000012131367004507500201770ustar00rootroot00000000000000# AppEngine Sample This directory holds a simple "Hello world!" AppEngine app that uses [server.Server](https://github.com/google/go-cloud/blob/master/server/server.go). ## Prerequisites You will need to install the following software to run this sample: - [Go](https://golang.org/doc/install) - [gcloud CLI](https://cloud.google.com/sdk/downloads) ## Deploying Run the following in this `samples/appengine` directory: ```shell # Build the binary. go build # Deploy it to AppEngine. gcloud app deploy # Open a browser to the app. gcloud app browse ``` Try browsing to the `/healthz/readiness` page that `server.Server` adds a handler for. go-cloud-0.20.0/samples/appengine/app.yaml000066400000000000000000000000171367004507500203650ustar00rootroot00000000000000runtime: go111 go-cloud-0.20.0/samples/appengine/helloworld.go000066400000000000000000000023071367004507500214270ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // A simple "hello world" application using server.Server, to be run on // Google App Engine (GAE). package main import ( "fmt" "log" "net/http" "os" "github.com/gorilla/mux" "gocloud.dev/server" ) func main() { r := mux.NewRouter() r.HandleFunc("/", handle) port := os.Getenv("PORT") if port == "" { port = "8080" } srv := server.New(r, nil) log.Printf("Listening on port %s", port) log.Fatal(srv.ListenAndServe(fmt.Sprintf(":%s", port))) } func handle(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } fmt.Fprint(w, "Hello world!") } go-cloud-0.20.0/samples/go.mod000066400000000000000000000030271367004507500160650ustar00rootroot00000000000000// Copyright 2018-2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev/samples go 1.12 require ( contrib.go.opencensus.io/exporter/stackdriver v0.12.1 github.com/Azure/azure-pipeline-go v0.2.2 github.com/Azure/azure-storage-blob-go v0.9.0 github.com/aws/aws-sdk-go v1.31.13 github.com/go-sql-driver/mysql v1.5.0 github.com/google/go-cmdtest v0.1.0 github.com/google/go-cmp v0.4.1 github.com/google/subcommands v1.0.1 github.com/google/uuid v1.1.1 github.com/google/wire v0.4.0 github.com/gorilla/mux v1.7.2 github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71 go.opencensus.io v0.22.3 gocloud.dev v0.20.0 gocloud.dev/docstore/mongodocstore v0.20.0 gocloud.dev/pubsub/kafkapubsub v0.20.0 gocloud.dev/pubsub/natspubsub v0.20.0 gocloud.dev/pubsub/rabbitpubsub v0.20.0 gocloud.dev/runtimevar/etcdvar v0.20.0 gocloud.dev/secrets/hashivault v0.20.0 google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 ) go-cloud-0.20.0/samples/go.sum000066400000000000000000002403131367004507500161130ustar00rootroot00000000000000bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3 h1:0sMegbmn/8uTwpNkB0q9cLEpZ2W5a6kl+wtBQgPWBJQ= cloud.google.com/go v0.44.3/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.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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.2.0 h1:zrl+2VJAYC/C6WzEPnkqZIBeHyHFs/UmtzJdXU4Bvmo= cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 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/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0 h1:YsbWYxDZkC7x2OxlsDEYvvEXZ3cBI3qBgUK5BqkZvRw= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1 h1:Dll2uFfOVI3fa8UzsHyP6z0M6fEc9ZTAMo+Y3z282Xg= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4 h1:kfg5Yyy1nYUrqzyfW5XX+dzMASky8IJXhtHe0KTYNS4= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0 h1:j9tjcwhypb/jek3raNrwlCIl7iKQYOug7CLpSyBBodc= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible h1:aFlw3lP7ZHQi4m1kWCpcwYtczhDkGhDoRaMTaxcOf68= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1 h1:w9foWsHoOt1n8R0O58Co/ddrazx5vfDY0g64/6UWyuo= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7 h1:/Uyqh30J5JrDFAOERQtEqP0qPWkrNXxr94vRnSa54Ac= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0 h1:zebkZaadz7+wIQYgC7GXaz3Wb28yKYfVkkBKwc38VF8= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0 h1:15vMO4y76dehZSq7pAaOLQxC6dZYsSrj2GQpflyM/L4= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae h1:sTOp2Ajiew5XIH92YSdwhYc+bgpUX5j5TKK/Ac8Saw8= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.26.4 h1:+17TxUq/PJEAfZAll0T7XJjSgQWCpaQSoki/x5yN8o8= github.com/Shopify/sarama v1.26.4/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= 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/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.7.2 h1:2QxQoC1TS09S7fhCPsrvqYdvP1H5M1P1ih5ABm3BTYk= github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmdtest v0.1.0 h1:C8Q59LybwJuSEpl3YK55ko5DOfLT5Ykae4rNnyytQhY= github.com/google/go-cmdtest v0.1.0/go.mod h1:f6OWISNhOFSB5dtuBlUJfSZzjtCwopip5fWSXDyLRRg= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1 h1:/eqq+otEXm5vhfBrbREPCSVQbvofip6kIz+mX5TUH7k= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/gorilla/mux v1.7.2 h1:zoNxOV7WjqXptQOVngLmcSQgXmgk4NMz1HibBchjl/I= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.14.5 h1:aiLxiiVzAXb7wb3lAmubA69IokWOoUNe+E7TdGKh8yw= github.com/grpc-ecosystem/grpc-gateway v1.14.5/go.mod h1:UJ0EZAp832vCd54Wev9N1BMKEyvcZ5+IM0AwDrnlkEc= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-plugin v1.0.0/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/vault/api v1.0.2 h1:/V9fULvLwt58vme/6Rkt/p/GtlresQv+Z9E6dgdANhs= github.com/hashicorp/vault/api v1.0.2/go.mod h1:AV/+M5VPDpB90arloVX0rVDUIHkONiwz5Uza9HRtpUE= github.com/hashicorp/vault/sdk v0.1.8 h1:pfF3KwA1yPlfpmcumNsFM4uo91WMasX5gTuIkItu9r0= github.com/hashicorp/vault/sdk v0.1.8/go.mod h1:tHZfc6St71twLizWNHvnnbiGFo1aq0eD2jGPLtP8kAU= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= 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/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.8 h1:VMAMUUOh+gaxKTMk+zqbjsSjsIcUcL/LF4o63i82QyA= github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.8 h1:eLeJ3dr/Y9+XRfJT4l+8ZjmtB5RPJhucH2HeCV5+IZY= github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149 h1:HfxbT6/JcvIljmERptWhwa8XzP7H3T+Z2N26gTsaDaA= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/jwt v0.2.6 h1:eAyoYvGgGLXR2EpnsBUvi/FcFrBqN6YKFVbOoEfPN4k= github.com/nats-io/jwt v0.2.6/go.mod h1:mQxQ0uHQ9FhEVPIcTSKwx2lqZEpXWWcCgA7R6NrWvvY= github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/jwt v1.0.1 h1:71ivoESdfT2K/qDiw5YwX/3W9/dR7c+m83xiGOj/EZ4= github.com/nats-io/jwt v1.0.1/go.mod h1:n3cvmLfBfnpV4JJRN7lRYCyZnw48ksGsbThGXEk4w9M= github.com/nats-io/nats-server/v2 v2.0.0 h1:rbFV7gfUPErVdKImVMOlW8Qb1V22nlcpqup5cb9rYa8= github.com/nats-io/nats-server/v2 v2.0.0/go.mod h1:RyVdsHHvY4B6c9pWG+uRLpZ0h0XsqiuKp2XCTurP5LI= github.com/nats-io/nats.go v1.8.1 h1:6lF/f1/NN6kzUDBz6pyvQDEXO39jqXcWRLu/tKjtOUQ= github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= github.com/nats-io/nats.go v1.10.0 h1:L8qnKaofSfNFbXg0C5F71LdjPRnmQwSsA4ukmkt1TvY= github.com/nats-io/nats.go v1.10.0/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE= github.com/nats-io/nkeys v0.0.2 h1:+qM7QpgXnvDDixitZtQUBDY9w/s9mu1ghS+JIbsrx6M= github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= github.com/nats-io/nkeys v0.1.3 h1:6JrEfig+HzTH85yxzhSVbjHRJv9cn0p6n3IngIcM5/k= github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nkeys v0.2.0 h1:WXKF7diOaPU9cJdLD7nuzwasQy9vT1tBqzXZZf3AMJM= github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.4.1+incompatible h1:mFe7ttWaflA46Mhqh+jUfjp2qTbPYxLB2/OyBppH9dg= github.com/pierrec/lz4 v2.4.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3 h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 h1:dY6ETXrvDG7Sa4vE8ZQG4yqWg6UnOcbqTAahkV813vQ= github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71 h1:2MR0pKUzlP3SGgj5NYJe/zRYDwOu9ku6YHy+Iw7l5DM= github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v3.3.13+incompatible h1:jCejD5EMnlGxFvcGRyEV4VGlENZc7oPQX6o0t7n3xbw= go.etcd.io/etcd v3.3.13+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCdE= go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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/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/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180823144017-11551d06cbcc/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= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.5.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 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= 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/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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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/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/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/jcmturner/aescts.v1 v1.0.1 h1:cVVZBK2b1zY26haWB4vbBiZrfFQnfbTVrE3xZq6hrEw= gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= gopkg.in/jcmturner/dnsutils.v1 v1.0.1 h1:cIuC1OLRGZrld+16ZJvvZxVJeKPsvd5eUIvxfoN5hSM= gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= gopkg.in/jcmturner/goidentity.v3 v3.0.0 h1:1duIyWiTaYvVx3YX2CYtpJbUFd7/UuPYCfgXtQ3VTbI= gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= gopkg.in/jcmturner/gokrb5.v7 v7.5.0 h1:a9tsXlIDD9SKxotJMK3niV7rPZAJeX2aD/0yg3qlIrg= gopkg.in/jcmturner/gokrb5.v7 v7.5.0/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= gopkg.in/jcmturner/rpc.v1 v1.1.0 h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU= gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544 h1:WJH1qsOB4/zb/li+zLMn0vaAUJ5FqPv6HYLI3aQVg1k= gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544/go.mod h1:UhTeH/yXCK/KY7TX24mqPkaQ7gZeqmWd/8SSS8B3aHw= gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= go-cloud-0.20.0/samples/gocdk-blob/000077500000000000000000000000001367004507500167605ustar00rootroot00000000000000go-cloud-0.20.0/samples/gocdk-blob/blob.ct000066400000000000000000000025611367004507500202320ustar00rootroot00000000000000# Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Tests of the gocdk-blob program. # ROOTDIR_URL is a platform-specific environment variable set # in main_test.go. # Create a subdirectory so we can use fileblob. $ mkdir bucket # List an empty bucket: valid, but no output. $ gocdk-blob ls ${ROOTDIR_URL}/bucket $ fecho hello.txt hello world $ gocdk-blob upload ${ROOTDIR_URL}/bucket hw < hello.txt $ gocdk-blob ls ${ROOTDIR_URL}/bucket hw $ gocdk-blob download ${ROOTDIR_URL}/bucket hw hello world # Error downloading a bucket that doesn't exist. # For now we can't use this test case, because the output won't be the same across operating systems. #$ gocdk-blob download ${ROOTDIR_URL}/bucket noexist --> FAIL #gocdk-blob: Failed to read "noexist": blob (code=NotFound): stat ${SLASHDIR}/bucket/noexist: no such file or directory go-cloud-0.20.0/samples/gocdk-blob/main.go000066400000000000000000000131441367004507500202360ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // gocdk-blob demonstrates the use of the Go CDK blob package in a // simple command-line application. package main import ( "context" "flag" "fmt" "io" "log" "os" "github.com/google/subcommands" "gocloud.dev/blob" // Import the blob driver packages we want to be able to open. _ "gocloud.dev/blob/azureblob" _ "gocloud.dev/blob/fileblob" _ "gocloud.dev/blob/gcsblob" _ "gocloud.dev/blob/s3blob" ) const helpSuffix = ` See https://gocloud.dev/concepts/urls/ for more background on Go CDK URLs, and sub-packages under gocloud.dev/blob (https://godoc.org/gocloud.dev/blob#pkg-subdirectories) for details on the blob.Bucket URL format. ` func main() { os.Exit(run()) } func run() int { subcommands.Register(subcommands.HelpCommand(), "") subcommands.Register(&downloadCmd{}, "") subcommands.Register(&listCmd{}, "") subcommands.Register(&uploadCmd{}, "") log.SetFlags(0) log.SetPrefix("gocdk-blob: ") flag.Parse() return int(subcommands.Execute(context.Background())) } type downloadCmd struct{} func (*downloadCmd) Name() string { return "download" } func (*downloadCmd) Synopsis() string { return "Output a blob to stdout" } func (*downloadCmd) Usage() string { return `download Read the blob from and write it to stdout. Example: gocdk-blob download gs://mybucket my/gcs/file > foo.txt` + helpSuffix } func (*downloadCmd) SetFlags(_ *flag.FlagSet) {} func (*downloadCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 2 { f.Usage() return subcommands.ExitUsageError } bucketURL := f.Arg(0) blobKey := f.Arg(1) // Open a *blob.Bucket using the bucketURL. bucket, err := blob.OpenBucket(ctx, bucketURL) if err != nil { log.Printf("Failed to open bucket: %v\n", err) return subcommands.ExitFailure } defer bucket.Close() // Open a *blob.Reader for the blob at blobKey. reader, err := bucket.NewReader(ctx, blobKey, nil) if err != nil { log.Printf("Failed to read %q: %v\n", blobKey, err) return subcommands.ExitFailure } defer reader.Close() // Copy the data. _, err = io.Copy(os.Stdout, reader) if err != nil { log.Printf("Failed to copy data: %v\n", err) return subcommands.ExitFailure } return subcommands.ExitSuccess } type listCmd struct { prefix string delimiter string } func (*listCmd) Name() string { return "ls" } func (*listCmd) Synopsis() string { return "List blobs in a bucket" } func (*listCmd) Usage() string { return `ls [-p ] [d ] List the blobs in . Example: gocdk-blob ls -p "subdir/" gs://mybucket` + helpSuffix } func (cmd *listCmd) SetFlags(f *flag.FlagSet) { f.StringVar(&cmd.prefix, "p", "", "prefix to match") f.StringVar(&cmd.delimiter, "d", "/", "directory delimiter; empty string returns flattened listing") } func (cmd *listCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 1 { f.Usage() return subcommands.ExitUsageError } bucketURL := f.Arg(0) // Open a *blob.Bucket using the bucketURL. bucket, err := blob.OpenBucket(ctx, bucketURL) if err != nil { log.Printf("Failed to open bucket: %v\n", err) return subcommands.ExitFailure } defer bucket.Close() opts := blob.ListOptions{ Prefix: cmd.prefix, Delimiter: cmd.delimiter, } iter := bucket.List(&opts) for { obj, err := iter.Next(ctx) if err == io.EOF { break } if err != nil { log.Printf("Failed to list: %v", err) return subcommands.ExitFailure } fmt.Println(obj.Key) } return subcommands.ExitSuccess } type uploadCmd struct{} func (*uploadCmd) Name() string { return "upload" } func (*uploadCmd) Synopsis() string { return "Upload a blob from stdin" } func (*uploadCmd) Usage() string { return `upload Read from stdin and write to the blob in . Example: cat foo.txt | gocdk-blob upload gs://mybucket my/gcs/file` + helpSuffix } func (*uploadCmd) SetFlags(_ *flag.FlagSet) {} func (*uploadCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) (status subcommands.ExitStatus) { if f.NArg() != 2 { f.Usage() return subcommands.ExitUsageError } bucketURL := f.Arg(0) blobKey := f.Arg(1) // Open a *blob.Bucket using the bucketURL. bucket, err := blob.OpenBucket(ctx, bucketURL) if err != nil { log.Printf("Failed to open bucket: %v\n", err) return subcommands.ExitFailure } defer bucket.Close() // Open a *blob.Writer for the blob at blobKey. writer, err := bucket.NewWriter(ctx, blobKey, nil) if err != nil { log.Printf("Failed to write %q: %v\n", blobKey, err) return subcommands.ExitFailure } defer func() { if err := writer.Close(); err != nil && status == subcommands.ExitSuccess { log.Printf("closing the writer: %v", err) status = subcommands.ExitFailure } }() // Copy the data. _, err = io.Copy(writer, os.Stdin) if err != nil { log.Printf("Failed to copy data: %v\n", err) return subcommands.ExitFailure } return subcommands.ExitSuccess } go-cloud-0.20.0/samples/gocdk-blob/main_test.go000066400000000000000000000024161367004507500212750ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "flag" "os" "path/filepath" "strings" "testing" "github.com/google/go-cmdtest" ) var update = flag.Bool("update", false, "replace test file contents with output") func Test(t *testing.T) { ts, err := cmdtest.Read(".") if err != nil { t.Fatal(err) } ts.Commands["gocdk-blob"] = cmdtest.InProcessProgram("gocdk-blob", run) ts.Setup = func(rootdir string) error { // On Windows, convert "\" to "/" and add a leading "/": slashdir := filepath.ToSlash(rootdir) if os.PathSeparator != '/' && !strings.HasPrefix(slashdir, "/") { slashdir = "/" + slashdir } return os.Setenv("ROOTDIR_URL", "file://"+slashdir) } ts.Run(t, *update) } go-cloud-0.20.0/samples/gocdk-docstore/000077500000000000000000000000001367004507500176645ustar00rootroot00000000000000go-cloud-0.20.0/samples/gocdk-docstore/docstore.ct000066400000000000000000000024211367004507500220350ustar00rootroot00000000000000# Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Tests of the gocdk-doctore program. $ setenv url mem://sample-coll/ID?filename=save # Collection is initially empty. $ gocdk-docstore ls ${url} $ gocdk-docstore put -d 2019-05-01 -id first ${url} message1 Put message: first 2019-05-01: message1 $ gocdk-docstore ls -d 2019-05-01 ${url} first 2019-05-01: message1 $ gocdk-docstore put -d 2019-05-02 -id second ${url} message2 $ gocdk-docstore ls -d 2019-05-02 ${url} Put message: second 2019-05-02: message2 second 2019-05-02: message2 $ gocdk-docstore update first ${url} new-message updated: first 2019-05-01: new-message # Delete everything. $ gocdk-docstore delete ${url} # Collection is empty again. $ gocdk-docstore ls ${url} go-cloud-0.20.0/samples/gocdk-docstore/main.go000066400000000000000000000171151367004507500211440ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // gocdk-docstore demonstrates the use of the Go CDK docstore package in a // simple command-line application. package main import ( "context" "flag" "fmt" "io" "os" "time" "github.com/google/subcommands" "github.com/google/uuid" "gocloud.dev/docstore" // Import the docstore driver packages we want to be able to open. _ "gocloud.dev/docstore/awsdynamodb" _ "gocloud.dev/docstore/gcpfirestore" _ "gocloud.dev/docstore/memdocstore" _ "gocloud.dev/docstore/mongodocstore" ) const helpSuffix = ` See https://gocloud.dev/concepts/urls/ for more background on Go CDK URLs, and sub-packages under gocloud.dev/docstore (https://godoc.org/gocloud.dev/docstore#pkg-subdirectories) for details on the docstore.Collection URL format. ` func main() { os.Exit(run()) } func run() int { subcommands.Register(subcommands.HelpCommand(), "") subcommands.Register(&listCmd{}, "") subcommands.Register(&putCmd{}, "") subcommands.Register(&updateCmd{}, "") subcommands.Register(&deleteCmd{}, "") flag.Parse() return int(subcommands.Execute(context.Background())) } // A Message is a document entry stored in a collection. type Message struct { ID string // unique ID of each document Date string Content string DocstoreRevision interface{} } func (m Message) String() string { return fmt.Sprintf("%s %s: %s", m.ID, m.Date, m.Content) } type listCmd struct { date string } func (*listCmd) Name() string { return "ls" } func (*listCmd) Synopsis() string { return "List items in a collection" } func (*listCmd) Usage() string { return `ls [-d ] List the documents in . Example: gocdk-docstore ls -d "2006-01-02" "mongo://myDB/myCollection?id_field=ID"` + helpSuffix } func (cmd *listCmd) SetFlags(f *flag.FlagSet) { f.StringVar(&cmd.date, "d", "", "get the messages from this date, in the format YYYY-MM-DD") } func (cmd *listCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 1 { f.Usage() return subcommands.ExitUsageError } collectionURL := f.Arg(0) // Open a *docstore.Collection using the collectionURL. collection, err := docstore.OpenCollection(ctx, collectionURL) if err != nil { fmt.Fprintf(os.Stderr, "Failed to open collection: %v\n", err) return subcommands.ExitFailure } defer collection.Close() q := collection.Query() if cmd.date != "" { q = q.Where("Date", "=", cmd.date) } iter := q.Get(ctx) defer iter.Stop() for { var msg Message err := iter.Next(ctx, &msg) if err == io.EOF { break } if err != nil { fmt.Fprintf(os.Stderr, "Failed to list: %v\n", err) return subcommands.ExitFailure } fmt.Println(msg) } return subcommands.ExitSuccess } type putCmd struct { id string // user-chosen ID date string // user-chosen date } func (*putCmd) Name() string { return "put" } func (*putCmd) Synopsis() string { return "Put an item from stdin" } func (*putCmd) Usage() string { return `put [-id ] [-d ] Read from stdin and put an message with the current timestamp in . Example: gocdk-docstore put "mongo://myDB/myCollection?id_field=ID" "hello docstore"` + helpSuffix } func (p *putCmd) SetFlags(f *flag.FlagSet) { f.StringVar(&p.id, "id", "", "ID of document") f.StringVar(&p.date, "d", "", "date of document") } func (p *putCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 2 { f.Usage() return subcommands.ExitUsageError } collectionURL := f.Arg(0) content := f.Arg(1) // Open a *docstore.Collection using the collectionURL. collection, err := docstore.OpenCollection(ctx, collectionURL) if err != nil { fmt.Fprintf(os.Stderr, "Failed to open collection: %v\n", err) return subcommands.ExitFailure } defer collection.Close() if p.id == "" { p.id = uuid.New().String() } if p.date == "" { p.date = time.Now().Format("2006-01-02") } msg := &Message{ ID: p.id, Date: p.date, Content: content, } if err := collection.Put(ctx, msg); err != nil { fmt.Fprintf(os.Stderr, "Failed to put message: %v\n", err) return subcommands.ExitFailure } fmt.Printf("Put message: %s\n", msg) return subcommands.ExitSuccess } type updateCmd struct{} func (*updateCmd) Name() string { return "update" } func (*updateCmd) Synopsis() string { return "Update an item in a collection" } func (*updateCmd) Usage() string { return `update Update the document with ID in . Example: gocdk-docstore update "mongo://myDB/myCollection?id_field=ID" "hello again"` + helpSuffix } func (*updateCmd) SetFlags(_ *flag.FlagSet) {} func (cmd *updateCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 3 { f.Usage() return subcommands.ExitUsageError } id := f.Arg(0) collectionURL := f.Arg(1) updated := f.Arg(2) // Open a *docstore.Collection using the collectionURL. collection, err := docstore.OpenCollection(ctx, collectionURL) if err != nil { fmt.Fprintf(os.Stderr, "Failed to open collection: %v\n", err) return subcommands.ExitFailure } defer collection.Close() msg := &Message{ID: id} mods := docstore.Mods{"Content": updated} if errs := collection.Actions().Update(msg, mods).Get(msg).Do(ctx); errs != nil { fmt.Fprintf(os.Stderr, "Failed to update message: %v\n", errs) return subcommands.ExitFailure } fmt.Printf("updated: %s\n", msg) return subcommands.ExitSuccess } type deleteCmd struct { date string } func (*deleteCmd) Name() string { return "delete" } func (*deleteCmd) Synopsis() string { return "Delete items in a collection" } func (*deleteCmd) Usage() string { return `delete [-d ] Delete the documents in . Example: gocdk-docstore delete -d 2006-01-02 mongo://myDB/myCollection?id_field=ID` + helpSuffix } func (cmd *deleteCmd) SetFlags(f *flag.FlagSet) { f.StringVar(&cmd.date, "d", "", "delete the messages from this date, in the format YYYY-MM-DD") } func (cmd *deleteCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 1 { f.Usage() return subcommands.ExitUsageError } collectionURL := f.Arg(0) // Open a *docstore.Collection using the collectionURL. collection, err := docstore.OpenCollection(ctx, collectionURL) if err != nil { fmt.Fprintf(os.Stderr, "Failed to open collection: %v\n", err) return subcommands.ExitFailure } defer collection.Close() q := collection.Query() if cmd.date != "" { q = q.Where("Date", "=", cmd.date) } iter := q.Get(ctx, "ID") dels := collection.Actions() for { var msg Message err := iter.Next(ctx, &msg) if err == io.EOF { break } if err != nil { return subcommands.ExitFailure } dels.Delete(&msg) } if err := dels.Do(ctx); err != nil { fmt.Fprintf(os.Stderr, "Failed to delete: %v\n", err) return subcommands.ExitFailure } return subcommands.ExitSuccess } go-cloud-0.20.0/samples/gocdk-docstore/main_test.go000066400000000000000000000017121367004507500221770ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "flag" "testing" "github.com/google/go-cmdtest" ) var update = flag.Bool("update", false, "replace test file contents with output") func Test(t *testing.T) { ts, err := cmdtest.Read(".") if err != nil { t.Fatal(err) } ts.Commands["gocdk-docstore"] = cmdtest.InProcessProgram("gocdk-docstore", run) ts.Run(t, *update) } go-cloud-0.20.0/samples/gocdk-pubsub/000077500000000000000000000000001367004507500173425ustar00rootroot00000000000000go-cloud-0.20.0/samples/gocdk-pubsub/main.go000066400000000000000000000104331367004507500206160ustar00rootroot00000000000000// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // gocdk-pubsub demonstrates the use of the Go CDK pubsub package in a // simple command-line application. package main import ( "bufio" "context" "flag" "fmt" "log" "os" "github.com/google/subcommands" "gocloud.dev/pubsub" // Import the pubsub driver packages we want to be able to open. _ "gocloud.dev/pubsub/awssnssqs" _ "gocloud.dev/pubsub/azuresb" _ "gocloud.dev/pubsub/gcppubsub" _ "gocloud.dev/pubsub/kafkapubsub" _ "gocloud.dev/pubsub/natspubsub" _ "gocloud.dev/pubsub/rabbitpubsub" ) const helpSuffix = ` See https://gocloud.dev/concepts/urls/ for more background on Go CDK URLs, and sub-packages under gocloud.dev/pubsub (https://godoc.org/gocloud.dev/pubsub#pkg-subdirectories) for details on the topic/subscription URL format. ` func main() { os.Exit(run()) } func run() int { subcommands.Register(subcommands.HelpCommand(), "") subcommands.Register(&pubCmd{}, "") subcommands.Register(&subCmd{}, "") log.SetFlags(0) log.SetPrefix("gocdk-pubsub: ") flag.Parse() return int(subcommands.Execute(context.Background())) } type pubCmd struct{} func (*pubCmd) Name() string { return "pub" } func (*pubCmd) Synopsis() string { return "Publish a message to a topic" } func (*pubCmd) Usage() string { return `pub Read messages from stdin, one per line and send them to . Example: gocdk-pubsub pub gcppubsub://myproject/mytopic` + helpSuffix } func (*pubCmd) SetFlags(_ *flag.FlagSet) {} func (*pubCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 1 { f.Usage() return subcommands.ExitUsageError } topicURL := f.Arg(0) // Open a *pubsub.Topic using the URL. topic, err := pubsub.OpenTopic(ctx, topicURL) if err != nil { log.Print(err) return subcommands.ExitFailure } defer topic.Shutdown(ctx) // Read lines from stdin and send them as messages to the topic. fmt.Fprintf(os.Stderr, "Enter messages, one per line, to be published to %q.\n", topicURL) scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { line := scanner.Text() if line == "" { log.Print("Skipping empty message.") continue } m := &pubsub.Message{Body: []byte(line)} if err := topic.Send(ctx, m); err != nil { log.Print(err) return subcommands.ExitFailure } } if err := scanner.Err(); err != nil { log.Print(err) return subcommands.ExitFailure } return subcommands.ExitSuccess } type subCmd struct { n int // number of messages to receive, or 0 for infinite } func (*subCmd) Name() string { return "sub" } func (*subCmd) Synopsis() string { return "Receive messages from a subscription" } func (*subCmd) Usage() string { return `sub [-n N] Receive messages from and send them to stdout, one per line. Example: gocdk-pubsub sub gcppubsub://myproject/mytopic` + helpSuffix } func (cmd *subCmd) SetFlags(f *flag.FlagSet) { f.IntVar(&cmd.n, "n", 0, "number of messages to receive, or 0 for unlimited") } func (cmd *subCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 1 { f.Usage() return subcommands.ExitUsageError } subURL := f.Arg(0) // Open a *pubsub.Subscription using the URL. sub, err := pubsub.OpenSubscription(ctx, subURL) if err != nil { log.Print(err) return subcommands.ExitFailure } defer sub.Shutdown(ctx) // Receive messages from the subscription and print them to stdout. fmt.Printf("Receiving messages from %q...\n", subURL) for i := 0; cmd.n == 0 || i < cmd.n; i++ { m, err := sub.Receive(ctx) if err != nil { log.Print(err) return subcommands.ExitFailure } fmt.Printf("%s\n", m.Body) m.Ack() } return subcommands.ExitSuccess } go-cloud-0.20.0/samples/gocdk-pubsub/main_test.go000066400000000000000000000043601367004507500216570ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "flag" "os" "testing" "github.com/google/go-cmdtest" "github.com/streadway/amqp" "gocloud.dev/internal/testing/setup" ) // Requires rabbit to be running. Run pubsub/rabbitpubsub/localrabbit.sh. var update = flag.Bool("update", false, "replace test file contents with output") func Test(t *testing.T) { if !setup.HasDockerTestEnvironment() { t.Skip("do not have docker test environment") } ts, err := cmdtest.Read(".") if err != nil { t.Fatal(err) } os.Setenv("RABBIT_SERVER_URL", rabbitURL) if err := initRabbit(); err != nil { t.Fatal(err) } ts.Commands["gocdk-pubsub"] = cmdtest.InProcessProgram("gocdk-pubsub", run) ts.Run(t, *update) } const ( rabbitURL = "amqp://guest:guest@localhost:5672/" // These names must match the URLs in the pubsub.ct file. topicName = "sample-topic" subscriptionName = "sample-subscription" ) // Set up a topic and subscription. func initRabbit() error { conn, err := amqp.Dial(rabbitURL) if err != nil { return err } defer conn.Close() ch, err := conn.Channel() if err != nil { return err } defer ch.Close() if err := ch.Confirm(false); err != nil { return err } err = ch.ExchangeDeclare(topicName, "fanout", // kind false, // durable false, // delete when unused false, // internal false, // wait for server response nil) // args if err != nil { return err } q, err := ch.QueueDeclare(subscriptionName, false, // durable false, // delete when unused false, // exclusive false, // wait for server response nil) // args if err != nil { return err } return ch.QueueBind(q.Name, q.Name, topicName, false, nil) } go-cloud-0.20.0/samples/gocdk-pubsub/pubsub.ct000066400000000000000000000016401367004507500211730ustar00rootroot00000000000000# Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Tests of the gocdk-pubsub program. $ fecho msg this is the message $ gocdk-pubsub pub rabbit://sample-topic < msg Enter messages, one per line, to be published to "rabbit://sample-topic". $ gocdk-pubsub sub -n 1 rabbit://sample-subscription Receiving messages from "rabbit://sample-subscription"... this is the message go-cloud-0.20.0/samples/gocdk-runtimevar/000077500000000000000000000000001367004507500202365ustar00rootroot00000000000000go-cloud-0.20.0/samples/gocdk-runtimevar/main.go000066400000000000000000000102451367004507500215130ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // gocdk-runtimevar demonstrates the use of the Go CDK runtimevar package in a // simple command-line application. package main import ( "context" "flag" "fmt" "log" "os" "time" "github.com/google/subcommands" "gocloud.dev/runtimevar" // Import the runtimevar driver packages we want to be able to open. _ "gocloud.dev/runtimevar/awsparamstore" _ "gocloud.dev/runtimevar/blobvar" _ "gocloud.dev/runtimevar/constantvar" _ "gocloud.dev/runtimevar/etcdvar" _ "gocloud.dev/runtimevar/filevar" _ "gocloud.dev/runtimevar/gcpruntimeconfig" _ "gocloud.dev/runtimevar/httpvar" ) const helpSuffix = ` See https://gocloud.dev/concepts/urls/ for more background on Go CDK URLs, and sub-packages under gocloud.dev/runtimevar (https://godoc.org/gocloud.dev/runtimevar#pkg-subdirectories) for details on the runtimevar.Variable URL format. ` func main() { os.Exit(run(context.Background())) } func run(ctx context.Context) int { subcommands.Register(subcommands.HelpCommand(), "") subcommands.Register(&catCmd{}, "") subcommands.Register(&watchCmd{}, "") log.SetFlags(0) log.SetPrefix("gocdk-runtimevar: ") flag.Parse() return int(subcommands.Execute(ctx)) } type catCmd struct{} func (*catCmd) Name() string { return "cat" } func (*catCmd) Synopsis() string { return "Print a variable's value to stdout" } func (*catCmd) Usage() string { return `cat Read the current value of the variable from and print it to stdout. Example: gocdk-runtimevar cat "constant://?val=foo&decoder=string"` + helpSuffix } func (*catCmd) SetFlags(_ *flag.FlagSet) {} func (*catCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 1 { f.Usage() return subcommands.ExitUsageError } variableURL := f.Arg(0) // Open a *runtimevar.Variable using the variableURL. variable, err := runtimevar.OpenVariable(ctx, variableURL) if err != nil { log.Printf("Failed to open variable: %v\n", err) return subcommands.ExitFailure } defer variable.Close() snapshot, err := variable.Latest(ctx) if err != nil { log.Printf("Failed to read variable value: %v\n", err) return subcommands.ExitFailure } fmt.Printf("(%T) %v\n", snapshot.Value, snapshot.Value) return subcommands.ExitSuccess } type watchCmd struct{} func (*watchCmd) Name() string { return "watch" } func (*watchCmd) Synopsis() string { return "Watch a variable's value and print changes to stdout" } func (*watchCmd) Usage() string { return `watch Read the value of the variable from and print changes to stdout. Example: gocdk-runtimevar watch "constant://?val=foo&decoder=string"` + helpSuffix } func (*watchCmd) SetFlags(_ *flag.FlagSet) {} func (*watchCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 1 { f.Usage() return subcommands.ExitUsageError } variableURL := f.Arg(0) // Open a *runtimevar.Variable using the variableURL. variable, err := runtimevar.OpenVariable(ctx, variableURL) if err != nil { log.Printf("Failed to open variable: %v\n", err) return subcommands.ExitFailure } defer variable.Close() fmt.Fprintf(os.Stderr, "Watching %s for changes...\n\n", variableURL) time.Sleep(250 * time.Millisecond) // to ensure deterministic combined output for test for { snapshot, err := variable.Watch(ctx) if err != nil { if err == context.Canceled { return subcommands.ExitSuccess } fmt.Printf("(error) %v\n", err) continue } fmt.Printf("(%T) %[1]v\n", snapshot.Value) } return subcommands.ExitSuccess } go-cloud-0.20.0/samples/gocdk-runtimevar/main_test.go000066400000000000000000000021431367004507500225500ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "flag" "testing" "github.com/google/go-cmdtest" ) var update = flag.Bool("update", false, "replace test file contents with output") func Test(t *testing.T) { ts, err := cmdtest.Read(".") if err != nil { t.Fatal(err) } type result struct { out []byte err error } ctx := context.Background() runtimevar := cmdtest.InProcessProgram("gocdk-runtimevar", func() int { return run(ctx) }) ts.Commands["gocdk-runtimevar"] = runtimevar ts.Run(t, *update) } go-cloud-0.20.0/samples/gocdk-runtimevar/runtimevar.ct000066400000000000000000000014631367004507500227660ustar00rootroot00000000000000# Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Tests of the gocdk-runtimevar program. $ gocdk-runtimevar cat constant://?val=foo&decoder=string (string) foo $ fecho fvar contents $ gocdk-runtimevar cat file:///${ROOTDIR}/fvar?decoder=string (string) contents go-cloud-0.20.0/samples/gocdk-secrets/000077500000000000000000000000001367004507500175125ustar00rootroot00000000000000go-cloud-0.20.0/samples/gocdk-secrets/main.go000066400000000000000000000120601367004507500207640ustar00rootroot00000000000000// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // gocdk-secrets demonstrates the use of the Go CDK secrets package in a // simple command-line application. package main import ( "context" "encoding/base64" "flag" "fmt" "log" "os" "github.com/google/subcommands" "gocloud.dev/secrets" // Import the secrets driver packages we want to be able to open. _ "gocloud.dev/secrets/awskms" _ "gocloud.dev/secrets/azurekeyvault" _ "gocloud.dev/secrets/gcpkms" _ "gocloud.dev/secrets/hashivault" _ "gocloud.dev/secrets/localsecrets" ) const helpSuffix = ` See https://gocloud.dev/concepts/urls/ for more background on Go CDK URLs, and sub-packages under gocloud.dev/secrets (https://godoc.org/gocloud.dev/secrets#pkg-subdirectories) for details on the secrets.Keeper URL format. ` func main() { os.Exit(run()) } func run() int { subcommands.Register(subcommands.HelpCommand(), "") subcommands.Register(&decryptCmd{}, "") subcommands.Register(&encryptCmd{}, "") log.SetFlags(0) log.SetPrefix("gocdk-secrets: ") flag.Parse() return int(subcommands.Execute(context.Background())) } type decryptCmd struct { base64in bool base64out bool } func (*decryptCmd) Name() string { return "decrypt" } func (*decryptCmd) Synopsis() string { return "Decrypt data" } func (*decryptCmd) Usage() string { return `decrypt [-base64in] [-base64out] Decrypt the ciphertext using and print the result to stdout. Example: gocdk-secrets decrypt stringkey://mykey nzam9AJHqH1sqeEr1ZLMbWOf4pp5NRHKYBx/h8loARL83+CBc0WPh8dYzHfccQYFUQ==` + helpSuffix } func (cmd *decryptCmd) SetFlags(f *flag.FlagSet) { f.BoolVar(&cmd.base64in, "base64in", true, "the ciphertext is base64 encoded") f.BoolVar(&cmd.base64out, "base64out", false, "the resulting plaintext should be base64 encoded before printing it out") } func (cmd *decryptCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 2 { f.Usage() return subcommands.ExitUsageError } keeperURL := f.Arg(0) ciphertext := f.Arg(1) cipher := []byte(ciphertext) if cmd.base64in { var err error cipher, err = base64.StdEncoding.DecodeString(ciphertext) if err != nil { log.Printf("Failed to base64 decode ciphertext: %v\n", err) return subcommands.ExitFailure } } // Open a *secrets.Keeper using the keeperURL. keeper, err := secrets.OpenKeeper(ctx, keeperURL) if err != nil { log.Printf("Failed to open keeper: %v\n", err) return subcommands.ExitFailure } defer keeper.Close() plain, err := keeper.Decrypt(ctx, cipher) if err != nil { log.Printf("Failed to decrypt: %v\n", err) return subcommands.ExitFailure } plaintext := string(plain) if cmd.base64out { plaintext = base64.StdEncoding.EncodeToString(plain) } fmt.Println(plaintext) return subcommands.ExitSuccess } type encryptCmd struct { base64in bool base64out bool } func (*encryptCmd) Name() string { return "encrypt" } func (*encryptCmd) Synopsis() string { return "Encrypt data" } func (*encryptCmd) Usage() string { return `encrypt [-base64in] [-base64out] Encrypt the plaintext using <keeper URL> and print the result to stdout. Example: gocdk-secrets encrypt --base64out stringkey://mykey my-plaintext` + helpSuffix } func (cmd *encryptCmd) SetFlags(f *flag.FlagSet) { f.BoolVar(&cmd.base64in, "base64in", false, "the plaintext is base64-encoded") f.BoolVar(&cmd.base64out, "base64out", true, "the resulting ciphertext should be base64-encoded before printing it out") } func (cmd *encryptCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { if f.NArg() != 2 { f.Usage() return subcommands.ExitUsageError } keeperURL := f.Arg(0) plaintext := f.Arg(1) plain := []byte(plaintext) if cmd.base64in { var err error plain, err = base64.StdEncoding.DecodeString(plaintext) if err != nil { log.Printf("Failed to base64 decode plaintext: %v\n", err) return subcommands.ExitFailure } } // Open a *secrets.Keeper using the keeperURL. keeper, err := secrets.OpenKeeper(ctx, keeperURL) if err != nil { log.Printf("Failed to open keeper: %v\n", err) return subcommands.ExitFailure } defer keeper.Close() cipher, err := keeper.Encrypt(ctx, plain) if err != nil { log.Printf("Failed to encrypt: %v\n", err) return subcommands.ExitFailure } ciphertext := string(cipher) if cmd.base64out { ciphertext = base64.StdEncoding.EncodeToString(cipher) } fmt.Println(ciphertext) return subcommands.ExitSuccess } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/gocdk-secrets/main_test.go��������������������������������������������������0000664�0000000�0000000�00000001710�13670045075�0022023�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "flag" "testing" "github.com/google/go-cmdtest" ) var update = flag.Bool("update", false, "replace test file contents with output") func Test(t *testing.T) { ts, err := cmdtest.Read(".") if err != nil { t.Fatal(err) } ts.Commands["gocdk-secrets"] = cmdtest.InProcessProgram("gocdk-secrets", run) ts.Run(t, *update) } ��������������������������������������������������������go-cloud-0.20.0/samples/gocdk-secrets/secrets.ct����������������������������������������������������0000664�0000000�0000000�00000001556�13670045075�0021521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Tests of the gocdk-secrets program. # We can't test encrypt because its output is nondeterministic. $ gocdk-secrets decrypt -base64in base64key://smGbjm71Nxd1Ig5FS0wj9SlbzAIrnolCz9bQQ6uAhl4= vnO4Lab8WxdGAklhKUAm+OkmM4mD4aRe9+Uo3iU/sBKMsf2txirq3Gg/MIYaOCRQLw== my-secret ��������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016757�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/README.md���������������������������������������������������������0000664�0000000�0000000�00000001345�13670045075�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Guestbook Sample Guestbook is a sample application that records visitors' messages, displays a cloud banner, and an administrative message. The main business logic is written in a cloud-agnostic manner using MySQL, the generic blob API, and the generic runtimevar API. All platform-specific code is set up by [Wire](https://github.com/google/wire). The [online tutorial](https://gocloud.dev/tutorials/guestbook) will walk you through how to build, run, and deploy this sample locally, on Google Cloud Platform (GCP), on Amazon Web Servicess (AWS), or on Microsoft Azure. ## Gophers The Go gopher was designed by Renee French and used under the [Creative Commons 3.0 Attributions](https://creativecommons.org/licenses/by/3.0/) license. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/aws/��������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017551�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/aws/main.tf�������������������������������������������������������0000664�0000000�0000000�00000012176�13670045075�0021037�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. terraform { required_version = "~>0.12" } provider "aws" { version = "~> 2.7" region = var.region } provider "random" { version = "~> 2.1" } # Firewalls resource "aws_security_group" "guestbook" { name_prefix = "guestbook" description = "Sandbox for the Guestbook Go CDK sample app." ingress { from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] description = "Public SSH access" } ingress { from_port = 8080 to_port = 8080 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] description = "Public HTTP access" } ingress { from_port = 3306 to_port = 3306 protocol = "tcp" self = true description = "MySQL within group" } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] description = "All outgoing traffic allowed" } } # SQL Database (RDS) resource "random_string" "db_password" { special = false length = 20 } resource "aws_db_instance" "guestbook" { identifier_prefix = "guestbook" engine = "mysql" engine_version = "5.6.39" instance_class = "db.t2.micro" allocated_storage = 20 username = "root" password = random_string.db_password.result name = "guestbook" publicly_accessible = true vpc_security_group_ids = [aws_security_group.guestbook.id] skip_final_snapshot = true provisioner "local-exec" { # TODO(light): Reuse credentials from Terraform. command = "go run '${path.module}'/provision_db/main.go -host='${aws_db_instance.guestbook.address}' -region='${var.region}' -security_group='${aws_security_group.guestbook.id}' -database=guestbook -password='${random_string.db_password.result}' -schema='${path.module}'/../schema.sql" } } # Blob Storage (S3) resource "aws_s3_bucket" "guestbook" { bucket_prefix = "guestbook" } resource "aws_s3_bucket_object" "aws" { bucket = aws_s3_bucket.guestbook.bucket key = "aws.png" content_type = "image/png" source = "${path.module}/../blobs/aws.png" } resource "aws_s3_bucket_object" "gcp" { bucket = aws_s3_bucket.guestbook.bucket key = "gcp.png" content_type = "image/png" source = "${path.module}/../blobs/gcp.png" } resource "aws_s3_bucket_object" "gophers" { bucket = aws_s3_bucket.guestbook.bucket key = "gophers.jpg" content_type = "image/jpeg" source = "${path.module}/../blobs/gophers.jpg" } # Paramstore (SSM) resource "aws_ssm_parameter" "motd" { name = var.paramstore_var type = "String" value = "ohai from AWS" overwrite = "true" } # Compute (EC2) resource "aws_iam_role" "guestbook" { name_prefix = "guestbook" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } } EOF } resource "aws_iam_role_policy" "guestbook" { name_prefix = "Guestbook-Policy" role = aws_iam_role.guestbook.id policy = <<EOF { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "s3:GetObject", "ssm:DescribeParameters", "ssm:GetParameter", "ssm:GetParameters", "xray:PutTraceSegments", "xray:PutTelemetryRecords" ], "Resource": "*" } } EOF } resource "aws_iam_instance_profile" "guestbook" { name_prefix = "guestbook" role = aws_iam_role.guestbook.name } data "aws_ami" "debian" { most_recent = true filter { name = "product-code" values = ["55q52qvgjfpdj2fpfy9mb1lo4"] } filter { name = "product-code.type" values = ["marketplace"] } filter { name = "architecture" values = ["x86_64"] } owners = ["679593333241"] } resource "aws_key_pair" "guestbook" { key_name_prefix = "guestbook" public_key = var.ssh_public_key } resource "aws_instance" "guestbook" { ami = data.aws_ami.debian.id instance_type = "t2.micro" vpc_security_group_ids = [aws_security_group.guestbook.id] iam_instance_profile = aws_iam_instance_profile.guestbook.id key_name = aws_key_pair.guestbook.key_name connection { host = coalesce(self.public_ip, self.private_ip) type = "ssh" user = "admin" } provisioner "file" { source = "${path.module}/../guestbook" destination = "/home/admin/guestbook" } provisioner "remote-exec" { inline = ["chmod +x /home/admin/guestbook"] } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/aws/outputs.tf����������������������������������������������������0000664�0000000�0000000�00000002611�13670045075�0021627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. output "region" { value = var.region description = "Region the resources were created in." } output "bucket" { value = aws_s3_bucket.guestbook.id description = "Name of the S3 bucket created to store images." } output "database_host" { value = aws_db_instance.guestbook.address description = "Host name of the RDS MySQL database." } output "database_root_password" { value = random_string.db_password.result sensitive = true description = "Password for the root user of the RDS MySQL databse." } output "paramstore_var" { value = var.paramstore_var description = "Location of the SSM Parameter Store Message of the Day variable." } output "instance_host" { value = aws_instance.guestbook.public_ip description = "Address of the EC2 instance." } �����������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/aws/provision_db/�������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0022246�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/aws/provision_db/main.go������������������������������������������0000664�0000000�0000000�00000010524�13670045075�0023523�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // The provision_db program connects to an RDS database and initializes it with // SQL from stdin. It is intended to be invoked from Terraform. package main import ( "flag" "fmt" "io" "io/ioutil" "log" "net/http" "os" "os/exec" "path/filepath" "strings" ) func main() { log.SetFlags(0) log.SetPrefix("aws/provision_db: ") host := flag.String("host", "", "hostname of database") region := flag.String("region", "", "AWS region") securityGroup := flag.String("security_group", "", "database security group") database := flag.String("database", "", "name of database to provision") password := flag.String("password", "", "root password on database") schema := flag.String("schema", "", "path to .sql file defining the database schema") flag.Parse() missing := false flag.VisitAll(func(f *flag.Flag) { if f.Value.String() == "" { log.Printf("Required flag -%s not set.", f.Name) missing = true } }) if missing { os.Exit(64) } if err := provisionDb(*host, *region, *securityGroup, *database, *password, *schema); err != nil { log.Fatal(err) } } func provisionDb(dbHost, region, securityGroupID, dbName, dbPassword, schemaPath string) error { const mySQLImage = "mysql:5.6" // Pull the necessary Docker images. log.Print("Downloading Docker images...") if _, err := run("docker", "pull", mySQLImage); err != nil { return err } // Create a temporary directory to hold the certificates. // We resolve all symlinks to avoid Docker on Mac issues, see // https://github.com/google/go-cloud/issues/110. tempdir, err := ioutil.TempDir("", "guestbook-ca") if err != nil { return fmt.Errorf("creating temp dir for certs: %v", err) } defer os.RemoveAll(tempdir) tempdir, err = filepath.EvalSymlinks(tempdir) if err != nil { return fmt.Errorf("evaluating any symlinks: %v", err) } resp, err := http.Get("https://s3.amazonaws.com/rds-downloads/rds-ca-2015-root.pem") if err != nil { return fmt.Errorf("fetching pem file: %v", err) } if resp.StatusCode != 200 { return fmt.Errorf("response status code is %d, want 200", resp.StatusCode) } defer resp.Body.Close() caPath := filepath.Join(tempdir, "rds-ca.pem") caFile, err := os.Create(caPath) if err != nil { return err } if _, err := io.Copy(caFile, resp.Body); err != nil { return fmt.Errorf("copying response to file: %v", err) } log.Print("Adding a temporary ingress rule") if _, err := run("aws", "ec2", "authorize-security-group-ingress", "--region", region, "--group-id", securityGroupID, "--protocol=tcp", "--port=3306", "--cidr=0.0.0.0/0"); err != nil { return err } defer func() { log.Print("Removing ingress rule...") if _, err := run("aws", "ec2", "revoke-security-group-ingress", "--region", region, "--group-id", securityGroupID, "--protocol=tcp", "--port=3306", "--cidr=0.0.0.0/0"); err != nil { log.Print(err) } }() log.Printf("Added ingress rule to %s for port 3306", securityGroupID) // Send schema. log.Print("Sending schema to database...") schema, err := os.Open(schemaPath) if err != nil { return err } defer schema.Close() mySQLCmd := fmt.Sprintf(`mysql -h'%s' -uroot -p'%s' --ssl-ca=/ca/rds-ca.pem '%s'`, dbHost, dbPassword, dbName) connect := exec.Command("docker", "run", "--rm", "--interactive", "--volume", tempdir+":/ca", mySQLImage, "sh", "-c", mySQLCmd) connect.Stdin = schema connect.Stderr = os.Stderr if err := connect.Run(); err != nil { return fmt.Errorf("running %v: %v", connect.Args, err) } return nil } func run(args ...string) (stdout string, err error) { cmd := exec.Command(args[0], args[1:]...) cmd.Stderr = os.Stderr cmd.Env = append(cmd.Env, os.Environ()...) stdoutb, err := cmd.Output() if err != nil { return "", fmt.Errorf("running %v: %v", cmd.Args, err) } return strings.TrimSpace(string(stdoutb)), nil } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/aws/variables.tf��������������������������������������������������0000664�0000000�0000000�00000002257�13670045075�0022062�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. variable "region" { type = string description = "Region to create resources in. See https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html for valid values." } variable "ssh_public_key" { type = string description = "A public key line in .ssh/authorized_keys format to use to authenticate to your instance. This must be added to your SSH agent for provisioning to succeed." } variable "paramstore_var" { default = "/guestbook/motd" description = "The location in SSM Parameter Store of the Message of the Day variable." } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/azure/������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0020105�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/azure/main.tf�����������������������������������������������������0000664�0000000�0000000�00000004512�13670045075�0021366�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. terraform { required_version = "~>0.12" } provider "azurerm" { version = "~> 1.27.0" } provider "random" { version = "~> 2.1" } resource "random_string" "suffix" { special = false upper = false length = 7 } # Create a resource group resource "azurerm_resource_group" "guestbook" { name = "guestbook${random_string.suffix.result}" location = var.location } # Create a Storage Account, container, and two blobs. resource "azurerm_storage_account" "guestbook" { name = "guestbook${random_string.suffix.result}" resource_group_name = azurerm_resource_group.guestbook.name location = var.location account_tier = "Standard" account_replication_type = "GRS" } resource "azurerm_storage_container" "guestbook" { name = "guestbook${random_string.suffix.result}" resource_group_name = azurerm_resource_group.guestbook.name storage_account_name = azurerm_storage_account.guestbook.name container_access_type = "private" } resource "azurerm_storage_blob" "gopher" { name = "azure.png" resource_group_name = azurerm_resource_group.guestbook.name storage_account_name = azurerm_storage_account.guestbook.name storage_container_name = azurerm_storage_container.guestbook.name type = "block" content_type = "image/png" source = "${path.module}/../blobs/azure.png" } resource "azurerm_storage_blob" "motd" { name = "motd" resource_group_name = azurerm_resource_group.guestbook.name storage_account_name = azurerm_storage_account.guestbook.name storage_container_name = azurerm_storage_container.guestbook.name type = "block" content_type = "text/plain" source = "${path.module}/../blobs/motd.txt" } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/azure/outputs.tf��������������������������������������������������0000664�0000000�0000000�00000002070�13670045075�0022162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. output "storage_account" { value = azurerm_storage_account.guestbook.name description = "Name of the Storage Account created to store images." } output "storage_container" { value = azurerm_storage_container.guestbook.name description = "Name of the storage container created to store images." } output "access_key" { value = azurerm_storage_account.guestbook.primary_access_key description = "The primary access key for the Storage Account." } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/azure/variables.tf������������������������������������������������0000664�0000000�0000000�00000001426�13670045075�0022413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. variable "location" { type = string description = "Location to create resources in. See https://azure.microsoft.com/en-us/global-infrastructure/locations/ for valid values." } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/blobs/������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0020060�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/blobs/aws.png�����������������������������������������������������0000664�0000000�0000000�00000170767�13670045075�0021402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������!Jz���IDATxe׶ܜ{!9$!$DH4ݥqk\.4n D=x}P RjUc֞5KB!Bz^R!B!qB!BH܅B! !B!$B!BB!w!B!]!B!qB!B.B! !B!qB!BH܅B!w!B!$B!BB!B.B!]!B!qB!BH܅B! !B!$B!BH܅B!w!B!]!BB!B.B! !B!qB!BH܅B! !B!$B!BB!w!B!]!B!qB!B.B! !B!$B!BH܅B!w!B!$B!BB!B.B!]!B!qB!BH܅B! !B!$B!BH܅B!w!B!]!BB!B.B! !B!qB!BH܅B!w!B!$B!BB!w!B!]!B!qB!B.B! !B!$B!BH܅B!w!B!$B!BB!B.B!]!B!qB!BH܅B! !B!$B!BB!w!B!]!BB!B.B!o'C!BrۿW !BHEt.B!qB!BH܅B! !B!$B!BB!w!B!]!B!qB!B.B! !B!$B!BH܅B!w!B!$B!BuB!$Bjq?+B!q" !B.B! !B!qB6B!qBB!q{u: !wB! !B!qBD B!]ە& !w!B!$B!BB!B.%. !BHE!BNB! !B!$3l%!BHEw%!BHEpwB!]!B!qB!BHμH)4NF݌B!$n9O?_?0׾ÃB!8q}+;w۷oرǏ߾}[<y]=#BHE6u'$ă8-ѣG{EǍ_H ͚5Ǐqw]wB!]IqwrK& [lZjbŲgϞ*U.O<eʔ˗_v_~ !B.㚝??z>uxCl >{lΝ3f̘!CSܹs,Xkϕ+W̙۴i}v67݅B!qnMp?~Xb)S?~ѢE<nݺk^p+Kq@L=]t%K_Nڱcjժ̙3M4Ew!BHEׯϚ5kܸq#Glݺu+VX\M/_pµjիW@@ҥK;vΝ_~%_z;hР f͚kGwy9s׏ ,]46B!$"a1O<ٹsgNuFZ0`СCۼysԶDu֭W^:v83gܿ?mِ"EL@l)O^vɓSLi׮XR&MX֭[!RUw!BHEP=88?o޼(ȑ#׬YgϞ'N<v{ȑ 6L0wUTq "w{o J^|qϑ#G)J.=uԠ7o>xΝ;lUL0FB!qNݻ7i$y6mΝ;׫W=<`ϟ߷o߸qj׮WVrcƌ9}tJyw*`?޶m˖-1c-Z!o駟G1cǎ5k8pje!B.b#ڵ+\0i&\y&H0իWO>ϯhѢ_|ŋX3fmq/SL``Cnܸaqآsα--S|Zj-X7Y !BHEw{=y`Tq{.j믿ɓ'( 0{e˖yYĉo6wx܅;ի}ɑ#GK.=eZ~ΝGv3nVJy?~KTR!w֭[QF6mڄ˚#?#]wb[nڵkyg^5!׼Njs9_~d{r w"C I,Y%O~{]&o۶mg>j(ëJswA!wx… իWjU\p}5qw>A̸uHeOK6_~}яX]؄Pglio^X™3g6mߦMzG Hlɬcƌi߾=AK*U5jD{x#G BHEX_~-[:t(.޾}5wRM;ׯ_߱cNJ+6h`ٲeO[?ʕ+g< VرcǏ߻w={o߾o߾w[`ܹs7nK{ :|0uXц lG6o۶m͚5p [nƌSJEdBXi,у4iҤhѢ5jԘ3gu]!XƍwF{=~_~v믿u>|x…T2eH9<cƌS5jܸqb޽{ɓǎ;lذ}#dzL^ 4h/ <ŋ/_/?qDOZ2z֭[0ܽVZC Ai7h ,YҬY3"v}aȑ'NÑ/B!qQnɓUV)SE/_򼕔N+N%駟]v14}СJʟ??^#И4=`�lbޘ4AFu֪U+4iҤ^z(_\5k+V .P@ɒ%[P!F+VyV{֭[~}>ަMN:x1cpw$=+e Yd-Z@'Mp½{?~F6lؐٳx#~ؽ{͛7-G 3B!X$('jժU^_9v;.߽{ܹsNZf 1cFqƽ{޽{ǎ;bĺe˖k.QDΜ91r?w<)R G+TPhт b<2cXCNe˖-+UvҥKY`U>>>DPѿ>z`}9}D˗/}qnP691ϟ?uV伦wivШQ-Zlٲ4G9 %o!ڵkm"RT8SLUVEe<O<<C:/u ]ׯȑ#g̘p%K,]͛5kOvݣG쟿iӆ'z@LJz0`@YiŊkժz4idȐ!K,3gFyЗ)S&W\}O/ 6,͛maB.DEk׮hѢI&}_rW^I"o#n8y]1_Ϝ9!iӦ52}ر[nݾ}q~ݻCb\wfW >}:R_f̘DyŌuFǗ-[q={:t'N>w˗/^ȃ;w[n,maܸq<~z>iӦ͛78p9r !6y3gbs Ծ}:u*T(]tiӦE߿[R_�rQX1$qƬq@:9lSRZ&DX!~y1u5tڴim# h~quo(m;uꄂa8gэw48<@[d ,_ٳ&Vʕ+4| 歶hD߭Ks΍ vqm۶SNU… ,߹st+VpJ8a{>~u7O mQ? K<߫W <yr& ,?~<L2yӧ7O& g SL ,ezؑ zď?44yi!˴ $#m(#bg 2$iҤ/E ƍ8qB_[!qZơcVZcǎ6m’M1k׮M8qС;v1dFHNqy5 K,2dԩܹsW^͓0#|Ċϲ4{yr jΪy< wvNX/Oȁ9sͤUGӧ?ҥKo&:{8q#GX{Kw.e֬YԦL2T#f޶ԩSb$#gΜ.MBBٻu/^%KrҗWHEƧ1I&uСnݺ޹sgppΝ5j7o޼{›Ix-~gϞM(Qw._Qv$MdW풹8^n0٥}ɻMZPr~`k! &9}iݻ׭[^t޽N:1/>K<yܹ.]ҬY9I=j!D ,za׏aȐ!ܤׯӢ ~K8F8=:zݛ2e(^HE,EqÇwرPB ӧϴi֮]{СcǎÆ +\p"Eڴix'O\W^]lYٲesգG͛7su֣Gw*-a;o3ZYkΛcKu\<phka{i- &D4uԩЅjժ3f#{E X~3g/&U{#<z{GsBKE*UmVr]ldX.SL/'={TXjˡX">}jժaӧO߽{ٳgyamܸqԩ$IRx3fvӪI?ȿ/^8q"_TbU1~ڶkAg{_<9*ƍ:t(Aˈ#Zlٵk7o޼dɒL9jժ5jԨ;v\rRP6T֭[<)A1%I'vhno;-]vy&ɓ'/4Yfեw!qQכ7o.\O>5kɕ+Wʕ{aÆ .\~ҥK!C-)S"EG;?uT@@@ժU˗/?gΜW>yĹ|-xxƍ'O$DM6\r۶m<?~-F 1Ub;19# S߿B&'J(w*FZٽa[n=D̦'ߏ?>RRhƍR -`'^e˖#G֮];]tyڴi}}}y C<'O}ǎǏ[ sΞ={zUZ'dw:s(z(ČN=Ö v[{?]VXK*5wܠ z@]tcY[wy !BMa'TĞP[n֘qqso GΈ|*Tx)/TT)]?|ŋw0`@Æ SH8q⯾x7nzMʕ+tnjsvs"3K,aX3Q=ȃ=_z`ƍ#F,ޠA’-[N0aΝk;_lnn3ܿqy:u!}=zxL2ӣ_8`Ϻged͚53yVA'ߧO>}P8g5nܘ'_xx×_~nw W[HEw )G@ɓ4iO<pҥ/]dݭJ:oi4i6mZǭtAL3W+=]66<\o޼yf&Mw^zkqy[ٛwa_ hѢCo߾u:tٳ'ԨQ .[_p~_ri5q)^ٝ>6tmSDzsx񢭗ԩҒN:EpϭD˖-#ZxU8tǡl.!$7TNH7nGnj;w?3D̙3gʕC]~fezYfMٲe}||xرc{YoVgU[xX*<vիW W,X@ C ~p;.{p=h >K.e4M69m۶UV "-^8>WJMv֍/{Ϟ=bƿ%Xt'qf.qF1ǻv=-I AX{FOܓ9Ed ɰBdU!"=EnK!$"l6s`׮]ۺukJx}*ThԨ,Xq2eʉ'xÇ-%Ǎ+W)R͛w޼y jndbifviҳr%X9:GWXѲebŊUXW^˗/,w(-Aד'O޽K9mڴ]֯_ZjJb3g\dɢEV 6`խ[&M;30 -SNy#7^|؈뢡.)]FR4-88}ш,oS(oM>}+̐,9VUgFHEIc�znذz||ߒ%K":t]v%rɫf:uԃT̄.]-[GgϞ5_h)zYvVw> i}ݻw/RեKsZ]zUډSv lѢEժU/nʎO0aǎ?]v,]OիW/_|˗gZ)"go~ٹss3a  *HDC3 $pi`жѣGO5"p*8QTY(ݝB.Uef?~lS&UV-M4yEM3{ldƌ%qٳg̘\r<`N |Nƍ79s7Lbe=l&ĊlKYW9Çݳ9_""e۷oܸqaŊյk9r͛Υ8$vq]@#+o֭#eϟe6lQ#'O &<s Νq̙3N:YfE}}}'M6Mj 9 p.cɻ_~W”Yps׵ׯGuJ,rr#wڣ͘5kV}6hBpt" h,< SJUzXA7Oxضm:ެY9rp>Ɠ6,Ǐ'L4 1[Բ#=zd3޹sNSG9*ñv>Z8bŋ\ĉ7mp+8n{ƹM˸E,dR`A;00u֭ѣGQvzrʥK|APܝoD֭ ~VAx铅E.YK21R<yr6ózoȐ!qo5h[xVj(B*M߿m~@b'N9s={ r5Apyfƌmڴ ZΝ; =] /s#qӧÀ%؝:R061*n$<y9̤ͧNOBŋ/^ܸqy˗N:}]`1<ӹョ`%m.d~رQF(Qq΀֭o~a\<((?tϿ ݻMƍ|Fk6hЀE.]{nv+E,IAܳ) )Á{śfD$r0GtI1JQMΜ9ýdϽnqK~w(UŒ x/ 4Vde ,^xd (п7" CDm-[2CU䊻㸦NFK'[qU_pmAnݺūf&޺oVm*]DD˖-/RHԩs]v޽{ϙ3N޳g�:46 GV^M,]"d9r$ʕ)S&TXz9:_~޼y uرi7olu?_+d…)UԀ֬Ycuf9sq'cJ)޸$H JOZ˄OBCCϞ=]z [χAFBB5v.C֭[5k/_>2G 6y\֩<yڵ7n p¤tϚs޻0I9Nv=N4 bn޼ׯZ{ <1d+z vI q!<LmxYNf}ɿ⋴iVV�) SN]v&-Za:?(( h0M~l/D\!#6Yl2`dL2r\ɓqe' gϞݹsƍիM6uqӦM6lH5|:tԩS *wv.Xf͚3g&*3f v6aƥ"J<#o޼.gGD&O0[;>K.MTWV"- љ.őã]a&a^A/I*_ヵڵ ٵ lU2]Sp\ �cqHd֞?hl"ܱc0M6`ǎ;s˗/^hu36qwPިjN iѣ˖-0aw}q!LTRRx={vbEVZA͛7޽رc׭[Yny'N[u uF/{&@%¹U:C w}`ԩS5j@Jyaef˖B ~~~D_&M" !?rAH 6܋r<=;xE O�Q>+cqlCHj#E15wB.q\vmʕX;^,XO>hMd]hy8Rx~'iނ FPp6O<y;vlԨQfЯ֭[gڴi6GF͛vZˤ2-ܹ[4-N>Mh1hР |A񉗐Bl2teɒ%s3fK,YV޽{^`Fw8<xp nժ}KWXq„ N:E,wމ'!SLiӦ!}~7|Sʔ){֭;m4EW\9{5kիGxuҥ~~ej'?}'se xQ^y\JD]$5~qIX#_54i(E׽d8"4;vh۶-ʘ$I\r!J&SYis5t|>W30Zyjz IĆ4o޼H"lʕ&MW\-BL+H+VzM4SNe9'O1cgJ+wfc/_{ovd8c8:1vXBҥK#lNr%K-NJ > mJ<v9LΝ} [rem۶mĈt~Μ9eb<F6lp)R$O@nj1*̰ٳgX{mȑfZ:m'$J(yoFݏRȜAmٲe[E~~~.}Dcτ 't8tGiJ;UVӧOٲen9⋛7o ݻ4(C7u}Sv 1,5k֠&LR-ٳgϐ!_|܃ Aw}zǏcW?cl>}ݻwqoE!#~P9!`{�.7И_lBÆ bN2e#:uY&/OȻwZb6㹽MWٛv=z4]?~Jڵ'Nhw;vlƍa̞ `=zv|_pzd(TRUTi̘1g޼yڵk,s޼yZ BUV$oN_a蟢}~Pi;g"ti[տw*%u|%cv`{1X;wɓ'.\Xb.]P .<xWcv:XSرcѢElԩcZ'=O<3fL.5kVv1*Vti KwRD|wyǞyuРA& aܥ[2<ۜ+W֭\#8A1˅ ]l86)6;}_쾱 6޽{pdNW~QF۶mFf/0*EիW3gݎ;:3_.c_ ;vd}Ċ&MG6V5pjg*TA(.z߼<StiRT^tɭ%ǐg-*up *<xKGn! Ah+$/o'?~aPnQj[;SW}Ν3g`B+VիY/_ )SrҲ}}߿~x0|cǢnӦM1cW�^z-ٳgO81ƒyŋ9ͩ6}¢s!D$I@6ڶmtRtfb !obsΥywu~ָ>=FhӥYJZƍGDa<vN'ϟ?Yf@äIP[n=v4;iy=B@6lXT2ea`DuYLRwSssW7B/~S%YhѳV7zov"mIPP^lqgvJBHRV92f۾}WVmv/Nq6X ںggϞ L& %8具j Y9s&„mݻw۷ﰇ#x3F0*4ҥ P1LnĈX5Fnܸ"[{dؤW6f޽ ǤI6O'/piސ7o^N nw#hzkڵk B a.\8O<;waAvq֭sBy͛7-TogV㟅Fƍ ׯ8lҤɰa͛2m$-Z4[lo{0S:tz^O7.7eTu�FzK2rdx֛9Dzo5?J=FjA !q8XxJ1<-8%KPB e޽kc<JP H"Yd5F۶m6mڱcG {֬YK.ݲe Rnո ޏ^r7=X>lԩSD,\r{֬Y+fS ڵEݾ};-ϝ;Gt/^<UTDS-ZXx1[Ap5Vmi4ѣ&M]6kӦ '0ރMfz8O׎:ՋB FZ|yĚ}}I C#1b�vc#DzOj7Iea-<K4hP*U:t rի%Ke.\'?qw]&z&N81<\z*/^̐vimމ7v@.+mBX-E,MߣG 6pLw&fq0=kϾ}f̘ѤI"ɓ[ŏ޽{O0aڴi˗/߹sgPPEoEWr$ZNa׭[7f| O<6A+ںu+aN)HqM2~=ߩS9r*Ujĉ8:Bvc+kHA,A#}.m<!}/[ m,YBհaCFN5*Vؿܱcc9VgtiӦ͘1#{yڵX`{wvoС|{Đ#F= <Q72eʸs~/2b D\ ,q9yHl{5'dM{4ˮQTb%1MnZYf+V,u5k\bŹs=zI J >jժ2e/wsF>}:dskV1Փ'O'9,۫V BYꏚ#и{ڵ9;fɒf5(>Y?i^đbFB.V[̻xKsΥUիW4iwM+(z14~={v׮]7nܺukĽZjxʕ+ O<y#C9<1xf9,}S|P1V ڶmi&F~`Am6[ CS+}norIG$g>#OF1 !qFq ~`X]p 2 0ѣNZZbb`9}͟?vĞٖ-[<3ۼysPPnLݶ kM,:n6`>x M@ZBV8q> eʔ 4tE@H uLimXti-J*ջwoDh5'8"l8J,)"͛7Ph"KwJѿ`-һx"?XVZo?~<BTfa]3fMDDY 6gd~,=pBv#v1mڴ;l^T(^=*R e$ڤK!ď??xK#4?!$gX7VĮ.… ]vE 3gI%6fu1۷w /?cĝ67lp„ k֬ٿ?fu?LsO=PvKpG:W-egΜl! I$裏RN{$/vHtwI=z-Zݜ5k۷i<6tޖ'OٳXlӬY3z~p_k3glӦMFaP={�'Yj4gՌbŊ}wٲe> V6h?|PO>eʔ)TP݉ ,kҤIYf͒%K9b߾Gg%grsFQtUX=3RDr,ao\釢ҾC&= ˕\ (Pb*UņdڴiS۶m?ϰ:u5jN'a&ԩc&ʕ+}&u޽<y wnu։0Ν;C,=*e˖k׮B ا{j <z{0 SGDŏ?a„)S,Wرc VpikǶa͛W~}~#Nձc~џ{AcǎcE"ErM4vڋ/]Q쑥K֫Woԩ:պukܝumذ/Z~|I]13@B{udǥKIgFu4ȴN 2BH_„ծC[תU+UTZ|a&f1Mډc~/NX)-3f̖-[Q*3(J0tn/_a,߲tk׮9rH8'|umJFb^<y8  ;-ُ=X;伅)O>B?C oI E?>a__<y/_5mڴUVusڵѾw^+V+VdI"~n?3deXN-3gΜa̙36: !N^/o޼aZKyPV\H.I A% g}6CHR{a_3!$/>Vɓ'<1bҙ+W޽{o޼ڵk6=jtjo#8͠AJ*4iwM$IժUڌ97g.Zαw<R?GΟ?QF{=p2^%"RUֲv٪U+C۷ogg~ܹNb r>?F4✿쮸:srV>9x YD J*g̘'Kb[WQS.\0߅={нV зVўcǎ\ŋִiS0E)S ]zs͋wyU(ʑx!9ק$;|A|4rURdu2tet)Rvg!=Vr.]v,YU`|Z%I2T]駟&K 'C7l؀.BBz긻{m+n3` 45kxݻwYTċi:;v,&ڤI.}wϞ=;k,zw>"$*#tճG'NآE%KT^gϞ<rʍ7"C?~I/;v^PJLWeTxa /, h۶-njC3N>k׮]"e˖߿?ٲ^Fx `X{֨N:.2dHW,gݯ.jLO\En YaẮ !q86ի.ToƒTZn;wn_O0a|НUVY2;, a]:V(ݪ߿޽{5u6aN&LgΜ9yñ1 rX pxi8? 9gΜu+WnС+WkVdfk,8ЪUO>:Nŏ?uݻwٖᲯc WٝC؏(8'N!Ǝ7lٲo>|]>w Ǟ}}͚5AExp~} w4 $$BUְaÈ"p)oR7n}v;QZX{`F6gq-Z4w.S#E<+ |9F8}t)!wE8YҼy9r`˖-tKRl3Cϟ_r)R[;l=w\$RNCLT3R/\pɭ[._|ʕ;wxx ADi)m:udϞo…H�EpZNbI#;wLդINDn0i'oylT>}&Mo;o Н 6NXU/2 yo DPbETReʔ q2iҤ+Vlڴ Ǫǰ[.؃SLTRdx``;x]j׿Kwzz f̘Àەxt֬Y޳04MR ϭ 3=t^.uD\~xM~¿Hj=Qg4!]S9f!СC]v!6P,zA#?#|~a%ƍg̭u(6׮]? 6lРA 4(^xbŰ6mڴhb6lьkh0<o„ kΖ-[<y6mJqi(+B hÙ3g 6C͗/IOW\jc`ӤIc$IY7mqTo-&'N DqiӦ͚5+zڴiw= vItKvo׮fRT9s`=6SQ~ qBhbg0={KG9r$k%( sYZeYLyj˸T.-{;8uE*]n0eh=.54#T-ǏR #G-Zteh?N8׹sg\_2dFhGŞ+ 9s&W_%L0QDh1e3uӧO˖-[HdٳUXTԩ.]^gZxwU K4sn{_ʼn-/_>o޼wڵo߾{͛7/1F^+N:erq.gU,WFVV +0<rl]NILra|;9sb~-#jժǏ x3Ob+Wn۶PNC7/^e˖<AB&ѹ_IzzsBsѝfs&@XUYf9rh۶͛T:&:}nh.~BOR1(ջ@iM矊C]~RNx<cÂr] vnK;ɓmsf 1f.]=dɒ}Xc3%5H%bI4ӦM˗^:=knӦMUyw*EgлW:thƌ˝;wɒ%-/UN hf9qDTJ*}… (@AcpL2LK$Ilٺw"tOPAA16ȤSN ,8vE N̨NmGd&z͛w5jT&M؉D//:uc@:p?.V;I DFǖ)SfҤI;v-Eʪ۽ qs2h 'i 6dPمBL J*E_'Kϭ1$0Rgݽsq;\fHP1mڴȽ8L{TDs*/$"pJppE" X)p5˓=ŢP4>/^)5j4{lʊ>C`o߾b ???D{=[oq+ &tkԨ~|64snk$\lY^J( صktй҂FQv�:?1O?uuyɒ%f +Cp+Wk׮e[\?ҝ:IMVъ,_$O<ӧG2 @ 2sLFȥKPvmч V~ &Xr9o#ЦMB =zXf ~˓aY!"n3{$ Yf vCkȑ"4b0{aVE-| , \fH9s*顟loJTTltf#Ⱥu qF 8w޽ !qNz. !12DthJ,)Bܖ6͚5+]t.niם;w:m>MիWW#q pb3^{ }Ϙ1cdx}<zh֭[VJɓ-3qĚ5kʕ+K,%fkE09ΡCD|Mʔ)fʿ<4hРy澾*U+X~4i>3%9~ec~v[7YN_:u*AHժU RJEv)͘1mGnz!m[ nܸsN̝;a@W 60ŋ޳nE0ԱbAkMG؈9-[\~=[bԖq&|Ͻ5"גAv\X b]r!.׾+4Ǐ>kqF. $`uJBk7I#SL9w]=ZN\ʮyk׮yd"^8Ӓ%KPʕ+ʕ+YdjZh&O7/wqh/^-vX;1˗/ӫK.ڵ+b[#T 3|Zaׯ__n]N˗m5j̙3WZvZ]vm޼U[O&LXp:pܸqchz*۶mm۶YsZҥAAAٳO8TDbwlΘ1cl:&T6~䉓>|rJUVvI]F.]]ӧ=|)� �y-b7ׯψ: h߾=!>iҤK.Y|>RHQ ".t`xV0wIw2{% I#r{wfEc=}Fe͚y]b͛7jQ-f3./_~ȖEѯg￷Kuڅ b2_TR(P eʔ9r;v,mp )Z8d!}h?b]w۴if6Ld]~I<x0'Q|\r޽{qt A}Il3g^bKo{S?Cҥ6lq+O]>j;_ fQs.X { eݻo:jٳ˷~�a}֨Q+ǏSͣg {l,v=|j:9fNmYڙ3g .S̈#vAB)Rw'8Ns"\N@[/^-R%(Lr$ms7}?80 iӦHwKA9!SL߲e Ybܝ;w6 &kI s8t5kHbwڅ*IF/򫯾k}tT$Ih g-{NSJL.^״x<z(l$ڭwzqȐ!5 < & .`VҒΣ]vq¡CpwB/eΜI&Ywg(ָq֭[suEhN tMjIGl F Y:M6;Y ;vc n2>SJs9rLe]IrL-I.{q`lHՋ+֯_?FbiѢEٲeR:vHhe]q_lD={Uoѹ4Ƅf\<55ba *"=rCT<y|CHELt=_|(z=kޥܹsfĉ?sEgskllƌuiذaӦMÇ_ަCowxx{|B8dwW^ݹsg˖-%Ks"ҥ gVHfc$,&ܹs RJ(1e;#C$X\rUP�"1pE b n.O+5jchѢ>>> Qv=>{FW\くpzf.buCLt]߭[7:ĉ[neVP!W\uֵ6mU䳿xx;hUVZ]C8zj<0pIssHm߾};6ܥ 힕 H] }{mh޼yt<[3B."A�9  M >}C@8PzuET&|⎐q'UV6l:GvV[oa-aɖyylٲM0w駟u7ŧ?t}'E߿%:nE<HUF%KvG޽mۆ"vשBN V\ߧW^G5qg6lh׮QʿNFL)3}U7_8q"!G۶mQ=z#gΜFZ|r>}zg[0rmXpK.Bo j#a^tiǎY̪(Re"UktnDf~)S,RwC…3dPl_|w]kuֹԐ!Cm.^F0-5y'Nr Ӣ\TƏ?V HO҅{0ٳ2g]DHlH,C3z_c ,&{6rJNot۷o遳W3aBf̘QfM(wXxfqmŊv֬Y}]W_}չo"c$ҹ;ۨMDn4VZ͚5kAAA.]B j.BFM4)_:gr-'BI8ߦM3A48uDb;aӧm!ҥKBٳg#_)vi0D`͛gΜIRN&"ZTJa6cXۅ.:thDP/1̾GzK(:QKucWi0ûHMvװx=z`e$Xe$ʕ4S5| j)s9$ Ӣ\& _YwԗRJv_d(a-?*]~̓'Od4h`uZbUwzed9" ||ɒ%!֞2eJ+VAڵqĉ?OlK4iΝk=}:&x2e l>6mZn^N8ai6зnseɴEl5NiUMbٌ6ܹs˕+dž$LЂƳ:F[l4n̞l۶ q_>C-(";]ɕ%;#r{^g={ l5 7o^;boǡQT̓1SiG,`Qd%whٳgm&M(] 2Mbŧ,$ۮikg5ĝJtavtwrPBH_DF|rа>ui G/h6R0o޼Ⱥw֥K4Yn/[qM;]HE5jkX0>ԬYӣ Æ ;|{Rii-uҥK'H#iǎ/U:ڵk'.%Jĉ*M41?Ar;yLc8YH|ƍEU\/` BRFV\qܧO]#SNE/\`7:jט22#ժUϜ�7$C6v 5j԰aÅ :d#<"ډ 96ԩSwMa:udSN:[l*Uª袣G͛t1r ;:;)1I;c;'[1߽{wz@ 6rRJ+Co 9NX=kUD2nfC6mrUlQF :=ֆ f;#E֌ ǽ|v%N8|m�{g<k9H%QnAĖ.9E#rf]ʹ,QR W)mڴ30S'Oƴ޲eKrSbnݺm޼Ȕ4|m޼9n7Ə}w??^?EwGysTtg,~Agި۷cI$裏gώΟ?/JϜ93gNVԩӢE DFQ:iM̀ 8'xW-xWhg'LcKM7n84b?!㑖8~8yZBqu l۶<x0}RD,4hгgӧ#yls+ܖ]liO}p_ ѣ=@_|#4iRzTB. nkȄ8W5κ{)_I6 0ͮDW\IN:t=IWl2V"q/=:/h_s+K_)w)RyXc|O'OLW'H ޸qc;`*T3hӦ Y!Mh`/_n3glwL%1~~ŋ_G_fQM<9lٲ/bQ.yp3کSo?̕+zzj_n6hРu,X0[lsFdY '\YaK`+>w\ۣm!7ya] .m]ڵCY#�@(Ӣ2Mz*[*ƌú5#GUD D!f?k$⢵D&5kִCŊ d>.L'.[z!>W\!Fi*vNxXZH[R%CKxlS,IɹWYWk> ,Fc z`}Ea]Æ :5(g _^%|]K*ylQDrQ\Ҋԩʅp`|Bxgҭ[2t×ɭ%"*s8o̙L2ʾ}U==K.-\/_@Hڀݞ{ (Yd׿S+#X;*oyVZC@rbO*^xqơk׮EvtҤIA?=)SL& ʞ0a>/d\rcׯUVn޼yq_^[u~-KH"Eԩb{8̜9s *)S VnX2RS_E۶mׯoXX VV-]tѢEy59rQ|5bqS=(2MŒO SD=}?D(4i 0qQFXn%"`+l^^z;w)1جpMky2\qKջ.~("dT3\ 6lْKJhM|C㐸?w:$+;wr\.H>巋2k3p\2×|W`ϖ,Yҽh%ޕ0#$/85۹]޳HСC:-4+j)O?-Vĉ9b_Uf̘Df̘W6}^u 7 '0ó;BsƒW<gŪt<nڴO>DM ȟ?B[ڵH/_>iҤţ_.]:b L( | w+[eΝ;c~]vei(rǎk[xÊ+.]dSGĄ΅d+@ٜ;vL6 +>شH.'<Wi^ $.IB􂧢 ~ Sg]V�ՙ ?~ z.AAAl`0rH:'mٲQFܑ7obEt`36|LNN45xa HB; q=x[`vĞjPXL9%إ9.4 yVM_[%;>n>{@ #=fGʩڹzsڵK.v?}4v% ѷmF;… \`NK([F oM('>�L<9'E0a¾}y(ٳs)ҤIӶm[2uTetVݲeK,mfB%{bȑ_+4 ~W+d+Wʕ+hѢ}ر;-6l<A9 ?6ZnYr?&K,l ucpt$&i$[gLb2ws;`,vq}Ϟ=:t]hz$aN4 3&"~csw>j(?v옕9k6a<-N{&L'O$ ~K7on: 57{ʏƶ\`aF[o-Z4"Y.%E<ez,J8x=SbK*Ut޼yH,֚Ν/wQU]ےbMXEbA*`ŊTDQD]X 1Dq[7}9`;Y3^k|יk.{$@JvzMWh@7n܀v ل"1c uǏxI҄sA'G^v 8hѢ`ܸq59?a_> &oF-XBr@̝:u/!QF͙3߿QsIn݂,Q($E �P~5R*�rlTܭg"qζmBCCMLL(5bݻSgxl5k裏>CZn޼c|9=+1Vy?#>uP/.Bp8Av栉;BF.BswX iNz*(#$5"c@* s1`TR&BYfq9 O5e GO bիW7L=et/f^dzbxFʠlWbe ܕknYmll1bDJJ r8C0+ اO rxw- Z|T)ݬ"ٵʟ0A.]�@-[YYիW/^K)ՐW>n߾ SΞ={ _t L5PfyC Zj*UEy''B[,yC5Yd<)%k$ɡ:׿~ڵ™pdAmcTqyΕDt-8n4^LL ) %vvv|�tԩSPJ H| x *_ßf ײYEp<It2Q!qburbrӕWfd,QeYy#ut+Oٳ(S஬lsssΝ & X*L7nܡC ^sX/ܒw\ p28mӦCxxiӜ͛7otaJl)1xPKP&RUH%;pիWJ5+vud4rHXn|||BBBW^F3 \΢L\]]6lgUVI&Ç?z(*B{BubbbllÇjȘ .DEP[1H \%Ykh۶-M=߽{wt q$1EU֮]+#%w~AqUVQIܻenqZټyT+6׷-[6 [[7R V74x͊ e|ZT)S}6Bua@oooH޽{0k p͒<t_3LT$@^gm}S> Y[[׭[W6 ;wlffz 1+і<ʴ,&@\6^1L@u֤Ip{nPU~xaC!Lh755EuO2eGlH|.?JL+ أGhllL:)M^vZ}.+`C,X�[?^:R 6: {0cǎ %K8kRd"t/{А͚5kݺ5wPV,,, yAOF3$lYnq11@9J�wwhӨW`0OUD=^j&='aK׉_jժI)pWVn2{d;<<<n+oDV :W'8;;Z7H0zvSz V cԩ5j[n lcc_"j Av i%ZD-aQD#~*PPP0w\xyyڵ F) (کϻwnkkKv fӦMhkE6+p0* @ rjj* 4 -IcN ?y$*:\zU"X*5_~+WݻwZ)))3gΤ18{,LOroߎʢ(DĬ�}g}7M(OOO¹sa-*n(Bf͚_t %^nܸ!nOfen\Z`ƹwTC6z(Ptx;K0gѭQ4nU;fOe&׿+;:: o۶FYZl#Lꜝ ;6j裏>ٳl*]*fBk5C+99y6 &۶mxADm_5Mߵ^1Z=K_͛7|ŀR ۷oߎ{E!#GԖso޼ GabZoܸiӠv6p6Nzekoh>˲!'"^<S X Iw}'(/'B$yӲeˆ 6mŒ<c#d47na#4&2?{9+2e!2jץ~~�fiȫTRBO*I8)ѥLЄdHlٲeA֭ϟWox:u޽ZjZ#ŗJgHϏ=Rڵk6+2nW\%TeZNhc@2nr-+++2 �.R+jmwwwNN8PJ~\FFF;wNLHӧO066\ʁ9KSWᰑ %w^ƪUmIe#IO< "ؚǏ۷avТ]QRÇ##}}}iQ6o޼uV8SNp<EΜ9i{ye$(ičʲܷlْFd9a_ڎ^?1K9MOp\)fzҡE͛Æu|Tsέ N2n޼~z82<<ի+q%E;w:tQƍ͛ q+Pdkkk\fz!9̋ KIIA@Q t1L!,H<(%%W:aVݜ<8<yrِ-y*a\dKQ}ݺu#G\v7@[ Ο{A6k֬}3f\l~J㊸yhhP(ƞF�)S{̘1G=\1dMU²ƀ4b3qQ8؉':::Pc�;u\Oz&Lؽ{7TPݺuy˰~B.]Jq5c=`ܶ/Mm[ SoWL;ryx]6+B/KM3St V^/ 1Rg8/77wΜ9Pl*UKF˖-4hкuk> CmԮI.yi2H 8}ܹsXX~-=%,GXUllldZZcXt7IG|* JOD˚5k U>H &GPdQi3C3,Y‘~~~ RxwܑUĐƱNNNܘԜ۶m8p ZÃK,~_'Ym"5@5D8 '䅧6Iox@[͗a:Q2 dq!Cm_* aTrÆ }ꫯ ]vA` SEwȌ>WY!کSy|K�SV�{䲔qƙ6lkݺuOR6qɓ'l2y:ԫWw_h<6o>hРiӦIɵppll} � S,uƌsj8i$4RE2^Ϝ9�SN=~8dKWZǫ<88X~6CsʕYf|9\h: '$]GYy{{[XXL8͛7s%#]ZK7Y) Ru(-?"g\aS2E1/bv*PJ�2e ܕ6PLlmm߿_u�+ހf &M̝;N +F 8?>:Cr<---_ Y1ԁH^v AȆGFF8qe$/V̙3X֭[F>swss6-,ͼ*Kx"jee-@myd8 6z{ԊW|EqZh}hn&I@;v%YҗMp@ff&7wׯ_%K߿1GiO0,Yq/T6!05ѓ"d=Iކrqq)(X޶7nX2!a2mse ܕ 4qƍ˗C@Ν; +r7 >7mԧOZjPrh 5k~'UVtvvv{hh,CP mpn>-2ܾ}{Ϟ=}իfu0 k +V֫W/e/ԩE QԓFݺu +<Ņ@ >r)0UV)SxLMR AC4xai̋ 'N`DQO<_*ԟG{#d\NJWY3t)ݻ"6j(2dȘ1c43$/Q;vP>:::zQ\\c D 4?W0w=`hwX7A 5@5=K�$Z,СCI⒋Mƥ!+HOFuV[(S஬l^p!ָqc#Gy߿ ]BccMvbzr}H#sssp0~Yr{٦McǦIWn%ev0Q<}===qTj 3f�|wܑd)gΜA<tz-BZt믿Jmۖovٳ#!|j0+]By8]vSǏS_V"yEiPgLJJJ,4 ='%FHV \t1bDjj*N "7m(TMW޽Cڵ_�`ooo 8pUX0Oׯ+s-țb%|a뛞Gouq+Ȧ<?f?)SmճMֻwo Ȁ X\B;w@111W ލ?~_~%ݻ7::_~fffPݾ}x@K%skKHuׯ:th0H(W_UR < & WFpnXXHAFj�̸W Ń$P'-�aÐ+*sKb <!;v éӧOE~]j.IQ8HkjiӦ\N"1BmȘ:u*݇DXПk[؂݌Fn.~„ GF2B:*$$$99?\ e2r C*HYnkزeK=51LJ1[֭[Ʀ`nq Pzʔ)pBkȐ!ݺuСÈ#2 x]re|w"ȄɊ-|W ÒaÆyzHVkZjEccc5uaO KzGMRA˗/C|{yyyxxpEWWWޠjLMMZd_5WDTLRdggcoo?^xɓ'(oii 2"$ ̙3%"'`7n [.''G7{inj\.ZHrAJ\L]Ab!i`wpSN*X‘e0͗]i93f E`/Y9"""e@y/YSK=)rpǩ޸q�k|wF"y%Qq�j NWRñV|1Ly\df|_Patʔ)p&@sƍ;v[YYAPP';":jԨ-Z4h 00055Ғ@56|![/Yf6mdp !ca2 iH醰n"4 ӧC!|7իW犼VVjժpU@S׬Y3*@effݻwĉQQQ*ux \;i{Ruszٲe{SϑѣG)71/ov.J`Lݾ};޽{w>uĸKE5|Zh1c 9Br… @@@�"*44!?~6zɅكB»-(m4ʐT桙=t'ՓT7=KNuQ |62| W,gr+S]`uE<{@LU&H9=uի#ccc Tt ̴aQ60w (/lٲ[||<4?k׮;v<x0@SJD ݅2 Iq.1rH ݺuCԯ_>>cY kbb6EG5̝.G5pu7nOEC^׺urss%DU 7odЗ҄k9QĿz`4h 1 S mvHo߾}-[$%%;"DYYBeg+Z*0 geeI{\$bٳgぱc"/_Ni\cʓUøЏ;w\b_ CJ n ԓ8E,??VC.m*'ɣnJbTCK C2y eML �"##cΜ95%x]Lv>>sL[[&M'&&رc1@& ^m )rQP<y2`xbxDWpVׯ_6mxdp'4)%HLY vCO޼ysTT7geea;wn׮]Æ kժ;::N4 �x(ȩFrr'So߾�???hfv\8XrK62 nR ЍA\BK%T W#BO~eLT6ܩ6Zv-Km۶ݺuKd\OKZ;=zMmC|}||( HkqFzҦpX9wc5␊<- >jMlmgIד|'_~ j_2e.E)Sr}РAݺuW@ GR8DXAAAbzu|gBZ4moϤk)O)StyݣJ6\lِ!C0V7o$2=z:z(�ÇG k۷ԩS׮]98rر0�8p ++JNCvNÇ 0�- .@TW^ԇpuj">fb B(VRDG4k 5faeu*xBۣx&А}%$$lڴ  $77#ܑN><<<pH-&/t  9.c~ ::::))i(g͚0ën՟iz{|hڵޮzwr(N]%a_PR>0{] %r޽[Ҍ+ QO�yez"&3S)][e _tiҥ]v c&M$PiNN/o/6r7n 4hڴi۶m(ԓ W �t,..kժ|yժU+WΜ9É0}1cƸ_@Rx-�;>Dt@'м}vΦ0`� Ν;a>0T]x9e$ĐH|-bPW٬odƝ:8N$ vCƿ*pU֭`ԩS!omae((8#)M6uy >>>t*G}2ӮX-={R˗3#jQ}BYFH U�(M��qIDATr,j~T*�뙒*]+$)M@xcǎO^, dMUL"rX�a/p>k�FDݻwwly{{}p-Q#2azB ϡvx޾QFu155iŋR*C/�׮]KJJ2dH6m5 HIf;u6nܸF! o||<sgff҃YYY�% 9;+>G �iii *Gl8QF6g"Xp#֭[i;1<b ֬Y'#""ed' jQdd˰aömۖ'[Yɤ#0499_j%%j(55+_|GXq(z! 3e^zI Tݒ:b@-՟24%׬Pʗew͇|fN™JEG 6Ȍ;{$;;{@Nz.Ye* �UT3gdddTvm֭[NlKb.OLiePi-ZԷo_uӦM/_b t{$4Bv؁7o޺ukssZjUV>Z* <$pBnnÇT �˲px@lSN!,,L 뮗8~YQ;ƑW^]p! SC___798EF3d#GVXjp# f뇚J=/2rY+IݻO>tAynG>yeRd2KcƌAQ*.66СC111:t`x0Qk\H?�Sl= .Əo�}'Prkcq܀z|$X8SSlPe&qʕe˖oRLOO<*Fz&Va)ٳfD&M$t ޹sG6´.,MnZFߌ>}?+Hsp�gddHbqRPǏ/^ YYYA-ZZjUnO?>/wQv}ڵw£ nՀ�%Wd&BZN={6#7nܘy 8F©pr#1Z)h*/E{_ 26pB!HG?|х{ K�DKb'''N)1JDGGGj涳7nÇZZ?+:pwpp1bĉџgϞMHHr;4LZqnXpG?4_Ч|fjMil'$UtsU-sRn 7LJl`j; hΝ;˕%dyq!`8:Πɓ'w޽aÆ"""6o J?m\Hˡkn�eUp0WpSB,:V-,P7n۷/..nΜ9$СCx@Z*Ο)G$GO>m۶6mڙ3gh-X`]r5Uݰa̍rp999੮4.. Wdee-\411iԨ++ $D0]+ⓝ;wN0]xQw3~@<xٳ;sl*$^Hzzz"զO< b9@Qh.-; 9I&vq$(@%&& ٲ{ouE+ /ave/wء܆|OG47nܨ8Dwe/auMpѣ|yeIYl\7d:?v:sssx ]~="keG̿nFm#!ԿfES111W^P;.g͚uaHNl.Um^XY{8w%#@'6hЀ||IjԩmٲUFݾ} Gխ[(Y-�9B<di'XI.IJ!~gggqPիJʼp&M3&** e�肂т Q3g Du pD#Fqtj|Դy澾7$.Eie:2HaÆ7n)))(+'ժU+$"ØNb>EFm MR&4`Ǩݻwf(ޮlqqf(SLhΝ;І�qN6---Mq\2m%"0 yȑy湹iСC~)S,_|Ϟ=)f9 <'N@ UФIIFD/apyk`.$WvK�ݽVZUTp駟~WP254yC{ 6]6w%6}1cɓ'�^wD<VSkKocnXܨG}ԊNaԓW2I6w޽{ǏOe?2zsgϞH */9u�kFZ-Z$[PI/wFjN0p"!![lkrr2C*SNPѓ;E 47Ŀ\a:|)>KiX9 iwLax ~mE})|d l/ڽ{w O l\qMČ<yyaѣGڷo_^FuYBiy%]O`FV…=x�ǃ`:?Z5kaQQQlkkk3##?@>P+YeP>i2̪U2%F\4sEY کSM" xp+p6]ό&%lIIJAӳcǎ8p .}p�7])5#&ğ|xQFsO~5k0vvv ]#W=Jsv%]9qD.oܸޑ,@Ϗ=Jeƽ&׿<o4R>2@\ [~| ~ꥌ7*]we:0 Ȁ2LWiO 3 ?~<ٮ];333SSӆ mV&M4cƌy-]NںuW\l2>Y'''Y�"ѣСCL]SDEKB2 x6tHnFy�_}_~%W{E[DZGŚ5k&*+!rɩSpɓ'U4… eQ-@_]6xQd5j!!!VVVj1ܿhPy9݊YbիWe$ZLhh<988p;Kv ^( ^`0bčgΜyωef#lGQ۶mԩR.]sEmrΩQ٨B _ sV+3U(یm{*Ux|Q)pΟT�^qj*,«,0a ruĉDH6Rd[qeS}qttab>8D611iҤ |ܱcGY 'Oemk+\K5m[Swn:}44 j??Y& L722jѢO"Bx$tOwܱc.CaVl ֓rR/80_EDD\t SҌ ն袙iӦ^YYY`nŲ8?ϟ?D Yf;w_dBBU*`jJ5 %`n߾-I"Rxx88vF'ZZZҭTUv89ʤ^FWOb˿ [)g8>8~xì[[.7Bve :�[wܴimmm}}}lTtMK(3G,gΜ)!@< 'D/e[d:1 =Ȃe <x zqx=u`߶m\d'|RVzթSpHp<ݸqc@@�҂s&k8dpW\yA�CHÉUܵ_$*I[ v8+!!@JWzb_yz$KDuIII!P;"{MSSS0<Y8K@˗ك166OTBG0~~www>GvNd`NUe;uCBBЄSN bw޺u+6o\P)!R|]1LVr.]~3{슶dՌo-n(T^:]@U]wb$34H'|[bbb,X�f7f3`"=z4|EvZH7;;P^eJN<Xu!�/?_? |ᡖ-[6lxb7_x… QQQ;v,eBF O;w{ B6m:lذ ш.6%7( "E("SS!C۷޽{T4|e5UdMBz@g6݇O$A8=xi@`` ng-;p76X<99tF Ӛ&Mtɉkǟ?Hʠ2%>=JM{SL*ܧ 4-Z*H(8C&]!H ;f=JNWbY}qչg_a%81eɓ'999{O-,,;L4V4`đd 7+++==ɓ'w'mذ!11WYЍ9|(3;1_r'聿:uTR?hݺ57oٙJ^|2yĢ+ #GD[NH2@p*�Xd0iӦf͚<yM8&)myǫ׮]{<ׯߧO_Qׄ~+ICÇ%""""m?gϞ @䊤fǫZPjj*v;##%22)boo/$$zҒvLVAI@dr;CMǏׯttFP Ec}U){ww͛Ay7_]9߫g曍/ L2;XdĈZ=w/GLIӍI_~3|·0$C(??s'`L!C˖-ر#Oa8"q݃en03(((99Rw-D,]^wpp0`�-[JB3f}\%#|q>cʤ -\8܅o]%OI&pQ+--fΙ3酶�wY6cch?<QQQ"Zd,]m׮Ω[n5Zhkz'@<wwX$͖:%KPLp7n\\\]?4hĂ-hU2eʔ)Sd\yΝ;wsss;;;矵-]ާ`n:-'#%ϰßGS5/@DIkӡC5k^:ݾ}{@x"J>;@A\pAȮC�̈́ŋKrҤIO/ ObT(-94)M4cǎ=~8u7YB'p9ضmK<:ڵkHVdx{@3zSN(cccgٔy!dYz(k[V ќImqmoo%�wͰh"4.2]vQgIޤʔ)SLS̙�  tChM$K쇶)kzX+V�"===5k駟*ycz>{###As]K受�M=##=p@TTJFX�KҶ|_04P.]-,,@^>uvz5v/�ڈqƾ}V^-{͢ʠ^hzjpիWn:aooo:88X[[hjժÇ;wƍ;ӀlB)WtVk)en޼ٳ_bcc,X'(M2W*SL2e ѷo޼y_ppٳg%s_ً2.X^WB>`k{#G[nmeeeggjq6t.;iii /]T2,I?y޽{kvv6WIJJb$#!!i.B-;k֬;hт%W&zS^~uw=qMKNNF1q:P8rnj4Zdkܸq"�du U~~Ե/0eZ4 k߾+7&&&FDDXZZ6iҤ]v6MMөД)SLaر,�" J!Nh) ˠ HŅ.srr6mݻoܸÑ>p}Λ7й@ćxΝ/JFH8Qsn�JAH ڴi3g`288rȡC$:f#`etŁ&N{ 4rpp1c֭[Av).2.?(J"~~~qqq˗/GJNT)<<3-M})SL2?mfgg+֭{-aOEBw�k׮]6::zF4iy0Nd$砠3ǎ�I.??~1c� ͛׮]iӦ<JB=!A[*[nmjj \XrIøQsssΝCJ{%&&Ν;755ݒXdO> {rr29A`_r�݇acǎ]pa||< DwkrJjW*SL2e + ֭[{ xxxX o:H ӧO322Z!�} -nJJJ1b ީS]mrh9�ԇz7iDrܼyS22[U*((̄!xAH�SLYfMVVLHH޾;,;XeggC�J{L;T(ѣw0}„ 8EHT%L2e^ \4}i֬ـ g>yDg+cރK\e砇%P.4)YÏ=:j({Μ9)®Z >d777] >$$劅UmǏ6mʟ:u*Zj>ߨLfwWV@(۶m6l(ٳgҤI -8{tؚtdٳgwܙK;vɒ%qqq|6mLMM;v숮HMMo% QL2e G?33׷uMIIhT =e`hZ`Գg`P<e\1&*KWyq=ʕ+DjׯX~5jԭ[ad3ԍYF7μ磣իs!8tnIwm .,,u*RK v߿W^e׮]{VOy֛sJGX`zv�R/^ըQ rKl>mL2e++&@aÆieŊ'O 0Ґ_Xtw>j/ٳtתU~=aVuƍ_5Dheeo^266ҥ \`˗rAE7=wҡC@aJnڴiHHHZZÇ%ھoJFlǨ�8s̸qpԆ 7]]]q'j6++�5"%9OL;6Du^:}رc9!""b͚5-rvvW^ƍmll.\(yEZ+pWL2e Gƃ 277wpp̼~%MoF*}SN:tڵ/^eK)@䓑#G}g5k411k׮ BF?† 2y䔔Ǐj-$LE ={&!=w=rѣMMM)9..6czaķ >;;{Μ9ݻxb b>}:<-2KŸD>d-wB 8J޹sGw4%L2e^ ),,3fLnݜVZuE)j-RLw$=q+=z477ѣG'$} X[[u4h7ߴlrРA+99< ˣb3Ijϟs<+-[u#Ot*ٴ7 u ҷm۶tR{{{j+ ݱcINsd5x)v.IÇcǢ(O 4O:u&LpY\½l)SL2??x@ LYlYvvd d&Bbeqȑ#>o׮].]}իWaI&ӾkNM]]]!}9rԩSϟOJJ\cccsrr~'w~J>s̅ ܹK_(Ի~zTA޽===%KP%QmʴWD<}GM<yʔ)7o޺uիgϞM  =z4u4|t%ϥ- /1;CYu v m2eʔ)S;2`ذa;wvppHHH Owaaap',|bggVZe˖nnn'NxgBYYYٓ333r-ZF&_|(RDzKѳgdCƏ߫W/�m۶ !޺u  kY")_M^jN \2o޼q%&&ɫV1EF?_ 7qR 8СC!x'''3334Uf-[ sʔ)SL .C s쒹Uvp<///pnݺӇAիjՊ?Aڵkwu `tԿD]hh(30t i]|sM=y>|}=y?j({{{x<E@|ٳu޽+Q=`z(Dd/Ytd0NK%bӦM&MCȤԩS {W^8SEtw ӢE /K{hWL2e ~a(cǎwsNe pWV@X\j =zIae^zaÆ hD=-- -0˃bӧ_xӧŢ%!ˑ#G2eJBBBjjjVVֽ{?~ ~͛wm6nܸ˗C2<(I" 0$X;JV>ԩS%,,r!*N}p޷o_Jb2w--O0ntdYݹ1۷oO5"""HtWW[/)SL2Sp"C-Y׿W\I[ZZghhhRRҎ;&OlaaѦM;88g޻wC; - ӧe$]ft(\ƍ>mڴuQą�9rdbggGLLLLMM6mʛ-[nݚZuŹzM䘘+Vl۶ 68%Q+_rǨb9y$(;;{/WC@@--S\ 8h|]2ݞ3g0.xUVm۶cܧ)YfPL2eWJ+sۗ .իngqTe FC0(ݨQ#($D挌s͟?S >Ȩ[nQQQ{a�<x033AU]vCson6a眲~z>}'''={\ΕTSRR###)(0`}1@v8n5lذq۷ڵ+y=\˟:fHjKHbj4:&6hooߎ>}:Q;O'$$p'O/w>D\ (Mx0p@4 {4h\=,,,--|2ʔ)SL܁ o޼y Ȧ{$ `sڵ`x!uhRM:u`DDxìgΜ7n=ztҤI2cc۶m2++#ѧE7o{ oڴ ߿s…ԝ;w&%%\2:::<<VP{!C@|:a„#GʒMڅ�g߿?W-Zt!xҡ6' VRߤϚ5 p߿?-caa̙39b5p!6-yj\K 5kE;@ɠT'*SL2G(777} Oiҧ* e:88Çߵk׵kנg֭[Vܹ30*!EkkѣG111ϟ?<b(VAfe7Bcǎݽ{KϣG% wC.^xITٳ۴i/NII\WCXE6E&9---ic8((^dxJz*  x odÇĉ:t 6:wTid%! u.<^:.___ $ #HpS7)SL#a�@ֽ{MC90M)UeC%p롡4h@{ &$$ 2 »m۶}!Ehx]t)8cƌ@422jܸq@@�8K դ4v.ݻûɓ's9ND0&Mأ">iii6uttl߾=ʟ'Nʺ}p6Y>xMi s$Jcܹ4ŅvF�Æ p|ll,SIz>~8u [n=wܱcǖ/_OKԊU^Mg פpݎ{RM'Sg\3LF2eʔ)pr۷y@˗'RaAgggpBnٲޞmgΜ9d`I&|󍱱 ZXXTVFh{޹s/.i_ի=<<dN{.М Ȑ= !!!@*0??_Aʤ8|m򅅅\h Eٳfr6/yi)-CEFFFXbȃ YJi׮]ٳg  Dk9uc{iw% `6n hjjZ^֭[KO~ȑ#ݎo8WL2e fR-Z1cիWeOeP[AX.Ow!ײz___333`tرǏI۶m۪U+swZz_|yf(f݄0*?3PBƍdZjB%ri//޽{sS2g!-={&,.ڵm0PQATݺuk֬A|x޽;p<`�^Q\wĉH֕+W=z433-A IIIC]xԩSk׮ ]t =_5zGWp"D<9ׯ_ѣG㐖-[ jҤIT6p)SL5K;;;mѢE[P?o<tʔ);H' 4RqrrmrwXakHF~aǎ.] DO+)(pZXjN:H={Ņvԉ 뱱)))({AÜ%9aĴU#xY,z>>Mx̙3qEpp0W>qvv#GF… >|m۶TҒsǙE^_JdY޹sƍs Χ_X zݻ8Qʔ)SL `Lڵkbb"$3?W}Yfܾt͛7Yma( {6mP#X#lmmy^[n]z>I&iii\˘.]lF`}V KdEFFܹSKT "9׵4w.'1TZFuvv3g<DhiLLL7oS{={Z!W-˖-ۺuk|||HHF2Q=z'O,(( LsY]v-::'7jԨ~R,naaQ^oO*p/*2eʔ)Swt-x<==:ѣ# BB2œ(Zʕ+"uVjjܹsB�f;njj jffтpd˖-+}_Poq3!Ǐ3jԨAebcc%>//j�."ӸIt.4 Kv Wn޼wvvܹ#rM68p�dVZv-8lSE @/SJm8aʕ...͚5^^^x ѣGnWL2e vDDD 0dʔ) ڗ2H ƍfN@̨(hb>w,>>~Ĉ(«l˛;999::2F5s燅uquu]|9HGW8>77.23PrtΝ*k֬'O<~uuب$ Kl/v`#񲰕]xI3uTtC璆(iɓW^ Oxy ~۶m---vޝyΝ d]v�BlݺRכ6mJi<7 Mƍ4hvڅ(Yݒʔ)SL@'N(Ço׮]\\(d|2HګW/<$$$&&| q8:4h׮]p¥Kfݺun޼$=9v׬Y͘1cfϞ*'N 7n)_d ̚5ۻQF_|񅃃Ö-[eS$ /$hX\2^oO>E`={6)) 4 Wxm„ 3f@ 6�iӦ 2ΎUVL%gΜ<Нw/)-4j簴4j̬cǎsѢE8U~}P(_Uveʔ)Snd$&&z;](z w҅?%+"gzz:�ʺzjNNLyyy]NAsO?^:oqÆ 4h�(2>411GA͛^Lm>}'OͲ3b1|$x?ՀhZc@ xSSSA,^ 6ҜΝ;^rdo}sq~nݺG...˗/eeMTA2eʔ)pV֖سg!;;[޻wٳgr)tNϞ<yf##z {DDڵkSSSsss<xPXX߾}C�wɞGSlٲӳe˖_nnnޡC={¯#F<y1c O`?3ЬK/ukSiSRR`qu׮]w5k֊+bbbLBv26G6dd]t/gff)Ρ#GN,2J_~ڵ驱c"g)!L2ejwũL��Xڵ9qSieI(j[ZZ:;;ܹ3###//F1" f"+y~*ϟs.] /^�8�Sk׮\ry<s ۶m߰aӧ%V,hZ-]V1(r۷F :u4mFGGӖyAq�ʪSN~~~^.[\L\'Ku%%K.EFFB5܂f̘MkԨA=ԨVL2e  EO/_(pF𴃃4{l`jf?ُ?(ʹ0(2y#q ߼y-GJx|^c�+8ImɏQ9D΀ݴ ˭ѻw&Mԭ[VZaUV^"""zյkW#'Np߽{W. ^ʂ pRʙ[O?Z<VWʔ)SLwQolߨ l2WWW7 TVrΝ;waڴiǏ͕)vIਛ~WBHk﵀Gm΢r ดQ>)MrŒ1uX5P&ׯ?~Yԩckkӯ^zܹaøo4R\\'.?sСuq%h>``J0aqժU ~ҤIOp QL2e +7srr7޻wO>;eb@{=JG0ŋNush%[nuĹREļ2D CK=iIII൅G}TJ LΗ.] įXb̙`Gp#@y7nܐ!CzzzRӢE/dUV {ϗ*HF2eʔ)p9Q$Hrr$݇ڠÇ,Y"Ġ@y`Tۜd. [u9^^b%io^x\Y|(ٳggΜ3ga'5kDA%E6tAN9/ݻwyfmmmddTzu�znݺ:t3fѣGoݺE%]݆ʔ)SL @ !!!ڵ&<#eR<77ٳ'L 3�2 FW:O컬+Ȉ曯Zjйlcc#cee7|p___ 077ّkז큁yyyO>Uە)SLwe ܁5kք_J2~q!<<<nzΝ~d.*KT_*6Z޳a9{dd7ryuiذ,`Yx۶m9cǎnnn#G (2vkժ weȐ!7o*h'u*SL2 'O,]Tu߰a۷g Ph;wna:TPP@n)U23^/_wh__:4mZG}"OJ*TcbbҺڷooll\믿nѢoccdٚJL2e++sΕ_nyPUgjfj&]1t}q4Hp%jH" n (*pY.h_L6&1u\sH9)})#1SSӥK^|Y-ngK744(޽{/^\bgiwNO$5/[o ?X[~G�YF�@Zɓ'%mmm'NF7{eJ_\Rs͚5W^REۓZNGHd߾};::z^^^666~a>}~K3oTo??]##9w �p3H%H1HIϝ;WڮFr=.euƍ#FX[[oذ!33V-c-hauZվ)))Of̘adРA>|}@@ܹ#^QQ!GG~nIMv2�p_Ňç~:k, uTvL#ޞdaaaeenݺŸKW[[[e[RRrݴK.8**jǎ7oߺuk\\ɓ'՝O_~��! ah"GG#FHUHmHFp%8҂111ƍ4hedddvvn4nm)IʗIWUUXԤ=s{-�pPj 777߱cÇ_ŋxW`۷o:t|*P.9į"⟾ nt/+ݍf_]� 0JKK#""̙cjjjccѣV2BI燇KwN*))pWSeW_ӻ?� ~֭+V,^X-EX]]n.냫j]<ϟҥ u#��w}j'OϜ9sر~t|}}4ߋU-}n{{{rrI6lp嚚.;��]kkk\\… -,,lllrssh܎K.M:/:: ��zFꭶv߾}f2771cF|||yyy{{;c ܵZٳg%eHz괴bu1��w= ܵk׎?tׯ_c@k4#G899=z׮]999Ϲ~�� >h:::.\(mgdd駟޹sp7 uuu;w|=ghl~��?subll-,,F}Сnv 챲͛79::Ji4��Ǐ fZĉ!!!~~~ɕmmm-tԲ/"YYY&&&(..niiQ^2ȁ ��]{4pTTTرcذaWlhhE AvcȲM8s挷/&jK��#&aobb2nܸÇ3KH%ݍ/СCeee;�� _fBj[2n֭C 6mZRRRUUUkkԟSx#޽{V1bߩSY��zR^^^&&&˖-Sd>#/rq߹s;;;/^8!!Az��w}jhjj*m- 'Npwwْ%Kbbbݻ;"��@덚s皙K?~D]J@WUUݻWd'N<tÇkkk x;�� Vvv;}RwYlH燇˨lʔ)Ν+++SW/0${տc ��;^+W̝;R}wU4pod>~8##c 7nѣG+**e4e;7�xͭJJJ^OF:Iu˪KKK^'N 6̙3{WB+��;^ZX?w...j@ uvڵkEEEiwBbAAAJJJyy^oYYYddeXXǏ��vj/222ZxZRȶx#''g.\xNKfeeEGG߿_6PZ=<<|֭MMM8p��{ ⫯Saw 'or gϞuA577'''5رc%%%---/qa\BI��zY0?|_QQ֦'_=_zuٲe!sn0dɒ4VkWv/rnnnV|gB/<0p��w w9cc7n׫k Uss~;~x ɭhv%@ k׮XYYM0aڵ2kAFr��]EvG޹sg^^k\[%^` x.\B}ϩYnΝ;ype@#kk3g<x077��]_o511155=p�zz!W^]fMPPݻ<xR]]-/޻wן_#}:uLOA��½{kkU>KKˣG>v~?-/jj"{SSS\\Ebbb S5 ֭[MV^n۶bȐ! .LJJ2ȍ��{ee9s䚚\ ssDjyyݻRbiӦ9rDwQ y1A ޽{��zFFFy+Sh}n޼9}tKKˍ7feei4gηQ ;uꔌU oZ… SL2d7|SXX A��4\ZZ… } СC'O>rHqq<ݓh޼ysMLLTcv9lmm? & ��@> ֔ssׯ=59oDFFPդ={^:##C^nذ^[[k]�hnn>r䈗ݲenݺڪGsu=ztRKK̺gமaMp߻wonnlQKjʘDzlҤI~lZ_E~md ښ��]UUU ,޵*((j8Upڵ2s3?7PHAAAONN6ȓвO-7n\HHHJJl-#c꿗H��@o+tʔ)&&&|ը>{qqqDDĨQmÿ9F)*ge|2iҤ3f8p@J$٢M6M6mҥ'N(**bW7�f?��wptrrW #n[^+ege , |reeV5MMMgϞ ߷oߝ;w*:1X��wƒ;p{tttyyԭ>{JJԩSS *UDjoii۹s{DD Z9^ߏÇW\vH,&F;��;^~oٲf&Lp/++ 򆓒CCCӥSlf]]]jjĺ#f͚u|\OF"/_6mڨQ6nxm4�� kkk+uq5UF=%%/$$$--ERUk9rsTTTNNԼ͓QGuuuod0���p?|]'鼳gVVV z_͛{zi6cǎ͟?rРAҲjv Qfa<QF}Dz7}a w��@w_tqذa>>>Np///tvv^|ŋ<xpڵCɘvС&LشiSjjjYYF?<qƻw�F7k__?o��"ܟ<y"ncccdd4mڴ3g<b1RRR/^,uu۷˃ǛyxxܹSR^]ZNBO>\be<c`wP��%\Fv={vBBVcJ7jּ;vxyyٍ;V=ptt?~ll͛7KJJְ?y(ehΟ??c ˗gddշZ��)55!(((%%9QIvp<}_-"[4n8 իWeggWVVd=77wӦM2P8q={}p f::ʄ;��{O wɠw:99Y[[Ϛ5ŋ9y@Q@IIW\-~+WUWW777yV~Ȧ\`{XXXRRd0 w�pលhnn*Z0==ٳ999uuu----XC=_+t𸸸uY*��p3g<xǎ{>MK&Fu*b^<O<<<"""_^__o`��½Gnppꫂ wF)ҲvzsԿy][zY???ww(un ��=B܌:t޽׷%gVWcm۶M<900կq ��]yɓ''N<xȑ#U755Fuc 9X2JMM \bEzzzCC-��NƍVVVCݰa{cc#gjȱc:99}gknnVӄ?��p7EW^7nUcݭZmBB´iӤWWW w��@B} [[[SSSz֭.j1seUTTg;Gu��wCHGZZZ[ܹsz{N8:thʔ)'Oꫯ<xe��posR޽{|ٳ'L7[oe˖6½!<y`ff`ɱT��@qIIݾ};w7oވ#???x ^zI^vkV@ar@mv}q��z\xR=:xiӆ ҷo߁oԨQZVjT/]_K<mmmsε֥K*++Qw��zFmSSSvv{%rʨgdee%$$xzz0 (((33SM5Uj:rh 5~m^^K@��] V|ܹ&&&喖6mJMM쫬@/++[v1c$ݫfw ۣ> t(u.Nb=88xƌ7nzhh��cǎ~ѢEwޕkjj.jR{򲆆?M'))I3F? Ƽݣrrr r���ᮗ'233LEFFJk4Ǐɾ]v͞={̘1[nUP݄˗//^I9s@ar@?��pkoo;vmxxxVVVee|K]ͩ .H۷O^lll<p_x`L޺uk˖->>>^^^+VHNNt{���O"WVV&y{횚y^>ElkkkjjqF@@ȑ#'ݟB%ဪ!?uҤI˗/?sLqqv��׮]sss OO-(4ںu'NfsP9X&!!a֬Y&LXtɓ' `L��pWywܙ2eJDDxUU5$*w%SRR +ӟ_w533۽{ÞPzw;rӗ-[&3f˒3>�=tÇ<==ϝ;_^^.^]]][[[SSPYYsڵgn޼yԩjvoy뭷 痖&333.]:a„Yfmݺ͛RkKqtbW��W�ͳ^dcbb>|qx)3g8p`ӧOwuu54dȐ#Gؘ<سgO^^_ uݰT{hh |||o.c-zqD ?s}-�pij'N tvv2eNqcǎ1b_XXخ]k<xΜ9III,/ZT 6mdkkeu%u]��wCh'OܿϞ=7n\`*xi3fXBJÉw߽{ѣnjnݺk׮544pZ<..nĉ&&&ӧOcTTTħ��p7|oll"pBRR7|._=zT]]*$$$HK;88٭^M$?Qʊ?q&O|P{-q���n.(ީEI\YݕIݘ_444<yT=22ٷ]reժU2p={ƍeU[[[VC���w 7/4̙3%nj%رRuY$s_]߹sg&L ܿZZZyy%��@Q':|OOДiwFIߗN<??۶mSN_\zJ]w[v�� פSkJYf֬Y֭ ttt\|Cn޼YSSd>^jnnNHHj{uV]]nG��ێG3fĉ_Ą2 @OOOO===lْQ]]22��pjϝ˛UTT>}z„ Ǐӟ4lذ[鮕 S^[[{ I&]655\]OLm��;~<xb W^gϞ---UNpK7.]zjqg:��;~U_vm׮]ѯ_s9rS/F=%%%>>>{RU=jj;� Hk4_xqʕfffoCZZZzI_ץ cbbfΜiccu֛7oVWWKk=z ��x!5`;SL9zhiiZ R[wN7įyj۷o^^^k֬9uTQQn֯=��wRת%%%޽w]>}NzJ_\Cf/|;$UvvvÇwppXvիWkjj5=9^v��wlllܷo{gbbt_yX/M]F/0;HEaa;d,UTTk ��x9*^WWw9I#FX[[ϙ3'))Jebu]7΋/yzv��x9wLMM =zdhHHHbbi[[a_ZXvHKK4gϞmdd~zw��]jjΝ&MZjUZZ<iHfddv?~~5K{_/ ��hxQttɓLt;Qdj˥׬Y(cy r޼ykRz {�� uޞ}6?޽{իWKKK%u ;Ե---MMM۟}W~\]]ׯ_#8:::99EEE��א?v/,,\fݨQvyڵzu+P^\6MO₃wޓ'O޳gOzz͛7lh"uaKYL��pǏ"Q~}҈իW;;;ۻ/X`ϟ)((5 =._,-nee%{ӧ叁*++\2o޼qmݺ5//O,7 ]N��=4\o..jfffnn>x`77ן>}Z~ܬhzPc4M~~3g,Ybddo?o~yЫW/!!!qqq555e';vlĉ޲[=x��IR@VVV^t)**j…&M>|?sӦM7o|$g~.T7__]{ZRR"Я_~7ߔp>O>4ͭo$Cpy[_'_`.�3yNھ}ܹs{ݫWaÆ=}޼y}|555*]?;V-c/-CׯoܸQ6jС 8pĉG;ԩSۗCu69d322V^bŊxi=���@㕇r6Z궾>77wٲe&&&}Ƶ...aaa~iLLLzzFxU <= ԭ(TQQsNsssِӧ/^X<L6m+tՔuQomm&MtRyYCC'��PcǎuuuݶmgΜ)kii9rHN>KJJqƝ;w JJJ*++%:IuiT996o̟zy_?jίWUUݿ?!!A?(wk.yYYY<˓ӧed"wwGɆdWYmL|'''5aFʞi ��pGWZkeǎ/{',Y/ͭ%'unذA㉉7oޔh~ԳښN2*Mollh4j'G=z\n<VKV8::Zv=zU<! y f݆XXXȦɆ,?%/\$E^l��@IJ[ĸ[.++B+((ޕ(9sd}cAXR~ׯ߽{w\\םbcc{3gȓNrJ~~~Q'|ꌸDyaa<gnݺwɠBތ4ׯ_|Y~ƍ%'O<j([[[!k:I,tzy_~eNN@z"ADDի7��xԙ焻ҥKJ8 1"/|…p{{{33}1BH$O3FY;v_g<<<$CBB,Ye˖{FFFJduIXYpi|||ԘAA(?dU~l?#'NxÇK[KxA-Ksdel c țqF?P[[{)S̘1#99YL��;^I?KJJ6m~!y,f5[MOO 2dn@@e˦O.?g__ɓ';;;dkk+U--}ذa>|G5uTd[21ë|KIvyrРA@j[I"^B_z=""ɓwܩRNKoذA~ZmF.ՒjZ|Urd$h"??sq*�� ½hŊϟN]^]r`…&&&R7nܸ|͛7vȐݵk l6o<i}ooo%=<<yM&L''H\rݺuk;ܹ3aHVKKgtP٢9rd2~1_Y\\,?YJѣG-0W7��;4%@srrf͚|̙g:E]RR"laa1jԨ|5\Y]):Td2H(,,֭[Rj$/O\rRҺ{$?XUkSꖂ'ՋՂ2Od!;A0X'Nz7zyym߾]"p��;:ܥ###/θ?szyTT4ÇD/O/Ѩ"y.o)(j=xu$bZE*ejt/4mSݥѥe ҫW#GN4i…˗/_r4}YY��wtu?zhǎҦ UUUg9s̜9ŋ8on5h4>6mZfnn>hР޽{ۿoolj ��wtiK憅yyyYYY-ZH&H;::8pL)Eo ?ZZZdВyfoooSSwyGw}+y1<��pGW{[[ۅ |}};I_~^w-Offf1bϞ=j҈[<GǏ_reHHȊ+dKO:h4N��]kmmZ\}ᒪMMMOօ{zzѣGkjj fV*eӊKKKu ---<󈰷� Wy$Z^^_988|yyyꄺnMw#G9ᆱ7uc!u.U讈}���;"[;::7nhkkkfftܹfXүMMMQQQ666ӦMKOOW5}ej���wtEJk[n-Zj˖-;|^^^CCZQ\~}̙} wͪa��^Ԫ3fӧԹnTPP Y/>tPcccue] ���;~ _zjժk׺ȷRSS啬��@53SYYyĉ!CG'ŕZ��� 9sL>}ȑ'OpBiiV��wv333ݻ'_O:u̙s%$$0I5��|֩E G���(uu���;isC"����������aSs#��wp�� ܁_,Rkpi5�p+z(̞|Mg>9�xUAapؙmp,��;�0�p���@���;��������q+�p����������+mz���w���;~������!͕#��nP)FB�B[[!��wa`Kp��nhnH( ���w��w�x�@dǏ����� �d��;���@��� ����������p���w����;������� �������w���p���@��� ��������������w����;���@��� ����������p���w����;������� �������w���p���@��� ��������������w����;���@��� ����������p���w����;������� �������w���p���@��� ��������������w����;���@��� ����������p���w����;������� �������w���p���@��� ��������������w����;���@��� ����������p���w����;���_#6R����IENDB`���������go-cloud-0.20.0/samples/guestbook/blobs/azure.png���������������������������������������������������0000664�0000000�0000000�00000201747�13670045075�0021727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������(-�� &zTXtRaw profile type exif��x՘[ D / \ށH*d~tO5$pONfhk^z|yK,X]?&}kX.VC[`'=.C77yO={F02_N!,9|r#g-ɯT>l~Ssx߇"P?}]/zݑԾbI۟obw{tT"UP_B|b Vy5+꼌#.۠9y ]ѾRdː+y_bI'5SZ)?,z@)�)/P\N{gXy #0p^O]bž4p7�D;yX8 qk5sf4HX%T-&B |;O  69WksOgl �R( h( *EɟVUԴ먹VF˭4mfaيUkfm3`ԃ#ƘiY:۴X*KW]mkw-l}#T:詧;K|[ovQ5ܯQ7jXyƵq/SӉ:f xsHER#Ş( M&lq@Iz?-r; q j{< =1_A#?[ Pl|ik]edG[;eXg^-1SGj( bhE086t)SAԽU,ՆYj[4EH]Id+P'1L%_*SzP6wVf?$jRγdd*)ǍyTJeSA;pr̤UhKuMz-Nƚ咅arg·˭!hBi<L_<{+k fO;30k/就IIt209刅5Neήgsߔ-oSَPe}gw]g+ZYi{ycP*k/&$3)yruWfTK~VlXO}l}#Rkr.~h~+rКS9 k2!6�B&r.4,+Q>`AH /k ـβ<a ){B1vm0q&|>ZV QU33FP mr$x;瞵;|]a% 3ct`\ZVD=ljqսG퐪ް(eה'G켋6 `Sf7;y:y墴Y6YH"ͽl..7Zjs( +-@$R+T9CB2<^eK^ebI=$*cuhfSe[3KdCbJjI CMֶat^¨&LN-~1`$]3iw*am-Ckc7J B= ๓d-堮eSe$8Gz]l-Oi+le9c> dD '80Rab,r`r..$N56b^Σm3 wl1$v׀_3 t<yf8) `":TjmvwLT84$ش'�l=ű:#5ʬ?o\+T =S82ˢ?}E\'JtA uL'G&)K'ui ظx9~]&s:vƈ0R+ Φ-+mIC hvXTƁJy -h'2qnD?/J=Q9߽h>[>r!s0Hvi?MI +U+^̰ ra`:g8KH;بZc? ,c CsJoBX.(Y ayV*p )舻ZxͬT[;D%Di]zX"N8u/Ñ#y!iOse0sVM:1( 4BHBȴS_ĝG.{w{Z;ܿ `E.ڒ珮zQv)k8GPQ2 ,nvH چ@ q1L0x 'l-A 9 6@V&j zG�A̞RT0'/084/]lWXm)!0$q! !0Kֽ,vYqhLj?+ 3J&tC'zT(%4!,Ͱq=LN=UH2?Hޯ$$֥ӟy!J~9@-ҡR"Ů" GlÃXUMa%$ }ؚ04ao%z(`rR"& _ki]5?. ;5viɃGi!RgX�ֶ:'Ś@gef桑'>D#){9b݀Fd a + Ċ}<즃.&dBXjf|G~턕mGьq0uR0Y-x8W4N* αi&NgR,~w,:'IH0'V!e~i[gy$pV@\o(o swp ^2~FM :(:j(d1cܳ e 5Bc!W8Ա-YSuq$o6K18*vWρ IƉQ0 A7I[ԁ< s}Dz/Au$(ZJ{w֜s[V|6XDPXnwznr. Y9+fwZԯ-w甛av}AyLz1a.<߃?K18]f<`/@an-Ÿ8z�[ Z�E$<95־/ 'ߏllx2nw< ���bKGD������ pHYs��.#��.#x?v���tIME�952�� �IDATxyt[?}eI=qlI4$d4 ' evX B20NKwBC2h @lj;vݱ-ˋ,k~OeHB;yIr,YWyGN """"""sJC@DDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD tq$I}_tZ|1BJ2Lu""""""t9_8O""""" ,͡J""""""sÔDDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDD DDDDDDDĀNDDDDDDĀNDDDDDDD DDDDDDDӘ$tZ]&EA'qRԸNDDDDDgGЉHdyݎEH'""""CeDDDDDDD�GЉcAB"""8NDDDDDDĀ~aul"F9rNDDDĀNDD(:?:t:%3DDDD DDt.y2d8'""":GDDDDDDtqDDDDDĀN4 9:$J:<4A't""""""tHS:k&"""""b@'s"""""iE!h::d_>xHD*><O#KS&Ṃ(d2J% d2{( """":-LƑ'J!J!H  {\.GUUf͚BR bJDDDDĀN煉#ҿ'B:s8rߏt:ǏcΝH$+ QPP� Jx9GΉw.}mnq_~Ch4f]v`ۡV҉f(9 VK8$r9(T*Z}!LN&;#M6!N#A"''jF\.jNBkӉh`.X,X,χq�G,Cnn.j5j54f͚.B@4^/֬Y["LtbΜ9ESSDЀZCVCd#""""b@'qFq"!Lr@�. tD"(--hJ:/Gc?h4*¶Ċ+0{lL&mmmػw/|>FFF`٠h>hbg:+\jގCaݺu_b…X|9va2088v455axqFtwwctthT:_Q__6l؀u0 DEE`Zt:D0<< FV o:̶yqm3[v픏w.>ʋ/֬YsF~CCCY\{t<-Z믿~;xKصkz{{9x?~w .HA3<Ӄkbǎ(,,ĵ^ XVL&(J1󡭭 hhh@{{;F#{=ttt`娨d:oȥi($ƐJ`4p8`XhVQXXǏA.---(++hRwL&hf{WPTTuػw/ݛuWU\袋`0xЉ& زe rpW6 & zr\ɂbpp;vR�J5cץgKӈFfC^^0t: ˡT*Vp8`2Ĕx<`0x<Z͓<ӃzM6 _'O<O}SxGpB"S8r^/QXX(B\.* yyy(++_믿˗/G^^~?݋ #f=SBzfN��P^^<t:(J( i XV$IhZB!444pى#7oWB,"wE3"#tVr1E`ʵ> �Jmd2v;*++QZZ\R)߿ rJQ<{O50Om`رc a6�P(H&P(А~*? M/xO>Gnǎ8x -Zt+WDnVF| "b@'N^bSjH3:qz& MMMxa0h;.fN # TJ<N~62L\}M ҿ'>qtH$BH$ H$Ξ2ѩ:|06lpB}7O[@_jYuEkL&<Sキ.kDhCCC7<Sn@UU͛wV"":9HgL&FAyy9j50<<t: JR) J& g?jtwwchmm(DuwixW"@2D2D"@<G*VFD"D"Bh4D"X,&O xXL[z,ߙ_?G,C8CjBՊ'!ˑJH$!ˡVvaD:w</鐭 UW]?񏓶Q/H/ ̙aR �ǃ+VG?ZZZp 7L=/L&y{<@Lo///G?:;;QRRF3ZaT2q$XPraŊbhmmK/իWcٰlRbD"gI :pF#F  ˑL& Z18H$D"bjt999B(,,D<N! p:hr\ܷtzj12228J'hIo,_<رW1#<u߯k\y<NPEEz)r<?Ӹ;(:1L;єJTUUa``�]]]|E⤀9q1* rDEEErfXjmhؘ>66u*JP(h4 \x<B/I#dht hvNJPzmmm:::E B!XV!Hb(`2Da=7zT}:>;vdݾ|r[q?ꫯ+6n܈o9o}[[x$Ʉz(k@}11}ttBբ9990Lp80 b:H@Re 92 j. fT 7nG̟? d2"  FGGa0#D"rDQ~s |>u:ƠRvJĔxL".:Al6t:M&RP(DD?ttt HVl|8 FGGaň؂ؿo"??�puM /2|ATVVNw1\Y]uU<Ex`Ҿ7x_yЉ>^\\"x^p@A!LuҔnĀRhRPUU.lڴ @8F8t~Hkl6ftZL?h4HRb?4^PJHT H`ϥyd`*J^ZLRT*>455Aӡ^Ecv?q6:ϡ6b&ǎ: }N}ѢE(,,Dww۬[nZa|k_띴///կ-UbŊ_~eD"%CӉ%K Hرcؽ{7<l6h#&U.z~O.ݗVE,VŬYT*wƬYa6ՅÇ@,Zlp8d00LZtbY&H$J044$֦Kl Al6��rrrD9) Rsizoo/?F#nWTH&0LĶmPUUT*^VˊD3'm+,,… ſ ?Ɨ%ib~wɺW^Ayy9OL/31ӅNZ m0"nG^^žpZ-~Kf3$4 \.<pAR)n;v @�jUUUx<00 0 b ^P@R!J!L`~6MLǗ.,t:TWWj6Lbb�!Q�^/~?80|>#KS8> !tww(++jJJ׶k|r <iwqۮIkmmŞ={eu~;<?M>L( ""t>4KsѣGى:f�D+ߏ70 TM F(//GKK aQ^^ łB8NQi] cK[ @@�`$H>v/.4Ha_>Rf͚h4X,`0(؏`hh>8z(�FFFQQf,^=i DO}}='mVѼWƛo9n_iv׮]o=}{_ia]<჈h\Pjp\+a۱yfl۶ FѥmJBaa(&_)v( @_y 㢋.a6a2ą�$4>Ë4/a6a4jE5qvid_!G懢-F%dR9bzAmmmF,S�z{{1<< \.߿ .%\ ffM9Iۮ nIǷmL؈Ⱥ=3%}<Ph}NDĀN4.r1e]Rq"b1L&ٳ]]]Xt)#ڔi41:mZEavtttCt)gw ҈RSRBLw-KXt: Z ^/fH- N'JKKZ@ �χftvv"H 8p�PTTBpjl6{\Nt[nw/Ӳe˲n߲e >ϟ400n @`Ҿ2<bYb�1@j166Lntvv"t[oF`娬Dnn.R񷂂Z gX,\r%l@fЖF률,Ei<J/̢uSUμ01UɬB\o4NEwi}ddnhooG8F,C?9~iaÆ 0(,,ٳ1|f`00#[l9�. w&'xt$}݇[fϣlƍYxb91@*ɠڊ`0P(F$ d21 bزe Ԅn'DeT*%FZ-jkkqW㥗^B}}ڞ=[ ۙҥQ2oaSOtTBDVp`ZvrގP( `ҥ8v온Pсv444ŋ1|fAղ-Ukc/.H駟g>3)oذ׿5zꩬ_x,Y'iv1g}V""b@'L5k$Z-%n8N(J̚5 7x#***b Q-sl6cA}}=vڅ"Q-^O2G3e1~6.ndChZ"<zzzJPVVaL&,Yزe :::ىn>|'h"8xa񉅫>,󆆆Ǯ޺:u5k֜oκ??p{ɺK.=QN?;3P"b@':[8(rrr`X D Ʉ*$ L&(Jx<zcݺuhiioL+Vv)xNNVXp8#G`llL*|Ow34 , B$"T*8Zףؼy304jjjp8D ZD|z3gL ޙۤ.:H1f9og Uϧo_m{|嬷:p�ڬnF}SSsQ{x嗧 lFDĀNTL  B "Jall ǏUʥ)RO faӦM_2 _|1n,Mu/((e]Z8NFTITt ݥuшD"x<.IǦtyyy޷oߎQTWWr fRA=;?'oKA2D2BѨ EtL:p>x'mw /<;w⪫:kϥ/u߼ycs(ގ7|<Ȕq51e٢L*bH$JD044vTVVh4Z*v`֭xwRd1]T㊊ )B4)DKjRP0;w.vڊX`Ν V+B>:}FB<G(B(z{{ RFс>$ T*zb1QO!//OԤ0LjD2lΝYO5k:ĪU5 .ݛu{NXEDD D"K"hw^466"b JATرc8r䈨*.T*FVk}}}8~8{=$ X. *J<^OP�� �IDATdo3L͜<1Hq "Tvc۶mغu+P]]9sv#''ZVO8ra=i$I$ E @?B8 :::`0J`Zaavp8PXX<Fqft:~zOE._rրgOS<sYꫨgIaa!~೟,+1eL&ǑJ0::7p/FNN188uATbŰX,Ph4�>êUcnfEd2T*1>SCdpQA034f R4 jb*T]wESSqq,X�eeefh8b:{"@8F?݋all ccc())Aee謐J0441DQ !8|0\.<QSS#\mmm?iz.ׯ_gw}Y=SIkո۰rJ3xp\<DD 4?O,$Mw @}}=Rn7*++Q[[`0H$Fn{Pը^TR᪫B N466v]Lw5.!*Qgj-C�8H{[cn] YȦtaᅬ;w"" NSdIkӧy0_=L"J! رcؽ{7;RnJ̐ ֤'IAi1~455"BT"6Zvt6lȺzOp{?<nOStMtg9ڵ _}}r bit҂`0x~DDĀN3{h4*ZOQPP+WeeeX,䆇4U/Mv\{B!B:'stm̐8bT^+ɐL&FL&!a)Za^)l6̛7n hiiFGGQTT)֧K3! }ܟBo9bJQ9r֭C[[a41{ltfh4jשt<M&Rrrr ɐH$PPP<]MMMBOO,Y˗jL H?&mSk'ןR(uҥKa,jnnM7݄o?Ot:yPB'ORs"ŦMk ,@mm-aۡRP\\"tuuh4b߾}hooGqq1zp$ˑn PVU|`dbjt13evi$R*ND066�R)rJ>܉ z=fϞ-zoذ ٳxPVVҥ%'2?tqJk|عs'vٌ2̝;%%%X,b\ι̋kjZt0زe 6mڄFL&1Fш w3o>8p`}>磺 㶿k=|[Bsss< IiR_O?=v?<~?~#77t!hxD~[nK/&n̚5 'xj!ɠV!`ZvE+6˅"1B!\ EEE@|~?.LNR9im9�Q^Y^Ra7~5T r\L6~2A]vvxcccbqqq1^/PZZ*֮Ol˖w2wv&WL RHD"͛[ob`ҥV&! L*JTzڪ{$R̓a۷,s_TΘqڤmeeeN]w݅nmG}wui[/H$裏sk֬Auuy9TBT`0W\q7x#7ĽދgjFDĀ~̀u!ڥB!|>l޼k׮Egg'*++qW`(**b•J%hxb l6\.% 8wL|pK&ゲtl2g�H™UץL&P(jź&ά*9}2Ph4BΝ;{n娨`Mbğ)sL b=lj<J!ؾ};v܉~t C\XjP`xx* zp())Ạ�d* jjXjR:;wBP`={6F#L&ӌ^7kV3[n>r_/z衬~_Syd2u(6\.ʕ++ҟz),]tDDĀ~޺+8gPi$ D"W^ACCp8pWcٲe3hgr0 bT6sd2>g>{izz"C RhFΥQB龥Qx<.zRq<۔jǙnT*L&aPUU%ooݺ@}}=ΝsBTbhh N0͢=^*HVqOţ{,NLy|]Kw8F0D{{;mۆݻwcppԧ>RL&t:( 0n7~?EO$hoonG~~>F#t:L&($VQ]]t:X,&455l6jBV#0]֭[c>g>R/~YqqX$9#dzn?+++/bŊ|XlI#""tL*\&EEss3^}UlܸHKtRx<1]5sĀ.M0n:zOl{&MCFj2 fEQD"�DbzJ-1W㦵O yCtO4jif�1"*M]޶m1::~RF# I#. eee(((@NN(Yut>H$;appؼy3 0o<\|ŨhZA#G]]]hooG{{;0:::Dk?Ʉ!"btt6 x<”hDEE/^.׉hΓ$y晳o6Q[[{ֆn!/<XpHK3x`0snlxG}oҾ{ O<Ǿ8CDD 4>R)8p�k֬M0{l\zXxXRƅN)g`i|u*e%I_z�FFF022R ٌH$"zqo$ZVX,Q\KV?�r|\Q3r,ɐ\`0Q C^^r9FFFDKQE0gft:qttX;s]I=ʛm6zoXla0k{xx¦M܌T*X,&f2XVDQQ@z|>QlPF'  ***PVV{E/MSS|sk׮=>22o}4j�0Lx'4oŒu{ggyKKKxg'{g/9;1y}b蕂f{{;6l؀# W]u.] &fl:s,s g''f˜F�|02`xxBgghK&|XV?~@�X * @@<FAnnfp8(,,S(4 z g"gVWT0V+ݍ>( !??:FQD"H&FFFF1q Q?[NZg1:: χ#GGCCf3PYYrA!H```�Ǟ={ގd2"P,@[[4E @gg'.beW\qbqamiڵkc?`6O8z!Y&^{ f:')'''3Y{<s~nl6<Yk <裸袋+""b@,gd2 ׋[b۶m(((@mm-.\(֜KkR?hYig;Xe*GQ1 ȸTɺMMMbse2Ehiʰ4.}b1tuuj* 7o,Y X,3GϤz B<O:0 (**Bee%v^�r^1:::`0:8.5.ՔzطoH$PZZYfFHGcc#كr\|Xp!+֝KEЀ;w�>NNٌ<jX,BP  8|0p8t;w@pr ~ߞڵk.IsN\y'u_??Y=Ӹ1ۺu0888e?UYOstRرc_[n=+""b@}^XǶm۰~z a޼yZqq1,(v*\|l   044׋900��#rh4`F#z=jU bzߏ~\tE;w. ǡ gI5t:/S(8p�0<< R\qE/{^_MMMbE]-\ vaSR0E__k.A. ,`mFGGq!lܸGdePUUN'^҅طo=1|>:tHhld0(++… qQ(..j v띴tUW4w\u^xu|%|;җtNl 7܀_|qҾ&,_=V(SO=u_qq8z=^\s5=cXlY@?JĀN2L|߹s'z-a…K1g 77W8'4[ +hkk�Ѩ9t:<fQ]*&qKk( 100@ tvvb߾}bnii), N'\. ZlOg8nG"@8F$A8F4E(±cPXX"\.Z9n(<܌7b_Қs1|p23;B!  hoo �H\|NImOOݍX,<|Duu5M?l/L&jaXPPP ڵ }}}Akk+ t:EM:455kEEEXp!j5T*)u8SH�Xhi,No|뮻mgq}Кf|ͺo?-|ӟzlx^`Yp!/:flٲW\q/Ld9IEvj;w.V^lqEͦqX=9J]]]hllĖ-[LJ).B8Nt:l68Nx<v%q>fJK#pp===8t|>֯_�gFyy9v;l6L&mȝ/ɠjaxDh4hjj:::PVV\vjQ`ORAR |hoo{\Ef;Oʉƥ;v F PPPqA*H bǎطoPRRO~X`i JurssQRR&۷^>HRX,b=pqܹS,p駟ƔӴ?K/47~d@WI _VuZK,ɺGzZ' <YqӪB^}݇Oӓ7VXQt_@D d2 `ѽa:Q)4vhjjB^^jkkQUU-[O'BZ*^c=¶mp! Jva2/ZIU'quܩTJtKE DfxX dsAuu5׋>t(--h`g4mh4rA!''FPGSS\.rrrDn؞NbENe72݉~t}K!9ѣؽ{a2djuX CCCؽ{B\r%X`Du3h.J2B!A~AӡO\2L zQPP . L6mʺk=cY]]y??MҢ(?6lȺ^BIIɴ9q7gGHx <sYMuS;ؼyI! ""^ڗL&g|Qi4,U~ױo>`ٲeXhz)3ls?}vݻHDnv:3gNXkaXDi)qsc)B4>NC׋Fa6ڵ BC__np8`64_GZjE,G?:::088h4*gh4p8Xx1Z-{=455pjN1bxe^mmmhhh@OOXWJD+\DAjݍz~f̝;ٖL&]Z,JוJ% Յ^$IjG Q^^.j<kh/;chկ~_m߻w/?O׿u|lٲi}g O=rssqN3[iuBEᇱb QĔDBS ]3=' YcA]]-Zq#3%4e{*AtwwcݢbDUUȰdk&,[wi{y#MFjZt:~1I'M?7UV^z)T*o.\4uNH$"~NJ͆Z(JlذBnn.BJ%l6VUB ʝ؅T*p8 ׋v444`ppHT 5557U] hlld¬Yxb81&sȇ~l6:yyyػw Ew^9sȑ#hii((fx.8p�v횴i2>ʕ+n׳5k;=?p 7L󺮮?xI~wy'jkkOa``�ӟpwd?{lz~cZέ[6mªUHDĀ~~ԇ>=R;|0}]`0G3Ab˖-Xnzzzx<χf13tKcb_̰"D"!tmJHX teeeD"@( 6oތT*mn[>S2/DXVTUUF$A23 4h%Amm-"֮]cH&x<={(gE˷~1Ll(сvJ>:. VUy`ؽ{70*++rJԌMs]l}}}bâFaa!<6{ +zW_}ʬSz!|߄|>V^=}=xo~~'tyرc~I}Y<׾ sp81;v {ߟu g9cNN{gQ+w�� �IDATWBӝ3rMd[Sy>}ֆJO&Ě5k044RZnCќg:r$Iرcxwm6"BAV555x<ɁjxybaR0â�83úJB8F<5550 p\hhh۷oty.@owݰhiiѣGQVV$f�?w8HUĵZh5o<աDA Ҵ~ڵ #@?Z-̙Bq-Q]vah4BMM n7F)ͦɼԾOvcňD"VQQQٌ zbǹ >oP`3* vۤ�۶mg>X,6u͆'|7tӤQc?֟gXbF7l؀ 6DDDtb)4SfUeC("n݊;v@Ѡ+WDii)f0>Ӟ{ttMMM_kѣR|+**4]= +gNw;4*ZjT*DuFNݎ|S5\ŋncppBGG(�hvN5rT*sE(qq^ZrssQ\\ h4 ߏٳׯo/irʮ>� <B#dQ(p; ;q; ;K ("Y$k@@aDfbHIw"*DK@f<{΍7P(i+?kb;wիwJ"Fxؘ4Z"`oo~NΝcig$Պ ={@�& rl6h4ZX,BUա_|q?if??mwJ^??__nO(RBBBBo+}||%~X~SN"+Շ~/)˙jWWW9uYsnuUL&vX(עX2&D"e,,,  d2P(?בJP,S: ʩ^ZZ2n7"rKݩ $futhAkV.CܸqhZz0zok=|Gm^|>\.B!# 0QPyTlF(•+W0===&^tm{`0vtld0paggh4u'x ?o|677ߺ}*Aܼy?Oߨ駟?K`"qdw5!`qq/^D8渣7pU<x�B`0 .//#]I'7AD=CEuYǃh4ٳH&6><x�bJf*RKYj|ttui=/ꨋy؉DDcHvQVJzLEc)n\.css1~_bX XZZB4eI<0Ơ:SFǏ… XYY*Y"vPKKK0JnaXǑH$XEBc*bu/~n?dߟo{foo jۍǃoox㮅n??o/v-$$$$N S.o1njcyyhthMꞋķns�fvN pΜ9D"Fx5?I/PQ-p"]w2#Y8i5XYY.yJ˱oy΢(MFXZZB.C@\F"z<, G",--᫯Çv8K]PGGT?mt]r9ܸqMZa28Ώ|L&`FJB�χ :=F� +w:l6aB4J%ܽ{sssl3yXYY95ԟo]+ oo888@*6vwws|fff0??9ͽp<_^x}*!!!! z;`jjM4iHydYT*|>$ \pMȩyY$N]'8Jd�Hh'ƚ\.vwY]]e9=t R-j x.C*.?]4t:ܿ xlhq@GcB8>>&666r`P(9t 9(AQ.P^p8H&D"CO2p\H&XYY1]X,XXX=pp\.w*2%FLOOczzKHHHHH.qJ/ؼo޼b9,,, tszmu]G*B&A>G^�‘\F%O+<un�NBz\.wI>NA"@�gΜalbl4G];ffqV\,8b1DQa{{ef�rd2�BPlf<z)6|w޴HO{vLpur9J%6bH&kN#l=d2N3+xGޓBl6R)L&B!AN5zwE!fggY5&eHHH: I%~>666vF t:pHdYlll`oor~SSSX]] ~?v3'b&2h4P,qxxBb]l6fN1 8\uq\t sssl%:Ó,Pe�}6;w@}R\PnT*\.ns <, \.v;L&G?Ο?ñmZY (o*9ϕVTNquܹs\& nSSS™3g׎r{BP(p`C$``0uy0p8$n޼ ٌj~͆`0ȲFL&V54/%$$^N*L I:M૯BTBG$܅"|]"±˗/i<+WlE|@`@P`썍 4MavcRE隦 `0`aa|Lrx!*LvF iT*(V4 JjnL`0@.(V+0h" fffB^@ K.q`)<<P44  .lVR# a~~$^/=]QP(vņ ~7 ~ҵyX8:˗/s<@NxDB>KHHP$$$$AxA]LNJfU\;wh4��333xp%&0/w/9/˸}6~_akk J%DCt]hA$A&A6Ň~M`Z1??oD, *Q L&Y^,fJɄk><Zfr9&Ԫn3T*z?3DQ.0XVvs' !N#`mm /^d;JxQë$/z,Fb!z=ܺu jV( p:p8X\\48bҺu<x�w3gtP,C4 `;NI}L0TYG-;N$ILOORgo0nBum$$$$$$$$$Ax-dB4#AVhD"JE籾c( ;pfffsv{>㨳Vp2"Kf(|>EQxXK%Dӟ`Zr9uaoodn{?<EE@>cܺu H4 g[�0iWU_G4\zˈD"p\|>I@$A" OD@M͈~x -t:vh6ė_~/Z f^gΜZqq7'35[VcE�ϻ.r& ֐H$< Fe3`0jbvv?ϰϣX ccczX\\dBF^Kvr. g2�@D4E$iT>9R�t:FyB!!"Ĝ:R =BP@,CFZus"V^#|.JݩHFfX @�zL=, l6'^Dr( ,~᷿-va61>>׋q�jjEA^GRAV(V>>\.אll# n7+9, _WA_9?8Mtzt:(JHR((uR&&''111 ̰nfE?>kr NV&f˸x"0n7v;ϰӚWqL&"VWWL&mt=h2inKHHHHHHH.qj8J@awp~S; VuwcְX,Ʋ}ɹģG8; ҥKx<L.:9;H@ui|,S&4꺛L&}L&7 ØD6E>^/\][\z_5<�`ff>3V+, TUE^GZETBX:޽-vhuԩC^YlۙhMue'5j!J=�KKKØe~1z.Gc+_VnY�bB6:~? włgq@\AV+"6 R)`zzSSSXZZ_=`aan I%N9^zuF& Nxi6ME!?~NY$ "wn޽FtL6 >aZqܹsg(?\4TU~-łIcoo\ q]4MiZ"qQ@f}6n޼A,..8w0l6wT:&H$pU<|phn\)b:67X$Q1L;]B} J\%`B|>, EAf#7p1/0PTp]yr Ebc$ av�%huzYE^333AT𐗁fCVC6e'EIHHHHHHHH.IGNrm4V 3FX^^;YvqxxEQ099 M`4111e#ѐT[$oT!WnEQ`Xjqь.u2UUE DC pH~{{_|]l6 ł .>,σ'"FdtvCUU~�@&7P*j(P1D,cGxl^70FnꫯPQ*Nv077ED"D"9|]À`=:A룪*(Ƞ>VuGXχ\.l"!ဪh6p| $$$$$$$$$A) ^rZQV/JOH:~=EXVvjS.2 <, i! T*lN#6{TB^q1]$DĬtۍH$qx<N`nnI/uB ]?ׯ_GXD{=,//ɧ18<< E(<MD&E9ڧu߉zw:v 'GT*RpbzzΝC,C4bf�&NF%DD}-1/(8!nZ>"5UwVhPc4~thhpF<y$HHHHHHHHH.qj ~\.CyDQ,w0iֶh7 !v?wسiL?SkD9^^Q0!X,Ck?*/lx<<l6 Vo.___gl3sssL.hC즛L!3"ri/uӱS uƤ9@Z>QV尳jn ˅D"E;wpM7zPUIY@$uwNaZ155]njl6JՊ@ kI!+m::K&# N'666h40333g D\FP =)o]ԒtRJNɄX,7ͽ]<v\.l6s'es"l6Q*:#L&~?")&4m2099h4]^NeNt4t`ۇfsdܷ녪PD|\Ԡ,lqocja}}Qu]LNUUΏ?"!5zhldT*l6 ]DF177@ p8%|sOTg@@\UU&ߢ`0(Gj+sQ@{-Ќ[tcccp:g&4MA8FV,$I]ԑzCT*L&LMM!Lfԇ\ɀ$ԔM\32`r,X,BUU\v T `& tGGGCcqd�?;;ˑwt"i'zP,ل v"^ZX >v^EI$U$5y&M({[I4DDWG^{@L4h]jP.q||`{{g>f3$._NnXXV~R!5ǐ331 XVx<&TiZT*GTuz_zo{kE{p`||>Dgt" "Nh4P(^#_�Kn �Z ۨj8wVVV qo" Zwݡ.,ɗEЉl6D"fETUvNV**4M5_łU" j>մ$su|;DcZ(EQt( <JbKE2FJ6d2~:ϳg2&DIA4LIm2@$9!b*<rt:j ۍd2d2ɾpg{snDr:: o*^m4<`2fF0Z$xYnf>888@߇O3V FZ,HHHHHHHHHH.qj:e TU6|Bp &A- w)&$nfi9 v( F#Gm|>/ccI!˯bvvvH$#Jm60BF#sY1 ,iWf( t:8>>F\FXZ$L,z躎L&>M�� �IDAT9˛f3v;t:�vR LNN" &w͞bv=]J�]jqUUUt]^[2 � aeeD333|=ELʈL=2JO"BD\R+ )cynG(BV+=yq]t'rGE;*b!?vijzV** =o3쓐]h$&bQ.=,!*4Mci(0Lnݺbȳb׹uRx$|{C"av9:ϣ^CUU<z=!Zf3;J%EVÅ D" ]dE|㏱ UUa0z,RxhV.vvvtFz_XqL?j44< _p8D"מ1͢X,hp]Z1GaffW\,B 쉄WoxYIXT 5QXd7mko6(hZC4MkGC<>zT)t<Ab pV[nG rOP.KHHHI\~IHH. yphzT*Phx8^׵/"4K3/hD0OSEn"1At:Lf`L&$ \r%|'JT!2xxvnP@*B:FRA6ET(hL5Mc'k׮͛ÈFX\\$* <2 TUEXDdfnիh6X[[fۃb8Y/Q.̓Ǹ}6QVQ(PTiZn70\.}I w=x<111D"N~i={>߶> tx^/ (#lnnT*p9ұPTܹh()ё/r9D"~mܻw/^ pmt:^qL7K<C�jl,?i#[u8ll"f3fffXXXׯ#Npgbq7z^\t gCN]ZݎH$)0(L^;d}(bsݻwq||1]wޅfF2q$IDQg zh4s?~~T*|>eX\?]WR-<}T ǝ;wh4��f@ujo>N'[Vvb1LNNbjj h>%6mH".i?iϞg;ɼH5Mc9>IN;%HQס:6{{QыLQy"T@6 dΝ�cwwkkkp\FTx<Mאx ! Ig rEXDTi ~y 4uoԽ|Yh61;;FV333>PT066fl+1;;{BEGI I&f3guÇHRp\|,G0F\F\f;7MTU UUa4DqD"l6 \tu`| nܸMӠ*wcؐYBkEQPױwE6E^GC2&TUY>MY011gb||H&|lfXM$'ŠbI֩n4jPVy @~� 'p8Ih{HܓF9SFiFF_ZL&l6EPeoZv9c>aeeS$$$$~cN%$$$Ax::,R>Rқ+LU p8�b1\|R GGG8:::Fɤ8 !#tu%ȝ懩ivwwg XXX˗ zY _`uurӎX֮:BfffFF1>>Ύú.v;Eklnn LҥKX^^f2,A34 Nl<:ױJՊ9aqqx^vcģGГ@0ŋ1;;@ X5Le*U h >xց Xv"l63+hPtbcgcf3~?n7k~B! X,VFPBWy+GGW$$$$AAv EQft8m0_-aQU[XZVb1]gM`6t:aٸJ/Z!M$$r>&Zfggq\p;f89뺎~EQPVQTl6@t4O]TꨊenVkkkuݻn ͆ 6dzX,~߶7I].qpps… r VVVx`0{L&3dF.]r) oOs4aV 8w 7Mu%l6T* Zp:\ȠQ$/*4x<H&8V׋IV? >/C}& I%GLnV>4ME"@8~k:~=DND^)I.(m&P(["D6m T*rhZb0 6&\.Μ9D"&R=p88O#ߩ@$H5uEo"n"0>>jX hF;O:o"X___uV,,//cjj pSSSᵠ/IM&!&TU@(;# . rTxhIcrP(jXXXڇdz( h6T*lH34PU^dgm6GQp  bzzgE((d2V0rblxdPX] O&*JHHg.M I%N=yBUUβm iCG?H,�'Byr9P(fLqo?)o[~f ~KJ!k)}a%Kۈ8Z-Op=l6\r333e:Mx_uX,m뺎F\.38s ;`jj]G;ux۳)ѱ57Lp8|I�E(,?<i"`0@Jt:&4Va6x<EQH${Ehtv;KWcooIziрKHN.!!! )A^gWZUUͯS&C2jLI2g'=*m~BXUUiRp,X6EGF0ĕ+Wp6uK''$yb5N XV|>B!(Mشl`$rn/wAP`)Kx`2PTnP(n~]Q,a۱gX^^F2q�21e7 VƐ�u8)ƍ N7l62CuSWR t|_iTU(JzD"X[[ÏbYl6 łFv ͆JCq|@}d}!'ݳrI"7%$$A8%.&98v1oYeDlffV^bevq-..b=0z-h^\nqZu- !tt/vdn#:yܺu ׯ_G>G8ŋqy$ \.X,TU<|lϟg::r9EZ-A9s˘g{>�a?q*8t]O{ZkZMإjBll6Fy�pEt]\.lvU"AǏQ*e6ţvͪpr C&ONrI&$!l6󼩦i3 FYb&Ax<)T*Ee(W{:_}l6j"LbiiisCI$TVbadܟ`.u{Qw !\>W_}>tD/^ιH"ap8XfMY$><<`9[fQBe89j2 L>&u:F~NsYuѕ\X,h4brrn|UUQxOnga0"\t]j}!YēEBouR7IBBBtA,v]8~�@2È -;9N&dFcbGmy@ {X,l69faaa^wȨ$3QR"E4{TP(J8<<DVcrNdz�n#b}}|sss|2Μ9396J.^ 9&&&8ܟ{]H%As2s녦i,s'c>Rm"&@sFj.] 2>zv:wR z (YHHHHHHH.t]TUC<I>~O"D3s,bz=~9m\F*m#sχh4 Lt~u|i6LHzLh6>bх$ۚja9߿y={hn�ByXV*AmIs~zLf e$nb`0DυQ#QS0"N�籲@ >2rEA>xިrjX,C6 [jt:p: ܕ@BBBBB!d$4Mx% s! azz x1[Q9۝ܿbI1]l6&g/H(uHm|'x!F#1== Od޶۷oO?/KG`ٸ`Y9�QCB!oɾ6V+^/s[(zdW. NkDE Z#Sfss.Ku]GTvvvt:qyD"p:|!fxϭYqZ;'7_.7T|^BBBBA[\.Q(8vTvZhv"̙3.?~x7aHpTj`20;; Á|>Mnk~%'-ьyg2RO>oQ(033Fl^Ve۝Nppp#EX,\.A&&)}6in'ɵ+ ,M$~JJ>OןA<~ǃd2 h4 ?;J|�V @"\ .\.^4·8>N47$$^W9"!!!!! [H 4M[RN'?tMwjj kkk[gajj ~]O._#N`0j"ܹsh4h6�o: $KǔNdHdG.Q(p8L&155`0ȒrMӰ[naccg; pD"&b$nPל<Ň)VV16#9zTi4ZCΑ4Ao6LE"v`+ Qy $܋tbbbPBFLbDS&NLS<egYT*DoJH9K<,uEbA׃ꖽ7"p9lmmaww~)7ߔ@h`kk ;;;LЂ $NdOrI6Q7XuUUeiHsn߾> >DC(bc7Y}kk op5},,,ܹs/v1119x!2M[,l6 xN,HYt:t:t:؎N[b <!F#~?ܮ( &,4݇B!*szh۬zCsErqby"6LjvކbA,f3H$�h6CK6&vEt]1>>@ p"y[$Dv;(}]R)X\\yYRi窪*˿;˒=(b&N'<"j4Mc `HE0s<JN"S4MC:F:ʚ/ﰻ UU5D"Xu|O( Ξ=w}t:p\|1upTjpb8NrvRĆzgTqd*rDL8zX,X,\QlR؈bQ�ʇ{ٌnqvkOődnAe)0J ?HHHHHHHHH.=mj5nU" Rp80;;w}b|_~%�l68wVG iEGVC*B:0p\H$E0D6`i>&GdG&rb}}Cs&R)�@0}LMMq8�m\.crrOw0vܹH Z-v8|h1r9ja0 E~x<Ei].","i&ȱ1nb1lmm15e Nq5U1w\<;Nm ]<'`F<GTbO ٌzΒ̪ I%^;)I`0@^G\,N306>vcccXYYAP͛7 93 (e&bFRRT*el6A,,,`ffV+TUX`084| 94EQp]\z\sMؽ`0155X. r�pxUzp89hA�p\lCi�Xm0`X&N2'sM8JL DNbf1y/nM)? F `0w)l6Z^v9ğϟt}I>OGGG|BQj5E/!!!!!!!! ĉufǜMLW}WIbHbt:H$l6{޽{!yi4 B( PU& HsssX\\D8nG(B(>ρ!rF$W'uIiA 2jVw~ѣGX,˭: t]K.ʕ+B8f)9u.::V|>l6U*z=XVB!x^&ڑjc/v @_&HpAr\.uR~9Eaf :08uEbK{}bלx]HBF}'<^UUVyA6sp\|_KHHHHHHHH.T]a4Q�Ci,Ns�dh4?FgϞyܨ$D.TU+rT2籴 łYiR)"Jիh۸t$2"^""G9vGGGH8<<ăpxx]`~�Q�� �IDATD8{= \.nbaa;泳Bp:X,hZ0 0o(( hZLi]\3ZP(]zs:"Xeb2jnTk^0Tc>UUDIO׀~iMhEW蜻.j42Ơ*Ϣ H* 6:"v;f3"f7 3K|od2 =L\. )z, BUUX,X,PU{{{g" HZχ~ϲt:?qTUU;ln˗vqMdYRVaeeh^ VJDHQEt#bF3V+#qG?ņDPDEQ녅D"&rzl(vw?ž%5`D)FN2k6d`l6x^�`S<"=q>l6tP(hXk(˨Cj yLQT  E]uRDI%$$$$$$$A4t3JF199 uZF6EXqxxRUU;pdS윫vB?ϑNY+W`~~^6I ͣa{{_|=zfu,.."arrhfBL\F*N'�0BF`0 0555m6XZutݡq*$ AUUvRl"H Ԩ"F:Q,RafE2q|<O9檪<<`�ӉX,c5yv"DЉA~mM@EN3p8j^hy<&&&Dih|�zcjeAb*qh4p  cff�_~%?_xXeآqܫpU1]PqO?ů~+CUUvLOOʕ+8s :NDQv즙uX,f!H  V`0T*q:9b[Vu�@ qYDQA.`@=hXFDIAR`4c}ppfysW#i(C%ʰiZ4#D`_V,׫Ťn1 XetP,,OTkJ׍fDEY}A*_|L&~Ty`ft:jvR ~B!vANV j)(,a!lG,El퍍 kuxnxE2<idM!7 >`0ٳpY l"ed|Fw߅Ľ{jP.9z\.[.c4�X^^籺 ]R**u#Ww"4WNIE׸ZT*!ٝih4h8S젏 u#9GXCFg{E$jqp�u5MCZ"4z@#Of3<ZN'|>7ob}}fZ p*"IhN ~M  ͅH I%$"!f$/9SS'󴒏W6FM&~?sZ666tK&05L8,qn#>Ç~FP(]בL&/^D49"Dž r077]uj5 L&Áh4Rij$7zl"h{@A]pM`XXt~?w9%5/1`6igs" v9fN$ִĢ(o^.kZQmll 6 .e$z<>矣bnnV{{{D"| Sx8(jnͽ @t I%x�p\�W&> h`A%b  ""css7n]F\.YLMM1'bhZ!'ebgP'E3 PVq ܹshZC.\*"\.׷'3uITUD lFv"&#HEA.FnG8F4eŇsb疮b6sh2Ίkq Y!Oqqro GPVcccvT*\ vHR裏E<H³Z"vS?, O0bDEBBBBBBBBtg"մWA=Mu^ ׋d2p8[nassM fgg199 ˅d2X,M`٘ "B.Q);O;9j5T*\v 1Ea7~2K&Cxڜ-Y:.{Ωczppmd2TUh6$t:jPU$3s,>::BV5>hZ(vsyΙ$")+rqΝh,Ec^?G 5]ꘋq8i}4 Z-VE6:DfQX^~u\v dBX\\ci^#H@uX7O]}[$$$$$$$$A|f3�4L&(v=dDo31LXٌ`0ݎx<g۸}6vvvdp||mK&8wFcDi7!Gd|2 3}n Ifɖ8qJg*i陚^2]^Q}I,~{oCdˉUdk!KYh`ss@VCP@,C2U,//RGdY'IȲ̏Ͷm4M^V΄-+8UNV tٌgMD\W_}^?y?8/;&4yc80 ^ 2t]3_tY6Kw73Pd!TUE-Nk8yə�fAV`0sę`0`%ؚR)\~W_!hѣG4 x8 YU֖;4iA,kò,KۙѠ{;PA" wTu HUK$\HY`N4/䍪,q)cmm  ClooCEe|w( X\\ב/WwǨT*m`^߱jzߏ\.EQL&q%T*!Jq3sV)>d �Nfjeܺu NP(]qxxv{{{| },q$;\}>m.>4}w9 {|~ҋ||BC p#6wgWU"W0Ϫ+ܕ ̤ѣG<*d86bE$IG1βtIRzL&<hJ{$I2: wMzI*:P˲x抹>܋=?qngߏyR).X<yFdpKk<y«X_z8(PU`;7 z=>[\躎]ض EQJd2EannX (Ɍd9x۴XL{mۆh۸s:f67"d=,n`{LxH$hZ<W=ryڎR&~??GD;z=L&FoER>�5<s7w=F.l*}ﱵmX h6NpP(t:',--auuH-}, C^9,8f4M">7f ]/iA@. ˮZH$T*hX=$lS0h47nRL!+^V \ L:謧òma`6!ͱX x>Dsss(X\\<5?n@=ε;nl&Xb5Mβ,82fTUu|>E\t ;;;ͬgsY0upvw@ �Ifl6s;Yp8V &ݭ,L0KKa?1}DyQ1s2qnTUE&9Rerc4Vq'l4 {P(\5 =-E0$C t`Ʉ:qP<ϣ~.~x<HReׯ_G<x�MvQTv!" fvww:� ÀazE?8br�6r9R)>;LBQ> Ӳꧽvg2 ^gϞq.?sfX__G>(HRFZA}v,LǷJ%(nVQi4YuϨABda6>4Mag2{Bx}w�{,# [w= LǎFF5O&ɳ۬m.M{{{?{Z@$y>/X,baaW;1t:- ZB4 �<E7@AœOk(A$Љw>s`v()?pd<Y2+[O&(J|nx@cP 4 pnv(" 2w�fP?_0D.쬷؝{tҼ"\%IB.C,,˼ח b;lh4B*͛7=VHPʳY;mT*DQl^`0x,7ALcg&v(i, eɄMNR})G~=,=njvHBV>pxxG s?6z]\.8κfn MӎO&pZxb@ @=&{o=GoK]fU@A@'DQZ >HGo.ج47qf~af%Lr[6k;EpW80aX=Yr.õk`Y6772d2 Id2l6p8K~?wpg 8sgټX,vnCubwwX\\<5roo^>LFF¹ǵv޴0?盳˲}8~^w$ F4mTb{mnnVaooWf3`aa~ᇸr o`)1kirq>Ll6nx<[ygK5q:qA$I�p88' \FMwfx78P(�7?܌E=N1 y 7=^&DIYuAmXzv]EQD,bX,R|6KtqxO\.ׯc:jn>P(VFTޱ�mPXVCR:dY%oA2^rp8 UU1 wc&' <f vQnl6M4 >>Nc~~\~!��reO>AXD4E(='e]7�ˢ}atl`-̟ g {[LY9I=T6xzO0!lmw/m ֎𶝦�dFb"a6a4a4Aeh�(Jv4o `,vQױxb߸;ӝ>@ FEQtGkfC$Iβ,ꑞ\e8رuш_|>0">wt:<@qxx]Q(_^^FXD6dYl6CTad2=]fZg)t^d2A`0@:� Qa&_wFA t -vH$2)~^r2LhnYʍɒ$aeeш~hd2X,_G"@P@,}@�eAE�`0d2yDgRIx~eٵZ alǒE{m,#CQ>rʛ v=/ $IB"a&lmۈ1,Pi[TUt:ض8`< "# @+w535, 3cAub1d2躎Në%?3#aNA t\I5X^^(,  0M Pv5GI%`0 E vEQ+;zEQ䳹YkIylVw(|J~NV c:" \D*V-1 PVn@9X�lX4Y;t:h6r MSvhR`8"࣏>k׮! %'AWy^c0`0@Qy(`pǃH$YĝsAA@':,Kn5MnեRG6gQ'|B[[[PUh^hP(ҥKeSݙLRx Žgv+, gxz(˸r H|mtn߾A4 F#(ǘŲ}?Jqa%ﺮ;|?E&TU"Q*NDy!+[wWUk}`&!*$I,fz6LxB.(y8' :o9`Na|Q|7\/g?o~b0r쥥%ރJݢeV1:_v<pq|iãG* :E!Zr2d< C,--amm Jcggvdh&!(/qgU1�d2x<po �4 ͛X[[CP|8pswvUCβv t]aȲ UU Q.Q.a&fy~AA<6B0 �0i)0bE'f3wu+ܿV ~ H2kܽ_U2o۶d]u,--qs_X ',I~݅EbFwD"_-BE`0 hƫTUE"4  ĹedYt]vyfJoyÍyeH$A`6";<sv`03ptgm׿ݻp8%HĝivvvfUU!sl{H<6 N#cJ[[[z*dYօpXV[D">,v ۶Q*Š( $I`0t:}^_7:sFwWH=ۻ.>_t\6  :V HRHRVf0 h}L΃8?06ZڶG1Ȝݯ.a 1QȄr_'x<VF#cc uEȲ|b=^{6}qqjO>œ'Op]\zf6zD"|-CB , nhOMӠi7kH$|XX)Y۶ ˲0N)`:e0c6! pH,�� �IDAT!A#G6L  N ?0M~(Fqtjk`,va?Ue⍉w۶( oLYǃ^~sdZ0 (9nj jJNtvU;΂m#P(իh60M;;;s""ȑy_ 4dc H@UUhxd@ �EQjx<uZ KKKu2'{z tp!'{@ X,)A  Ĺ|1Wm4M|>Hl{Oҷ%Hyynjrƹj6~۶ goGVFMDeA$j5T*mTUd0;f5mq٥Kz:?(J[eEAu?/Yv1n !"& zt](>ucSg]3 f0 ~aiw:  N+1c/|m9UMI(e3ٿ' >dYx4anϒ �4aY$_7nP(px�!j!dY~ιe}mh4aGfy |PU MӰub+++( @xMƈ@(rT*vP nl0MH`8h L6k'4A0x|6}{{{jf( rG}OA t\8!w˞N|V5RQ 8q|}93gȚa8kbss,cyymcww Q,you0^ 6f ضnzߏd2X,ƍehW^i0 N=677QgannWp={Qekc~]F177gϞlp8RߏN': C &O[vnhfW^F#B!DQ,,,p@vM#  N;X6|>DQ>,#I<ͽX#\.(88818$IBE>k}6_LHjK.w ܬ޽{L&XZZ*f`*֫.",2 Z2 )ס*wDgBuw tO  !J!h@F$A:h4Bx<ZT0?? ,=tcb4aww~?Cux<`L&H8 6AA8z=.`~?s.tCKΆlM&Z-T*<{ D"PUxq!_`Ys30x<0 0 XŅ~y(4 GрrH$b DfJ03<xx<5$Ix^$I#L�~ll4Ԟ}mSLC`0@&� ۶1 8+D" lٮ-۳j~ϳ:  P(@U#sAA8uhq^t3K.f}}^VqxxχR|>0PV!"EƩT +++r��4!AnL|]3iLq,,,`oo||eYb|v*͛7 0j{iww$\.mPXLI��~ ~zV6;n\u8,P(Çh4]?� aug«7ujj&ٸ8۶T*ŽmAA$Љs+m <zhE|2Na7bv~D׮]˗!nݺxD"b^χx<REQ`D IogYtwݍ$Iv)?ٳg<{6MdYX&Y{x<U�^mnn  H��4M~xO&| qtryfv5[F< ^/4j]\.cuuLBUMD^ݻwxh4@ �QxeD<}HAA t Գfɝ^wf=Luchh4k׮X^^F<iPU~00x9+gfMQLS ChOcnn/ݻw1!^~B!ïk,..jjnc2@4�? m4M`0 F|Y\fmtg߃ b$4E=^=� x 6VWW!"4TUt]VWWl/? }inV33<|ndfqntW^ET"s8  Hue!^Cv&| `0H$y|'XYYB0 g=5M_,Jd¿n&~a:=)xy_|A__x1 J%D":~?TU((J t2̩P(`yyLPO&dJXݧR)cuuHvy�GJg֙Esss^$x<n6/_[[/ Tr|ދU e`ccB!dY({%I*n޼t:p8P(Ds  H??" ॼ�x)i3>]}<sFy8悘{^a EQkfjDFZ- CXF}\t <gz J_pmf36Mpyhea< f'Olb6(Jt.]UU1& t]2*&�ƽ{P(x_{2,HRw]5eTO<._[n\.cyy("ϣT*a{{U6>}e$#r]:.Rc613F#>=#Hm$I|($Ȉ= :AA8jm3ԫI3^ BPb,C#!Ax(@Qz= CܹsO>(>666h4 3|HR,LL&ܿPW\AXYP`6q;N <~No~%IB4=2jͶmqUz=4M4M>2w]t:looò,d2`At:h4s&!d8F:m@*BXDP7`&* _v @f;IQeϫ*{C470l,I3  H^4 $=ט �p8(2 "<7@x<BEv^+++O^c<#l\.p`G2sVqD&"Y9y&_|ǃ?O?=ܸq nea4\.Ç*_}._㢖eYJP*xa4 {{{hhZ<� 1PaY À(fPUdD$녪d2`0l6$I( jt:<x'O NgL۶~CVd2A&02z0bؑ>]  N4MobYω׉;CDx$A&}<&d2Mӄ(N4 0 DQR)t:t:u]%̄8tg @:_|I=BD^GT1wF~:x(R��dK ömqD"n]׹QvwwQ׹c0uX l$!Jaii xh|Na8"CQJ%@666p> tw ;�iqO>7|cd2C$TUloo:+gyt-# :NnvYQQ#9my�C \1,&ݻh4 qa{,q50x0Lx7sgIx7ozl6H$׋^0y $I(XݫnQz\Ժ{٬w6nmm툓}seh4 vbuu XZZ=|rի$ D,B 'se_f_#amm \(h@o}}XtAA$Љs+e.ѵZ qNTN=`Lh&|>6sVBb:bkk >̨\x;nˍoh4F, oV4E.C$d2�d2@$Z[[EA$lL(Wū8mug^/t: <0q HT*a4N[[[x12.Z&0 +{P666 $>oKuW1Ν;fB 2]|oPVa6,�`ssF^KKK˗/s}=' :N`&11בJx_, t⧊񓲢mc4a0@UU~p+T*x1?~M hT*x<0 '$l68FF4Mvv,磳ppx<D"<KL&駟O>A" D�~<YR–ۺ; b6]UZt]ӧO1EQo|}^/t]ɓ'XZZ(m;۳tRĹeY_c x\^cI$Og!Ns}AA8x<^zGj%^P?%f7MnZ dQΝ;(˘NX__G0p8D(B8eYf$!#JAF#qgJ]x<γ1|{gAd^hq7Y!96C;+~81nViجeu:#M?<<DҥKÈT*BX^^$ Z|x400ӽ5`ܶmt:|ꫯP.1x}Pad2(XYY AA t8sjE9Z@' 0.SfYnY.!*n޼~Z-|x~ضt]|{.L"w6 锗dx<h4 Al-<|php??/3X<{ D:z_cŸX=껻T*(9Ȳ ǃ[na4!amm ,c<m$ 8t:͝"?.5M뽿t UUQ*pD"T*uLSd2|XXX@<?r>  H@N�~$Iě0tif666}ض UU_\왦Gϙ۶mLSf3DQaccZ ~ܤm:wgqx[f0 ˸y&z_$OݏcFl;{( ,.2<xOfxPՠ:A@XD*p8>^/O? #_`ӧӟc0 JAe>V\.h cnncH;AA "6zc|a+   ě Lyۅm888A2:VWWfQ*xUʒ$!r&xlO(ڵkt0Lx\QDQ>,Ce躎n ˲ <~u|( Gqs]#^T=Rցd2m<};;;n\.l Dcc?~^t7@k'pmۼ\.3V P]ܺu 0 r9DQ2# E`=2];;;mGJě h6& �_\׮]Í70??Y^dl 'm3!*">#D" H@$D"DQ9 rp01NȲ`0%J%YU\A;g2Ȳ;w`wwiN!2zi1!o`: JS0h4rrHӈt:x>|ǃL&ׯ㣏>B6E8>1�@AAn.ߵ�F#f3 Cضbmh6 �|'|2JO dkmy,^sXvP@"G}`ǡ }>ߑ IgV΂~J_V69Oy튢,ò,۶p}B!|PU(r]|>LSj5ܾ}m0 D"޳ F#mܹs?JX,e\z>v[[[d2(կ~>TAA➡&*dò,.2$IB.{\ ^0w ^~EQp5|P{L☽oϱen�w g%Leb-hY4+ gڳGpnsbPU<gϰj/NX\\D:kIZ *"bD"ߏvj4M>\$XZb{{~d׮]åKH$xEAAs&ބ9^0 )c=ԿIƄeYmP2b12nC3v\8w5wg׽^/w|x<<}R1_wXCxZ0 fƗJp5<yw_~o.>|GrD"hݻ߇i& r|>Zz.b4LDZQVa6A<~_>CXUTNA t 7yɄ`0@AӁ<k At]t:l R^T~{E{nqτi&j/vax(H&(J<3b0ƍf0MXg(:t]h4BB,C׃eYF0Md~fۘL&|$I |7AA$Љ7r&84 piBb1='؞cш08V.~44M._9u0;HӾh:Jݽ  ⷿ-* t]je(zEK2 t]GN>g2ܸq7o;AA@'9L0RnܸL&A( E1x`Y:zVVVL&yI{El^Ux:"3q@ 7Nx :vwwvCDQ躎dGIY!I)t]nd7MZ-TU4 D"@ �Yŵk!"M  :2͎CEb$Q;F8|@4,?,_E_swT*qUu <|O<A׃iGJ1z�)t "z߻.6_ �� �IDAT5R).Ω  ;>F09ol` $(sp"$H?v,cqqb<# >W_}۷ockk pS@۶a&w7M³R`0+*(NUN  NLSTU�p8㼏<o&]q862B"dgS{Iᵬ3EϫND"d2tݻub:b4s�&0~? (DQ,XYYܜ.sS8ʜAAx/0 ҙL, {AN>c`LY꯺7i/~Μٹc,#O>A^G^AV j��a@yAb1\|/_F&A$A8F  4  #:jidY%'͞&ׁ8L&e}>{/sa)"x3BvmۆG$A*•+W:>F&L=m# bnn>P(paJY@-i/AAxgŹ8BVCRC,C0<bDtJ ^z2,x„:��IJ`&lۆ8pib:rϪ)wĝviOAAxgt:E^i0M>tKgM&,--! 8'xq{<8/>,kξNAAxo�mj5ضGɲ AHo f~bP~=I`w%8  NZ-hQ!I!ol۶Ql6!IE$I tǿF  : ,& ~?~?s}-,tL t6  :c&jz?~ 0D̡~] 4M躎pAP,!  :òn KKK(G:A ǁeY��YEb1*q'  HnZz˲f(kϞq,x<FC @:D"\KI  H mF^mۘNP PxV``0Gg\'N"  :61H$s)躎d۶8�1#  ;7"Df3P(d\.L&Qߋ ,lzՂeYGfa^sS  qh;~7,{~xx]x<,,,@eBtsoS$&r>>a6^/e6AA t<8:w\.#N|[ 8" J|sMpxx`�ǃ@ AAJWLrk&_Ef3Z-ܺu �e!J!J!2{̔%N{ Z j@�Hp@Ⱦ&^'  H?<gϞoEB Ղ _TZNh9fVǃd2d2 Q(CAA\xa66771 0 2._|J8m_~Fq?l@AA$Љ3iݻ~۶ F8 &&L&hZzPU7oć~x<N=AA*qP4Mj5 Ccd2Ȳ|_$hۏ_7MPV $I=4=:  :q! fbX__G: 8eY,#^8vv0 ^vAA$ P@UU,,,s{ˀ;d˲Μf hZ0M2g4M칢(*r  H'Q0niE$IB->|jtRR4looQ_&Q*J ypGAA t%t1Q.p%$ }2\mRo<yx|4  p/qz=L& C8T*h4+AAAx/p8Ǐn!"._ Iz/\vE9sl6CRAV봹^V jCe,..X,BVoJ:AA@'>`&2 D.lrǏ^c2`:`6lb< `j0ӧj$ uW(u   N{&dYTUE(пL&x)aYLL, M`6e)xp]q~#^W@ Ȕ  :qEh4BG<2wowԟmdg:0LJP(D$ @A",d~, ۨVx<HRX\\D<q[$  HfdCБ|3:e)jlF&͛7�Q_*ݎT $oS^F]Fz$  tz=B!B!ny~Gl0xI8<<�AȲ`0f$!8 a2qB!$ Hx5   N C4M~J%$IA.zc8gffPLL\Ν;Pհtl6矇BnGAA$ЉsOAG8F>G$0@E|>f3j5|ww$IB" /\ %ǨT*fB?:`vN]( DQ#  S(z=0#E{<XMF# ,--AQ3E&6"(|>Q@[jj ] ‘   H_(4N!,˂m<'8"2 A8Sy{_ni`::,B2sĻy~  :7кh@QB!nn/Mp8DFYpYi8W_#� CQ~jh6p|7n@P&v&`:qAA$ЉWa<믿!L },h4@ p8 RkX,beeR Z4j5LSb1ϣT*AUUʠqAA;TH[V00z.zx^AerO �oFDT'|\.w̞oll@4\z/1??OzXО! :l6!�wfb"Q#iYܶm<{ l6 uQ1vwwQ.%b1n,�C2AAyR1 L&<c2\0 }ܬ5 J=:ǁ F|7eOsz}*qG&gAAy29̤eϙ8_q( (A_;.6667޽{ױ Y׶muCux<AM[U>AA$Љ"(."ȅz^hQwgRwⷿ-ݻǃd2O?.]:RMk0 4 躎h4l6d2IkFAAg,`�Yx(x<7LBeuZ-c 0`&zK7=zht:?ˈbT~ZhPUXAAb( l6a^b]ܾ} X,cwwh4i駟>Ⅾ>8 ۸u& 7;͌8?vt  Ho�v=L876cr#_F>kΛ;>aC-+ȻqryC~#JTRfeg-YbY!H 0=c;zeOJ+˲aߵvv---iaaAkkkr\￯g*H([0{kgfffݭ>5;׃��@K|fU(xx̵NS:qVVV499 \.eUU544WJ& r3j|>o=pjooW[[ ? �� #@D"=\.k ТRAJEؐQ__422~1E{/&''p8f���qH$\.\.b|>73#X(zWW~nfggL&R"6cCᅱ rER)~%I? ��� Џ #0T.U(T(T.5)"l6ĉڒSssxp8'z\.t:-ǣ C>ϸ���8,!w8V"2J #qjiiQ<)61]a[} Ǐu]-..ܹsjkkx���@~**U.0f;N9N+2kϊQi PZ=0V*Jʊ^,>'���a8\. ׵oEq ϻvOjmϫX,I ���돖v]dRah}}R$}|krÓjb=~XJEhTXs���a֦p8kqx_7!n鴮_oVNSHDPHN8���Ga4r`0(n̲]dRI333ԻᆱQq���#G0j#T*T*0 yT*\.3_7m+599T*x<q9���:BW;bd4??ueYjbbBkkk* T*DkPcxoѷ~h4 .護R$&��`岊Ţr677 ]~]s4;;d2P({MVz\VOO8'���ةV櫫Z\\T*̌nܸ]ikJܜ>au{0hffF=Ӊ'(cu���c0 T*k׮7n߾B )ۭp83gnkkkKTJlVZ\\T[[n?vS6b۷oDr@���@ flfY?ijjJhTCCCTggեR VWWJW_O~_v]NH_/]Csc;whaaAUWW�G���d7O>э7L&:abrnݺ'ONGz7: ֖^% ����~TUy]rEO)uuuӹs4<<|>kںnW\f<x@ Ǐի_.H~>VUmݺuKcccd2jjjRccB|>����~\fgg_J333D"uyutt(pX p8$ICCC:w&&&f % y^y<6SÁ{.kzzZ.]u * ����KrYo% ]pA~UWWgMgnl.;;;*/400p8,i<JuM=~X`P>O`uu��8doҫժ<y)<yROZZZ3^ l٬vN:7ojiiIۺ&&&ե:sY?i]vMW^Vooy8qB`Z{E��woeY9NuuuQ^׊ -0T.e*\.Dp8466r9aYH׽{455jN;wΚN���/#o�&&'ϧp8l37GͰ6]e)ѣGsu-(+JivvVrzߋ|^SSSt677t) Y 2/>4 ��8oX=n޼aU*r9kz{ZTP֖vwwݾ}[SXǏU*@ ׯkddDPHn8_Zjllɤz7G���Qoo&''_ɓ'n.څZj{{[333Z]]U&Ç%IJE`PNVWWt=ݽ{W|߹GbnnN/599 '?ۭ7, eFy��@ǡ|بg2 C333Z[[ޞ$X,+nT*T*i_~_ Skkz'hffFBAoVooB\.0B466z>}Z󎺻 t:nW=g���ꍪ|~]zUtZZ[[SPaۓP{{J:::eEz<fSPP>WP‚+~%IAFяxK}7oƍSggZ[[$g��� ЉtMC>O===jnnVPƆR*<p8eMD" z2 C> uww޽{|l65 l6%ݼySs={VhM���� uݮ`0@ p8^(g0 l69Nssʺkٳgft:rW+ )HhG0΋Ţ駟ʕ+|PggX ���xFƺ߻f  ÐW__NDFuUuuu)XGk}xP(h~~^}&&&dm9?8���t|O?1GC꣣Z[[RccR Ikfeteݽ{W`PJ$J&:qv9���t n[?ϵqU*MNNt*JW ìICGy=x@x<ov|>����㣏>pƗfW$Q$ܜvww%*)oohMOOƍWT:okk?3��WtXSܬqj_SSSZ^^V]]Ѩ5՝oNq~U]|Y|ѹsڪ@ i����t8~;񨡡AdRdRGTJTJ=ҭ[+׫X,fmLG^aR(ۺ|uIg?vk7G{u<[k��wufMuS6<y]e9E"\|)>smnn*kppPjjjR =%�xs���Aq600P(.A}s&''%:sY^HQZR(J/t}9sz~Ha)s��IDAT���@F9ݽS{{{z뭷l6tj{{[C^W /u83~̍ˎRa]UUeR)]tIwʊ488.+ t/���/%6NժDF߯6l :}KJrT*YS_T??駟**jhhH| <T!.׌y���x^AR8V}}ZZZDt:}r9թ@HGr n!#ʊ.^>LaĉzӟTvg|����σtذ z/~]xQs*<p8^=6y\ΎtjhhHŬ 3���� 2GzΝ;:UUѣGxժFFFvM| ժ>|[nիRѨ^ꬣ8?NOZ}!1���:^;aI,S2*鴖_񨧧Guuub/>m6*Ţݻ_WZYY$~eY)v[G4w7���^jw?4kGnZ[[ep8eA~y<A㏋̧],-..ŋJjmmU,SXǏvݭ8nEcFk2���t|l2 CBAZXXP:V.6? uQ s0U*T*絰?XK.v] BZYYZZZܬ@ `{ElǦz���xf588H$QP$---ÇȈΞ=X,f>S絾.+ݮm>3mnnXgwvvO6M׮]ݻw٩p8lƵ���t!CCDBw&e2r9ݼyS uyuvv( FTJl6)׿B2TV;﨣CGSNNCzfff֦v~kV{�� qԾAu8Vccn߾)y<+$S4==Nb1GXL>ONJ0 r9mll޽{/_hnnN|^NSNS@@O~+Yuww7nXSy(qn��Kt768GDByXkMOOkccCۓa2 CjZ^;|#Ҽv1`RI?ؘ?SǕNU,U.ڪaR<V:Ғ|>5Nת��ت0 eU*mllΝ;ZZZ>cE)* EQ2T ֬Q`\.kwwW>ԥKtemnnT*f)LjggGsss2 C.\Ѕ ӣE"/JRȈ"ȱ0���8Μb]Vڪp8R)555ɓ' t:mmmʕ+V4Ukk:;;lm/ܕM8ssd ]~]שST__/g]=x@zxL[7ט!˥'Nz8444`0zZ���@Qtl69y^b1׫^DB.\?~|>%e]v͚ѡa>}Zuuur r\r\|r\dfaFݿ/BigV{O,֖VVVt]MNN*ɓ'r:Й3g߯zk}~Ž~_jvvZgH$ jippPccc{F%M���:K>ONSTssvW_\.[ƍZ\\Ƭ95]pXpX~_~_Gn[J c!cErRn6[{VֆnkNfT**Z__䤦=Ib(L*LI`Кn~---ZZZR*ե`0(sc5#v[+WѣGScc\.���%͑h4*ݮH$Fb1y<555ɓJҒ٬6775mmm)kggG^WH{ooU__x<.ݮL&co[[ժU.eǭQgssJRJ"ͦRdEJbMSOn[>OJE|^LF޶~lnnR( ?an zQ;+ZS+ϧ1MNNZ͙Hz2�׫MNNjqqQT ^���� 2Gl:Ą^:;;Qo+áP(D"rzKϟ׃466W* Rhkkˊr,04;;|>vy<t*ϫ\.X,W~_<PZUPPKKZZZ d%Iےd֖2*)IW P,TKKp!JRCPH'Nod2y\xcj{˥v:uJkkk}vvvdug =zmkS���ou4sǣh4kd}zs3s}yss5>>h4E"+kwwWlVRI{{{zm.+ͦU9 G\ qk]555f)Nk}}]jU@@PHaX;v+r'ϧx<>uuuQuuu]Ϻ6Mx\oݻ9=zH~|>N>GUUnuvvZJ<w>����@2bvB!9N+8^t:CbQ`P.KGϟ5bv%I|^Q&Q4ښN|>$iqqQ{{{*J=l6hssS`PhTClV^WdRLFjUMMM:wJv$^dR++[SѿwjGl6aPOO.]e]rERIo뭿˼JE@@믭`8���t~(z.ǏMj?=rllƬ9BD!g`U*k]ӻSͩ~{^x\V.S4糂=F9(9 mw߯} }#w Ą<yu]xQJ$jnnVss$T*iccCJ71���@8aޞp~V1ڪv،6k:{z}f,׮~\uS[[ہ%YߙkF+w P(~_ܹi}R{{ZZZdUT4==eB!A����LjfWcc jwVz<k||\@@pXN󙛩}c{z?:cppPhTDBn[RZ# *h{{[a(ԩSS `z;���@8yP\.'oE9UY٬崹i~Q\KԚ0Z[[jkk[[BZ[[5::|>A���t8D"{O+++ly<Nzzz?S;=jkkZ7"83\.Ξ=>ɟumyy<IjiiQ$a;���@0#ܹsO477K.pL&y.yRQ4vn?ӳ^;zv ڪ3gX#\.C>ۏ_'���:;a;(v믿"ZZZvL6 CbQ+++d2J$h�{NVj ژ}m���:`nW,S"vvvg[^Wp؊K36ͳ=|><?מCfq����cp?q---ڵkl֛l6EZ__ӧ cΈܵ;���8ĽG}e Gs$= *JinnNs玜NnŢJꫯvgg:y򤵩ï;���Ít`|fffiݿ_gϞUSSt:5??/߯ ( ����^+Um~Wļժ677uuߴ,9쨭MgΜџkttTt���� Ё? +JVWWQ>̌:;;^vs����:#ZP(hvvZ#vvnuuu)11d$��@^UW*I~6 CCv����t%9mݼ% 89Ǫ��� ЁnT֜���88f A���a0�����:WZ0 ��� ����` :pI!nқÛ��x ð0x^c߄׏{ ��5 {a3����8���21E��.����������t�����t�q~���:�����:��;��������~j]���@�����:�I���ǝJ��~0$Iv;u��t�kg_Z��<9b3ׄ8l6AZP(X+��~,'�F!9'��LqdzFZeSׅ7�jO=������`X�<��:��faT*\ ��)����:��/�ϻ���!q��@����@�����:�����:����� ���� ���������������t�����t�����@����@�������������������������@����@�����:�����:����� ���� ���������������t�����t�����@����@�������������������������@�����:�����:����� ���� ���������������t�����t�����@����@�������������������������@����@�����:�����:����� ���� ���������������t�����t�����@����@�������������������������@����@�����:�����:����� ���� ���������������t�����t�����@����@�������������������������@����@�����:�����:�����x%GMVŲY����IENDB`�������������������������go-cloud-0.20.0/samples/guestbook/blobs/gcp.png�����������������������������������������������������0000664�0000000�0000000�00000165555�13670045075�0021360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������!Jz���IDATxuxUWڿ?׼Rmi-R/dp R] dk4.-Tg6 !:9gZgYYY]!BMU B!]!B!qB!B.B! !B!$B!BH܅B!w!B!]!BB!B.B!]!B!qB!BH܅B! !B!$B!BB!w!B!]!B!qB!B.B! !B!qB!BH܅B!w!B!$B!BB!B.B!]!B!qB!B.B! !B!$B!BH܅B!w!B!]!BB!B.B! !B!qB!BH܅B! !B!$B!BB!w!B!]!B!qB!B.B! !B!qB!BH܅B!w!B!$B!BB!B.B!]!B!qB!BH܅B! !B!$B!BH܅B!w!B!]!BB!B.B! !B!qB!BH܅B! !B!$B!BB!w!B!]!B!qB!B.B! !B!$B!BH܅B!w!B!$B!BB!B_~OP!B.^8ٿW !BHEḷnB! !B!$B!BH܅B!w!B!]!BB!B.B! !B!qB!BH܅B!w!B!$B!BB!w!B!]B!]~?B!w!<5.BB!B.B!]!^-BBH܅BgU B,BHuB!B.B!]!M(B!$BOWv[tV.BH܅B! !B!$B!BxhB!]G B!qB!$B!B{<!Bx][B!$pwՃB!]!B!qB!BH3qi 3#xB!]qo3v$_GϿOk7 !B.^}|}={Ǝ;~m۶ݼyafBhSwDxʝ|ݻq(QH"_zѣGy]B!WRܝ%) 7on۶m5J,'O//o@˗e˖]z~ !B.^5;~,|{<xpM^ί ͝(3gt-[YϟhѢX{|rm6NB! ϵ[G!NZ|"SL?~… ygڵk֬9<6.1ƕ+W1̙3)SQF:uj@@@͚5e̘LJwΝ;G H܅B!qk׮]9sqFٮ]ZjURbŊ-ZTR֭۫W%K9r?㏻w4hPѢEsʅ#aaa6m={v~8ra!B.<;vtYGpk׮ݦM :o߾~~~mҥ4hаaN:̛7X}S;w'RD)R3ͫW?~|ʔ):tVڼy˗߼y3S.B_O:X`A}ȑW޵kױcx=t'Lлwի{&Mర;w/ҥK{޼yӥKW\S߸qo漈Lڶmy/_@%QD!BH܅ljݻwCBBPvuڴi;v@^\bϤ>t;wnϞ=ƍW^fjժ3ɓ5Ʉ?zh֭ǏPBlZjEL‰ܺu~@><bĈ�__:u 8p޽f!B.<N:/^ݸq#.߸qŏ?O$?s̪UO޶m[F-[… xo~hhh8p3:{,be*UTnUB!]xݻwM6:u Gܹ&x1{y}oݺuԩ3qD>O6v~Dsg\ҧOyfɒ\rSLo~;niӦ_xQI!B!q'7o8p`ڵ;uqF\֬u+ve˖nݺUr1k,flu⯶t۟vDg/a玵SZ}Ȑ!iҤ)]Ϝ9s]֭[|۶mk>j(ᯚ !B.bO ,hذa5xqy qblwx޽{1v!6 ~`3sw烿UO? ÇwNl߶W+aӧOhoɔ)SZ͛؞9ʵkƌӱcGի7mڔm@beQ=!w`˗/ׯ_֭nBpmTQpEUrݺuUTiܸҥKO<i~˗O@-G͑#G={]vm۶mϞ={MΝ;9slذ?=<"<<k׮@ׯ߼y3WʼuիW6 vҠAlٲyyyC|}n{6͛7]ٳ)'NS%B!]xΝ<yrfͺt ݻw=zO?OwE^xիO2߷oRN:uԨQƍ#\ݛ_'M4vaÆ700 "~8p ?~<| Of{>hѢe˖'N|p?$Gn׮֭;d_~?~-[$bСw.Fy1 !BH 7}ʕ+۶m[|ytjR}ZT~իGAӇZl… 5I# -I4mw6mxѼy D+֩Sdɒt"Eʔ)S`bŊܵk׮R siРAFΝQ̘1;k䞃9sVZ!!! ,ؽ{ѣG)d&M(LϞ=K*UP!⇰7n؄MB!]xǎók֬YV-t_G۸|wtsٳgO8zj?[l8wfzݽ{�~1nݺuzJ. #GϟE%pĽr>>>EQyd차PBi_jU +W ;O :vH8Yd!Xl٩SnݺeyraUDtMwDܻwܹs[lzN>s;vP!$[),,,((iӦZڼy=i >tw/k׮]z-D gϞFh1L0(P7qhAO;wF7r ,^xɒ%;w̙3y388[n.P=z`(|ߟ7ۻ@LJ0`RJݺu9.:1cƬY̙3G?/˗o WP~5͆q<LHc_.\jt^EEĉsXt){{8ziD$IʕwȐ!={PB.^yO>1hF9r[n!6g~s!\.軭dO>)O2elJ.]`A_G?mt*]v8pѣǎ;uٳg/]t^pwYvy<Ÿqxsݺu||ƍ6mڷolr!s'b|4hPǎׯ_X̙3gʔ }oRNeț7oɒ%f͚q\D4byr8_'ǥL_g 2-&۶mU^Uk#e*:K䰇Eϗr.׿"I,7 BlCFw5}]Aw>ΕL27^lٙ3gL-E˗1it[nGKш["ϟFmp}'N_ϳ+ѿ}@/_|wgϞ.} Zl)?Dʕ+DǏ߻w Ǐi"ӧO6m,Y3fB )SPv>H܅YFzq>:u9ӦM{q˞gΜ!͋?~vZ-$";84<v5jlܸK6\^:qġCn߾Gnj<x`!:AAA9s̚5kΝ̙j*Ā#'|sα69ƿ?�m?`Kg'N>iRѣG'00]vr(_W_}'O???\СC&;}9A=Xrtxʔ)õ ]߾}$I uQ kSh^oܕ4/$".jHHHN4h0x;vp[ٳXxӦM۶m;wݻwM7FgZ~׮]-Z(]4[.[l߾}Qv'%-d#6dL6o;'P\|gy]QIN<w^Jvڙ3gv޽~1/?O6m]Ҭ^>ޞ<"O|ݐ8ўio\cGI<9W8/|!??? xAsQj\vŊ+RH>}Mf͚9rg6lXK(hѢǏZ6?F\t *˗G6mto޼CGǝLf؎ʬ}'gL1?Ug̕ gvΗҢq :uTLBQFlٲHѢEnݺӧOYK#SFG4iGɎ;bjrE}q ]<-.UUTARdRfM,vaaagΜkf͸JTR=jR &N-[v?ni̿mg}@^rzG9!P7nСC ZFѺunݺ <ϯL2L޼y֭;jԨ۷_|l0sr\^zpaСKÓyV\݉U4.$Uuƍ ,ӧO:uWZ޽{_׮]x":dwٳg/Qza݁{N8TFJ*͞=ʕ+?vtr˟L>oY\~(<'q+Vlݺkժш%!;w."bv^0)|y<纚+W.ϩ⇁qiBw񊁹bx͛GY^̙3H"SLؼ y@ѣ9_=zdP۷wիW5kN8=;Q:PQa9gJcw%uVJoˋ3gNxx85㜠i_ G2xsc~V(G5şҷo߿y$I$9vK1YdX'~~~D!a„[l7TH+&<pBXX؀4i.]ɓ嗥J¼q7nௗ/_FdmJI.]{}̘1B^PKbIf/^>^g1#ϗ'=-=Oj`Æ #Fݸqc’֭[O0aǎΝ{I“[4V$wĉt}ݻqBH@i 2T\sC ѣ&,X0qį#(fk׮M W D]Qc3y.wwJ;#m۶-P@ԩ?u+W]n۶ŋ6nYi޼yLʗ/=zRX4D>ZJXݓi�i<Ŋ+xp-[ ٽ{7DM8O4+ymtݺu4… ڱcvuԩgϞQF-Xoy5F<#(Syڵ3g {l&z6k Q'Vig۷ol;-^9`X�BHs*}u|t̘1裏YJDժU8}VeYzu fرݻwmC+zYGs46Sʕ++'ک_>UjW\m|dA5kߴo߾M6Ŋ#-UO[hGwEm"Ew_xi4ҥK-TN:{bN8ɓ8yNJgTǥcM~Qkײ\r=?XKi/]<pAǶ^e˖Ub%*WܴiSL2رclp7n\|ҥKW`s碳f3)%yNlHWs=X:*Gߗ/_޺u%KVRW^˖-l-yT=z;w0M֭[Fs֬Ylٲ ^>cƌŋ8Æ 0`@ǎ 4hPEМ;wYEb$/7JE WȧԎO4)W9sfG߹û#\tgϞѯp 8qmkժ_,S کSz.] .ĉ ]x1(((w_~e=Μ9cR_YӔ#A!ml۶{%Jv:g9cC񪷻GR;wD([jUFRJ#&Lؾ}]>|ؖڰaߎ%K *TRJt+W:P#̙u֮]N0/nQVUT52^Ν_{Gi^]qw#Nod%w*c6#[2f͚3f,X jҧOYf%9p<yd˖bŊ`4<={lٌ֬3_n.f3dgꬺ]<{Dϣ\v={ƍVRZ]f͡Cnܸ Bb {dem]t $ .s;6lQ#ǏG >O>O:ٳgyO}߾}gϮ_>-SBD\U2dȋ.OUDҡChrʔ)_hpmfaFJA}]x`$ \jժ5p˗c01[nE[l7oڵksM[uqVvܹG/&EXj#>|h+޾} }('Uy3Oq4؆sRU8qč7rD*<~╞niܖȥΜ9*gΜEE Ylق>|e?k7}⊋˗/_xNFk׎sƒ_,'+SV*0:ʞ={ NMqE_ؙmO 312;pM{l@%jsWBL<DsѳgO_AS^;.a-gϞĒscp'À)؝<T00*n$?~9̤ͧ 9q .,ZYf ,TP;|n +BWyHYG5jTҥtxa޼y۶m;x .<={n^К.;k֬iܸ1*WFґ^xȴˤI<6 c4U5ƘSΡ˗/"†+Ue|{fpծ]['$qFrnƒ,JJ&M"EaAAA<x`CԩS͛Q~}%fq\S^'KM]8%66U?sAn޼_Mu߬T oO-]400D2dȟ?zz={l*y׮]4"hy)e0vпZj<d=E4rHnٳgGQUV#ܻwuΝK'羾}v~%ݴi$⢽3ɂ 5j]l^s⹸FgP%.{)"%1={zv꯿:iߣ(a„J/#$q_b;Ðx!ze˖-[*T̛7/*M^|ur8o^z눦M Nm8Jjy &8ݻw) Tq^7n57Jk#fKb'hCTOU&gΜ!8pw}6m/"SL5k$@ BuM.\pT~xx8 (0E~_ca 'Y p߾}|UVmҤI8֎5RfҥKfzߠA^hѢI&^Ç7oށN8A2quuɑ#Q٘1c؃yLt?"F/zwDg&_Ҙ:W$"<n\t):{+"\`<_>!q/f$lʕ+6lK+oooeΝZlb,6iO"b#L8YΝ;x Z6o lƍػw#GN>͝… p;c9T5wc*TH4{w2eJ¤U-[y!v!jԨѸqc{cǎ]v-Zi<J[utuz/-k  *U5kVzaaaG=՞:u*Vo! (@eΝr WHH7r .СC^ $$1iӦM{"yٳR f(O̦|*LEnㆸW $e-:s+V`xI)-ڧO4 2Gt3v Sxa{gҼ=w5 G(I дiӖ-[_ڵ'sѣѵsY2i6yZ4'[Ý<ybРAE?ĉ/!dz3gΙ3g9eˆ)Snݺ{^j}C?߿unӦ uK WRe„ ;v ;qݻ'N)S<.d7|<R|yiР7rt.t˗Ϝ9z … r]x~2ë uz3gU:.1x Zz> t$:$q߿1I]ĶǸO۷oeL*U|ZTrb8U<WW's5TȺ@8 _ +Q're̘ժUP(S/s'%KUVԩSCY(*;quN 31*UDQwy'M4>>>$NAT\\r;SbEDp8"q3]>۔xٳ6ެYvؑne˖cǎo[n1bI|*TСCppQ FůNͤM8cT(af͢ 6rȃim:Y|k 5dɒNgHj@OVN HK ''m{CJ/eڒx-N{ ɓcܹ[.M»wFs zB7¸);,իW&LT-yɚ5_|օ΅{?Ɠ A~+O}aaah췤1<=7p@\믿0?9&M :Ŝ2e F(;w\N ___ޤwܱ=vFMUӎΝ;GM.\R^'ӨGٶm۸qvj'.س&D$]lkO˫jժcƌٻw/mzƍWϹsh V\ɛtx8=::sL)0JgP/݋( Q>˥C)S:E۷oʣ=ʼZIHEIc8ߕ+W&MTxqJ*]vEϟ?}rsO3.\vԩ~ (-[̙3rFʕ+`a}%J,[o34h>ɝ;w SY=C `jժqv+VNEFrD''͟8q² >퓾q'G~ݻpdv'kԨѨQP[T#Zy zQZfϞMcγtk׮dR@ꫯi͛"t˚fX}Xbt*]"e݉*\qFڵcpP95!ǝ{Hms]"}A9U<Jܣ3,K']Ē'|%DrʸE5OX;S՗uۧOƄ/_ޫW/L2x�K>=k_;ӧǎM6-44+ZPPհaC<y$Ocρlh"|0is`+ٳ 0<‰TR ۷_d i+^( FƖ }Μ9=^M}kܻw#4BөRZRnq_Skٲ%} ߼yӞi,~%}Z͚4iRln3|y)6RB̙3Y,>ԓ-<mB3=FBLɰ^=Jܣ|{tBHRxf2fwݶmMYYl/q<ie2h]={-Z4cƌ6řl^x6m3f Lږ? ۳gA\b1Qx|׮]ƍFUshT(M|i3蕭ٻwo(1uԼ<Ӊ^pᦋ'Or` nO#hyX;f͚!Caŋ/P@.]xs޽>5L4Hk.o޼t*䞚oܸqB5Xxvk99+NF7o>lذsOkpܹssq`x@ߺ[*ģ=e$BHp=aQKy[eΜXb eܹcc/:JP"EK.M45F[haϜ9sɒ%7oF-?˗/_v ܇ 8q@p}vWX{I\J,iK ܹ]qӍiDQgϞ%@J*E4ժUEq W^6m>|8$$^zwdl2:3yN?y3[^!`Ĩ*U DiǏI* ND,DC7"ԧ«4_BͳAU^٩S'L0`.[aÆ9sP‚ xOᅬ2qGnƏ2O/z_WD?!Cy2ъX4qX.E,rYp=z_ufJazdcϞ={BCC7oM6mZѻw &L6mٲe;v-6{߿Jٜ&S<k׎3_'6(P�M2er8Ж-[؆;c5-ݻwΝKdRlى')$-!D(4%n9d,Yx1W&M9k׮RJysԩS)W\LeF+Y㷜B ,}9~CD~ݻw'{w1x`BPzu<KF@'9:ʗ/d+q8iî/(s&igΜYd 2ԩSggϞ}'Lvu+(5J4|5jdϞ=eʔ;WJ*q5>}u8`kk1Ǐ9.9LYZ2x -f??j@+ZhΜ9h۴iSK#1O|Gb*5 8n03gUVHHȶm(?q'>#ez>4NPJ=̚5[n͚5k׮^f͞={X ]s:uQ=7m"?9$pUoܸEx0|ڈDݺu+_+v@@=?a_&LyOwHÇ9־sN%k֬ 8|JKIL,o߾ Ď3:ۺucf6m v횭xjng&ĿibZ0߿o&a}!C\2M<~>}ƍ=hJc uL)eXdIVʖ-ۻwoDh#R'8"8J,)"~~~j.\hTqLt" .˓'Oԙmڴر=0~x3]ٲeMDDY g~wY` D2eB߉(ͶԩSrhveV'%q4KH&Κ7Fyqnݺ!9r]v3Cl$b۶m㒍WLO>A)s&M&Lz{b`4g;kn,ΨMYtӧm STR}2dx?qttw I=z$$nݺEoy</Ν;YCxcM˖-%πqFzf̘ߴiSbgϞgV\IZUdo6w#7hӧ]:-jӧ|Ŋ޽;M ɕ+WΜ9;ut![6n_!9(a„p̐!C^d㭸Go!q;x lΠӋ)RJիy?4q#:)R>s~Fڴi�ǙdfO/wұ|dk|2nG;wǏG|mÇ[u̸K.yn)ҥK;tPreӞ=l\$ u4Yd'N4i+V8vXK<i61ܹs5j1SoD><X>wڅs֭ä1%Jϟhp͚5.\lk�[ѣh%K4lؐoԩnڵ9iPDO$3D9L27j6m%{,Y"o[n]q7aqhˀw޺uzyy,>x'b Dr"ǘg}3QDX)%3f͛Q23FH>9yЉa $6nÞٿNGбnݺ͛7y~)ǽd yԩS&MjE pwJNlbo>c>$ǎRw:z |}} (PR% Yr%UG?3gΝ;wy|={,Yw$™<y2H}ϐyz/csuZjE@ID=}4Gȑ988ñ QN98p`<8G^-%\#V!$EayL?~|#F ݻM^jˣNm4hPٲeSN{RQCq g5ܱAYB60TAϺ8|y6mJ,"E s=zdBYWJKcرM6_NmFcݦܾ}wg@b r>$I|' ҈s^XYӷ@9ҥKSWիWܹshhZ .\d &pw{t!Cŋ]صkk=R*sȑѣG*U/Z-l-JR|y+UV9ןʕ+kABOw;BH t�UEի3gΚ5kΟ?<d 4{ Vo%KgI'Cׯ_hhv'mV̏.l L <[,ݻ5q6N:/\pv4HRv;m޼9g`i]s3g̜9}$H1aFPP%PCLX>{xĉZ*S QJZz;+Vذa8pѣǏ'B}vUZuʔ)|5XzNT2®ڷo1cP'Oܹ[n} OgYLqu=)݋oSNE^'tKKٳDB.^lo[U+Vl{gR=dypڵ˟??o&MPBʕ+m2=;WFt,QesG޽]]u\Sll 6m„ z9ҦM(>!|s" $}Ξ=A+V:t(zeZ͒؄~Z.}iO?M0!N%N8C ݻw6+#6GٝЎ(8'N6C7no޼yϞ=:|YǞ}}lG zM"?8}zw'5;$$B[aÈ" h#b?__߲e6kl۶m=N*{D;%Dtʏe�!k^=ۙՍ/~~~y$.]zEC:f@ϛ7Zjҥ{wԓbϙ3 )S٧X*^Rϟ?~-[-[bŊ;vr< A()Ҧd؄[n#dΓ'O۶m,XZ� ?:u$fK.Z͛7/iDS )'էOԩS;.ϬY80<<SI< 63((J*x^^^ٳg',_|ƍ9=fLwLRj4i۷Uj)"d㉎ۿwzÆ BCCyЦ3gt_,]h(W\e*';=6YdްS$!ЩS;w"~TzA!? ~GK7n2ќLQjL}͚5Ӱa ظqRJ,YoժՀ֯_o^D3*>󫥣 &ԫW/w hѢɓ'93<0E8 N@N>MmpjBM }Ν|es~1cF x*U*tllϧkՌMm"p:vMG{.\eϔ)GG6mZXX4qrK6wgRlٳgc=QWṅ6Ng={̜93>rHBIO3-ZbӲf1rK#wի >y̝;WR=G28_"$ڏ3qҥ 2#գ<gw3fԿˤI&K -F}6oތzF?O3zm΍->}4jԨB %J@ɓ¢2dȀwuժUxY+63?+Eb|=P` e(r_Be˖q߿nۻwo__߂ cՋĉXK_Y +VxҚ5kb6br<lSNILrA|;ѩpnX7|CY\ѣ4$Yb֭[ u4$xEZn]un$d畝IVONtݩm3 BڗRTP-[͛}6mSѻވ "wm+V4qevWUv!$X*pqDV&Md 7z+@b,sș3gǎtVJ a… QX"ԩSK?SL_RZjQ3w6n܈Yw'S$yrʁBCC6l?2ed8}tJHP<rĉdտŋ)R(vٳgO>=*Uܹsw@8>J!m?A8"Ν;ϟ?ȑ#8y3_t vHƙDM޸q#,,lԨQ͛7^h/c6ݟo߾ɓ'˨etmѥAQ˗ پ};NoS,;=y9Y:-!"=I&t*'Td͚lٲiD\`\Zˈrp,'j׮\%\-h]H Im W^y2#X, E!?DKiӦfB,I_g[/_޶m[DO}vo'LF&Mr7ESLbN~@8Qc!K.իWҥqwp;w<n%#FԫWp¦⫯J"E?]|gK./X6m8 'O<xpŊu놡{yڈAgRexd>'˖-#)P@,YPER]ő!C̘10rEr_qaÆ5jh„ 6͈"+V ѣի+< #9"AAA-[3ϛ7bdt#GsЈI؆nQN?~]ŝk{jp_!q\ Bbpb9x !IRѦ3gfΜmZ0u]NЦZj5lCܑ`8k֬8| lٲIlѣQ7oZG+)'ol'֩S'_|9sD(13\krС#_>}\rk]7Z*U3fS6p(qѣGmF>gϧN>8I�lƓYFw#�1A>uT5jVyyyzq^DJ;½e˖@;o-~;%9s v~z:ZT)߿?jy[숴CwMFMiݺu8븗[&Jqgxxqrp7~NƈMq׮][~ -zk|mB.^v81j)S={F<X ҉K٘7ޡCի+YFδxbZjpŊ˔)SfVZiӦ}뭷^uo&}wxچEΈ3]tZ]dInkFHygvΝ;SP!}ԨQ3fXr5k vܹi&n=g%Mx:u?~ 9Ba,+W~8oݺҤ8DXj* Gg͚տ¡ҥKtAq:cƌ|P9qά0N+VPmڴ!ytTf׮]`.Ӈ>q;A)�W}3d͚55jD:أcǎć{HHŋ-?bZ#7Tȫ[ ɹsr囘+W..{Jg!qmEzDs۶mM6傅._ƍOk/Z)BيK*U>}:eiџaי3gzw&zݽ{wv60a?//"EO>o޼cǎ N"E ,$Gx2m۶ݸq#f6,d잨~I<x0*||uʛwރ7nܘ?>mfϞ͟8[.ɓ˕+פI$[zJ|/wh?m+*ԩS>ju`EP޽{ϛ7r,' ɮ]|o1?"@۷oڵm6>z(MY4]|r:s̜heoO4h]|#Fl߾"5$(QNA cqi{{N<R~}w!sHC5jyfOӳL&so۲dɒ4iooI2 ݩS-["nw܉*e̘wAo A/J*A,M+r_-5- @>1[6IuR>2�T$>zy PdkhW^%N8p�Q9r4oޜ5qwbo͚5k׮ʕ+o޼iȽDqw*|IGF Y*ߟNBG1|zNTiz>ET^}Μ95Siz0Y9?Sv$cyܟ3OmNVZ%Kׯq#jժB D)2l]9pv!qӽ{B W.iHϞ=n&O<EԩSX3[ _~&MZh>|ݺuO۶mQsX;o&L0QD~HGp:;P+WرuiҤA1]nذRX-? {%tRhQ/// DFُ)=iar%KA*V8qbBbŊ .\vK.%Vᔗ/_ng_kC)b)5iQF'}||4=MC3˗/vGm^8G΋X r|)Q+*رcѣ[lA+W/_ XH[6˲@ٟ\X<hs;G֦Mb-NNZs4w{2eD[nI=g].$" b3@yT 6۷VZX_~T᩶*ͳ;BT5j 6 ϏX믿nf2 $xws=a~p㾾)>fΜO?EǑ ݻ$ 5k$ʙ3'ѻw[ܪmBF9D ,V|@!9h^>lׯ_ߡC _ /Kٝ, ĉ 9ڷoSܳuwٲe-ubNsy:%c-qOα8 ٳ<xpɒ%]TiSe,#eg~3T 2ǁǙODF ŋϚ5k ͛w%KϧΜ93 ⮬2k.$"VBH諯pYLs&�6b gtڴi;v[R ZN(Xx˖-qmv\{=7xz뭷ĉHtQ9>h"{6m+۶m x"Rh%'g7o޼RJxٳJms-$p-M8L$ ΐ!NsI[{tڕPm֬Yngw]|Db0yӦM3f V_M4EC#<zmU)Ǥ-tD,rv?p-ZkGqK.:SQQK6F)0X~>OM ptװTR=ze$X'˗ir7ĝSrI:rՑNT2]v ,P@4i7nlyZ<*;Et2~'ҥC8Gi5/^bӧGے%Kr׬W<yr|S?pͿ\tµۖ7zr*x2e &G2e-˱cl#ڵ\3%iժgSZVl![U3gNŊ9IZPx׷o͛74n̞lݺqoԨCmtg*3mn,1k.&P\ ,H`軓(f޽V~ڞ*z0ᤥw|w=;$YpbDqɓ-3-bŧlRI`sf켞'pvN8:N?wr=mۖJ㒸\⡸A0až={jyT!q*[C-[̒% 0lذ3j[l)W\$I�~6U*ڹs'.?%K^g̘0&QD wec <g".\XZ/C+V I!gqZa*}A5>2uT06lCrh֬Y?w n0ꂃwN8f46mڤI 8 GudSE7r'pSbΝ;ے2dȝ;wժUꠠ Ü;߸q"FbWNbG3ugJcNvN֮]K޽;5CI,%9rȲeRK>&8SebUg=Lϗ/_ FtR!ɕ+fܸQKRʕ㡸2$=O6MpG ~v,BHElMT+ڔ)S& 44SAP<gi y+"7mڄ=ϒ4|aĉ#^)> ǀmb6ڵ]Ht֍ڶm*U?8O<yB)9{6mԯ_UV -bH?Jǖd Hݷo}‰7x"_r*Uj„ ۷o={ƍGFl@'DHCs=z؀u-+-qJ:vgJn<:)]tNB7ٳ7l@)[2G)8�mbS=zK.a!!! 6^:aMfm"v;)kcRT#e0`�ݛDWXAH#ZV**^n+D '=ʩD؜Wrew2Q0A+ a <mF�l2ˆ#Gɱ#F`|;tDa\�qUTӦM/]… XT$gs_G}/_>tժU)vZNmРA 4(ZhܹϏr$Ix$^3_ʌM:uϙ3(%뭷x8ւ V\X:t@9"�@4ENʕ+3f ǢiFI(8B̡'OQJKdRN;YJ={*U 2d| ]f,v3c·i'G#X} V/_LDmST jժY>lS $%YaX}DYƬY{K(A fqs(%K3KCq'Vv\4q'z慴wbj(9I&qA,_<gϞ<K,)^'|RP`{ixcq4iO-cwݺuΝ:cו;߿^Tqơk֬Avvڼys{@?cg̘eO42eJUX;vl~ڴi,XT }7!]t2d@!`3f̘@rnʔ)R46@iėh߾}Fl+ooo¯5kִg˕+_ț7/w}״iSN7ʃ"S$tAa'#T{D7.>j(!~ DVԫW/<s),q=MkdqwJ=/~4"TK~z֭[Su|I oh\rEP1M\$Ǹ"DiGn .[l.Bj6gHСC2epڷoROE@B "}g%K8qC*|mⱷP$2[l{ |M O0I<9‡ٓ�ʕ+vUx*ݸqc>})RpbŊ[zH~VT)ux̙3c`DH$I\2w֭{Ck [`/^" dKC@9۷O6{ԾK" xMRYbi]O6iٯ_nW|QΊNxHѣQj"t \#GR9]p#l7oFwƍl~ӢZ<GdXЎNBFG أ9\R!\~ /"%Nĉ#DBS>팞;wڵ2b'O<m$ѷnJ9ŋ\ ;g?J֮]oo%K-?8ӦM%K0až={,y4ϝ9suN.]ƌ۷ooRNⲜΡ[n?@b̙dϞ=Q̼y6NP7xKfVZV:vcǎ%0@h\gذa8h "ᅬ[nMYbE`` &gΜ 4h۶-O#D@<H!8;ufʎ;أwKlp}׮]:u.\h `hӐ̘޽Qh)?r䈥9 +6a<%N{iǏT?P~~~k׮QӾy'Pu~-D ~A?"aFHx#Rzu,%;w..⁋QZ%J>}:"eD=gU8`x]\pKfϞ~zԒ ly!ˋM6I3~}ԩUVG]p fcѣG[9wO{_.]J(1'N`( XG}R�| l᧿uXs*gΜ9]t)]t4iR@ ʶxbNmۆ\RcUV͔)0a U\X ;v5y=Z&Dx^>N?subϡbT*`Rr*UqRM4Ἠmb!¹q bQy<`R3sA= ѣS`>9 ףGG<yr˖-N֔K#Z!㡸E^-|$w!$E9?eƌ ̕+WӦM/_Ԅw,gEK,iݙ,>j)}.QBHĂb( 7 ɓ'EСCA;rŰϝ:u g?- Y߽{7lntRB o\RJ'N({*o=%1]k"vQTQ1 *EXX`QTaG޻b@ %qs|**Ț{ֽ[{͛K>".̒P&4iRК5kSKICS)v<x0\fͿqp&)eja\mh^gp%(v:aXqxtt41G&DJAAp5/zzz ɓCCCPJLH̖| x Iϯ�UyO3@ElAtQz8%rs @^jb g+S]Yy & XL@M6ԩ F@#׿$_% "إ`vۻ]vaaaSL722jժU@@C)eVv@brT$݂I:.Q@9KSeZ#,».^H-j!x˗K.?D!Ȥ#Fw"2 ---Dcݻ΢L7nרQyC=|0&鞎B{Χ":!!!66P5dL�s"h-n$"J%kh߾=]9ߣGt6l(N )4jYrdgK"8|Tl2{7n(?@'H&&&%CjE>:(Yj{DxuT2e ܕ} xzzBZn݂Y+`଀BYe"S?Sy/tׯ__ vjhhz v0+Ѷ<ʲl&@\^.1?L@vZpp0v4) I&-_|Ϟ= G Ixd^{I͚5zJtvWV_aJЅ9sgΜ4c͚5i3Ӟݻ744:ܹ3`\htȋ{fxI݃lٲ1wP۶mO>00p֬Y6lHMME3e$lnqGGG1@9BW2/_ ' ݊r͡$Nna(pWL4=؝;w^ 7j [fO>p/((r#pVZHɓ'ժUݻ [XX�yȩBӂ<bZl*QKj^шܾ};22M۷/Jv=zXZZ҅m۶999<Y~=R $ ̼P; .ͺB1%Nٝ$?~8*6\xQ"Xh*-_z ͛7Z6m=eGFFƩS`z'eTEq%%fffO>ի T8}4@1EOCX >}:~9�*z9qڱcJ&TbMPUL2d~Yu;;;͛7?xZ Lڜ ;6iҤZjzC^%KLh-&A䤤PCCC n߾aߏ^hKuCwvsнF adkUV^^^T+^(p}x(ʊËi-z* ٳGN%'++ߴiSSS)S@1}|IO/:8}=K�^D1xY@$mtVBxC^AG_~9- (J'mڴiܸq- P,H 2q>H񼻻;7fjjuxD*J_J~!+`KDM<rH>*@&&&J|(pWLr@IɎ3>X-Z�|ToEx6ѣFm۶#ŗJ6MQFA4nݺY[[ϟ?… $C[L )mtL;HVM233)!",hB...EN:v@)IT~'f pqi92IF :u*_͚5㽔.OY2s)]v!0-[mK*IBqt>7n\߾} }vF0xn<xMG mڴ)88K.p<ͼyN<{Ye$(ičʲ�7nܘB|}}e9i~P+R-%~yM,P銾D2e ܕ ]zOU84,,ŋ+Z8m۶5mt֬Y/>w"9))ܜ6׮]AHBۇ%'sKq=*H<(%%0nN=ztԩ -y*a\dKQ}ժU#FXr+W@[ Ο;wDlٲcǎ|^l)"Q#E9H \.i nP4iR޽G}a9CV5%,{ /N7)_~G[ 윝)ȑ#x6K'+++?~;v+Eѽ{w6i>{2+y%>J-SfMeq3YQ#we+{up_Μ9KFLLL^^^O*[o4/--6|]X%#TT Fjnn̙3>쫯BoiӦQFƼ R&o$c 59995lذk׮k׸R9b TUg϶))) `]Z$6lݻ)\yC'cii gff¾%U)8+ <M_-+V`,4ܾ}sA{C"貜t?L2 podd$Rxlmmw7nܐ%\-N)c1i9%+6o<p@+U*{9Ub8B5Wr_%ϝ;Ҭ,3uKȱQ_ ܕ)S^E >>>۷722 Z-4 k֬ӧ_ Yn߾c*˹?{uqqAf|<.]̚5 _ E6�ȟǏK.K INN;vAƍ=<<VZ*[E%,zʕǏoܸqĉ:ujРA޽˗/3[$(-[O2EM_ű666Z0`�4LnY:}1藐:/)|~ɵk…�ɓ= m?(49ҕ(9|p/b&((4 MxQ\pa^͛Ρkq(+OOO &]a|ޣdd6K+\3gNri0Mʐ+>cVzh:K ܕ)S^LK@0DLHHsNֽPz7o '`p#GEEAqjh3$׏ihh(X)ŗctAȆ;FDDɋr +IKfΜ ,v޽I&_|;;;kAs(_p!!I9p-(`t P[874ϡ!CvIki/z!(#(30L%&&":wJI/ PkL\-?n \#z׷_~ ,سgs^K?~<#X$E{`-w*Qk%ɥpE8%ف+S*;d�a\re666$m۶ MOӧN:ppRRRZBnvڟ|I-,,$5@!!!1Ce$] ;xWΝ; 7h�̀`>D3@K, �4JNY/t.(WI]xիT:З'Nm4i"\CR�i2uJ#..Ο8E;׭[7n8 OMMuw+X({Ґ "%sܼyS$b~FIQ>>>Gj)cH:^y[n|utt41` sǦLR*+BSK=_^(ݨQRb[0])pWL{U4asjM6;tlQ$DN 5k֢EaÆILZnidddTZ58?{yy-]tԩzj׮ݘ1cRRR$TFw%ev0~ݾ}pT5 i�7nH'O"zann>ty!-v7@7oZt;Ly) >X`z�QQQI,ts큁ѣDΗHwQ%o>Ż$ !wzA_3p9q8A#b,ܹs5h hf8ʲ?U;vԩS�}ڵL p߻w/{l|m;/_\r9$P^j]|Ъw˗G]2U4(ǪgeeM2w0Ar܋S۶msvvׇ2cbb` +< ƁwƍW_}rv튎ׯ!T{|9zIwѽxvm .3^"#< DrC6B5r{�7߻ /lr=(+4 9sݻ( rȐ![[[T %-S#uVRXX}ٿKe;) rJ@֯_EHzE_222&O!Q(`7 ?~Q?ԔM2@|TAAAIIIv! g1b3f(ׯʖ-[ V(ill\ju5z'n6G6<>_"ʔ)pB_O;u4|⃻^.\3gl\vdѶ�^aɃ޸q/Ae˖mۖjhIB􎺇ϟ2=<<\]]ɉ'7|CȜI*lklllfϞǏC)Ȉ �w.T ,BӦM;Vh4_ lڴ)غjժ /r3jrk;o<)q|.w.] `e Gt_N區ѣ .|@dd$>j=<<QF�=4ۓ(=z;]/ƿ1Ax 3.*#J"R#Z-_j: weW9r֭[ H(P x|3[�ȑ#[nW°aÒ!-9 T#<|HD/k׮ݮ];(ȑ#p5k<==!ca2 iH醰Bt SN۷/Bok֬I<֨QzpO-4_o߆D%Jjj*ײeK@effڵk„ QQQ*mz \>|tm޽7oޔT*oˮ^hѢ޽{3(JpS\G +Lo4s^@r\ٙeG;ct5qj"8::⫌ #DMQ,;w.GD HHs"7W^TsNdŤ=Rsk�l勒t$[s ^3W]2UܡX{ @,U.H9=q#9`Pܹs&4&+o�[n"*6m8;;Ccyyy quֹsAd0DqH$x* -,,w hذ^Z?XpÇaMZ%khmcǎݳgOzqWjժ\b.Q"xDGf͚%4Zd/+++; 1 S }vH_~7&&&:�wD*VT"aʒ H4ł3fcƌA6,^ҨkʒU˨GTsom۶-Y/ [+Ro-EIbYֶߚ[evOOrQ2e ܫA�DFF̙3wsssC*/rН;w`iӦYZZ6o޼O>111G2)mM{UHJA=@pĉiѰp< G+[lY~ڵky{{dp'4)%HL v秦nذ!**Bq]vСCƍԩ\Owޕf$%%Y[[rف$N&22o߾�___hd۷^@rK62wn cccqR;PK%24 W#BNzy,OTi6Zr%K͛7_vMd\OOZ;5jYMmClll( ɲHkn:FҦذ0XOcV8r*wЛnϱco%(˦ط-[%]6$p)pWLWFqnbbҽ{wxԐs4+ CT0:�)6h�xT΄ԛ>IRvҤI=z�@s@uM@E|||0V5k$2߿:|0�CE 0j;vҥKn98r̘10�ݻ7++z%Pz=Xr�p?{} BdeeE{h 7SSBjF'訄{{{B XBNzdKAF&!`hf;$ޠ tdk׮]~=Inn.Wj#Wa}0/:D[L=_Asp/u]6E7utttbb3P 4O>iW߿�" eDCR0? -{,,,*Rx!dƙ3gʫjʔ)pXY={6Ɋ h(gT vقΝ[p!Сؼys T?K"ïTwVaFhѢ}#FA=YpPi8@ m<-[ ^pɓ N:zh''' hX oݺ5`Nj.lp�4Sl*~WI0ի @!!!!ӧOYϏoz^0T]xh9eRbH$>1`MF:QZX.+ްa8N$ vE濜*pUVɓ!oCam((KKKŕ&:<RrppQ_Դ2+W^4~gfggZ@T,n e\`Fd!QF}/o%WegwɄyzQ|rweW,} l1|�AC|JN7onݺ/kU.г\FJ7 łP 4iҤ^z5< vyQ@cҥK>>>ڵk֬t@@@`` iٲ7|S~M*4$aLF0++ DߠSBZ p'H �=z4%%i@r`xK%*:De?.@ІM6w<S|+Vp$yd%YG/P2C ټys^^e%Ҥ$|q$!ndj俈1!̒g 4|fw÷VVVńc ]fܻwjDq0pe A/: CjүW9CuǎT SĦLRWL y++|ك ś�tҳgϰ0*S](P̙3$==unժUf[HvYf^ ZZF zy d-ZpqqA<?擪$4vIhSVԩSF?z;Ԯ?h ٳB` q:;;# xFYݢ|{. t 6JC!~/{R5jǸŋsXwZ퍠0- ٜ F ;%ܟ?:d؝1ӯ_?_ M\ȨAҽ{ӧC|ePۇQ/jwpp�7n$)\=z4PqD;u`b֨\e_w5*ehEPƍ_.& {(j. t˖-Lq$by'+T4jԨrweW9p¢E;vODDDZZQ~|P߹s'»͛7I7na:|Ck'\IYRݴ+_E=~ uڕ�o;<!IKQBQ7=:|]p nݺ5Զm~W_} FcǎK.ݼy[VByQjP]yk9jxˌ3P\nݺcǎ]d$(+w,7%Z2Z "]'탻 0fچW$ɣdq>|~\]`$x]$H_FFbhgg`nkkc<xJ%;b�w[[ÇO0yԩkR(3rVv2_݋]E." $4탻ZjE|~CWL*g`j;Gadd+K:"Bp tA9'NѣGƍ!oذ|̕4+vC] 0I=`jp'B,;V-,P+WN��k(IDAT޽;..n̙|l </;ߦիWS5haSPӧ}SL9y$Վeպ�K.577k֬Q;�!''<uft_E;ኬsM4quubejF|m۶Ӱt E`շ~$_hh(rW^...>T B?99fBM:yF!L!~#F@�P儁;8򃃃W[n={,Id`YPE-5kS1]['^rZzweW9`W^^^^Ϟ=D+׏Bo*t~@ wFFF407 "kD M7v*!.TLL>q)=}Brbsjf/ӧ):)QF~__|I5իmܸE-P#HJ_V~}OOϽ{Rdh(B!KT N 8yeɒ%H"|vHݓ\DU ;88@M62/_DWUML3iٳgQQQ(@߾}|gp?qԴiӆ @<ocF& 73 ʧAVoH8\ Jue& $C ;v9sۇB|2^m۶E"2t\E>Ν;W4jw(Wf)w[s\O+Sʙ̍7 8�2eJJJ^8@ |M<tЬY۵kGvԩ_~I/^sNXK|ki XQhW_cǠ^*h޼$x p| J"箰jq8ں@0I-.p ԩS>p駟~זP2-4w5nܘOZU E h>}mwq&�"춱E]�h7b$С> ڰ9* bbN$9֭[v7n ٳg:u+qWǣ] 4xWZXה=5b=o<9JFd'H jpZN/֮]ˋmڴ1))t%*tyƌ6W$1w4wK|Wvʔ)pW? Csd`dd|?C%8Xd/ڣGO>,, $:s z*bFvyBu=<={0ӨQ�;vlРA&Mv*ݻw^B`FQ…=wx``~ ;/@-xyyM>�DEE_1"T͡ό H:Y2@dCy0VˀQrAY&OzzҥK- ) p/a]~`DDD$ $1c 8>BӚ O^LMM9r$:gԩ\b3`mmd4hʕ+?R"'Hq)ngZ2&L`Ruoy4[V3J0nؗ=Ĵ\pΜ9] hniԨo ܕ)S^ 8!dTh@�gwM"Lq:4nܸ}ṪY.\'mڴoK.Z!up^#"�(İz9xI&CW$QR(>,^貀 xU7p?}W_}E0}a kٲDAjOT+'N:t(2ÝǏV$sΕsF�}w9SE"KL*!((̬N: &r7?4yΰ,YrE٣,* EC%Mo/ref Bld0M8|pč'O>KF*6QL<T:6o $mnSZ{qo Ou/ʆ·FAI5fg}v|BE(*};SLM[+W\b-[Yr=WY`*úAرc 00]ør)ձcGف01I\"7o>ܹlB@'OTֶ/5m[SwaJMM&a/B~kFzzz[� RDε.!^zA[nE`(̊`\wvR]_RV7s7b#&|ʔ){VV-eolNϳgvssC ӧ>}ShBB*amV9 %`<9.O ٚ.b"1cƌ6lXLL ۓ?MMMV*Vʈ7 RBoBIHӬY7S+dWLw/`ƍׯ4hI7nE3 JLnnC iӦI2{zzI  xY.N`Whm@u]]8.(gמf)//m߾}?裿ڇ'ԩSAi?O׭[mCh u}esK.ݿ?˻CHec.k$HT@k]�U 1<tW%"Q{bbbHH}DE7-Ԏq>5޽{d& »$o~m;wDF~g}@0~^GwĐJwH 'O@vرi&mժ;p_9~;1cF˖-wQvW4pm2VV ;IA]2UQ<�4|1�&wD_OM?0}?r%...&&fΜ9`VhhرcaV1yyy *4!ŋ/)+WB/P|]Z �W|׿|ׯߦMƍ1ϟO{gFEEo̘1|2ֲMV(4{۶m{^Z-Z 2d߾}s]vmJnPEPD>>>wu xe՚T<Ϧd!Q=3s'S;VIXLMMe 67ѳ�:#N~qY&͛7ܹ=uǟ9sZ$ePX~%̽I&QKXX_|9iFy(s�<w(0z50A@fKUufL&$|(?|08֢bkWVALwe=ٵkxjbbҷo_ aT$%3`^^WǷo'Y&!!Gɖ-[YÇA ŏSzG/֭kllZrppϟL]1m+vR- GݻBS�"]vkAϫW‘E]7ɽ,iˣ@<^tރ_6lاO_QNkB]'` <'O233-I͎Whdpf@6 255bvӣUPt#y$'t%Hq `&Mh!t!cA=___hm'Fq0竈%66vʔ)t[pqƌ6l`[XWLww"Çzw͛7Wc%8QȢ>kw`w۝;w {9[… HOb-&YB~C52z-Zѹsg`/_ pq=ARFh?2 HJJ"Tm])+ .mmm �iF:dצDAdw�DI-.,w<@WJJ ݜ9s& m# Ƅ<p +�P&**QD ,:t9ׯUV֭q>`+4П+O>͝E#ANɩƒ#ƎF!`)ZnUL2e.W=zm6i={ ˝EFx~@X9Zn!c&$$HZN:ծ]o[͚5!;�z|||zz:J1֭[Agwwgjuc`"vK488855ڟŨHQZsh$''7oޜF3ѣM˅˲@ Or\yf9yyy(1tΥK:4չиĉfL.]P ͚5---f̘Ah�JͯmvdU 23i-bmllp IBsttܾ};m*TF2eʔ)p8qb̙@ ;xQ[H~@7B~h"ij&ߨgdΜ9d ͭe˖~)7gϞAAAA <yhvvv9஥YB&㞑ݻ7**J FI�"mMh`hLΝ;4}x5ZEQ/:ؽ #Jʕ+w^|5*zmډu/^ܴi===hkkknnjԨa``�:422rݺuGi@6O!uB@ҫk:^k)e^իobcc̙+(Ɲ1LRw*SL2e ׯ_߰a_``S$s_U;̧[1Jl |ϟ?Ĉ࣑ Aй p1pBɤ.?@Z$ѣ[nԒLruu]v-3Dr]ۅZ(677w;wnݺ5EKLU^^q}7o<v]KJJB1q:P8p–-[F4\hkڴiB�du9 U~~Եϝ0Z4 ر7&$$6o޼C6]Mө>Д)SLawnݺ,�v " ;}6d�;::2d^^^SLٱcǕ+Wb8R3gϞܡYf:hpx7޸q#'''==]2BR@ŝp#PBZ׮]3g&vۜTzΝC8p@2mo&<rVFWݻw„ idkkoڴ)-- d?1MewqHdB7$$$..nH)9I&!3<yO3eʔ)SS͛7[[[CiʪUn޼ aOEBw�K.\2::zԩ#G ={64It¡=KKK`ȑ#\ %G;ӧPѣGcccG 2ZjUn-ZW”1�666600Ab**\QsssOFN[n%$$DFF&''[RRR M2BdOJJ_}^^"Gv>HL=%`tȰӆ1c̝;7>>mb8:t`[t)-)ǝʔ)SLJ`iӦ޽{K,k`-ፂ{^P T)B O޽"@kI :|iXX\..H,_v-11qfff {.]u־}{SSA˲ D cccӼyspqU#6#EKФ۷ogff<C $�I&X"++ O]Wxzzz{{ಜ`|+QE2>HlmmOF֭[#ܹ#;SՇ2eʔ)S^U \4}iٲ SN=zHg+cރ*ר%`h99޽{ (9r$=sL]awa-[ԬY3CCC3.N"aEhU[qk`('Oo?ߨ,f?|ʎR%߽{wC %�;wBw[d]KSdOsY 䰭3ftڕnj`8]v;wFW$''\R(SL2U6668p`ll}�zn"ݵt 'OyPx#bMUJ{؝ K5ޯ_?___{{{aÆjժ_ի]fnIyΝ3gDGG5k֤"8t6)Ȼ@ʮ\H/ 6 ?{w//[YYIj-[\t͛ZQ>eo"S (#;t@:x~&M4nܘϝ;G8eʔ)S]Y)0 2]vK,9~8�Wܒy{P{NbX=<<-[?}ٳg' [oԎ;B͚5xgϞ9sΟ?K * p$m38� Sr-RRRݻ'e //[r(xɓcǎQk֬Aٳ'""Xwrr9nnn٬۷oFd$)iզKcƌAІ+V̛7AM6;wi]2eʔ)pB?H`dddkkyΝJtzU7_PlEK@' 6x+Wr ʈ#>ڵkuօՑ#GΞ={š>>>'Nܷo߃tQȑUFO<7o:thԨQw̙[ni1=7yR\E =sLooo|˖-v?+1zAN:P%b˫y;>!yH=zP>7n=%M})SL2U ѣGw~ٲe.\Q$ٜ ~.{ǎ}}}aÇ޿􄤏?>gsss~ {F6mڸ󯤤{.}РA^^Yq N P{%Hn8Ң7n܈>ԍ<=֪x]h}t_ҥo޼y…~~~666Gc֭RkR佔&onj@>!*<344?~SpsϲUL2e~]*0eѢEْRZt, qͩ#F�۷;w/^Ai| Π[ZZaÆNNNݻ:tĉ3g$&&B999O>~Ek_'O={ƍ@$LxBWF P^`M9vT;è1F+J"g?~&N8iҤ 6lڴi3f̠ pqqA5:?~:勵r- /9::>z tr mЎ^R^2eʔ)pB1ܾ}{Ȑ!]v]v-|s)+GpP< w@!H+ր`۴i |„ ?u[@^zL\EkFb$_tt4 |R٨zqYYY۷g͝;yk x!~ZJ쾠u^ۀ+R… f;vlBBl2PcggVhtѣ@)͙3Ƕ Zl0mܸ@lVL2eWp\|||~m۶-;;x?e܁f 5((={}Eйf͚m۶Onݺݺu={6xzYi�'&&QL tCڱAϟ罀&?~=zsʌ9r>< y^w܉fޛ7oJT}Rh0=",:Te]Q~ุ8,O<===7lpEɪ7.bU{0`�O,,,֭[3^ܤ|ګf2eʔ)S^PBΝvqƍ஬p-|l2{{{8{| xƍ~~~ {JJ Zi27uSNMOOqjcr#&Mv䬬[n=x�pݻ)@;aZԩyر/exzwQ8r߾}CR:j9dG_~ĉ%44zF333\uXSḲ݄8ٳg#N֣Gn̎;ҌpC@%eʔ)S;֯_?jl}ժڿot$tR�=CBBn:qDv 4ֶYf`3vu#G�7 m޽5H*'2C+WqKP)SVZE9m'iA-xҦMcccZw9Z^\]]===i<Sdɒ͛714U� $b募U$'eggϙ3gذaϧWă%-KT [h|]+e=''g̙`:C&EF۶m۷oǸOQStT͠L2eʔ)pV/ܹs$t8Ǧ*P0JA&M@ )$ 4gdd>}z] mСvvvzzzݻwڹs'`�7L :t<x0?tèc^-WӧO```RRҩS( |r}#""((0`M1@v8~5nܸiӦ;v֭UV=\˟\4zhHfKH"j4:&6\llق:u*Q;O]*=zo=u R{PB jah:ٓ5jğRPP@T>eʔ)S*;�͚5Z9Qy2̙\|r^^@< C<W~oɓ\vʕÇ̍͛7ˊ,B:߰a5 ._~=<-7.;w={699y۶mK. iްaCzǏ1Bl/8Kh7o޽{%JLGh.XI}6}t}Ϟ=4LNbBJ ӦM2 ^<BF; -SU ZlG;@ɠT'*SL2U($**p4hȢSD) sCСCo~%vڲe˺v JGH|ԨQ~LLL||3g$%% >J!{t=??ݺuNNN1cvq9sDžF CЪǏ f̘accӮ];F?}hCff&eK¿(Ţ$纩)` ,Xz5O /^ O$luwm0aB\\܁=f\=ݛ&Q>0̠ـ$d|N]w`퍟!uqFSy N~ S2eʔ)S^9�=zh"00ʁi,*D*+/_ ߿;@˻{. ®]a\�m߾= )B… ~ذa\״iSp$ɋu2&NHu 4a 榤@TjggױcG?;uulw5/p<PΕ(H:H;w-@!C ŴDޠh_O?tĉqơ6mt#G,^333++)SC{REUnGW=~fPi3xJ&L2eW]Γӗ�}j (9ӧOUJw܁?ٳ qqFF6mؼyoYf*kbb_FZjvuƍH~˗ٳg999͛@svv6 "C@6X L|I)T'9'y EӧO:<QQK,ٲe ##CRڥK`}Z~)GCCC)ABy"ZNFEw% `֭[ h``РAccc ׯ_BC}:tHʔ)SL{<0 qrrjݺESTVpVӭ[rݻ3f̸q@۷mۖi ܝ:u277Y_~ AnذJpY7. ?{B@@2v rT*=<<zM-'OeޅxDHlk׎a$B ~gQ#/_AUVXBu8GxD!P K.=|pff&Z111HOO?qʕ+w}GS\ gREkt0b߰aCj]F!mڴUpp0ͣ8\)jeʔ)SJ ͛+*fO'M"gp|\\;haaaoo0]\\x֐nZ>Ν;/\,((xĊ<7} ܣ-[�WW^stt.]�x=66v߾}([nAüKrˆi+I #ϣFYBݻw |iӦ@ji>qpp�CGܹs<x͛74ԔF___ 3%,?WG֓gi^XXX׮]6m 38qc5:͛7qs)SL2U�@vv-!!xTʫ>anoooիଶ1ܱcG@@@v�DXmllr<5k7o"̵EV F޽ֶzꀻDi[DDĶm$Dŀp,K(s]{QK.:|:9IКG1O<D@O;u꤯ߪU+8EEEڵԩS hYhѦMヂ6?~۷q)H-Ke"}a.]M4iذ 4ho J&L2eWip@9/;( ^$$.Ɂ/\�m+k׮%''GFF…�bBaw�@U6m|%D ^|ݻ0gi܌_ѣLZjјXˣ^h?; &!y.A5 6]vP~Dм~{잞tvٲe+Wē"`0pGq1c(#*^i-2',]ѱe˖c֬YT>|/qveʔ)S>`�}}I& \#+W]t1mhÇKrh.Ooooogg|9rifϞ_֫Wi"o\X<xμBm۶ZVX=_>} zQqz\$z-F"ec+mKOOGL<]!1йh:;q˗8nժ߾}{SSӀ;vdff޸qΝ;Yw/8Uq�!s6m-Z4iӦ5i۷o]nIeʔ)S(s1eС:t%Tv2ϟI 򠠠4T}ԩ+W\vܹs.\ȓUVa?|03ȑ#>L_vm'G1cFtt4Z&L6vqQ,`.>}g&MK[[ۍ7ˡH@^dEaZ\x1ԩSasvv?~Al�SLqqqfi۶-edɓ'ݻwu݋K ڹ,%%9Z044ܹ+7oDk5l}or+SL2U p󳰰HHHv +LQRS"q1 @ɬ/R:Ps94?Ӛ5ke5k֬qƍ5[/ãmVx.Y&۷o >z*{'oqg 8[nahKKK700i(tې!C/ڵk߾}AKJ~ۧHOqj?}4ظgϞ/eeO:TA2eʔ)pVܹsԩS!kkM6ݺuɓ'Er)t?~f==  {xxʕ+sss޽[PP_~Ν;rB�C9HNJ⚍7iBٍ:uԫW/e'N=z4\N`j4 3Y_( !iI9˗/۷/..Gꘛw pG{ӧ/Y$&&fҤIjGqBH9U~Rw +Ԟp :G1(aÆueƌUK ieʔ)SP|W&աC//cǎ3ߏ˖P655upp ݶm[FFF^^D㏅V(/>Þ/»ٳpB<007|4�@w^/]t…3gɓ'yܼys||5kRSS% V$hZ-]v1(e˖0Ԉ!$]^-Zh2k,33.]{qE7qlՕϝ;7iwvvyYfZ/@BBBvvvƓʔ)SL;�w+Hc0He޼y}HH +1| #<mkk Ϙ1oO?K0-9? Me_z-<GHx|c�+8IcɏQ9D΀ ˭ѻw͛ׯ_N:ae˖^us �7oJ%>KYYYp?ިQ#8oooJC9s}EQ! c}L2eʔ)p{-Z|^yq*.]ڵkN:M2ѣ. u/(GIu"ͻ(A"`4Oy"I.^21杻N:KSdƍ344Yfz,--`˗GFF6 |2d7F; mϞ=gΜA8p`ժU40`@`` %?ںYfիW/T Ǫ eʔ)SrcY9n 8::[֭[%SV)& ?z #Ο??++K;T\7\¾5LQGWJ(YH"hvjiG~^]8-###11611Vg}d… %KL6wqqq-4>|8(cǎׯF!N֭+N:;vD'ܹ3??_ eʔ)Sҳ{ys̙#GJwJu@ce{-X@N?Av8Q\.r|y=yC0O<}ɓ'gΜ C؟|IڵE|tt4hA <_\NŹxYѣXsgggsss==5kԩѣ>|5*vu*SL2#\%uؿWvjE\@W^H2-Jc^ �ߗVEt^rJIY}}QQQ~_רQ�:8pA,,,$P{>}|}}5>RyFFF ;2nݺ}ذa yyy?Vە)SLwe ܁+V矟{J~c"\]]7mtƍORUeKf{6m4grS~ vDjժ^z7644 k/zo߾=tyĈ{ڶm s=WB}φ Aeʔ)S]dѣ ʹk֬~g$BRyCŽC 9p۷\#EK@UEČFWڵ+>>>::ۻSN-ZW^Z O?>Lj cǎ͚5Qh7ߴn@PMNQPL2e ܕHeӦMw-KϚ%JֶsΓ'O>yX?}tʕ7n>|8,, ?uԁ?ÿ<~Yh}4תU 6m '5ܭFuVn@FF2eʔ)pW׿{nW^rF?O 2iӦɹ?/zKQlU\ti={lٲefիKLա 4i҄vgܸq܀III'N:kI2eʔ)pW p ~'pDep 233ѣٳ/\?KzRkelۏ?e˖СC8guظ]v]t0`�|?rȸlxÇh)5)SLwe > y >3STLeߧN=zt-,,"##/_SvYw/ } rrrΜ9s5k,Y/\pǎwNIIy&.'aIf}j )SLweP`1a;;;333�#K‚7n766677;wիW;?̙Lzgditܢ "ʢHp B5ĈBX$˾CLN'&1T~ĺVNϭ>]7]G%KJJ髫ex,?jnnV~t{-�pPj 377߱cǣG^ŋxW`۶m2dȇ~"H.9į#⟿ nt/+#;ڻ �@faEFFΙ3:&&mmmd.,((p۷iΜ9SZZ*ᮦP↓wv�pχ[VXxb]RRRMMY#HVMOO Tw?˗+++յ"�� >}>s̱c~ |/Wu`9)))#G4ig}vʕZ.;��][[[\\… -,,h˗/O:7&&ۍ��zF꭮n߾}f2771cFBBBEEEGGc ܵZ%eHzu1��w= k׎?tׯ_c@k4cǎ9::=z׮]/ ��z4񁁁vFFF;wwP__sNKKK9(((- M��ss.^?ѣ9RXXÎz=V^^qF333 bFC��½Gx/^՞:u*$$7%%ZUmjbbtVu%p� G/ wyNee;݇z_d>,{w¹s缼Ə w5PÝ7 ��ԛ]zzɸq=Z\\/,!<K4rDKGGGccc77#Gwtt��p mɸ-[xxx </99Mwe/)<UK{O{AwުUlmm{̙��y䉔ɲe<\iE}"wܹvvvNNN/NLLT^`��]h={888J8pU-A5Sd`dɒÇ߻wOw|E��ps533366|?ydii,p7p޻w &NxȑGw��@ﻺ8o߾ӦMotjξ%󂂂pM2… d=�@zܹs---7nx]uOM.)'O,X0`q?~R]JSvCsa��W))))88*..dT*ɋQ<ajmm=uꔯСCΝ;WUUEw]� ŋ>>> rvvNHHP ]p---/hwBbaaajjjEE^oyyyTTeXX윆'O㓙��vj/222ZxZRȶx#77wƍ/w)לU+oٲ?q ��v ,߿W_}NN^pUUՁ:T]]S3%ϟ?u- w5*kiiIII 5j'JKK[[[_ø�� `<y?-!!]OkvڲedC'`#&&fɒ%Z  _~ɓ]]]WZuϨ>_z0`�g ��zs7nhhhP.og8[GڵK6モA_9VVV&LXv lyPѻq�p׿|xѣwܙ/WVc3_,))Y~|| ~Ommuw0ȃ+Ç0fȑ3g<tP^^7L��7|cbbbjjzA5͆ݯ wReC]f͚ݻw?|9.Fw?d655ٳGFe}>sLyy΃��mmmV---?|ؽ<Mժqqq-:|pQQO]rfݺu+44ȑ#jQs [ZXX <x…��p7p3g:#R[[ :{oii@Hؽ{wPPPXXXRRRMMO@J,w1mD /ܳ͛7|p{{{){555q#O��@e߿(44T:Owem͛7Mfiih~tz~}}}xx3gdbxSeBSL<x^z!H���MKOO9r… } ȑ#'O>vXII<-'ѼyΝ*VrdeDGG|&L0IA��p7|恁ׯ_{jp2ވrss QKTI5{quu]zuVVF1p-*++, uuuyO��cǎyzz.[֭[mmmz4]K. ή5{˓M6#jIMHM4o-U }Um#!�p^`EtttaaVǩ2EEEk׮GTTԝ;w~s5D~dgg7< -pYqƅʖ)S#��VlYYٔ)SLMMMLL߯n5^RR9jԨ[>z(E嬌O&M4cƌi`$[t 6-]ԩS,��َVVVvvvjaDm˵k|||bcce"ULGG<mW\jwsZu'& ��XRrppOMM:utZ]帊HU;wvssAKccN#ѣ+W:99=ɨ ��W7o=z $q·Ќ Tu:,Y__&5|Yf>} דȕ+WFqm4�� kcc#yI5UF=557$$$==URUkMHH1bStttnnԼ͓QǏuqqٿ ƞ��p3RrG"w*}Ay|||N>]TT .~ĉ[ZZ~'Ҳjv Q~00]]j̨QO.{Cp��~˗} (''˗_tI:ÇG1͐!C&LaÆrFv?477:tHQ+""ݻ2mk' ��½GӧO%ܭΝ;W[[5{fȫjooOMM]xypp-[m&ߌ?}ΝRҲwZ}zъ+,--}||N<)[;j�p)$*m7ٳմWz}UUرvر޼yYo Raŋ3f̐ _|yVV]}˪5��og]탂RSS_*Zm wӇ~ײ!Eƍ311]zu\\ uភaL8qϞ=>3He��m wɠw:::9r֬Y.]{qJKK:rJ///IǏ_z5??Ek7SE6M ’'X]/��yyy澾z}qj222Ο?[VVV__*?5]^tixxx\\\aa,:�� _{Ef̙ ?~'?~~ڥYz]غ7AlÇ?Swwׯ744e��p]788x_}UaaniYu׽9RԼnkk;[tt:n`7��[=B܌2d޽׷%=M *[n<yr``ٳgkjj@��oKLw O:ujРA#FPl͟)`X+---,,cŊx�� v7nܰ2dg}&ęZ=",**jر6mw^KK&��!P-vڸq㌍ׯ_pi5jfddԨ w��@B} z֭F.j)מseU\\iӦcz{{=zTNs���nZ[[sqKK޽{K_pAOrs^Ǻ#GL2e_}Ç,��MbN\TWW߻wO}gϞ0awӟ6oޜN!ӧO,X*#19v\ ��w=<9۷o<yrΝ>|x?;#ޫW/Yn[8 hgguȨ��p“jCܷo߁y{{:;;oԨQZVjT/]_^+< sε˗Q=��w=۶mիTʕ+ϟ?ann>`l5UװVoaCSTTIuwwoY��z\xuuuRs511(ܰaCZZd_UUUmmzCCCyyڵknjcdd$w^5ӽq/Es9v3f̈vhh��?mmm'NpvvӧݢEbcc޽+,]jiӧOwuupNNN nO;rD/^(1///i\9)��@e)S|GFFFQQQeeeɓ'Ϟ#WYYk׮ٳg3F}˖-yyyjy#rʕŋ;::s0L(��zYxcǎ ɩ@“9u }ɓ8~K.԰`i[nm޼sŊ)))rXn/�� ]$%BBBbcco߾][[*Rȃ7n1bD~X'P5Ēc}vI&-_ܹs%%% V��@kgff7---O-(ϔ4ohhٲe'NfsP9X&11q֬Y&LXtӧ `L��pWywܙ2eJddxuu5$*okkJ~W׿˿_33ݻw:|JiGSAFFƲed06cƌ|}Y|xƧ[��#]#{{{ .TTTH666VUUfff?~ƍSNU??_9KN0a֬Y[lyTZa]��+y9rɒ%8|ѣGO<)/~ܹ._|ڴi...]<bkkkSSw}ߗoٓD7B]7,*0oom۶XK^/{�o%ZSL2ğdqܸqرcmmmniik׮} 3gNrr2˼(. 6ظm޼YkIkg��ӧ<سgODDĂ <<<U;;;KϘ1gŊRGMJJ{n~~~AAݻG=f̘ueff666rZ"..nĉ&&&ӦMcT\\̧��p7|ojj"OHHONN޿LLLzzzFF|ǏkjjUDi}v{{{[[իW_~]ݹd|ݞ={&G!'''::zƍ<ye@!���T{GVMIsIuW&uc'xi'''333SSSid߾C~UV9RNgώQV]]nY}�� 0&i3gJ3S"ĉeeeHXjsի'L`ccx K��pZO-::etyAA֭[ݧN*;/vZuuT(��@I֔\fͬY֭[|#Gܼy֯|Ғ,._s֭z⏄;�� Îǎ3fĉ_̄W2 @Ͻ<<<6oޜUSS22��pNjjM+++Ϟ=;a„[XX:t-[uJ⥩j;ydPPI֮]VQQ!.'��?_R> Yb|ЫW/ϗv'_ڥRK.tR^^^MMZG] qg:��;~Sgffڵ+88c~Ν{رN &$$H{{{ٳ'''GkWWUSۙ��᎗(tFyKV\iffBȑ#oIץˋ><sLkkkGG-[ܼyF-Wsx��S;;;&,X0hР{Orsʔ)Ǐ/++{U Dz>-/Rϒ}͟?s͚5gΜ)..֭��;^WTkU󓓓wmff}:uŋ$F{r/'UTFEE6~ڵ׮]U J�@deSSt}8}xΎxX/M]F/1;HEQQю;d,UVVk��wl@p$G9gΜj NԹvJ;99-^8...77 w��@xETr3---00pђ!!!III}kd!={eSVVV~jW[k_9��wt_;wxxxL4iժU"Q֖b۷o̔ϫ@W~>X��pGwG[ggǏcbb&O<eWWנ/s?_EF/ZB}͚52odwYZZΛ7/))JwM^^b/��;/:::m6|CN>}׮]+++kiiz7\Sמ655577k4۷ooڴӳ_~...ׯ?|<.��wT}䉴{QQњ5k$mmmGŝu+P^\6MgϞMHHo₃__{<y={222n޼yfWWE ^b���;~2UHFFF^m˗/xbnnnaaa]]`=xiq+++~>}( T^^^UUuy7n˖-jf(t[�� rmhhHJJڶm$dA\]]ׯ_YaKKQAMh4Ν[d;OO^z~ ~mm쥦& 'N8qcgg[xT-�@ujUUU/_^pI }dž $Xo޼cIXu&]nT=44޾_~{ ?SI󼼼zI.2twvvuBv~sq0�p'Wɓ -**:s̶mΝۻw^z :tnnn۴i*!#""d 2`N8qԨQL:u߾})))=RwYjooE69++k+VHHHߦ���;^{R yyy˖-311ӧ4|uvv >!h$^B4O'uk;J777WVV榧ܹ\6dڴi/"#'''WW 6|w%%% ]v5%F][WWwI&-]TIw��@ رc]\\nݺ|3gJZZZ1B}ݴiSrr7ܹSXXXZZZUU%E2WKWͱ~y|7jίWWW?x 11QbVVVw%<''Ç2V9{Ldvb5_-&H3��|WkرCt wޕ<=uԒ%Kȑ#%'u~g'OLJJyDǏvQnxSSFQN>Aݏ7*{56Mb*eee%%%iii]F-jժCeee0C//Cy!!!i!5o~~u Р -4f���MT֭ɩG w%ʣgΜ"+A<`>@XO>ׯٳׯ_{8 ܯ~wRΝϜ9sՂ.jE*˃/3REEE<r֭oVbId_~ʕ+"""$'O<j(!kH, z{{{y_~enn@z"Addի��wb ]xҥRBMAz333۷{ !]1cH7cǎ9r<_G%CBB,Yy{FEEIduEXYp3###9̟?_ʯ߿,ĉ/^|Qikp466eqrl d,!cy2W$g.^8eʔ3f02��pki4}ii ܎9"K>YM%t322,lٲiӦIϙ3gNNNcHUKmKd:t feeejj:hРQFM:^~*-Ad jmm-?RD]OmIGGGx }ӧO߹sZM~?n:.qg/W555jZ|Urd$h"__ .p*�� ½xŊ/^N]߯.9[XXpB)昘7n\r͛wdeeIڵK7o޾}.aaa͓rvv?~Qb]]]]e<0a)i{yP~yhhʕ+׭[Ν; D~~ltQ'?5 -zcfϞ-|%%%;ꚚZZZ?~,?|qs��@[^477w֬YNNNΝWKKK%-,,Fuႂ5\Y])7777vijwePTTt˭[$wIp5!^LMMzÇ+**kjjuHH]֦- O'e駟Bv `{x:uڵk߿m6x��p2?p:Kt%ͣq=*-'~y~FkuyHMAQ%c/BTQOSTxoϝwF.<xp^F1iҤ ._|ʕ...FFF;�� ;vHJ&&&VWWSHfdd̙3g̙.]'?ET#H<z(&&ϯÆ suu577Ozλ;}&V��;5%@<==-Z$]^__Sf$<X^^政mA2hIIIٸq{'>022rrrڻwsɼy���nx]$_Р]]]g5iDW-#ERYYy'O\2$$dŊgΜ 5 ��VNh.>l0Iլgr=##㵵3[wTi%%%eee~􈰷� wy$ZQQ_o߾=??MP׭.zر#F| n #j/^_��pGwdkgggBBBDD ZZZbUJ677GGG[[[edd{Xž25���;#U%͵Z[-Zdee5`e˖]x1??Qިh_>s̾}߻wOfհ ��w,jUĄ3fGvFHC 166VWڵ ��@0---_|񅹹G}?w...VZv7--M*���;@93UUUN<x??..z���'O兆Ι3gڴi#F<y]@@@|||YYV��wv왴{vv{3gΝ;w…B&ɼAϺ���Ꮏ.]Z[[Zp�� у]nUw"��pGxnH��@��� ���0ljN?s������;ے%t^ɞ|#.�x-T/ٓO>}''��+2( ;u �p�T������w���p���@��� 6.u��@�@��� ���xM�����p^Q?{v��;�DϺ�� C+G��ݠS?x5˅^俅v>C��2dt��ݐNQ*A�;����Fq�p�= 'O+��;���@�~��w���p���@��� ��������������w����;���@��� ����������p���@���;������� �������w���p���@��� ��������������w����;���@��� ����������p���@���;������� �������w���p���@��� ��������������w����;���@��� ����������p���@���;������� �������w���p���@��� ��������������w����;���@��� ����������p���@���;������� �������w���p���@��� ��������������w����ɾb����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/blobs/gophers.jpg�������������������������������������������������0000664�0000000�0000000�00000113036�13670045075�0022235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF�������C�    $.' ",#(7),01444'9=82<.342�C  2!!22222222222222222222222222222222222222222222222222�"������������ ����}�!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�������� ���w�!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz� ��?�( ( ( ( ( (4s@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@S$"RTu$�mq]gՆAȠQE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEu@K�M�:½`.5;hێ JI>}>;N�lQH= -�QE�QE�RfpQM=E)`;�'YMe¶Ŏ~=� q~mdx{5 9rkEg]%zs@6g5WQ{kCj%<B޵xz6@ynb;vLXExr>;L1`8:푶QA}*Z�(�(�(�(�(�(�(�(�(�(�3Q@RS@ E7zvA(()(h�(�(�(�)3-�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�pW|RԷ.6Y[~ H׵jiD&V�뛉!۱Ўτ:i1$cnj_ m?|3w.~)#q'L4� TvHFd8`J�|GSBDbS b=Jnd #5?<.h,2+Ҿ.ubBS@C4${XXBd�n[[R[ P~'ۀN[1|0RKnv謹ƀ:ۿivѴ7#_ � kGۆ2qKs8R)b2͸$~g" "n3��JdiM^2x#ֳe=MM?NԘŹ>8#5 X*ZsY8 �@D_*Xx lxP)R#\|ҽbQPKx�U;ayU@R:Gga IXxE-M^װzPP'S䵷vо^'׃Ӱ\N/Ƿ7ھ\|rm99JPƤtCϒaoCm-WChB,23iSuakM+ZVh{p`z+OZm]FXvCwZ?(ƛ2%}85趗ФҬʲ@(�(�(�(�(�(�(�(�(�) �sC0U$׏JK6og*O;W?_bf>BB8>^bitu`;yMkxާqmO�{,60Š@ yᏈ]Wi [hq[> Ewoe%#. 8ϭ{9JEy[ETQ[9-[w@H}s;]{O@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ (�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�b윾ߙB^]O+DZʏ'_OJD( N]oK";T`s�$[^KPw<$BŊGHa<?o2 ~%}#A)><;k?iã�JKh<JOԛM@;{<)g*y,|`}=O^x?L٤v ѱWCE�j[Ʊ)E�c GmB2z ( ( ( ( ( M�<Y+=~ʼnkF'Ҽ|UɲH/cMU:XRd( 4'cYe{;^ezmԚf ;Q?�:NltZ"$2$qQQ*ȪAEI@Q@Q@Q@Q@Q@Q@Uk;.eAdh~,xhzszto2%59{.8E!99^bumS=e5H؋;|繭K�$om!&4S?�}MlGU#SN4̳=RaJL5a'6ͮ^xK1 ` s@BEymݜ.B#VO|?k}DmPɤU♾\ G@:ײWY\=I!z3r�WE tt�KEPEPEPEPIsEk!Pb(u<&/&$:UT</Sr8Ҁ>4Wxwޙw<WvR>ĻA3^eoo򬑸ܥNr(Q@Q@Q@8(�(�1@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ My/>%389~3\9y x]Nҿ8?,P = g>x Ž\v9jOCl \T~(9ldnG)z27i!ܿ8Pzq( ( ( k6Asy l8A5&|,tb̓OPy EPrN+"zeC%cqgx4F#!/&?Һ+:J@M'r(O*Sk{/i7Љ`T=ի? *s�]njt{M 1�wjv9D$f,5_A,s>(ޘPe ʳm<c��O>(X+8�{xNluXg+pzPE�W ߇v^+D??43ے;7xw2xc0nxg#=5鏨B<i|5/qy sHe WP9+>}wi%v,LĜq€=Wmf'fD̿9Bq.&m8jm nxbiec|%^o$r 0\B źN`TNG^ l<R |-nv[$K2O=+w<'-Զzw_*K @(1>)BEae|dHtgnN#zLF6hZ( ( ( xt*F9h0=SW7a u ҷ[ HCm(@r[Zd(xv]@VI*�b=ZtJ\@SFegR642'+mm*;NkRK7 � }oxhI՘�A.ysG di8ڦy܎;b>nV?sg'u��w\8P0ztE}nSM'Vk,JTcA^<'(+Еy}2qEq1PD W;Iu? ή!E@Q@Q@PzPxmOl2HYVP {u1o]" ;NGCν V1.%  sZVJ<D g%ӵKw$In4yrpE'�]Υ–ndu#?1ƾ6�Vm+L#"Ϟv@Lzeդ,R(*r8|믈V.clRT*<W]� st_?@"XLۅxӛ ·; {~Zo xE?e8 .O�{5ExX<Ym6ahTS0NȨ|EZ|�3F z.▼dHf0 4LGM^iÀdo0r3c4tW;xDG$Y7k}%I28e=4�;E�) �-xI "*2dR=)tK? 3px :(4PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYzoiܰ >xŝu]Z{QI�Sxjښӏ{}vqU���\|9tyw;]e�&ih ( ( _GXs&9 5pWG}^qr؂?PM�_xMEct$ccڽ9b[¬Һ}sU<32O'4@1@ X@@E�K"l<К�{NPxçRUb:8 (5o> UX/i? ~GoXD2HE*x ׃A_Gi �фN*ۀ>ѯQ`Bvȁ=y@Q@ 5 577oȃnJ]ur {8+b^ Ġo:ɝ w Nef#Ꮅ ;v3+Gj�yߏ>V|d)Ȑs<aqSxoRq3Z˛#F]U@$xOԬE ϯZ�9zNj15Dk^ ( (E�V#KB.^/kZm;9^�pxRZx_.+$�uh5U�(N@5 ԦidPIU,��H"}Q4-u{ rw|_+紏yENݤ~] i/Q֧9UP2{Nr(>5xsN/ $CמInx`XUWԓ�V~O �KٷHCs둁+}2`O- v64H,S+ od DBK\o<ic,c3i-0k|{,?5(rx!>;̟#>ʽwc;d Xp><>unN?i|R %ݱ<.1ߥtPhVV5OZ𖏮j0̨rdqQ@4h'p>与(˳d{Wx՗ھɦȣ1L{WiT W+" b;P_Y.aڦߑ0 G>h'{5sǧbUӹǥw~85u$" cIf0�y^/D\\8 s=9@<%H%(CcַhK@ҥT:`zQKE�&z"9Gpn$h'%r8jTprpzg~4�k�zG],03z6xleP?2.2F>uͤpSĒ#uVl^nI OtXk:z^Z\$7u9p6m- \=ן^N,ְuMG/cu?M/m/W\x1dіK{m%6,sv[G>^0 #L#]嵵5]JD5ZbrY>&\�$n*+X E"3/+rw( =yހ4]kv8+R9P)#׀?uT�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE'9(�(�(�(tvrE$^Q?$uیbBJm\cOmm(<pz*ítAPw9I4 q8Qhh�(4�QE܋Mbcc86N=k>k:߈3EG޻owosV~鋧xJhцm <c\N=ih( wS]/Mv`6<׀ɯ4#7On'Qס|`@l0s�Ѵy^u8Wľ VW-,)W ~|]PcFpN5;~$|װɺa"ݐJ4qu)EqXuoޗ@eC4miIdÖo(ØA]ͽ+$lЂ(SG¶S1ӡ=k>ծ$1؂P\tcZ,d8;SZ p �uϏ>"!XWaasj^v46\>$xWѮtAʘě$ ǿjMӴm!EX�늽{]۔ubx#] Oӭ.U`pI^D ;ο<R,Lrۃ+| >{+Rހ:Fqvʹ"5\GH.'][<�_)/,:p>Z4dz3&mNTCoy<YC}몸ȰzGG$"2-CTYfj wDW,cʷ#^^E.ko f\y^1O^@Q@Q@Q@yF]^<yNb3=Mzp, '?�ueiN!7#W [ќ g߸ʑ@xvnz8?Z>'x=i xyr+wⷅjR]a]2g\Zcv`�p1*�o|QLQ$b?*8ֽŞ;bM򥽘�w/�sֱ5V YX3^/UHyjI t�|AVu i"?ǽY𽆣_KMJVb=}k.mF 1E}9hEP[pX[GQUi��08x֞\j'pvD ;ַ|Go}Bp\#_z_?Yǩx^-Čl @ ,vݟ="\;t^xgGXs' :FV$5GFUpA@ ` SOxLך4uz>z:%�+G[ڶ{Js⟉:\ϥhq)*/rH<|;|>T92%M�sj2?w㵍WxnK8#�jϹ/[Pw�|#?g5K(QJcRr@֚4;9*|; B@ݧz? &HlȮUG3\bM6d9�s�7¤x^YK8Gc5z&gY$êQ@Q@?įhonQȑf|>S.a<prk|힩zGXϩgķikky.!#@*ն+X[#Ku,A u#<+b|Ej/=D͗j�Lo|2�sjjHIrz~WM/k fp;/Ҁ:? M&9U={x~ \9][gkx/%3MC�噟VO%8?j�tsm�Pr1E�QE�QE�QE�QE�QE�Psڊ�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�( E!h(u6sdlqפh6K�+'#%p9G^�njd �E��(�(�(�O p11�WeX[T\`Fs�FYc oQW~/1e&cv:( (8O G$ |WzLJ.t#F ̠9{V^$Vh^O�[bk;hK^`�3xouIo]=6Q@+�0*=BDy;6'5B3×3ʱy>P qVh" 2YI+7L:E |*�95cxw@S-FQv zc@O#ị+.qFQ]+zfB� |0,l mNBעGcP<wA*/[r<a:*ٓ#Km$qyG| i3zjtkyOo5<dP+E,y.s*#A㟭{7KfRF23ҪnZF#5k<C]m+W@`2N:dPV-BՠAS،[IVs@%o__Mwg9 +)s71ܥ<̉hE!I$3x׏u&yxX3:9<-e 1_,kaQ@F�%�QE�QE�QE� sg,,ЮjҀ<G$L>:Ln>2<H|gWU'NGtlđ+< pCA mǰ<\=t�V׮L#%+�.+|[`u/ _ڡü-댊mRӐzP֓:'ġk2[0OY_ek[4Ҡh$#s"G賴V|� 3:]Ź%ÍaYԌcG..W˒_HYڥ*>+> B4G,NF:s^BzL.>oaU$H.\lj|gkhK Y#t9o�y<s p<"[- `3r fq#k:eBʧ8O51�oR(4 vDb8qX޼Kºf'dAn)׀z+sVnM /}ZVGހ/XCgHU@�` E!`$Pޚ$SЃӨ�(/]m5*{ Ex$|(%4p�gW|Bz/ɺH c WXb\+¾m/^wNZqEPMdW` :�@F�jڥ{{2 jY*q^3eϋb񠱃-K1q@;wPD�۱XX2A@3qߥzGkrZȗ4 if4- ^w+MoEi#w$ƀ9 C@Eȥw$& / *{](�(�(�KE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�(�=)iC�-@Jsr}kҴ #yh;K+k>K�׮SK.A!QE�QE�QE�QE}5u_^Z4fBѝ=+ξj2Ky\C&Gq~db_6'<Am[$pO@Чp-s^E4~ SWK�(�(�(�+~2k<VikP>Fg]J#'>.ڲ4RcM,&1N%u_j2#ǖħzWK*鴃Ҽ\5_>#[$IxVRGA{PP`񊚹 E׬cr{"&-мQY�iQ^k{¶O,u(=9.bIwQ�wGH|0g*G~_jkFZ<K*>^G[^^0:m7E+h 4Qs0ȫ:߉4.q彀^,�{~àXhkw򎔱x7ľ,ծ 9ef%�x��h]jzōe쬥@̪x99X4 ]`AHP2{ ] AmX5F+b ( ( ( ( (E�yoK]6TM۳wt+KumJ3i+�9y \&~G="՚]M-̄P΁`{[:&D-nh(9O^\;z_4laLF\xgED+;z1n}O\[d q52^jprZ!1[w6s ʰ#_$mb<עjI(c3?~ Kn闤U>$kzp($$<J$g?^jZwV3iVx ):u. ?[ z῍,4=f BUH.|r)ʡ=CzWc7v1JU<am{Y 9sҽ?O#Ek-lee6\|;Κ]ݢN4H;V~e�98hU`Ê\qpG6~ڱhߋWg 품VH?J�~X}S%0aUpq V(8Mv3:TC:TV$Gl~+<[[4hl~;Գ~!$`rç9Ѿ&jN `A~`:c ?Ɨ?"iYYFz0p1ҽÚso0#0A]OYX忟!dr:ත >K )㎼q(ht ke 4CҀ>r&n(*n1} e/i9Q_=|kU_4mrU ^gѭ\J�آ(�(�(�3eJ΅yah qZP ; ɱp<&)9<6n\T8`r}zWjG#.�utQE�QE�cQ@Q@Q@Q@ (�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�J�ߊ։sq*zиЭvX?Jf:Lus u%:|A hQ@Q@Q@Q@Uݡ55j�x?P߆elnG@]߄a[' :1~+6GP{ך [}xf `{`LIAGRz׉*xGxGQY>>=E6+*'nȣpo+Kp9QSQ'6p8zu $U湭kzFnMp@<#51B;#W@�V:׾%I>4W:Ľpy2:H65 :ry3BӐ {x cP+T�:P*bjZMo^G<uȫP|EOYZΛo2Ia!F=G^' y.;W#wZbxhC+ {t_fˤr`t@�gY! "ֵ&69sξWLcNz{W2а3H$'k:sߧ'Z�xO<s{14Zd1 +ޡqUsI yh_3>Ibm\uq(.ú]a"1JH@ŸE�QE�QE�QE�QE�QE�QE�6DFz0�)j}*# K=Fn<wU@<@V.|<V5d_LWYF gxNm[:x&uL�{~%&B<ڿo&3moߞ=M{ HCqYFZ[kL2@:T<yK'X/:JmCA*"Q@ 1@.EQLP׼?.kKr5U68G^��_xznp=yƢ^L |94k_6 PN:�۔I#ee# ּeG>gIh ne04n~HrviѤTvp{�=@:m�v�_ӥt=Ep_ 6;H8<'?5-B�b@#ڡ)5W[)m%éB=}akoY%34R} _ƀ>?va5} _@%PFlF[lg'?Z4߂f2$s6z8V:}n[ıƃT` �EPMc$ꧪ-qp!'󿎃k,#f&I둴o} C"Q^�!ux,հr mcPNx@E�QE�QE�QEpk=͔񫬈@ 8rhƣۄ$r׎x8)#M,-IY7c>؁ȥW4l :�QE�QE�QE�QE�QF9 ( ( ( ( ( ( ( ( ( ( ( ( ( (4PEPEPEP14Dd+K' 1]:dd ז(k^N\g9ɠ{)ir@Q@Q@Q@Q@!�@ hQ**mz%$t@oKl"9[xԟEE�SOP zUT>�(�(�"]mWH+!eϔZZ�GDcr !q]o<)s mneY$ĎLkAh8|`IRdi lݣ=~u~Q^G~0jc9s^6mine"Eր.\ſ Y-霯hP�.Czwث(Iz{oEE FDAZ�(�(�(�(�(�+Ǩx:=& ⻪n4{3Dmqހ0&{Yԍ}WR*Ex-K4 zg$cg>[x'#?{ճ_dH!(ofc׮hWnGP?<3x:{"Kl]́OV/T%2JvZ9bYdp 5_|MN =Ed'��h!|Zp̧K�^ υZ�-˽X1a cxO<ZP9' �;+2d{Fq뛰磂")<$v9_|I1YiVs&%ff6`Wm]~a,/Ae7JL`Bȋ9uӕs@'f__ "<ֲ϶{׵G"\'&5{M%g|nW¿/Y_N@ E3tQU4FRKiVHd2V�E +dR0;u14z0[ nx͗)yPYdvij(8sN;P|Yt˝It�W@axWA@!|Fk~ ( ( ( ( ~(K6Vhq$eq]Tɦܢh ޝq}vd-m]1=XۀOA^:PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEv3wV}�W6a%ߖTI1d^uv1q0FZ>ڈ<3n}ve\7>݁Z((((((((((((饨F �s@8~*>14m2<ukrOx.U9n*;Kѝ$5qĊ@(߅v6 )�yCZÝmU>\ \brB�<}a& rHWv }(77/#o&3bB�'1czW|M,\\N 1h d0pU5KwV$K !9@yox3M{j elr9=+O+g5Wڻ ]Q-RYN:q^_&o%\ݑ,y8'kE�(�).usIOZ;:[\ #ׁvwF܀?lftzCp?Jj-9#V�q4ոw&y0Y8V�JF;X-NGCӜ]RPŢ%AW|+^2 <!XXր=S?4Ӵ Fp?{Z\<� >la9,lm X yĻ>oyal\lQX[\]slV9n,}99Z<MF'9H�`q�{cwl .K=2Dj QUXpT���b("a\|X qR^yao?Q^n `oOtj֯owkr9놿9&2XħF3*�hbw#=]=k-~xHf@IP9�..ݕbQd2W=x(.;;5f0's^mύZMΣvAVoSi,ֻ $9'Om7s? �?O}'g`e>> UrXI .Ol8 ( ( ( ( ( kA@/ ZeLW޺bF*ځ1KC�(EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPQ\J!�jZ>E,þ>{鵟m ǼR;]ס>X |o=G` )0FGA޾Al@袊�(�(s@Q@Q@Q@Q@Q@Q@Q@Q@Q@d|7L}`}\qZm|H#>1x W]"[Vb>f$z):};3�^kcU-0T.3~J%`N05_ƴVzK,tG^OKWOpHb.sn#}/i47i*�Pv۠H*TQ@Q@#}ohC+k>28٣o-R@129<�?4et$gW l#Bܻ ǧWx}-V5�@QE�QE�QE�q:!]0눇#<'R[CF Ǩhh^7PAy>{s$(ڀ=}2=Z^I|+($np#kǾ4hSxb|)^�zt.sAdW|2mfE]C]ۆ=h=@nJ? Gl#�nu23ƪ;p}e#X"D\(P� QE�QE�QE�QE�(�Q@E�QE�QE�QE�EPEPHh#4PA2XE�|>XlqyUm)6 ƃ~іOu'^An((�Q)3@ E K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@zߋ֝5yo0ٯa$bR>'[YZڴd&r�=([4T@:U@|PE�QE�QE�QE�QE�QGJ(�(�(�(�(�(�(�;pZi8p;JJO{;IO* O׷�wG(jc ZߪLmJ3@Q@Q@Q@5S$ ys9Q ߏOks:ĩ62P;+==`!P W2]3zTI>v2 `F-`^h0n ( ( xk⾛&$€8׳ם|Z#K<Ƞue9}>]FݑTd9dTol&t@sCє@,+@YVhdl}qEwqk8ms"/~ְ[UwY)e-y#C( �x|a=աUr`wq_Di}< o^<mPE  Xpk m�^(�(�(�(�(�(�(�(�(�(�(�(�(5�zʱ r*3]eЭ$\ĽzG ]x]XվhNq['𵑆Ua偸@EQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>0WG` FH8< K/5r_7lkKߟCgVڵ3l*l^{i>}q�n*@QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�R�d 84�w�(�d#�&D^.{vW ?pqzWxUʸIvw6 ji2e=񁌎&=vڦN()Y�rI|UK?Z-3asrk珥$ !^=AwuJ/RVGy*#RA(@Ԍsdx8֢-^Y;|*G�}k,|#Dn1`ζV%肀>cm+ڧΈ Ҧ (F9oz� <4Ißʾ4@CP~~Gv1 I7c{dcw|upuM^n-GR;XdgV1k:|wv''P}kʮ/GЁ_2,t8{@Eaxg%ӖPz�QE�X$72T85A@WR;IWS!bO:fYYܿ!V}rҽb ІS�-֑MBS0x3/|RQ|UI F>�op_m;Qko8Gqxq[ %dn@PAPqs@o/YxTnt˖h|GR1  n!@ϭxM4--W92o~:)ΙT4h�(�(�(��Q@Q@Q@Q@Q@Q@Q@Q@J(<ܪonǩ5g| ̠k+Dfm!|[֤>VK(�K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UniQ ?ZWɧbw1Aj�O'ujWX&ֽD q^C^d.G {�QE�QE�QE�QE�QE#IEKt*ew TWQ[I<RI�OEs7pJm%G!#V=,1@0&TQԱj?4w[/An,}yğ( ijM DJ@\cSW; a;\|zp>�곖+V0ǩ�WY6Vp!F+毶Vb@<tt7}';a_=.<Mo ,`u2Yn:fI br:v>i$]%S{uƷƀp�P {-Ԗ �{�Zm[WMh/in"nYRx[t}Ş(pɮsĺ0X@$gE-"K@R1ڤog\,Czg/:W̙PLx'ڸ~v׼s=ԐDUKNz}=kt UU& g?�kQE�2j%8?Vt�M&JPu'* ;V֍>{cDw$3#&=΁ k|OmO:AC\F GNs\狵/舚]ΡZ)0$Sw� $3:9c@xKis^7;E$sk!cP�ȑT0j�``QE�QE�TS[<mX`TPkZeÿ wL/s(֫DH=;S.cYC KYKmqIUA ׉1`c?:8 nv 9֟kmz̒8;NpkõmM-kW o.H˔VbF=FE�{PZυZvvѼȚY}x85 L ު]U7rFE"da Gu?K+m-+?^U>dB'EYe G`?r5a]iwCLu~6-( !<@_0 ˖0WxZXЭZ"Z\vN ,<d|?DO Y,l|zPWEPEPEPEPEPEPEPEPEPEPEPEPE4̱?gY O#t|GMԮ~5h! #8v,Kg'=hi1K@Q@(�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE��Cr)-W_oeHVVcVMGX-~uB<�x5`q@ EPEPEPE$ݹɠ j95M"z$|D 'J a<K!c,� �Z�n.LfpN}9MS>c#k%,:$}Չ=:WoY/?J�M\-Rf˽V@};Wkf7H&ΝdːBÒ=se{e՘zg{eZB#7S�@o͢,r3;d3]G=i5%f+I皷/]ҵmt7Xb#^�7J|{ARKB A�2z֚#@*.m?}[Ҽ!^COz#f?i15=V&W>c\Hg?Jt*_A- $A$cqԚ�Z/hZ\cd;=GkZZ,q5ы3C3+&O0\;P.&Y '8GAT~*j֣{yؑK1=j5'GrR=y^Qn[ Ĩ\1^HCڀ=TSg SSPYP$op'ZU?5�!mtHvwV7!{t#�<<A Wn={%Q CF`Ov"� ߎPE�W �jBj6ZFO\Q+vAy);BB͟L �?Yɬxi5[y?}Ǟ8\Bn/2DϴqfᅍڝJ/3;mc[o gt[*M$i&i</u3A^w\!OК~,<%_VLYN:E� �o$v͜ K?<� d),zoZ>"X5-@'*Ŷ]ͶbZ)=2bx&9'˒G@y<֭�.?0o::Y^F+,qQYV u"pt̿`cA%NU;wAȢ �#OKg[_pRd#+h^qeJ6qǞ@p'sX6[MD ?Pk<=EX`*ơW� Ͳ3<{ =WvH åQ@q4<^)6 q%ձ&9뱢< %7ڼ�Q%HCh^gף*\(E�yŋOxrݷ˝qx=_7ͣMmhᔪ�z�;WK1y1Wx_Թ{f0=?*�*( ( (nnyqH2{PU[-BPKm*ȇ44InXK;@�Xiڭ�9=EPEPEPEPEPEPEPEvxIƮ%~5|7ko Y\; b15|eV67.^IL^9"3Ѽ~W9a3�tQE�!f�NQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@p-&U%s:8RHFp+}<S(*@7&uFZ#xG L[k$bBU=0q׺r袓vd�W5;M2ݦ#E$௾0i- BF?:$!dF&5vQ瑞|4// {rP^%崽?t\}A?L~$<HJ0!%#T#^VpI+@sYxIJ-?#�\:G|% be<fdAGHc=#ᮋc$w@ιb?C;X\*5n" N6bR8]g)hIaBcD-c+̵oxRv7.s!Kր8;-._|Ao"q $6=z ᦁij5ܷRrO5jȬ^V/� n?=n~ } 䅆U;r>kzM/m H-UBx߃8W69\P:ҽHmY5{`<׍h)[8/uKpG$@i.ֺ}$�u=c6 lU'*2?:< ].{, ߿'#ڥ> iW>K~ԻVDNPA@~Υs"g>Z/ס6hh =K YSR|\tN.%@'<(#�z' t&mtp2# u|E Z4`%'|N>սLjھ$%nAk#x�MٚJ c]ac^ !Y`ƥ`+ۋϨ T H⟊%Ѵ-% =ˀr9Ji`  (c@"ٛbƺLE �(#\�>>ԼdGeMg�<KU1dP@oʀ"ud<8$gӷEЮt3: A;Ojĉkk=x\D>Zs!t(K #^L% +e>Z#~ydv�|@,t-mu~B+78=OvVǀ4(4(TR @èDЍuF@2 ey%@^s2C3�׊[oXj<@'u ]7]Uf僶wuһ�u�]XBQxr09q^m'$fctSD.:\ gxր,V^l2@I]!54dyvJ㍾a�J�Ito+smdʱoǹ4* |<h)/<ϕx'?d�@?EPEPEP{EŤu++~F񆡤ܘdڤ>?{ix/�e"<bD0<)qP)ʃKUt땼>aV�(�o7/m{FS!P1 Az+YBJ|뎹Cݷ:_Pc5W־ {R̼c��G<J M!f4XUq1]KqizTQS8lҀ5VC\N$y0 Qֽ2@a媔 B5AQ@Q@Q@Q@Q@Q@Q@RZ�?ilT _%s׫xx3ƽ~"o(YxL[CO�mQߥ4 Zu�QI@ Egh�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�.U5fb�9]QzƊAc#nj>-l?-,,#wzk1RF}baP> -Km ]‘B0�קXZ}G(?# \n/'̅K=Oz~շ@WVӯzea`k;%FV}Z(�<Kφ"S]@\HyWYo 1F.ml "A䌚U[D`d7w6}nVe+Pmk{UAڡl4D0DW<5#Gy<`$$faVkIvD8h $csز)UϦH�ZĆM#qOfY})c&3&2s`qswgվh>ᇯ7$~vs"Pǧ\S >i;%~'k;O~ ]m,Ii~erаLpsI 5h\ǟqbRF@{j^�sAaö3%[:WWwMT [8a�x_uŷ.+uk Ugc}i&,9_Yy)Y:LJluh mݴGҀ>]<9ol>~g*6:ƪiKawZT89URr�qǽ})iB9RK8lP7>z)  GP¶6Ow@\37<JKm*Bo**k{X$1 GPb.)zq ^Gu1"8`dU'MсpX+G@=xrr q @g{a:FMp6Zqm�p+#@��Bp3^{J; H}q^t׉ꖿ? x/rt�9 +{ieY1>w\{fkFfoGqӞG~+m"65'R ? c>>hۤQ n\y~}kb-w\#'x](pyjY.APz5?[~f{1ǸdžaJJ`O5e.-A~^`F@�P#J$X56G-Lq!3= ֽK,x:Vg.pz*�ý^W$7\�c|K{`]E#2�,XΗu,ƾH#S�8 %x-&ݿ^j7b$DGV@�?ֽ`EN ռsj[@iAs\e) 0Fh[9Q(ejz|2$j�*GMJ$%˞9ҽß1hν]N>Kާp MIWWwE[4WP׊�47N2l\Y|!y۴mԤÎ~ 2ȷ a(�(�#51jB4m!:vzr?7f8@H t>@< hZ^3=-EdӜ6&qv>T�QE�W=Hb;xrQj^InpA(¹ b@�c<⸿fX#w @J;K8<_fϔrLqM׃;~mS[9y y `ҠtT�V24؁G@)�QE�QE�QE�QE�QE�QE�QE�PzQE�xæ]Ȑ^9W{՜ʸ 85pWP+o.Xe#}jmI/#lbǭ�z&y (4�ڐG<@Q@Q�(�(�(�(�(�(�(�(�(�(�(�(�(�(�+ͼmkWRT|L$^E�x~>즊]Ĉ?zTd~ƪjN1j@ÞaLO123Bic˅Pm3xkFp2=c7foqqkeߐ8b<`pWCw!CrIFW�mNk>$:Lw1[7[ҺZ�(�k(`Ah>/UtБ\a0y;Fz潖QOP �xMd EvkP)5TO=q\|+}+؄j\@O Zlq)8]uѬvŠ0hiQ�`�(�EPEP:@Q@U{i" &)xYCoD 4=/TI)E8P{#9ڛ fܑ[Kقl'<}+ռ%Y$%ǷO�nYZ,"r(�Q@ Bzwu)_\׊�_ŦWHJSXe`۞]Ÿ瞜 �oE)`@)M3&~d �x�16\BL3>sy NO>*s΅[GYF:}sºj: l]dN1:?f٦]lc2A?-¶Q -z>mb=# gVwfG}F0cg@ Z(LZ�*dR20Uګ~loD'L# 9R׼FCþ: {׻xoO)pq؊wCb>` &9Jg¸ ڕf!= J(�(�wg4T"PzPϾ1-&XbepBx{O0^#_IG֡VQK,ď3G?z'5 \$aC�uQE�QE�!PE@KE�QE�QE�QE�QE�QE�QE�QE�QE�QE�s:}GlUE8+> jD^YW qke8,r;WϞit7\#(�sM�})i> ( B3KFh�(�EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY>#Ѡt; ޒ9Zc�~!^!FPO~}c{sDGq\m[W"R䝣 rG,ѵ3B9$�<PQ*ș(((((((*\\Jfc�Iqq/,e=x|]6^Gb V-|Ã/~ x 3HM8Y IϨ8?u *{k#a`9<�GXϔ}9O» DP�: ( (0\$>ϼ{W|0ϨHeFpNq^d>(I*r|O]f%0L,Xڎx:nq D8ԎאSD TgxukoSmeužqP5^MJO]\ZF s<g^LJ4 d9UMj�OK$a3nR�g|i·3nShӱ(Pj֫{8VY#e!G#'ؓܶ4@v8+XeMy_K:UpF1t&=F%xu Pkneis${KpG һUj|Z5_mpx@Yεeص#_ĚA⠼ Qe8 z�mgXm3Mmc ͸$銿FymaiVWSc]0Bzƶ+ VTEڹߊ/l,*8ID�{zhRA"t_ �;I[z)vKUDБTs#EaI0}>S@_2�t .s'\אF"Ysq�yD~BG^kOclop~!ö 6Pm)h ( (8�z |< BKlH@ zĖ+vkK!!�źUǂ|j5`K -;O�P(i՗jPd7P8hPzԠ(((((((((((##ڠ6G,w*�*5UO[UT6qV *w8ms^505IO"*=)[I>#ӛN]>O*[y;O8kį3RP�xKF9(((((((((((((((((((�޸/ xjV2-hےLgrq!M?V:?;c<ps^mw JHS\ߋx@/zۭcğ [{i\*G@EsxCL1FA ( ( ( (Iw(F]e9 hB�hfc, SN$Rx,qZߌ|a_oqkP<n(e r&!}?wzo೻b짐m'޵>h:}瘓vA2v ~ym#tdT@~tTpu8E{>wı =~]U[a2,hp+P1@(�(�(" A] A 2}s?#R7PyśԲük ck3U%\PxQ(iZCpa<Zu�y5[[ c#kqs/`;t^v m% z#1gUEI$r8o^Ҽݮ4b[01=Z#8*g|JyHYc##xתCjߌ(,aH9c=շ§ڙXAXirJYH~brFM_/|3 ].|8}Wv?PFuhUȒ'nO9sߧz)6s�ejvF@s_o>}RW7g$]\ŵi< sy:J�m-lWo2<WV/٪ 8;Wb==~34`XYȮp+l,P>4˨if WxB-<v @ KH:RE!j^s@Q@r>7rv�.}뫤*�|4.t PcUdLg˂sugV 2 yğ EqNɡ>`L9<k/o zV8]EN*2PQQC:L*Z�(�(�(�(�(�(�(�(�(�(�tg8TRI|^ό^L$ qk=BGR f0?<\^%.$Ůוi L�c\8H޸BmE=|m?j ~Gk<U8`=zvc @F#U0)ih�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�-,q^(]y uR!46FeGPH-ooO_q['5m!wel.1\<.l6NZ#/Qs:ڀ<Dm$snL]֔?4P\pXpx++GKTfo$<O>s; ~Y�` RnunW#<kkH<v_JГgMAr?Pj5GA8�ǨU>!J, 0sY<)jH=R @3NhG© E sI99+ixL:&su18C&},){XGb֗lEg9QZ g cl`b>xMLj.ZH{Ur? է9a$zfAW mAO�s@yῆZut`Fw1ɮYPG"m:V(xm eH zWZ\Ey:r a|@^$I/C�:O QŦo@tgpxGxFo/Il!s0x5>Uຌ`x׌%XN]'IK&3<g'^<iPF~;}(E�(@]�(Iv$zr+Gᕣ[z&}qF+<=:irm+u}Yqj-(HQyO?Pmrtd9c4iVR$c'Vxyt$)(3urs@ac'|xL60~zZܾ`WXXfvg`>�íI<�qZۉ.g#kEP^gfO�ͱv9Los^_S7Nq�n;c/rw4 ]  +]<O�xo't)�aO5 Kj׉xi-ZۉFp{Iآ'?tPQ@w ( BqK\CM ,Dwc2(~/x[ai>̜C3ߓ}8oIOv|6#]8 n=y|]}e *-#hnz^DVX<b<@<%rbI|>�N+0<<>Wxksa|D?4wUxIIxv(?�}= -xσ-w q' P:WX궚)-*8dl@ CK@Q@Q@Q@Q@Q@Q@Q@5*OJRp+˾)G,G"SR(ʾ$�[ll> W嶅Gk>%Z`au9ʉE{B U�t)h ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( "xaE݄` @'k>xys;e334yBz1xt(#7=׽O\4HX`@r+> ivuKumW>24~=1]5T Œ u�QE�QE�QA((�\ _',iSI#N ttPeAKgErC:}+C[ᴉ%rnjoAf2\gd>^5 Gx꺨7Hr//\hy*cYX;rz~55Ľ.N~1`Z:ƙY$p `cyBx!n|!t�(ݸz;b=O>S WpsUY~,Kep\ FQs\M6Mi~Re9qU<9q,�z=#Z [XC0q^=x9-rм936O^x5'/H&$(YA�}�e[M#hua<>*Fr%p2sX~va[r*Ī)=R7m-Whڊ>WkB?iGP]̶+E,I*޻ci[r¼~/|XA@l"OxXu-ʈݜWٻ!@lݎT�NNI-sX5܂8-,Os(∬/Huʂ5<?^yguN|ETW\?L UUՏgsxnG@vuA$ʒæz:{Vc-O\ZRԪD#8@(h�F^Im\0aJ08Zßj?:;̎@Tx[lzT~D{ٕm~U6X$ =Hbi[ D2ſ.xH4cBI־[du6k~-}mx>:WѶۦ9 TQE�QE�QE�!8�scMr|fH^Nq<+ mR=noGeJ�[km7J(U~Pʸ'G"! tO7ɦWI>Ջ_jK`H-،?9'PqMc[!'p͹WyHWiPGCce A E�f9O|?<Gulݾ/}k̯O%{vlyew~A@9|ax�&5muE[k*9 CrRk~5f) ghy/;r:c 큁4󭧍o[/W/un; MFZˎV^@EenwOVe=(� �Rdzё@ E&E1Y�IHHk>"xcFFw Đ37y~ 6EN1=O~ho OHؗbnh3_ %�{}e*|1Cjn.mSґ P0�2 -PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE�(�(�(�(�(�(�(�(�(�(�(�(�('�QE�S]oAuAyg4qGd 0 �yNJ|_}ysq:M奼sҽ2%0 t#wmVNրEb;88$=+ T 9xc"g?,0]ev0��77)Mos �w\=`A�y'./|Kk*) HTI$qIq6qľ1:ג+<L@$som7pJӏώݨif\7R]Twv>;濻Č>N�ѭqyd e3Y\ yzw5|t,aH_B{Ԗ|H˕|XTn F}9_UŜꬲ?r ahA?( s^/aTE<?6něקo^C׊6˫I#Dq랽*kZϨAj?$sp~+Z޹w8K8y1~-gTM3`)P)p98t)FZ[ʰ?.> th7y5-(%'=MY͚T6%S@ҭZ{R(e�Ǟ7񆬶-#4{__Sh0yfǘ8뎇x?ZF')=m(ӌpz�Phե7ܕ']Ei7w?fx'p q澂M2!|zS-gHQxȠBnQ[lt_XEK$\u]nT? ϻ~lws@⅔d\3⮇" H<)9RtR6;Q' $%dRss|L�! pEx|K׋⼱o!U*szGLis4\jχ~3G,'ʬh4+^$- 6pLs^߄j_ͻq,N3ץi6ր,Q UhtjĨ1b ( ( ( `( R|  n(3Vc"E�{TPEPEPH@4P;2qo9?|"tk)DZ~P˓xCTdk:t8W 1OmozJ Q[[qIx _@XZ\@U ;3C:}#(9�59vFdxe^ϭK|sӣnU-[0B=s] tIK4?p3~k tӯnmC*7}2M�u>%w>k5xJ۽ z@=G|Qc�J)18\ZǓ7kqP-�y `Tyi? 4#-4$.KS�yctTq>T1>_zIwKU[@7d>5-,!p[9u>t; Nh5$H`8mbv潷|; (ePa@@�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�QE�QE�QE�QE�QE�QE�P9xGMցyԹ>w*:2KW<C@g'~+)3�oSwch"}fixo>&ϢJ:VK#ϥ{Ηmr~sȮw_yk͢*W~2ʬ<2Fߎ2:W^i'q WX\};qUjW OO*]-.L/ �/գ}'d<df'9sc] %lZ}4he~H *S1i0 �#ǿV;aY;Fmᾥ,w*q,\cnq;zw:9L,�TPr{f4mˌcR7[L{H*ɴq69zPi6ѪJz*`LP2I HMD0Y폮j:j뫋+7]6_{2ɧH5 +ͷ>:šߌnV72 ܶ68M9l;p d^?Zc �`{Pf=2 �ʮ n$aF9I@ ;Q@Q@Q@!)Q@Q@(�(�(�(�(�(�(�(�(�(�*&sѲ=*6E܄P|2|YXfl|C 5#;2%x縉'Q8F0*�f Kvv<D1@.-Lv] k{u ?2sN�]�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�f(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(AU Z( $T/[:CE@i-gRrF0O�] o\(浰(4IlbE� X`t@0IE�QE�QE�QE�QE�QE�QE�QE�QE�QE&=h�(�(�(�(�(�(�(�(�jvmw K a֪i~4+ek@j(��((((((LEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(E ( )3-�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�QE�Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!(h�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�(�) ((�(�(�(�(�(��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/blobs/motd.txt����������������������������������������������������0000664�0000000�0000000�00000000044�13670045075�0021562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Message of the Day Is: Hello World! ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/��������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017530�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/.gcloudignore�������������������������������������������������0000664�0000000�0000000�00000000112�13670045075�0022204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������*.tf *.tfstate *.tfstate.backup .terraform/ terraform.tfvars *.pem *.json ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/Dockerfile����������������������������������������������������0000664�0000000�0000000�00000000107�13670045075�0021520�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������FROM gcr.io/distroless/base COPY guestbook / ENTRYPOINT ["/guestbook"] ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/deploy/�������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0021024�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/deploy/main.go������������������������������������������������0000664�0000000�0000000�00000014206�13670045075�0022302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // The deploy program builds the Guestbook server locally and deploys it to // GKE. package main import ( "encoding/json" "flag" "fmt" "io/ioutil" "log" "os" "os/exec" "path/filepath" "strings" "time" ) func main() { log.SetFlags(0) log.SetPrefix("gcp/deploy: ") guestbookDir := flag.String("guestbook_dir", "..", "directory containing the guestbook example") tfStatePath := flag.String("tfstate", "terraform.tfstate", "path to terraform state file") flag.Parse() if err := deploy(*guestbookDir, *tfStatePath); err != nil { log.Fatal(err) } } func deploy(guestbookDir, tfStatePath string) error { type tfItem struct { Sensitive bool Type string Value string } type state struct { Project tfItem ClusterName tfItem `json:"cluster_name"` ClusterZone tfItem `json:"cluster_zone"` Bucket tfItem DatabaseInstance tfItem `json:"database_instance"` DatabaseRegion tfItem `json:"database_region"` MotdVarConfig tfItem `json:"motd_var_config"` MotdVarName tfItem `json:"motd_var_name"` } tfStateb, err := runb("terraform", "output", "-state", tfStatePath, "-json") if err != nil { return err } var tfState state if err := json.Unmarshal(tfStateb, &tfState); err != nil { return fmt.Errorf("parsing terraform state JSON: %v", err) } zone := tfState.ClusterZone.Value if zone == "" { return fmt.Errorf("empty or missing cluster_zone in %s", tfStatePath) } tempDir, err := ioutil.TempDir("", "guestbook-k8s-") if err != nil { return fmt.Errorf("making temp dir: %v", err) } defer os.RemoveAll(tempDir) // Fill in Kubernetes template parameters. proj := strings.Replace(tfState.Project.Value, ":", "/", -1) imageName := fmt.Sprintf("gcr.io/%s/guestbook", proj) gbyin, err := ioutil.ReadFile(filepath.Join(guestbookDir, "gcp", "guestbook.yaml.in")) if err != nil { return fmt.Errorf("reading guestbook.yaml.in: %v", err) } gby := string(gbyin) replacements := map[string]string{ "{{IMAGE}}": imageName, "{{bucket}}": tfState.Bucket.Value, "{{database_instance}}": tfState.DatabaseInstance.Value, "{{database_region}}": tfState.DatabaseRegion.Value, "{{motd_var_config}}": tfState.MotdVarConfig.Value, "{{motd_var_name}}": tfState.MotdVarName.Value, } for old, new := range replacements { gby = strings.Replace(gby, old, new, -1) } if err := ioutil.WriteFile(filepath.Join(tempDir, "guestbook.yaml"), []byte(gby), 0666); err != nil { return fmt.Errorf("writing guestbook.yaml: %v", err) } // Build Guestbook Docker image. log.Printf("Building %s...", imageName) build := exec.Command("go", "build", "-o", "gcp/guestbook") env := append(build.Env, "GOOS=linux", "GOARCH=amd64") env = append(env, os.Environ()...) build.Env = env absDir, err := filepath.Abs(guestbookDir) if err != nil { return fmt.Errorf("getting abs path to guestbook dir (%s): %v", guestbookDir, err) } build.Dir = absDir build.Stderr = os.Stderr if err := build.Run(); err != nil { return fmt.Errorf("building guestbook app by running %v: %v", build.Args, err) } gcp := gcloud{projectID: tfState.Project.Value} cbs := gcp.cmd("builds", "submit", "-t", imageName, filepath.Join(guestbookDir, "gcp")) if err := cbs.Run(); err != nil { return fmt.Errorf("building container image with %v: %v", cbs.Args, err) } // Run on Kubernetes. log.Printf("Deploying to %s...", tfState.ClusterName.Value) getCreds := gcp.cmd("container", "clusters", "get-credentials", "--zone", zone, tfState.ClusterName.Value) getCreds.Stderr = os.Stderr if err := getCreds.Run(); err != nil { return fmt.Errorf("getting credentials with %v: %v", getCreds.Args, err) } kubeCmds := [][]string{ {"kubectl", "apply", "-f", filepath.Join(tempDir, "guestbook.yaml")}, // Force pull the latest image. {"kubectl", "scale", "--replicas", "0", "deployment/guestbook"}, {"kubectl", "scale", "--replicas", "1", "deployment/guestbook"}, } for _, kcmd := range kubeCmds { cmd := exec.Command(kcmd[0], kcmd[1:]...) if err := cmd.Run(); err != nil { return fmt.Errorf("running %v: %v", cmd.Args, err) } } // Wait for endpoint then print it. log.Printf("Waiting for load balancer...") for { outb, err := runb("kubectl", "get", "service", "guestbook", "-o", "json") if err != nil { return err } var s service if err := json.Unmarshal(outb, &s); err != nil { return fmt.Errorf("parsing JSON output: %v", err) } i := s.Status.LoadBalancer.Ingress if len(i) == 0 || i[0].IP == "" { dt := time.Second log.Printf("No ingress returned in %s. Trying again in %v", outb, dt) time.Sleep(dt) continue } endpoint := i[0].IP log.Printf("Deployed at http://%s:8080", endpoint) break } return nil } type service struct{ Status *status } type status struct{ LoadBalancer loadBalancer } type loadBalancer struct{ Ingress []ingress } type ingress struct{ IP string } type gcloud struct { projectID string } func (gcp *gcloud) cmd(args ...string) *exec.Cmd { args = append([]string{"--quiet", "--project", gcp.projectID}, args...) cmd := exec.Command("gcloud", args...) cmd.Env = append(cmd.Env, os.Environ()...) cmd.Stderr = os.Stderr return cmd } func run(args ...string) (stdout string, err error) { stdoutb, err := runb(args...) return strings.TrimSpace(string(stdoutb)), err } func runb(args ...string) (stdout []byte, err error) { cmd := exec.Command(args[0], args[1:]...) cmd.Stderr = os.Stderr cmd.Env = append(cmd.Env, os.Environ()...) stdoutb, err := cmd.Output() if err != nil { return nil, fmt.Errorf("running %v: %v", cmd.Args, err) } return stdoutb, nil } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/guestbook.yaml.in���������������������������������������������0000664�0000000�0000000�00000002704�13670045075�0023026�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������apiVersion: extensions/v1beta1 kind: Deployment metadata: name: guestbook labels: app: guestbook spec: replicas: 1 selector: matchLabels: app: guestbook strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: guestbook spec: volumes: - name: google-cloud-key secret: secretName: guestbook-key containers: - name: guestbook image: {{IMAGE}} args: - "-env=gcp" - "-bucket={{bucket}}" - "-db_host={{database_instance}}" - "-cloud_sql_region={{database_region}}" - "-runtime_config={{motd_var_config}}" - "-motd_var={{motd_var_name}}" imagePullPolicy: Always ports: - containerPort: 8080 protocol: TCP volumeMounts: - name: google-cloud-key mountPath: /var/secrets/google env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/secrets/google/key.json livenessProbe: httpGet: path: /healthz/liveness port: 8080 readinessProbe: httpGet: path: /healthz/readiness port: 8080 --- apiVersion: v1 kind: Service metadata: name: guestbook labels: app: guestbook spec: type: LoadBalancer selector: app: guestbook ports: - port: 8080 protocol: TCP targetPort: 8080 ������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/main.tf�������������������������������������������������������0000664�0000000�0000000�00000017350�13670045075�0021015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. terraform { required_version = "~>0.12" } provider "google" { version = "~> 2.5" project = var.project } provider "random" { version = "~> 2.1" } resource "google_project_service" "cloudbuild" { service = "cloudbuild.googleapis.com" disable_on_destroy = false } # Service account for the running server resource "google_service_account" "server" { account_id = var.server_service_account_name project = var.project display_name = "Guestbook Server" } resource "google_service_account_key" "server" { service_account_id = google_service_account.server.name } # Stackdriver Tracing resource "google_project_service" "trace" { service = "cloudtrace.googleapis.com" disable_on_destroy = false } resource "google_project_iam_member" "server_trace" { role = "roles/cloudtrace.agent" member = "serviceAccount:${google_service_account.server.email}" } locals { sql_instance = "go-guestbook-${random_id.sql_instance.hex}" bucket_name = "go-guestbook-${random_id.bucket_name.hex}" } # Cloud SQL resource "google_project_service" "sql" { service = "sql-component.googleapis.com" disable_on_destroy = false } resource "google_project_service" "sqladmin" { service = "sqladmin.googleapis.com" disable_on_destroy = false } resource "random_id" "sql_instance" { keepers = { project = var.project region = var.region } byte_length = 16 } resource "google_sql_database_instance" "guestbook" { name = local.sql_instance database_version = "MYSQL_5_6" region = var.region project = var.project settings { tier = "db-f1-micro" disk_size = 10 # GiB } depends_on = [ google_project_service.sql, google_project_service.sqladmin, ] } resource "google_sql_database" "guestbook" { name = "guestbook" instance = google_sql_database_instance.guestbook.name provisioner "local-exec" { # TODO(light): Reuse credentials from Terraform. command = "go run '${path.module}'/provision_db/main.go -project='${google_sql_database_instance.guestbook.project}' -service_account='${google_service_account.db_access.email}' -instance='${local.sql_instance}' -database=guestbook -password='${google_sql_user.root.password}' -schema='${path.module}'/../schema.sql" } } resource "random_string" "db_password" { keepers = { project = var.project db_name = local.sql_instance region = var.region } special = false length = 20 } resource "google_sql_user" "root" { name = "root" instance = google_sql_database_instance.guestbook.name password = random_string.db_password.result } resource "google_sql_user" "guestbook" { name = "guestbook" instance = google_sql_database_instance.guestbook.name host = "cloudsqlproxy~%" } resource "google_service_account" "db_access" { account_id = var.db_access_service_account_name project = var.project display_name = "Guestbook Database Access" } resource "google_project_iam_member" "server_cloudsql" { role = "roles/cloudsql.client" member = "serviceAccount:${google_service_account.server.email}" } resource "google_project_iam_member" "db_access_cloudsql" { role = "roles/cloudsql.client" member = "serviceAccount:${google_service_account.db_access.email}" } # Runtime Configurator resource "google_project_service" "runtimeconfig" { service = "runtimeconfig.googleapis.com" disable_on_destroy = false } resource "google_runtimeconfig_config" "guestbook" { name = "guestbook" project = var.project depends_on = [google_project_service.runtimeconfig] } resource "google_runtimeconfig_variable" "motd" { name = "motd" parent = google_runtimeconfig_config.guestbook.name project = var.project text = "ohai from GCP runtime configuration" } resource "google_project_iam_member" "server_runtimeconfig" { role = "roles/runtimeconfig.admin" member = "serviceAccount:${google_service_account.server.email}" } # Google Cloud Storage resource "google_project_service" "storage" { service = "storage-component.googleapis.com" disable_on_destroy = false } resource "google_project_service" "storage_api" { service = "storage-api.googleapis.com" disable_on_destroy = false } resource "random_id" "bucket_name" { keepers = { project = var.project region = var.region } byte_length = 16 } resource "google_storage_bucket" "guestbook" { name = local.bucket_name storage_class = "REGIONAL" location = var.region # Set to avoid calling Compute API. # See https://github.com/hashicorp/terraform/issues/13109 project = var.project depends_on = [ google_project_service.storage, google_project_service.storage_api, ] } resource "google_storage_bucket_iam_member" "guestbook_server_view" { bucket = google_storage_bucket.guestbook.name role = "roles/storage.objectViewer" member = "serviceAccount:${google_service_account.server.email}" } resource "google_storage_bucket_object" "aws" { bucket = google_storage_bucket.guestbook.name name = "aws.png" content_type = "image/png" source = "${path.module}/../blobs/aws.png" depends_on = [google_storage_bucket_iam_member.guestbook_server_view] } resource "google_storage_bucket_object" "gcp" { bucket = google_storage_bucket.guestbook.name name = "gcp.png" content_type = "image/png" source = "${path.module}/../blobs/gcp.png" depends_on = [google_storage_bucket_iam_member.guestbook_server_view] } resource "google_storage_bucket_object" "gophers" { bucket = google_storage_bucket.guestbook.name name = "gophers.jpg" content_type = "image/jpeg" source = "${path.module}/../blobs/gophers.jpg" depends_on = [google_storage_bucket_iam_member.guestbook_server_view] } # Kubernetes Engine resource "google_project_service" "container" { service = "container.googleapis.com" disable_on_destroy = false } resource "google_container_cluster" "guestbook" { name = var.cluster_name zone = var.zone initial_node_count = 3 node_config { machine_type = "n1-standard-1" disk_size_gb = 50 oauth_scopes = [ "https://www.googleapis.com/auth/compute", "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", ] } # Needed for Kubernetes provider below. enable_legacy_abac = true depends_on = [google_project_service.container] } provider "kubernetes" { version = "~> 1.1" host = "https://${google_container_cluster.guestbook.endpoint}" client_certificate = base64decode( google_container_cluster.guestbook.master_auth[0].client_certificate, ) client_key = base64decode(google_container_cluster.guestbook.master_auth[0].client_key) cluster_ca_certificate = base64decode( google_container_cluster.guestbook.master_auth[0].cluster_ca_certificate, ) } resource "kubernetes_secret" "guestbook_creds" { metadata { name = "guestbook-key" } data = { "key.json" = base64decode(google_service_account_key.server.private_key) } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/outputs.tf����������������������������������������������������0000664�0000000�0000000�00000004317�13670045075�0021613�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. output "project" { value = var.project description = "The GCP project ID." } output "server_service_account" { value = google_service_account.server.email description = "The service account email that will be used for the server running inside the GKE cluster." } output "db_access_service_account" { value = google_service_account.db_access.email description = "The service account email that was used for provisioning the database." } output "cluster_name" { value = var.cluster_name description = "GKE cluster name." } output "cluster_zone" { value = google_container_cluster.guestbook.zone description = "GCP zone that the GKE cluster is in." } output "bucket" { value = local.bucket_name description = "Name of the GCS bucket created to store images." } output "database_instance" { value = google_sql_database_instance.guestbook.name description = "Cloud SQL instance name." } output "database_root_password" { value = random_string.db_password.result sensitive = true description = "The Cloud SQL instance password for root." } output "database_region" { value = var.region description = "The Cloud SQL instance region." } output "motd_var_config" { value = google_runtimeconfig_config.guestbook.name description = "The name of the Runtime Configurator config resource that contains the Message of the Day variable." } output "motd_var_name" { value = google_runtimeconfig_variable.motd.name description = "The name of the Runtime Configurator variable inside the config resource that contains the Message of the Day." } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/provision_db/�������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0022225�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/provision_db/main.go������������������������������������������0000664�0000000�0000000�00000012660�13670045075�0023505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // The provision_db program connects to a Cloud SQL database and initializes it // with SQL from a file. It's intended to be invoked from Terraform. package main import ( "encoding/json" "flag" "fmt" "io/ioutil" "log" "os" "os/exec" "path/filepath" "strings" ) func main() { log.SetFlags(0) log.SetPrefix("gcp/provision_db: ") project := flag.String("project", "", "GCP project ID") serviceAccount := flag.String("service_account", "", "name of service account in GCP project") instance := flag.String("instance", "", "database instance name") database := flag.String("database", "", "name of database to initialize") password := flag.String("password", "", "root password for the database") schema := flag.String("schema", "", "path to .sql file defining the database schema") flag.Parse() missing := false flag.VisitAll(func(f *flag.Flag) { if f.Value.String() == "" { log.Printf("Required flag -%s is not set.", f.Name) missing = true } }) if missing { os.Exit(64) } if err := provisionDB(*project, *serviceAccount, *instance, *database, *password, *schema); err != nil { log.Fatal(err) } } type key struct { PrivateKeyID string `json:"private_key_id"` } func provisionDB(projectID, serviceAccount, dbInstance, dbName, dbPassword, schemaPath string) error { log.Printf("Downloading Docker images...") const mySQLImage = "mysql:5.6" cloudSQLProxyImage := "gcr.io/cloudsql-docker/gce-proxy:1.11" images := []string{mySQLImage, cloudSQLProxyImage} for _, img := range images { if _, err := run("docker", "pull", img); err != nil { return err } } log.Printf("Getting connection string from database metadata...") gcp := &gcloud{projectID} dbConnStr, err := run(gcp.cmd("sql", "instances", "describe", "--format", "value(connectionName)", dbInstance)...) if err != nil { return fmt.Errorf("getting connection string: %v", err) } // Create a temporary directory to hold the service account key. // We resolve all symlinks to avoid Docker on Mac issues, see // https://github.com/google/go-cloud/issues/110. serviceAccountVolDir, err := ioutil.TempDir("", "guestbook-service-acct") if err != nil { return fmt.Errorf("creating temp dir to hold service account key: %v", err) } serviceAccountVolDir, err = filepath.EvalSymlinks(serviceAccountVolDir) if err != nil { return fmt.Errorf("evaluating any symlinks: %v", err) } defer os.RemoveAll(serviceAccountVolDir) log.Printf("Created %v", serviceAccountVolDir) // Furnish a new service account key. if _, err := run(gcp.cmd("iam", "service-accounts", "keys", "create", "--iam-account="+serviceAccount, serviceAccountVolDir+"/key.json")...); err != nil { return fmt.Errorf("creating new service account key: %v", err) } keyJSONb, err := ioutil.ReadFile(filepath.Join(serviceAccountVolDir, "key.json")) if err != nil { return fmt.Errorf("reading key.json file: %v", err) } var k key if err := json.Unmarshal(keyJSONb, &k); err != nil { return fmt.Errorf("parsing key.json: %v", err) } serviceAccountKeyID := k.PrivateKeyID defer func() { if _, err := run(gcp.cmd("iam", "service-accounts", "keys", "delete", "--iam-account", serviceAccount, serviceAccountKeyID)...); err != nil { log.Printf("deleting service account key: %v", err) } }() log.Printf("Created service account key %s", serviceAccountKeyID) log.Printf("Starting Cloud SQL proxy...") proxyContainerID, err := run("docker", "run", "--detach", "--rm", "--volume", serviceAccountVolDir+":/creds", "--publish", "3306", cloudSQLProxyImage, "/cloud_sql_proxy", "-instances", dbConnStr+"=tcp:0.0.0.0:3306", "-credential_file=/creds/key.json") if err != nil { return err } defer func() { if _, err := run("docker", "kill", proxyContainerID); err != nil { log.Printf("failed to kill docker container for proxy: %v", err) } }() log.Print("Sending schema to database...") mySQLCmd := fmt.Sprintf(`mysql --wait -h"$PROXY_PORT_3306_TCP_ADDR" -P"$PROXY_PORT_3306_TCP_PORT" -uroot -p'%s' '%s'`, dbPassword, dbName) connect := exec.Command("docker", "run", "--rm", "--interactive", "--link", proxyContainerID+":proxy", mySQLImage, "sh", "-c", mySQLCmd) schema, err := os.Open(schemaPath) if err != nil { return err } defer schema.Close() connect.Stdin = schema connect.Stderr = os.Stderr if err := connect.Run(); err != nil { return fmt.Errorf("running %v: %v", connect.Args, err) } return nil } func run(args ...string) (stdout string, err error) { cmd := exec.Command(args[0], args[1:]...) cmd.Stderr = os.Stderr cmd.Env = append(cmd.Env, os.Environ()...) stdoutb, err := cmd.Output() if err != nil { return "", fmt.Errorf("running %v: %v", cmd.Args, err) } return strings.TrimSpace(string(stdoutb)), nil } type gcloud struct { // project ID project string } func (gcp *gcloud) cmd(args ...string) []string { return append([]string{"gcloud", "--quiet", "--project", gcp.project}, args...) } ��������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/gcp/variables.tf��������������������������������������������������0000664�0000000�0000000�00000003102�13670045075�0022027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2018 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. variable "project" { type = string description = "Project to set up." } variable "region" { type = string description = "GCP region to create database and storage in, for example 'us-central1'. See https://cloud.google.com/compute/docs/regions-zones/ for valid values." } variable "zone" { type = string description = "GCP zone to create the GKE cluster in, for example 'us-central1-a'. See https://cloud.google.com/compute/docs/regions-zones/ for valid values." } variable "server_service_account_name" { default = "guestbook" description = "The username part of the service account email that will be used for the server running inside the GKE cluster." } variable "db_access_service_account_name" { default = "guestbook-db" description = "The username part of the service account email that will be used for provisioning the database." } variable "cluster_name" { default = "guestbook-cluster" description = "The GKE cluster name." } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/inject_aws.go�����������������������������������������������������0000664�0000000�0000000�00000005560�13670045075�0021442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //+build wireinject package main import ( "context" "database/sql" "net/url" awsclient "github.com/aws/aws-sdk-go/aws/client" "github.com/google/wire" "gocloud.dev/aws/awscloud" "gocloud.dev/blob" "gocloud.dev/blob/s3blob" "gocloud.dev/mysql/awsmysql" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/awsparamstore" "gocloud.dev/server" ) // This file wires the generic interfaces up to Amazon Web Services (AWS). It // won't be directly included in the final binary, since it includes a Wire // injector template function (setupAWS), but the declarations will be copied // into wire_gen.go when Wire is run. // setupAWS is a Wire injector function that sets up the application using AWS. func setupAWS(ctx context.Context, flags *cliFlags) (*server.Server, func(), error) { // This will be filled in by Wire with providers from the provider sets in // wire.Build. wire.Build( awscloud.AWS, wire.Struct(new(awsmysql.URLOpener), "CertSource"), applicationSet, awsBucket, awsMOTDVar, openAWSDatabase, ) return nil, nil, nil } // awsBucket is a Wire provider function that returns the S3 bucket based on the // command-line flags. func awsBucket(ctx context.Context, cp awsclient.ConfigProvider, flags *cliFlags) (*blob.Bucket, func(), error) { b, err := s3blob.OpenBucket(ctx, cp, flags.bucket, nil) if err != nil { return nil, nil, err } return b, func() { b.Close() }, nil } // openAWSDatabase is a Wire provider function that connects to an AWS RDS // MySQL database based on the command-line flags. func openAWSDatabase(ctx context.Context, opener *awsmysql.URLOpener, flags *cliFlags) (*sql.DB, func(), error) { db, err := opener.OpenMySQLURL(ctx, &url.URL{ Scheme: "awsmysql", User: url.UserPassword(flags.dbUser, flags.dbPassword), Host: flags.dbHost, Path: "/" + flags.dbName, }) if err != nil { return nil, nil, err } return db, func() { db.Close() }, nil } // awsMOTDVar is a Wire provider function that returns the Message of the Day // variable from SSM Parameter Store. func awsMOTDVar(ctx context.Context, sess awsclient.ConfigProvider, flags *cliFlags) (*runtimevar.Variable, error) { return awsparamstore.OpenVariable(sess, flags.motdVar, runtimevar.StringDecoder, &awsparamstore.Options{ WaitDuration: flags.motdVarWaitTime, }) } ������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/inject_azure.go���������������������������������������������������0000664�0000000�0000000�00000004767�13670045075�0022006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //+build wireinject package main import ( "context" "github.com/Azure/azure-pipeline-go/pipeline" "github.com/google/wire" "go.opencensus.io/trace" "gocloud.dev/blob" "gocloud.dev/blob/azureblob" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/blobvar" "gocloud.dev/server" "gocloud.dev/server/requestlog" ) // This file wires the generic interfaces up to Microsoft Azure. It // won't be directly included in the final binary, since it includes a Wire // injector template function (setupAzure), but the declarations will be copied // into wire_gen.go when Wire is run. // setupAzure is a Wire injector function that sets up the application using // Azure. func setupAzure(ctx context.Context, flags *cliFlags) (*server.Server, func(), error) { // This will be filled in by Wire with providers from the provider sets in // wire.Build. wire.Build( wire.InterfaceValue(new(requestlog.Logger), requestlog.Logger(nil)), wire.InterfaceValue(new(trace.Exporter), trace.Exporter(nil)), azureblob.NewPipeline, azureblob.DefaultIdentity, applicationSet, azureBucket, azureMOTDVar, server.Set, dialLocalSQL, ) return nil, nil, nil } // azureBucket is a Wire provider function that returns the Azure bucket based // on the command-line flags. func azureBucket(ctx context.Context, p pipeline.Pipeline, accountName azureblob.AccountName, flags *cliFlags) (*blob.Bucket, func(), error) { b, err := azureblob.OpenBucket(ctx, p, accountName, flags.bucket, nil) if err != nil { return nil, nil, err } return b, func() { b.Close() }, nil } // azureMOTDVar is a Wire provider function that returns the Message of the Day // variable read from a blob stored in Azure. func azureMOTDVar(ctx context.Context, b *blob.Bucket, flags *cliFlags) (*runtimevar.Variable, error) { return blobvar.OpenVariable(b, flags.motdVar, runtimevar.StringDecoder, &blobvar.Options{ WaitDuration: flags.motdVarWaitTime, }) } ���������go-cloud-0.20.0/samples/guestbook/inject_gcp.go�����������������������������������������������������0000664�0000000�0000000�00000006322�13670045075�0021416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //+build wireinject package main import ( "context" "database/sql" "fmt" "net/url" "github.com/google/wire" "gocloud.dev/blob" "gocloud.dev/blob/gcsblob" "gocloud.dev/gcp" "gocloud.dev/gcp/gcpcloud" "gocloud.dev/mysql/gcpmysql" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/gcpruntimeconfig" "gocloud.dev/server" pb "google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1" ) // This file wires the generic interfaces up to Google Cloud Platform (GCP). It // won't be directly included in the final binary, since it includes a Wire // injector template function (setupGCP), but the declarations will be copied // into wire_gen.go when Wire is run. // setupGCP is a Wire injector function that sets up the application using GCP. func setupGCP(ctx context.Context, flags *cliFlags) (*server.Server, func(), error) { // This will be filled in by Wire with providers from the provider sets in // wire.Build. wire.Build( gcpcloud.GCP, wire.Struct(new(gcpmysql.URLOpener), "CertSource"), applicationSet, gcpBucket, gcpMOTDVar, openGCPDatabase, ) return nil, nil, nil } // gcpBucket is a Wire provider function that returns the GCS bucket based on // the command-line flags. func gcpBucket(ctx context.Context, flags *cliFlags, client *gcp.HTTPClient) (*blob.Bucket, func(), error) { b, err := gcsblob.OpenBucket(ctx, client, flags.bucket, nil) if err != nil { return nil, nil, err } return b, func() { b.Close() }, nil } // openGCPDatabase is a Wire provider function that connects to a GCP Cloud SQL // MySQL database based on the command-line flags. func openGCPDatabase(ctx context.Context, opener *gcpmysql.URLOpener, id gcp.ProjectID, flags *cliFlags) (*sql.DB, func(), error) { db, err := opener.OpenMySQLURL(ctx, &url.URL{ Scheme: "gcpmysql", User: url.UserPassword(flags.dbUser, flags.dbPassword), Host: string(id), Path: fmt.Sprintf("/%s/%s/%s", flags.cloudSQLRegion, flags.dbHost, flags.dbName), }) if err != nil { return nil, nil, err } return db, func() { db.Close() }, nil } // gcpMOTDVar is a Wire provider function that returns the Message of the Day // variable from Runtime Configurator. func gcpMOTDVar(ctx context.Context, client pb.RuntimeConfigManagerClient, project gcp.ProjectID, flags *cliFlags) (*runtimevar.Variable, func(), error) { variableKey := gcpruntimeconfig.VariableKey(project, flags.runtimeConfigName, flags.motdVar) v, err := gcpruntimeconfig.OpenVariable(client, variableKey, runtimevar.StringDecoder, &gcpruntimeconfig.Options{ WaitDuration: flags.motdVarWaitTime, }) if err != nil { return nil, nil, err } return v, func() { v.Close() }, nil } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/inject_local.go���������������������������������������������������0000664�0000000�0000000�00000005424�13670045075�0021741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //+build wireinject package main import ( "context" "database/sql" "github.com/go-sql-driver/mysql" "github.com/google/wire" "go.opencensus.io/trace" "gocloud.dev/blob" "gocloud.dev/blob/fileblob" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/filevar" "gocloud.dev/server" "gocloud.dev/server/requestlog" ) // This file wires the generic interfaces up to local implementations. It won't // be directly included in the final binary, since it includes a Wire injector // template function (setupLocal), but the declarations will be copied into // wire_gen.go when Wire is run. // setupLocal is a Wire injector function that sets up the application using // local implementations. func setupLocal(ctx context.Context, flags *cliFlags) (*server.Server, func(), error) { // This will be filled in by Wire with providers from the provider sets in // wire.Build. wire.Build( wire.InterfaceValue(new(requestlog.Logger), requestlog.Logger(nil)), wire.InterfaceValue(new(trace.Exporter), trace.Exporter(nil)), server.Set, applicationSet, dialLocalSQL, localBucket, localRuntimeVar, ) return nil, nil, nil } // localBucket is a Wire provider function that returns a directory-based bucket // based on the command-line flags. func localBucket(flags *cliFlags) (*blob.Bucket, error) { return fileblob.OpenBucket(flags.bucket, nil) } // dialLocalSQL is a Wire provider function that connects to a MySQL database // (usually on localhost). func dialLocalSQL(flags *cliFlags) (*sql.DB, error) { cfg := &mysql.Config{ Net: "tcp", Addr: flags.dbHost, DBName: flags.dbName, User: flags.dbUser, Passwd: flags.dbPassword, AllowNativePasswords: true, } return sql.Open("mysql", cfg.FormatDSN()) } // localRuntimeVar is a Wire provider function that returns the Message of the // Day variable based on a local file. func localRuntimeVar(flags *cliFlags) (*runtimevar.Variable, func(), error) { v, err := filevar.OpenVariable(flags.motdVar, runtimevar.StringDecoder, &filevar.Options{ WaitDuration: flags.motdVarWaitTime, }) if err != nil { return nil, nil, err } return v, func() { v.Close() }, nil } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/localdb/����������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0020357�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/localdb/main.go���������������������������������������������������0000664�0000000�0000000�00000007416�13670045075�0021642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "errors" "flag" "fmt" "io/ioutil" "log" "os" "os/exec" "os/signal" "path/filepath" "strings" "time" pipe "gopkg.in/pipe.v2" ) func main() { guestbookDir := flag.String("guestbook_dir", ".", "directory containing guestbook sample source code") flag.Parse() if flag.NArg() > 1 { fmt.Fprintf(os.Stderr, "usage: localdb [flags] container_name\n") os.Exit(1) } log.SetPrefix("localdb: ") log.SetFlags(0) if err := runLocalDB(flag.Arg(0), *guestbookDir); err != nil { log.Fatal(err) } } func runLocalDB(containerName, guestbookDir string) error { image := "mysql:5.6" log.Printf("Starting container running MySQL") dockerArgs := []string{"run", "--rm"} if containerName != "" { dockerArgs = append(dockerArgs, "--name", containerName) } dockerArgs = append(dockerArgs, "--env", "MYSQL_DATABASE=guestbook", "--env", "MYSQL_ROOT_PASSWORD=password", "--detach", "--publish", "3306:3306", image) cmd := exec.Command("docker", dockerArgs...) cmd.Stderr = os.Stderr out, err := cmd.Output() if err != nil { return fmt.Errorf("running %v: %v: %s", cmd.Args, err, out) } containerID := strings.TrimSpace(string(out)) defer func() { log.Printf("killing %s", containerID) stop := exec.Command("docker", "kill", containerID) stop.Stderr = os.Stderr if err := stop.Run(); err != nil { log.Printf("failed to kill db container: %v", err) } }() // Stop the container on Ctrl-C. ctx, cancel := context.WithCancel(context.Background()) go func() { c := make(chan os.Signal, 1) // TODO(ijt): Handle SIGTERM. signal.Notify(c, os.Interrupt) <-c cancel() }() nap := 10 * time.Second log.Printf("Waiting %v for database to come up", nap) select { case <-time.After(nap): // ok case <-ctx.Done(): return errors.New("interrupted while napping") } log.Printf("Initializing database schema and users") schema, err := ioutil.ReadFile(filepath.Join(guestbookDir, "schema.sql")) if err != nil { return fmt.Errorf("reading schema: %v", err) } roles, err := ioutil.ReadFile(filepath.Join(guestbookDir, "roles.sql")) if err != nil { return fmt.Errorf("reading roles: %v", err) } tooMany := 10 var i int for i = 0; i < tooMany; i++ { mySQL := `mysql -h"${MYSQL_PORT_3306_TCP_ADDR?}" -P"${MYSQL_PORT_3306_TCP_PORT?}" -uroot -ppassword guestbook` p := pipe.Line( pipe.Read(strings.NewReader(string(schema)+string(roles))), pipe.Exec("docker", "run", "--rm", "--interactive", "--link", containerID+":mysql", image, "sh", "-c", mySQL), ) if _, stderr, err := pipe.DividedOutput(p); err != nil { log.Printf("Failed to seed database: %q; retrying", stderr) select { case <-time.After(time.Second): continue case <-ctx.Done(): return errors.New("interrupted while napping in between database seeding attempts") } } break } if i == tooMany { return fmt.Errorf("gave up after %d tries to seed database", i) } log.Printf("Database running at localhost:3306") attach := exec.CommandContext(ctx, "docker", "attach", containerID) attach.Stdout = os.Stdout attach.Stderr = os.Stderr if err := attach.Run(); err != nil { return fmt.Errorf("running %v: %q", attach.Args, err) } return nil } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/main.go�����������������������������������������������������������0000664�0000000�0000000�00000021501�13670045075�0020231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // guestbook is a sample application that records visitors' messages, displays a // cloud banner, and an administrative message. package main import ( "bytes" "context" "database/sql" "flag" "html/template" "io" "log" "net/http" "strconv" "time" "github.com/google/wire" "github.com/gorilla/mux" "go.opencensus.io/trace" "gocloud.dev/blob" "gocloud.dev/gcerrors" "gocloud.dev/runtimevar" "gocloud.dev/server" "gocloud.dev/server/health" "gocloud.dev/server/health/sqlhealth" ) type cliFlags struct { bucket string dbHost string dbName string dbUser string dbPassword string motdVar string motdVarWaitTime time.Duration // GCP only. cloudSQLRegion string runtimeConfigName string } var envFlag string func main() { // Determine environment to set up based on flag. cf := new(cliFlags) flag.StringVar(&envFlag, "env", "local", "environment to run under (gcp, aws, azure, or local)") addr := flag.String("listen", ":8080", "port to listen for HTTP on") flag.StringVar(&cf.bucket, "bucket", "", "bucket name") flag.StringVar(&cf.dbHost, "db_host", "", "database host or Cloud SQL instance name") flag.StringVar(&cf.dbName, "db_name", "guestbook", "database name") flag.StringVar(&cf.dbUser, "db_user", "guestbook", "database user") flag.StringVar(&cf.dbPassword, "db_password", "", "database user password") flag.StringVar(&cf.motdVar, "motd_var", "", "message of the day variable location") flag.DurationVar(&cf.motdVarWaitTime, "motd_var_wait_time", 5*time.Second, "polling frequency of message of the day") flag.StringVar(&cf.cloudSQLRegion, "cloud_sql_region", "", "region of the Cloud SQL instance (GCP only)") flag.StringVar(&cf.runtimeConfigName, "runtime_config", "", "Runtime Configurator config resource (GCP only)") flag.Parse() ctx := context.Background() var srv *server.Server var cleanup func() var err error switch envFlag { case "gcp": srv, cleanup, err = setupGCP(ctx, cf) case "aws": srv, cleanup, err = setupAWS(ctx, cf) case "azure": if cf.dbHost == "" { cf.dbHost = "localhost" } if cf.dbPassword == "" { cf.dbPassword = "xyzzy" } srv, cleanup, err = setupAzure(ctx, cf) case "local": // The default MySQL instance is running on localhost // with this root password. if cf.dbHost == "" { cf.dbHost = "localhost" } if cf.dbPassword == "" { cf.dbPassword = "xyzzy" } srv, cleanup, err = setupLocal(ctx, cf) default: log.Fatalf("unknown -env=%s", envFlag) } if err != nil { log.Fatal(err) } defer cleanup() // Listen and serve HTTP. log.Printf("Running, connected to %q cloud", envFlag) log.Fatal(srv.ListenAndServe(*addr)) } // applicationSet is the Wire provider set for the Guestbook application that // does not depend on the underlying platform. var applicationSet = wire.NewSet( newApplication, appHealthChecks, trace.AlwaysSample, newRouter, wire.Bind(new(http.Handler), new(*mux.Router)), ) func newRouter(app *application) *mux.Router { r := mux.NewRouter() r.HandleFunc("/", app.index) r.HandleFunc("/sign", app.sign) r.HandleFunc("/blob/{key:.+}", app.serveBlob) return r } // application is the main server struct for Guestbook. It contains the state of // the most recently read message of the day. type application struct { db *sql.DB bucket *blob.Bucket motdVar *runtimevar.Variable } // newApplication creates a new application struct based on the backends and the message // of the day variable. func newApplication(db *sql.DB, bucket *blob.Bucket, motdVar *runtimevar.Variable) *application { return &application{ db: db, bucket: bucket, motdVar: motdVar, } } // index serves the server's landing page. It lists the 100 most recent // greetings, shows a cloud environment banner, and displays the message of the // day. func (app *application) index(w http.ResponseWriter, r *http.Request) { var data struct { MOTD string Env string BannerSrc string Greetings []greeting } snap, err := app.motdVar.Latest(r.Context()) if err != nil { log.Println("index page error:", err) http.Error(w, "could not load motd", http.StatusInternalServerError) return } data.MOTD = snap.Value.(string) switch envFlag { case "gcp": data.Env = "GCP" data.BannerSrc = "/blob/gcp.png" case "aws": data.Env = "AWS" data.BannerSrc = "/blob/aws.png" case "azure": data.Env = "Azure" data.BannerSrc = "/blob/azure.png" case "local": data.Env = "Local" data.BannerSrc = "/blob/gophers.jpg" } const query = "SELECT content FROM (SELECT content, post_date FROM greetings ORDER BY post_date DESC LIMIT 100) AS recent_greetings ORDER BY post_date ASC;" q, err := app.db.QueryContext(r.Context(), query) if err != nil { log.Println("main page SQL error:", err) http.Error(w, "could not load greetings", http.StatusInternalServerError) return } defer q.Close() for q.Next() { var g greeting if err := q.Scan(&g.Content); err != nil { log.Println("main page SQL error:", err) http.Error(w, "could not load greetings", http.StatusInternalServerError) return } data.Greetings = append(data.Greetings, g) } if err := q.Err(); err != nil { log.Println("main page SQL error:", err) http.Error(w, "could not load greetings", http.StatusInternalServerError) return } buf := new(bytes.Buffer) if err := tmpl.Execute(buf, data); err != nil { log.Println("template error:", err) http.Error(w, "could not render page", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Header().Set("Content-Length", strconv.Itoa(buf.Len())) if _, err := w.Write(buf.Bytes()); err != nil { log.Println("writing response:", err) } } type greeting struct { Content string } var tmpl = template.Must(template.New("index.html").Parse(`<!DOCTYPE html> <title>Guestbook - {{.Env}}</title> <style type="text/css"> html, body { font-family: Helvetica, sans-serif; } blockquote { font-family: cursive, Helvetica, sans-serif; } .banner { height: 125px; width: 250px; } .greeting { font-size: 85%; } .motd { font-weight: bold; } </style> <h1>Guestbook</h1> <div><img class="banner" src="{{.BannerSrc}}"></div> {{with .MOTD}}<p class="motd">Admin says: {{.}}</p>{{end}} {{range .Greetings}} <div class="greeting"> Someone wrote: <blockquote>{{.Content}}</blockquote> </div> {{end}} <form action="/sign" method="POST"> <div><textarea name="content" rows="3"></textarea></div> <div><input type="submit" value="Sign"></div> </form> `)) // sign is a form action handler for adding a greeting. func (app *application) sign(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { w.Header().Set("Allow", "POST") http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed) return } content := r.FormValue("content") if content == "" { http.Error(w, "content must not be empty", http.StatusBadRequest) return } const sqlStmt = "INSERT INTO greetings (content) VALUES (?);" _, err := app.db.ExecContext(r.Context(), sqlStmt, content) if err != nil { log.Println("sign SQL error:", err) http.Error(w, "database error", http.StatusInternalServerError) return } http.Redirect(w, r, "/", http.StatusSeeOther) } // serveBlob handles a request for a static asset by retrieving it from a bucket. func (app *application) serveBlob(w http.ResponseWriter, r *http.Request) { key := mux.Vars(r)["key"] blobReader, err := app.bucket.NewReader(r.Context(), key, nil) if err != nil { log.Println("serve blob:", err) if gcerrors.Code(err) == gcerrors.NotFound { http.Error(w, "blob not found", http.StatusNotFound) } else { http.Error(w, "blob read error", http.StatusInternalServerError) } return } defer blobReader.Close() w.Header().Set("Content-Type", blobReader.ContentType()) w.Header().Set("Content-Length", strconv.FormatInt(blobReader.Size(), 10)) if _, err = io.Copy(w, blobReader); err != nil { log.Println("Copying blob:", err) } } // appHealthChecks returns a health check for the database. This will signal // to Kubernetes or other orchestrators that the server should not receive // traffic until the server is able to connect to its database. func appHealthChecks(db *sql.DB) ([]health.Checker, func()) { dbCheck := sqlhealth.New(db) list := []health.Checker{dbCheck} return list, func() { dbCheck.Stop() } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/roles.sql���������������������������������������������������������0000664�0000000�0000000�00000001337�13670045075�0020630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Copyright 2018 The Go Cloud Development Kit Authors -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- https://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. CREATE USER 'guestbook'@'%' IDENTIFIED BY 'xyzzy'; GRANT SELECT,INSERT,UPDATE,DELETE ON guestbook.* TO 'guestbook'@'%'; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/schema.sql��������������������������������������������������������0000664�0000000�0000000�00000001431�13670045075�0020737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������-- Copyright 2018 The Go Cloud Development Kit Authors -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- https://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. CREATE TABLE greetings ( content VARCHAR(255) CHARACTER SET utf8 NOT NULL CHECK (content <> ''), post_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/guestbook/wire_gen.go�������������������������������������������������������0000664�0000000�0000000�00000027621�13670045075�0021115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Code generated by Wire. DO NOT EDIT. //go:generate wire //+build !wireinject package main import ( "context" "contrib.go.opencensus.io/exporter/stackdriver/monitoredresource" "database/sql" "fmt" "github.com/Azure/azure-pipeline-go/pipeline" "github.com/Azure/azure-storage-blob-go/azblob" "github.com/aws/aws-sdk-go/aws/client" "github.com/go-sql-driver/mysql" "go.opencensus.io/trace" "gocloud.dev/aws" "gocloud.dev/aws/rds" "gocloud.dev/blob" "gocloud.dev/blob/azureblob" "gocloud.dev/blob/fileblob" "gocloud.dev/blob/gcsblob" "gocloud.dev/blob/s3blob" "gocloud.dev/gcp" "gocloud.dev/gcp/cloudsql" "gocloud.dev/mysql/awsmysql" "gocloud.dev/mysql/gcpmysql" "gocloud.dev/runtimevar" "gocloud.dev/runtimevar/awsparamstore" "gocloud.dev/runtimevar/blobvar" "gocloud.dev/runtimevar/filevar" "gocloud.dev/runtimevar/gcpruntimeconfig" "gocloud.dev/server" "gocloud.dev/server/requestlog" "gocloud.dev/server/sdserver" "gocloud.dev/server/xrayserver" "google.golang.org/genproto/googleapis/cloud/runtimeconfig/v1beta1" "net/http" "net/url" ) // Injectors from inject_aws.go: func setupAWS(ctx context.Context, flags *cliFlags) (*server.Server, func(), error) { client := _wireClientValue certFetcher := &rds.CertFetcher{ Client: client, } urlOpener := &awsmysql.URLOpener{ CertSource: certFetcher, } db, cleanup, err := openAWSDatabase(ctx, urlOpener, flags) if err != nil { return nil, nil, err } session, err := aws.NewDefaultSession() if err != nil { cleanup() return nil, nil, err } bucket, cleanup2, err := awsBucket(ctx, session, flags) if err != nil { cleanup() return nil, nil, err } variable, err := awsMOTDVar(ctx, session, flags) if err != nil { cleanup2() cleanup() return nil, nil, err } mainApplication := newApplication(db, bucket, variable) router := newRouter(mainApplication) ncsaLogger := xrayserver.NewRequestLogger() v, cleanup3 := appHealthChecks(db) xRay := xrayserver.NewXRayClient(session) exporter, cleanup4, err := xrayserver.NewExporter(xRay) if err != nil { cleanup3() cleanup2() cleanup() return nil, nil, err } sampler := trace.AlwaysSample() defaultDriver := _wireDefaultDriverValue options := &server.Options{ RequestLogger: ncsaLogger, HealthChecks: v, TraceExporter: exporter, DefaultSamplingPolicy: sampler, Driver: defaultDriver, } serverServer := server.New(router, options) return serverServer, func() { cleanup4() cleanup3() cleanup2() cleanup() }, nil } var ( _wireClientValue = http.DefaultClient _wireDefaultDriverValue = &server.DefaultDriver{} ) // Injectors from inject_azure.go: func setupAzure(ctx context.Context, flags *cliFlags) (*server.Server, func(), error) { db, err := dialLocalSQL(flags) if err != nil { return nil, nil, err } accountName, err := azureblob.DefaultAccountName() if err != nil { return nil, nil, err } accountKey, err := azureblob.DefaultAccountKey() if err != nil { return nil, nil, err } sharedKeyCredential, err := azureblob.NewCredential(accountName, accountKey) if err != nil { return nil, nil, err } pipelineOptions := _wirePipelineOptionsValue pipeline := azureblob.NewPipeline(sharedKeyCredential, pipelineOptions) bucket, cleanup, err := azureBucket(ctx, pipeline, accountName, flags) if err != nil { return nil, nil, err } variable, err := azureMOTDVar(ctx, bucket, flags) if err != nil { cleanup() return nil, nil, err } mainApplication := newApplication(db, bucket, variable) router := newRouter(mainApplication) logger := _wireLoggerValue v, cleanup2 := appHealthChecks(db) exporter := _wireExporterValue sampler := trace.AlwaysSample() defaultDriver := _wireDefaultDriverValue options := &server.Options{ RequestLogger: logger, HealthChecks: v, TraceExporter: exporter, DefaultSamplingPolicy: sampler, Driver: defaultDriver, } serverServer := server.New(router, options) return serverServer, func() { cleanup2() cleanup() }, nil } var ( _wirePipelineOptionsValue = azblob.PipelineOptions{} _wireLoggerValue = requestlog.Logger(nil) _wireExporterValue = trace.Exporter(nil) ) // Injectors from inject_gcp.go: func setupGCP(ctx context.Context, flags *cliFlags) (*server.Server, func(), error) { roundTripper := gcp.DefaultTransport() credentials, err := gcp.DefaultCredentials(ctx) if err != nil { return nil, nil, err } tokenSource := gcp.CredentialsTokenSource(credentials) httpClient, err := gcp.NewHTTPClient(roundTripper, tokenSource) if err != nil { return nil, nil, err } remoteCertSource := cloudsql.NewCertSource(httpClient) urlOpener := &gcpmysql.URLOpener{ CertSource: remoteCertSource, } projectID, err := gcp.DefaultProjectID(credentials) if err != nil { return nil, nil, err } db, cleanup, err := openGCPDatabase(ctx, urlOpener, projectID, flags) if err != nil { return nil, nil, err } bucket, cleanup2, err := gcpBucket(ctx, flags, httpClient) if err != nil { cleanup() return nil, nil, err } runtimeConfigManagerClient, cleanup3, err := gcpruntimeconfig.Dial(ctx, tokenSource) if err != nil { cleanup2() cleanup() return nil, nil, err } variable, cleanup4, err := gcpMOTDVar(ctx, runtimeConfigManagerClient, projectID, flags) if err != nil { cleanup3() cleanup2() cleanup() return nil, nil, err } mainApplication := newApplication(db, bucket, variable) router := newRouter(mainApplication) stackdriverLogger := sdserver.NewRequestLogger() v, cleanup5 := appHealthChecks(db) monitoredresourceInterface := monitoredresource.Autodetect() exporter, cleanup6, err := sdserver.NewExporter(projectID, tokenSource, monitoredresourceInterface) if err != nil { cleanup5() cleanup4() cleanup3() cleanup2() cleanup() return nil, nil, err } sampler := trace.AlwaysSample() defaultDriver := _wireDefaultDriverValue options := &server.Options{ RequestLogger: stackdriverLogger, HealthChecks: v, TraceExporter: exporter, DefaultSamplingPolicy: sampler, Driver: defaultDriver, } serverServer := server.New(router, options) return serverServer, func() { cleanup6() cleanup5() cleanup4() cleanup3() cleanup2() cleanup() }, nil } // Injectors from inject_local.go: func setupLocal(ctx context.Context, flags *cliFlags) (*server.Server, func(), error) { db, err := dialLocalSQL(flags) if err != nil { return nil, nil, err } bucket, err := localBucket(flags) if err != nil { return nil, nil, err } variable, cleanup, err := localRuntimeVar(flags) if err != nil { return nil, nil, err } mainApplication := newApplication(db, bucket, variable) router := newRouter(mainApplication) logger := _wireRequestlogLoggerValue v, cleanup2 := appHealthChecks(db) exporter := _wireTraceExporterValue sampler := trace.AlwaysSample() defaultDriver := _wireDefaultDriverValue options := &server.Options{ RequestLogger: logger, HealthChecks: v, TraceExporter: exporter, DefaultSamplingPolicy: sampler, Driver: defaultDriver, } serverServer := server.New(router, options) return serverServer, func() { cleanup2() cleanup() }, nil } var ( _wireRequestlogLoggerValue = requestlog.Logger(nil) _wireTraceExporterValue = trace.Exporter(nil) ) // inject_aws.go: // awsBucket is a Wire provider function that returns the S3 bucket based on the // command-line flags. func awsBucket(ctx context.Context, cp client.ConfigProvider, flags *cliFlags) (*blob.Bucket, func(), error) { b, err := s3blob.OpenBucket(ctx, cp, flags.bucket, nil) if err != nil { return nil, nil, err } return b, func() { b.Close() }, nil } // openAWSDatabase is a Wire provider function that connects to an AWS RDS // MySQL database based on the command-line flags. func openAWSDatabase(ctx context.Context, opener *awsmysql.URLOpener, flags *cliFlags) (*sql.DB, func(), error) { db, err := opener.OpenMySQLURL(ctx, &url.URL{ Scheme: "awsmysql", User: url.UserPassword(flags.dbUser, flags.dbPassword), Host: flags.dbHost, Path: "/" + flags.dbName, }) if err != nil { return nil, nil, err } return db, func() { db.Close() }, nil } // awsMOTDVar is a Wire provider function that returns the Message of the Day // variable from SSM Parameter Store. func awsMOTDVar(ctx context.Context, sess client.ConfigProvider, flags *cliFlags) (*runtimevar.Variable, error) { return awsparamstore.OpenVariable(sess, flags.motdVar, runtimevar.StringDecoder, &awsparamstore.Options{ WaitDuration: flags.motdVarWaitTime, }) } // inject_azure.go: // azureBucket is a Wire provider function that returns the Azure bucket based // on the command-line flags. func azureBucket(ctx context.Context, p pipeline.Pipeline, accountName azureblob.AccountName, flags *cliFlags) (*blob.Bucket, func(), error) { b, err := azureblob.OpenBucket(ctx, p, accountName, flags.bucket, nil) if err != nil { return nil, nil, err } return b, func() { b.Close() }, nil } // azureMOTDVar is a Wire provider function that returns the Message of the Day // variable read from a blob stored in Azure. func azureMOTDVar(ctx context.Context, b *blob.Bucket, flags *cliFlags) (*runtimevar.Variable, error) { return blobvar.OpenVariable(b, flags.motdVar, runtimevar.StringDecoder, &blobvar.Options{ WaitDuration: flags.motdVarWaitTime, }) } // inject_gcp.go: // gcpBucket is a Wire provider function that returns the GCS bucket based on // the command-line flags. func gcpBucket(ctx context.Context, flags *cliFlags, client2 *gcp.HTTPClient) (*blob.Bucket, func(), error) { b, err := gcsblob.OpenBucket(ctx, client2, flags.bucket, nil) if err != nil { return nil, nil, err } return b, func() { b.Close() }, nil } // openGCPDatabase is a Wire provider function that connects to a GCP Cloud SQL // MySQL database based on the command-line flags. func openGCPDatabase(ctx context.Context, opener *gcpmysql.URLOpener, id gcp.ProjectID, flags *cliFlags) (*sql.DB, func(), error) { db, err := opener.OpenMySQLURL(ctx, &url.URL{ Scheme: "gcpmysql", User: url.UserPassword(flags.dbUser, flags.dbPassword), Host: string(id), Path: fmt.Sprintf("/%s/%s/%s", flags.cloudSQLRegion, flags.dbHost, flags.dbName), }) if err != nil { return nil, nil, err } return db, func() { db.Close() }, nil } // gcpMOTDVar is a Wire provider function that returns the Message of the Day // variable from Runtime Configurator. func gcpMOTDVar(ctx context.Context, client2 runtimeconfig.RuntimeConfigManagerClient, project gcp.ProjectID, flags *cliFlags) (*runtimevar.Variable, func(), error) { variableKey := gcpruntimeconfig.VariableKey(project, flags.runtimeConfigName, flags.motdVar) v, err := gcpruntimeconfig.OpenVariable(client2, variableKey, runtimevar.StringDecoder, &gcpruntimeconfig.Options{ WaitDuration: flags.motdVarWaitTime, }) if err != nil { return nil, nil, err } return v, func() { v.Close() }, nil } // inject_local.go: // localBucket is a Wire provider function that returns a directory-based bucket // based on the command-line flags. func localBucket(flags *cliFlags) (*blob.Bucket, error) { return fileblob.OpenBucket(flags.bucket, nil) } // dialLocalSQL is a Wire provider function that connects to a MySQL database // (usually on localhost). func dialLocalSQL(flags *cliFlags) (*sql.DB, error) { cfg := &mysql.Config{ Net: "tcp", Addr: flags.dbHost, DBName: flags.dbName, User: flags.dbUser, Passwd: flags.dbPassword, AllowNativePasswords: true, } return sql.Open("mysql", cfg.FormatDSN()) } // localRuntimeVar is a Wire provider function that returns the Message of the // Day variable based on a local file. func localRuntimeVar(flags *cliFlags) (*runtimevar.Variable, func(), error) { v, err := filevar.OpenVariable(flags.motdVar, runtimevar.StringDecoder, &filevar.Options{ WaitDuration: flags.motdVarWaitTime, }) if err != nil { return nil, nil, err } return v, func() { v.Close() }, nil } ���������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016070�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/common.go�������������������������������������������������������������0000664�0000000�0000000�00000002645�13670045075�0017716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "time" ) // Order represents an order for a single image operation. type Order struct { ID string // unique ID, randomly generated Email string // email address of customer InImage string // name of input image OutImage string // name of output image; empty if there was an error CreateTime time.Time // time the order was created FinishTime time.Time // time the order was finished Note string // note to the customer from the processor, describing success or error DocstoreRevision interface{} } // OrderRequest is a request for an order. It is the contents of the messages // sent to the requests topic. type OrderRequest struct { ID string Email string InImage string CreateTime time.Time } �������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/frontend.go�����������������������������������������������������������0000664�0000000�0000000�00000016042�13670045075�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "bytes" "context" "encoding/json" "fmt" "html/template" "io" "log" "net/http" "os" "path/filepath" "strings" "time" "gocloud.dev/blob" _ "gocloud.dev/blob/fileblob" "gocloud.dev/docstore" _ "gocloud.dev/docstore/memdocstore" "gocloud.dev/pubsub" _ "gocloud.dev/pubsub/mempubsub" "gocloud.dev/server" "gocloud.dev/server/requestlog" ) // A frontend is a web server that takes image-processing orders. type frontend struct { requestTopic *pubsub.Topic bucket *blob.Bucket coll *docstore.Collection } var ( listTemplate *template.Template orderFormTemplate *template.Template ) func init() { // Work around a bug in go test where -coverpkg=./... uses the wrong // working directory (golang.org/issue/33016). dir, err := os.Getwd() if err != nil { log.Fatal(err) } if filepath.Base(dir) != "order" { // The bug puts us in a sibling directory. log.Printf("working around #33016, which put us in %s", dir) dir = filepath.Join(filepath.Dir(dir), "order") } listTemplate = template.Must(template.ParseFiles(filepath.Join(dir, "list.htmlt"))) orderFormTemplate = template.Must(template.ParseFiles(filepath.Join(dir, "order-form.htmlt"))) } // run starts the server on port and runs it indefinitely. func (f *frontend) run(ctx context.Context, port int) error { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "index.html") }) http.HandleFunc("/style.css", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "style.css") }) http.HandleFunc("/orders/", wrapHTTPError(f.listOrders)) http.HandleFunc("/orders/new", wrapHTTPError(f.orderForm)) http.HandleFunc("/createOrder", wrapHTTPError(f.createOrder)) http.HandleFunc("/show/", wrapHTTPError(f.showImage)) rl := requestlog.NewNCSALogger(os.Stdout, func(err error) { fmt.Fprintf(os.Stderr, "%v\n", err) }) s := server.New(nil, &server.Options{ RequestLogger: rl, }) return s.ListenAndServe(fmt.Sprintf(":%d", port)) } // wrapHTTPError turns handlers that return error into ordinary http.Handlers, // by calling http.Error on non-nil errors. func wrapHTTPError(f func(http.ResponseWriter, *http.Request) error) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { if err := f(w, r); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } } // orderForm serves a page that lets the user input a new order. func (*frontend) orderForm(w http.ResponseWriter, r *http.Request) error { if r.Method != "GET" { http.Error(w, "bad method for orderForm: want GET", http.StatusBadRequest) return nil } return executeTemplate(orderFormTemplate, nil, w) } // createOrder handles a submitted order form. func (f *frontend) createOrder(w http.ResponseWriter, r *http.Request) error { if r.Method != "POST" { http.Error(w, "bad method for createOrder: want POST", http.StatusBadRequest) return nil } email := r.FormValue("email") if email == "" { http.Error(w, "email missing", http.StatusBadRequest) return nil } file, _, err := r.FormFile("file") if err != nil { return err } defer file.Close() if _, err := f.doCreateOrder(r.Context(), email, file, time.Now()); err != nil { return err } fmt.Fprintln(w, "Order received. Thank you.") return nil } // doCreateOrder creates a new order. // It is passed the customer's email address, an io.Reader for reading the input // image, and the current time. // It creates an Order in the database and sends an OrderRequest over the pub/sub topic. // It returns the order ID it generates, for testing. func (f *frontend) doCreateOrder(ctx context.Context, email string, file io.Reader, now time.Time) (id string, err error) { // Assign an ID for the order here, rather than in the processor. // That allows the processor to detect duplicate pub/sub messages. id = f.newID() req := &OrderRequest{ ID: id, InImage: id + "-in", Email: email, CreateTime: now, } // Copy the uploaded input file to the bucket. w, err := f.bucket.NewWriter(ctx, req.InImage, nil) if err != nil { return "", err } _, err = io.Copy(w, file) if err != nil { _ = w.Close() // ignore error return "", err } if err := w.Close(); err != nil { return "", err } defer func() { // if we can't send the request, the image will never be processed. // Try to delete it. if err != nil { if err := f.bucket.Delete(ctx, req.InImage); err != nil { log.Printf("deleting orphan image %q: %v", req.InImage, err) } } }() // Publish the new order. bytes, err := json.Marshal(req) if err != nil { return "", err } if err := f.requestTopic.Send(ctx, &pubsub.Message{Body: bytes}); err != nil { return "", err } return id, nil } // listOrders lists all the orders in the database. func (f *frontend) listOrders(w http.ResponseWriter, r *http.Request) error { if r.Method != "GET" { http.Error(w, "bad method for listOrders: want GET", http.StatusBadRequest) return nil } ctx := r.Context() iter := f.coll.Query().Get(ctx) var orders []*Order for { var ord Order err := iter.Next(ctx, &ord) if err == io.EOF { break } if err != nil { return err } orders = append(orders, &ord) } return executeTemplate(listTemplate, orders, w) } func (f *frontend) showImage(w http.ResponseWriter, r *http.Request) error { objKey := strings.TrimPrefix(r.URL.Path, "/show/") reader, err := f.bucket.NewReader(r.Context(), objKey, nil) if err != nil { http.Error(w, fmt.Sprintf("file %q not found", objKey), http.StatusNotFound) return nil } defer reader.Close() if _, err := io.Copy(w, reader); err != nil { log.Printf("copy from %q failed: %v", objKey, err) } return nil } // newID creates a new unique ID for an incoming order. It uses the current // second, formatted in a readable way. The resulting IDs sort nicely and are // easy to read, but of course are not suitable for production because there // could be more than one request in a second and because the clock can be // reset to the past, resulting in duplicates. func (f *frontend) newID() string { return time.Now().Format("060102-150405") } // executeTemplate executes t into a buffer using data, and if that succeeds it // writes the bytes to w. func executeTemplate(t *template.Template, data interface{}, w http.ResponseWriter) error { var buf bytes.Buffer if err := t.Execute(&buf, data); err != nil { return err } if _, err := buf.WriteTo(w); err != nil { log.Printf("write failed: %v", err) } return nil } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/frontend_test.go������������������������������������������������������0000664�0000000�0000000�00000007713�13670045075�0021305�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "fmt" "io" "io/ioutil" "net/http/httptest" "strings" "testing" "time" "gocloud.dev/docstore" ) func TestOrderForm(t *testing.T) { f, _, cleanup, err := setup(testConfig("OrderForm")) if err != nil { t.Fatal(err) } defer cleanup() w := httptest.NewRecorder() r := httptest.NewRequest("GET", "/orders/new", nil) if err := f.orderForm(w, r); err != nil { t.Fatal(err) } res := w.Result() if res.StatusCode != 200 { t.Fatalf("got %d, want 200", res.StatusCode) } wantb, err := ioutil.ReadFile("order-form.htmlt") if err != nil { t.Fatal(err) } gotb, err := ioutil.ReadAll(res.Body) if err != nil { t.Fatal(err) } res.Body.Close() got := string(gotb) want := string(wantb) if got != want { t.Errorf("got %q, want %q", got, want) } } func TestCreateOrder(t *testing.T) { f, _, cleanup, err := setup(testConfig("CreateOrder")) if err != nil { t.Fatal(err) } defer cleanup() ctx := context.Background() file := strings.NewReader("an image") tm := time.Date(2019, 7, 1, 0, 0, 0, 0, time.Local) id, err := f.doCreateOrder(ctx, "pat@example.com", file, tm) if err != nil { t.Fatal(err) } r, err := f.bucket.NewReader(ctx, id+"-in", nil) if err != nil { t.Fatal(err) } defer r.Close() gotb, err := ioutil.ReadAll(r) if err != nil { t.Fatal(err) } gots := string(gotb) wants := "an image" if gots != wants { t.Errorf("got %q, want %q", gots, wants) } } func TestListOrders(t *testing.T) { f, _, cleanup, err := setup(testConfig("ListOrders")) if err != nil { t.Fatal(err) } defer cleanup() ctx := context.Background() // Clear the collection. if err := clearCollection(ctx, f.coll); err != nil { t.Fatal(err) } orders := []*Order{ {ID: "a", Email: "pat@example.com", InImage: "a-in", OutImage: "a-out", CreateTime: time.Now().Add(-18 * time.Second), FinishTime: time.Now()}, {ID: "b", Email: "mel@example.com", InImage: "b-in", CreateTime: time.Now()}, } actions := f.coll.Actions() for _, ord := range orders { actions.Put(ord) } if err := actions.Do(ctx); err != nil { t.Fatal(err) } w := httptest.NewRecorder() r := httptest.NewRequest("GET", "/orders", nil) if err := f.listOrders(w, r); err != nil { t.Fatal(err) } res := w.Result() if res.StatusCode != 200 { t.Fatalf("got %d, want 200", res.StatusCode) } gotb, err := ioutil.ReadAll(res.Body) if err != nil { t.Fatal(err) } res.Body.Close() got := string(gotb) for _, ord := range orders { if !strings.Contains(got, ord.ID) { t.Errorf("got %q, should contain %q", got, ord.ID) } if !strings.Contains(got, ord.Email) { t.Errorf("got %q, should contain %q", got, ord.Email) } } url := `<a href="/show/a-out">a-out</a>` if !strings.Contains(got, url) { t.Errorf("got %q, should contain %q", got, url) } } func testConfig(name string) config { reqURL := "mem://requests-" + name return config{ requestTopicURL: reqURL, requestSubURL: reqURL, bucketURL: "", // setup will use fileblob with a temporary dir collectionURL: fmt.Sprintf("mem://orders-%s/ID", name), } } func clearCollection(ctx context.Context, coll *docstore.Collection) error { iter := coll.Query().Get(ctx, "ID") dels := coll.Actions() for { var order Order err := iter.Next(ctx, &order) if err == io.EOF { break } if err != nil { return err } dels.Delete(&order) } return dels.Do(ctx) } �����������������������������������������������������go-cloud-0.20.0/samples/order/index.html������������������������������������������������������������0000664�0000000�0000000�00000002306�13670045075�0020066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Go CDK Image Conversion Sample</title> <link href="https://fonts.googleapis.com/css?family=Roboto:400,400i,700&display=swap" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="/style.css"> </head> <body> <header id="PageHeader"> <a href="/" class="PageTitle-link"><h1 id="PageTitle">Go CDK Image Conversion Sample</h1></a> </header> <main id="PageContent"> <div class="FrontPageActions"> <button class="FrontPageActions-button" data-href="/orders/new">Convert an Image</button> <button class="FrontPageActions-button" data-href="/orders">List Conversions</button> </div> </main> <script type="text/javascript"> // If an element with the attribute "data-href" is clicked, then redirect // the browser to the value of the attribute instead of performing the // default behavior. document.addEventListener('click', function(e) { if (e.target.dataset.href) { window.location.href = e.target.dataset.href; return false; } }); </script> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/list.htmlt������������������������������������������������������������0000664�0000000�0000000�00000003555�13670045075�0020125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Orders - Go CDK Image Conversion Sample</title> <link href="https://fonts.googleapis.com/css?family=Roboto:400,400i,700&display=swap" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="/style.css"> </head> <body> <header id="PageHeader"> <a href="/" class="PageTitle-link"><h1 id="PageTitle">Go CDK Image Conversion Sample</h1></a> </header> <main id="PageContent"> <h1>Orders</h1> {{if .}} <table id="OrderList"> <thead> <tr> <th scope="col" class="OrderList-heading">ID</th> <th scope="col" class="OrderList-heading">Email</th> <th scope="col" class="OrderList-heading">In</th> <th scope="col" class="OrderList-heading">Out</th> <th scope="col" class="OrderList-heading">Created</th> <th scope="col" class="OrderList-heading">Finished</th> <th scope="col" class="OrderList-heading">Note</th> </tr> </thead> <tbody> {{- range .}} <tr> <td class="OrderList-cell">{{.ID}}</td> <td class="OrderList-cell">{{.Email}}</td> <td class="OrderList-cell">{{.InImage}}</td> <td class="OrderList-cell">{{with .OutImage}}<a href="/show/{{.}}">{{.}}</a>{{end}}</td> <td class="OrderList-cell">{{with .CreateTime}}{{.Format "2006-01-02 03:04 AM"}}{{end}}</td> <td class="OrderList-cell">{{with .FinishTime}}{{.Format "2006-01-02 03:04 AM"}}{{end}}</td> <td class="OrderList-cell">{{.Note}}</td> </tr> {{- end}} </tbody> </table> {{else}} <p>No orders.</p> {{end}} </main> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/order-form.htmlt������������������������������������������������������0000664�0000000�0000000�00000002434�13670045075�0021221�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Create Order - Go CDK Image Conversion Sample</title> <link href="https://fonts.googleapis.com/css?family=Roboto:400,400i,700&display=swap" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="/style.css"> </head> <body> <header id="PageHeader"> <a href="/" class="PageTitle-link"><h1 id="PageTitle">Go CDK Image Conversion Sample</h1></a> </header> <main id="PageContent"> <h1>Submit an Image</h1> <form id="OrderForm" action="/createOrder" method="post" enctype="multipart/form-data"> <label class="OrderForm-label" for="OrderForm-email"> Email: </label> <div class="OrderForm-widget"> <input type="email" name="email" id="OrderForm-email" class="OrderForm-input"> </div> <label class="OrderForm-label" for="OrderForm-file"> File: </label> <div class="OrderForm-widget"> <input type="file" name="file" id="OrderForm-file" class="OrderForm-input"> </div> <div class="OrderForm-actions"> <input type="submit" value="Submit" class="OrderForm-button"> </div> </form> </main> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/order.go��������������������������������������������������������������0000664�0000000�0000000�00000011257�13670045075�0017540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // This application processes orders for converting images to PNG format. It // consists of two components: a frontend, which serves web pages that people // can use to place and view orders; and a processor, which performs the // conversions. This binary can run both together in one process (the default), // or it can run either on its own. Either way, the two components: // - communicate over a topic using the gocloud.dev/pubsub API; // - write orders to a database using the gocloud.dev/docstore API; // - and save image files to cloud storage using the gocloud.dev/blob API. // // This application assumes at-least-once processing. Make sure the pubsub // implementation you provide to it has that behavior. package main import ( "context" "flag" "io/ioutil" "log" "os" "path/filepath" "gocloud.dev/blob" "gocloud.dev/docstore" "gocloud.dev/pubsub" ) var ( requestTopicURL = flag.String("request-topic", "mem://requests", "gocloud.dev/pubsub URL for request topic") requestSubURL = flag.String("request-sub", "mem://requests", "gocloud.dev/pubsub URL for request subscription") bucketURL = flag.String("bucket", "", "gocloud.dev/blob URL for image bucket") collectionURL = flag.String("collection", "mem://orders/ID", "gocloud.dev/docstore URL for order collection") port = flag.Int("port", 10538, "HTTP port for frontend") runFrontend = flag.Bool("frontend", true, "run the frontend") runProcessor = flag.Bool("processor", true, "run the image processor") ) func main() { flag.Parse() conf := config{ requestTopicURL: *requestTopicURL, requestSubURL: *requestSubURL, bucketURL: *bucketURL, collectionURL: *collectionURL, } frontend, processor, cleanup, err := setup(conf) if err != nil { log.Fatal(err) } defer cleanup() // Run the frontend, or the processor, or both. // When we want to run both, one of them has to run in a goroutine. // So it's simpler to run both in goroutines, even if we only need // to run one. errc := make(chan error, 2) if *runFrontend { go func() { errc <- frontend.run(context.Background(), *port) }() log.Printf("listening on port %d", *port) } else { errc <- nil } if *runProcessor { go func() { errc <- processor.run(context.Background()) }() log.Println("processing") } else { errc <- nil } // Each of the goroutines will send once to errc, so receive two values. for i := 0; i < 2; i++ { if err := <-errc; err != nil { log.Fatal(err) } } } // config describes the URLs for the resources used by the order application. type config struct { requestTopicURL string requestSubURL string bucketURL string collectionURL string } // setup opens all the necessary resources for the application. func setup(conf config) (_ *frontend, _ *processor, cleanup func(), err error) { addCleanup := func(f func()) { old := cleanup cleanup = func() { old(); f() } } defer func() { if err != nil { cleanup() cleanup = nil } }() ctx := context.Background() cleanup = func() {} reqTopic, err := pubsub.OpenTopic(ctx, conf.requestTopicURL) if err != nil { return nil, nil, cleanup, err } addCleanup(func() { reqTopic.Shutdown(ctx) }) reqSub, err := pubsub.OpenSubscription(ctx, conf.requestSubURL) if err != nil { return nil, nil, cleanup, err } addCleanup(func() { reqSub.Shutdown(ctx) }) burl := conf.bucketURL if burl == "" { dir, err := ioutil.TempDir("", "gocdk-order") if err != nil { return nil, nil, cleanup, err } if os.PathSeparator == '\\' { burl = "file:///" + filepath.ToSlash(dir) } else { burl = "file://" + dir } addCleanup(func() { os.Remove(dir) }) } bucket, err := blob.OpenBucket(ctx, burl) if err != nil { return nil, nil, cleanup, err } addCleanup(func() { bucket.Close() }) coll, err := docstore.OpenCollection(ctx, conf.collectionURL) if err != nil { return nil, nil, cleanup, err } addCleanup(func() { coll.Close() }) f := &frontend{ requestTopic: reqTopic, bucket: bucket, coll: coll, } p := &processor{ requestSub: reqSub, bucket: bucket, coll: coll, } return f, p, cleanup, nil } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/processor.go����������������������������������������������������������0000664�0000000�0000000�00000013341�13670045075�0020440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // A processor processes images in orders. It receives requests by // subscribing to the requests topic, and writes responses to the response // topic. // // At present, it just encodes input images into PNG format. package main import ( "context" "encoding/json" "fmt" "image" _ "image/jpeg" "image/png" "log" "math/rand" "strings" "time" "gocloud.dev/blob" _ "gocloud.dev/blob/fileblob" "gocloud.dev/docstore" _ "gocloud.dev/docstore/memdocstore" "gocloud.dev/gcerrors" "gocloud.dev/pubsub" _ "gocloud.dev/pubsub/mempubsub" ) // A processor holds the state for processing images. type processor struct { requestSub *pubsub.Subscription bucket *blob.Bucket coll *docstore.Collection } // run handles requests until the context is done or there is a fatal error. func (p *processor) run(ctx context.Context) error { for { if err := p.handleRequest(ctx); err != nil { return err } } return nil } // handleRequest handles one image-processing request. // A non-nil error from handleRequest will end request processing. func (p *processor) handleRequest(ctx context.Context) error { msg, err := p.requestSub.Receive(ctx) if err != nil { // If we can't receive messages, we should stop processing. return err } var req OrderRequest if err := json.Unmarshal(msg.Body, &req); err != nil { // We can't unmarshal the message body. That could be due to a bug or // change in the frontend, or maybe some other program is sending // malformed messages. // Ack the message, because if we can't unmarshal it then no one else can either. msg.Ack() // Don't terminate processing; maybe this is just one bad message. log.Printf("unmarshaling request: %v", err) return nil } log.Printf("received %+v", req) order, err := createOrFindOrder(ctx, p.coll, &req) if err != nil { // There was a problem with the database, perhaps due to the network. // Nack the message; perhaps another processor can succeed. if msg.Nackable() { msg.Nack() } // Assume the database error is permanent: terminate processing. return err } if order == nil { log.Printf("duplicate finished order %v", req.ID) // We've already processed this order, so ack the message. msg.Ack() return nil } // At this point, order is an unfinished order in the database. // Process it. err = p.processOrder(ctx, order) // Any processing errors are saved as notes in the order. if err != nil { order.Note = fmt.Sprintf("processing failed: %v", err) order.OutImage = "" } // Save the finished order to the database. err = p.coll.Update(ctx, order, docstore.Mods{ "OutImage": order.OutImage, "Note": order.Note, "FinishTime": time.Now(), }) if err != nil { // We couldn't save the order to the database. // Nack the message; perhaps another processor can succeed. if msg.Nackable() { msg.Nack() } // Assume the database error is permanent: terminate processing. return err } // We've successfully processed the image. msg.Ack() return nil } // createOrFindOrder either creates a new order from req (the usual case), or returns an // existing unfinished order. It returns a nil *Order if the order exists and is // finished, that is, this request message is a duplicate. // createOrFindOrder returns a non-nil error only for database problems. func createOrFindOrder(ctx context.Context, coll *docstore.Collection, req *OrderRequest) (*Order, error) { // See if there is already a document for this order. order := &Order{ID: req.ID} err := coll.Get(ctx, order) if err != nil { if gcerrors.Code(err) != gcerrors.NotFound { return nil, err } // Normal case: the order wasn't found, because it hasn't been created // yet. Create it. order = &Order{ ID: req.ID, Email: req.Email, InImage: req.InImage, CreateTime: req.CreateTime, } if err := coll.Create(ctx, order); err != nil { return nil, err } return order, nil } if order.FinishTime.IsZero() { // The order exists, but was not finished. Either it was abandoned by the processor that // was working on it (probably because the processor died), or it is in progress. Assume // that it was abandoned, and process it. return order, nil } // The order exists and was finished. This is most likely the result of a pubsub redelivery. // We simply ignore it. return nil, nil } // processOrder processes the order request. func (p *processor) processOrder(ctx context.Context, order *Order) error { // Read the input image from the bucket. r, err := p.bucket.NewReader(ctx, order.InImage, nil) if err != nil { return err } defer r.Close() img, format, err := image.Decode(r) if err != nil { return err } // Process and write the output image. order.OutImage = fmt.Sprintf("%s-out.png", strings.TrimSuffix(order.InImage, "-in")) w, err := p.bucket.NewWriter(ctx, order.OutImage, nil) if err != nil { return err } if err := png.Encode(w, img); err != nil { w.Close() return err } if err := w.Close(); err != nil { return err } // Pretend that the conversion takes some time. time.Sleep(time.Duration(rand.Intn(5)+2) * time.Second) order.Note = fmt.Sprintf("converted from %s to png", format) return nil } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/processor_test.go�����������������������������������������������������0000664�0000000�0000000�00000005474�13670045075�0021507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "encoding/json" "io" "os" "path/filepath" "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/blob" "gocloud.dev/pubsub" _ "gocloud.dev/pubsub/mempubsub" ) func TestHandleRequest(t *testing.T) { f, p, cleanup, err := setup(testConfig("ProcessorRun")) if err != nil { t.Fatal(err) } defer cleanup() ctx := context.Background() req := &OrderRequest{ID: "x"} bytes, err := json.Marshal(req) if err != nil { t.Fatal(err) } if err := f.requestTopic.Send(ctx, &pubsub.Message{Body: bytes}); err != nil { t.Fatal(err) } if err := p.handleRequest(ctx); err != nil { t.Fatal(err) } // Just verify that there is an order "x" in the collection. order := &Order{ID: "x"} if err := p.coll.Get(ctx, order); err != nil { t.Fatal(err) } } func TestProcessOrder(t *testing.T) { _, p, cleanup, err := setup(testConfig("ProcessOrder")) if err != nil { t.Fatal(err) } defer cleanup() ctx := context.Background() for _, test := range []struct { filename string want *Order wantErr bool }{ { "cat1", &Order{ ID: "cat1", Email: "joe@example.com", InImage: "cat1", OutImage: "cat1-out.png", Note: "converted from jpeg to png", }, false, }, { "bad-image", nil, true, }, } { if err := copyFileToBucket("testdata/"+test.filename, p.bucket); err != nil { t.Fatal(err) } got := &Order{ ID: test.filename, Email: "joe@example.com", InImage: test.filename, } err := p.processOrder(ctx, got) if err == nil && test.wantErr { t.Errorf("%s: got nil, want error", test.filename) } else if err != nil && !test.wantErr { t.Errorf("%s: got error %v, want nil", test.filename, err) } else if err == nil && !cmp.Equal(got, test.want) { t.Errorf("%s:\ngot %+v\nwant %+v", test.filename, got, test.want) } } } func copyFileToBucket(filename string, bucket *blob.Bucket) (err error) { f, err := os.Open(filename) if err != nil { return err } defer f.Close() w, err := bucket.NewWriter(context.Background(), filepath.Base(filename), nil) if err != nil { return err } defer func() { err2 := w.Close() if err == nil { err = err2 } }() _, err = io.Copy(w, f) return err } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/style.css�������������������������������������������������������������0000664�0000000�0000000�00000004243�13670045075�0017745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright 2019 The Go Cloud Development Kit Authors Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ html { font: 20px/1.2 'Roboto', sans-serif; margin: 0; padding: 0; } body { background: #555759; color: #000; margin: 0; padding: 0; } #PageHeader { background: #00add8; margin: 0; padding: 0; } @media (max-width: 1024px) { /* Don't use a backdrop effect on smaller screen. */ body { background: white; } } #PageHeader { padding: 1rem; } #PageTitle { color: white; font-size: 2.5rem; margin: 0 2rem; padding: 0; } .PageTitle-link { text-decoration: none; } #PageContent { background: white; border-radius: 3px; box-sizing: border-box; margin: 1rem auto; min-height: 10rem; max-width: 50rem; padding: 0.5rem 2rem 1rem; } @media (max-width: 1024px) { /* Don't use a backdrop effect on smaller screen. */ #PageContent { background: none; border-radius: 0; margin: 0 auto 1rem; } } .FrontPageActions { margin-top: 2rem; text-align: center; vertical-align: middle; } .FrontPageActions-button { font: 1.5rem 'Roboto', sans-serif; padding: 0.3rem; width: 15rem; } input { font: 20px/1.2 'Roboto', sans-serif; } #OrderForm { width: 50%; } .OrderForm-label { display: block; font-weight: bold; margin: 0 0 0.2rem; } .OrderForm-widget { margin: 0 0 0.5rem; width: 100%; } .OrderForm-input { margin: 0; width: 100%; } .OrderForm-actions { margin: 1rem 0; text-align: right; } .OrderForm-button { padding: 0.25rem 1rem; } #OrderList { border-collapse: collapse; } .OrderList-heading { padding: 0.25rem 0.5rem; } .OrderList-cell { border-bottom: 1px solid black; border-top: 1px solid black; padding: 0.25rem 0.5rem; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/testdata/�������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017701�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/testdata/bad-image����������������������������������������������������0000664�0000000�0000000�00000000026�13670045075�0021430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is not an image. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/order/testdata/cat1���������������������������������������������������������0000664�0000000�0000000�00000460761�13670045075�0020472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��H�H���@File source: https://commons.wikimedia.org/wiki/File:Cat03.jpg�C�   %# , #&')*)-0-(0%()(�C   (((((((((((((((((((((((((((((((((((((((((((((((((((�"���������������E�� �!1AQ"aq2#BRb3$Cr4S5Tst��������������1����!1AQ"a2q#BRr� ��?�\g% L3 Ʒbf0##4 0V@+¥wSK?D*P;\Za˗W>i\*)¨8U&JĮTbzXaZ-uJ[U.H j{.dl%PրUmI�kZj-q< '* ʩ(4F%SrF Qy\uUSܪJ-AJU*.iU l/ܩjm�@TYT@I*q*-*q"kG"֫jp*i9Cs&K>|bIkK{e )IutɿQ@) 55i)utcїSRr깷hۣ-g毪͟Y;Ys/$$Y#?e6iϬtڒoRo Qki8,�OS]W1 V\؉rz-.v %kiqV;OCU^'ɵыZ:} 9잃KJOZc.\K0shC=!7V:lp?pO҂j8p9L P{"R,lEAl1}p@+RRU~0#R`,9 MsMQR~Atė+MAlbMJ]Bŕΰ=#$uGݴ{��5x79GҴD}r.fL3~x\"Gc yc * n[1!8 ocV9Y�E�U=nTqRhpʤn*U%*I6NPNu~ˆqT*c)P@pq\y꣪+.՞SGUf)Tʽ((  +AER 耯Ղu@Zp쭵HSiF)]4*:LRYQA\')#eDƤgvL0Bn7#g} HPUq O\ڡ~IP ~UL9@+.@q\ l-j UI@ZnUP^kAJ8*%U(Kjr imʤ=UPI.<(PJ[T%V8ZweT֤ -0U+V%T<r!򠐠$Ҩ9�+Qg@[U7U$r*ɒ J$ArHNz1oxP/>n䩵8$KHN3'6fDnj̓jIu I@gq~NGԁ >mVHYoMߪk~mӇ Y^E|'}L#.Á>_!.d_1<rܛxM>bI%صF;<Po,!p'8NA'a{*(ZPz},Vwh5'zG?k> 'f~ (Z~v-7]e˗%b{v('pOn?HHbӰV f=9ӄq�0C0E,`QZ]~-j+Z @sBP( \֙ W+SWS({Y~A;/':$P_/AR%uױh~%7j&uy}K-䕟&~3QWOp\3 Q)C @gu]{+n5\e ֿM �nT5~a|BFSE+?5vFNFnOO[JɼU ];{p(9X;kF +n9RxL9 bq ֠  *iTZ=.H9rVLեJ@ aJ.+[E+#A躗.LUUq耀0(%t.)?* {$+VH%=*..*LE*9B2!@#i0w#0|Zm@Rmam876RӢf61af7-a,Œ¬̵\L* U6(%TuPy Z<. &mJkV JU%G%-^* :E֢6}Y [P)'%TAQRi@Ar"HE>2ˇ4܄N\h=8uc]I©x]U9@p5‚MaqGO>\5s ;jぇ?RL{A|ǺVi1MRm@%'$5+M8˩ _=+NznTZÇmF+S'7B}a,}\`SkXNn>MM2I)$͏OK4rB 'L9 g3N'!*wYrsDo=rOOwZ})d^o7/h_+F &E)6J( Lpy> KT+Ҏ읋G٤|&:s坬t�tZNZ@LNcH|ZCS�+B8@!ߪb8[QAF5+YW)fՀW yQH h¢}kRj- p%Eک+ 8@W9Bqv[Ћ!;]mZ?#E;`uK;[tM6a<Vw'Y[ʖmh͖^hz9>D!b8^hS~Z]L,Ϳf@,klZԭ&_})K hjOI6]$8[rn˛SCqp| SWdwu-v(ufeUupGtBJ nWZ ĕW+&JRGE *USRPqPE7!)Bv W).R]k v]|G( \r Õ'We=J ST9W(dXU*u X[]~-$Tu]2L&(nQe@|Jt琖cyKR{,N]Nr+]&رYrB}e^B]8p#*$-LYPk Fp@o(,5Wd@S (]DAQjJq(\U @IT.]i(*;j HҰ*uh9r⠔RUyRB ֠H@T'*89XT')})rQBZ ^TeK.u@Յ?+!OȥR/6M(= JB!SK!P$ f:A@|9K- i'#m4C##66UWN4%SHͪ~:}]ru:$rtó`De51Nϲ͟Y>,wqizp YYw+>]U_dw'Lc ˨$J%YqDd.r[, ERbї\=6y-Z]uVGus-gitF1]J;Z:m'k1rei}6iCLA�u>'#=�b8 `Łq8bkpKjZPWh\AAmPY(  yV-HS \TOAZCQzxL'{(ݾp9 X?M4r֣Կ&~ibQ�9{UF< >MNj ${hZFN֎ &۟|{h hz^˱ h5ܮy.p:.?2\+{//@{#<W>qGd�T<|]uW^%dkEuX&CenM>&P6'7mrw(_=?Lbq|iuwgy�f Yݸ+÷ˎEQjVӞmTiW8(k\+V vB+(!�©G*$䮥c„+~ܹqr I t QwkPA(%E<(8 A@NT10kAQ,*{*a"KIBA9Qk6R1(RP.є6iHBttxKɪ~-jj(U'5\,D𕮜8Oɩ7ɯtl͟WB萗[D�ڿs_) Fn?u~f2~Tܝ|u�?ﯾTgrv~zzpVbwdF5M#5H'�»J URP)j @s'TR PT[=,]>WZG琡r +Q X*xP0w5^W(nE.Qki% ueeA'T$N\r.pL%u^I*n5D/ %ILp0v@J?QZME_RMI8J|]{Fm]YÉ6|$fsYhwجFXp֮X?puܕ >muks^3Q&_%#6)G|Y I)GI9\~9^!Fӗ>8ֹV vc>쟃Ex㎝=7me@eьSOZAchU}&\hohå�df&Ӏ{*6OOZiW(X�Ȁ `p4Z Pj<ZLh v0 HW\QJ Z 4rqH=xYv;K; `QXr宣^,wFsNyH_8EvP{K cixW>KᏏn<|\Kc�.@I{8gtބ8 9CNv0`wP<"- =�T˭ 1 =17cq&ىu݄1Jf}+<du\\N/b8mkrzvFzuZg2lSg7͢5 kHi,5keN8kK4]EœWtM|AwGG/i>y#ؔ˂r\W*R+xA42)꣕!B�(M8!KH<|U纊H# +JҰoe4Bj= *;*u)yW*!3蠢*AEV#*�AkST.EŒ\:= f=$n2͎RRo&JK8�Дڑ6VG%㐒U>BHSruaПWDۀYڍupYh+/Q?u'oƭ=N񅙨כ9ug5DO ; CQ&u6>)fs%Vㅝ|q� z4sZzm1�3'1ۇkB\ *i@P?&bP{+T aeW)Rl \\j-BAʛQkIAeM%  A}݀R9%P|@\TX&(րԒ]ZPĪ; )(?_zuP/ ErB(H ֥PhUIU.`!r~:@k0�yK5Z^Ir>\xI><ZZ]EpO )RR{JF<Gdt蔗U>}PשYzvttkOSejuu̻95:.\| Fgͫ� 'J_'= ܨ1ԓuIWeKtFi*vKUn8?=&$_ϋM4d KOI6+;}62a5aI-qǗ%ȔN>;SqN�TdDZ`�sr8(v 88"좮`PD$Wu`9H9@J C 򩺕g($`9qPn(=()UӐu҂sj CI%C�Yʣ@%5S1exj5ns{WA!RP$i]<w|SXGNg@9X3˺] #kg9`wOQKC|\ܙn5y0֒hnw]Ϥ}PZ ,V9AxMǧ8ʼk[ 7\"y-WCE,h7La{9U?&Io:8�;Z#&˓{p]zRhGy[\α2{,i{sL$|`4+~&ۙyE/ j�ߺ#bpn W9@psTZiz bRu 8@ՂVAV*ZL@*I@Uʊ\T  j+CM.!p\S%TAD7RAh)�tRTHE(pk‚A]+(xhk0(O>d %6MIRYiuFk#R9%>g'?jÎ.N>ں=>3Sɣ,N>;5fjuN\sHO' =u:sYÿ߄2v,-.Buf@]7$p=Nd -4Ni4Cr~VIS:}.Nkiƅo;W!7DWzT@Dg9 �W)\+YA*-si݊P&RWg9B]j[R'UJiK]hEˁ@}AiW=&҃U09Q’!r=G jʵTmT TZ4]H\rP7K5 >\tA^)Yu43 m1$]JKR]MǜfKm;.m#>) @_fju4~mӏN}`껬NQ.xpB^O͟VI>^)gJMݔ\3'$sT]SBOO9LJ̅'ЇJqehiFWtG0>SMt<yZ0ip9w'ɵr-M V-(`r-($ +Ir坬9<WkLǦ60>괍O? U #QuAC�)DkdFj+Z5\p+=Z aJ]*{(@V]y@JW.H,HWDi%G ҕP)ZpjVs4(rwO@G .L1xcE#e>퍳"O9t$H9W/3p/<rn8<nU}S]К4KNW|cULH{&Y5Պ+@PQlF\XVH teQ#8e(6z͞ĠXaw+ӿ mqL~n=I,'`3>i-1Yg1h=J#ۢ ".fn_=H;-Mz�D#?|?9Mк{"Ygc%ήʍ~繮w;}Y[LdĴlO?8$�+HSwP,$}=76G 5kf}u/_bбwp3YUR!U!jUJ]LUOOp]v* c֤.RUN,HqE@A+A\|*EKP4#J$eXaUHPJFT8 P^TQA ^rIT%qvPzcnxJ K>^I8I<c-{%,pRWuJNFNmO$Iͩ�ΟW]XpUO /QyRo9VF\(zYܝm-N7V>]WDXYwcײk.~;~qW�"\\|s[n?WG)4)6z* "9=yꟃFqcUZL^W7ʵt;_ F iix+YϞd.==z >_ԃI~tw�s6\^=#sd:@�tPQū=Y8"ɵ!Ҵp; &4X!Xp*ԪPIP~irʏ'HHRA" +�ʅz?U"6+)8qU9 %HGpTRrWY^BU' %TBeB;sI&?]v4Rm#'!iyJ8m'Q~>'64%Ԁ ?gϫu>IFc[tZZX/빣ӺkqY&㺛]xp4u㚳VnVOQIK$#'c59d$dF@I|%yCh$ }QY ME2/!B .+GO$i�Z`>E6F{tZPi+'Zn0cYJ 'Z_d:AŏR6R=01:}{tElA0U4@vTb09D+D�*ah!U(JIPE@O0˗ к%-RF+( YuuBy[ AnRET{/4qSnwt`Hu<5ɟPy9wt8x63v4NR� ҺI%^4c,q\wgϗTVG=ޒIX_8:75V<y]Fat$or Qr~\R�т?Dc,)4/#Mh>Nדţ_GZY-6fpi%TK#]$c9mG%ݮ8&Q($~O�sSC\vz"aqJe`DOu L;z~Q_;Xvv=;|{ȸ_eć0=zQ.>vOj# œ7sJi_Ҽkcs ryF sp_e-�7~6[q|ߥR=u]N%p0pT$YSAP9VR |+ @a]FPT FRhKD! -wpŮjXp U**ET.Q'!8 eUt|]䏪N8>Q\߲VYҲ0?IK oN8?N]AG'.ߧu6?Ä́^3SG#vXjj@�s핑 ,ɺqYZi?iEOC}5:#ej5t\/- v/y%GIȴ׍$$E8piI#hC4-b~]l>gZ]evhEk7O�IhC?ez5ؠrl:<pkhCZ0i8:^ C:(v{'#{ыLL6C{4^L 5矪cӲV<L!p�Uk7�.A$qU%6QZi$#. SpET ܸ RpԆ!Tdw RwujcRjH"U ʚS=+JQu.I� -ArT1q'ULuJ'%ZKK-s%a+.@}TчuܥeFmHO%.<ۣ#@$_nY_Np൫>w+/U|,NCۺp۳kY,ٵ.<~WJNGgr8W}P 5qiܩ2X71AuΛI ӃIuW9ltS v?eW1y"^DE_{hi�uO7\˖vKoҊNADZp�Z3AN;&"db¢G #֑Xѻ@0.J]IK^ n)<)iX(*[_@dH "Nh(j9w ٪!PUU@UO nToetPT)4:.‡$zEJM ZU}7QtQrdլP#4rV>@'͹ӧj%wDz qeP6 ^4/\X^\)ǎ7G6a|q?R�4� _2};OGz<c3yyVT.<?-] X_I <jd L0=E7,�U-cu6!_ Q0 Tg]&g-wuKM $=(c=@˖]H R\O�'ƙXk멲ӱ%yTi|w)d.۩��u+�gccQ$CT~尹�Tv28߄@JA?yʣ'$UR~;h$'q' fCI;$߯xP G˜I,1&U|~|K/ X˱_9XuW{!%@^v:rK~T &YRЭJ@@wE6i(.UTsɵs] )\TkZ!GCLpUs(RP1ZVINB]N0XqpTڞ}\;|F]UZF]XY3*fju~\mys,}G}N\NGgr?#WWsk'$f9z Eɶ ,J$q8t䁋S9~\+蚋Of?%hŤ=AZ} |Y}'häh0='촴\ZL^w''KwQ}6c>_EOk0set�n�hCNC*2P鍎4qe9DQ _J0ظx(-QC(+"Av"Z4mJ rUwEUrJ.\_.ҐpzԸmXP8(Rr 4JmrpV+4ԬB4RSQW~b!�9)iei>_]|SjE3R@ %Q$ԁ}RSiY‹]8j6 ϟUGk_ԉ] ›]Xq~Yϩgju$uYa<N%e5N+>mO%1<=:&n}VMe( Nq Yܭe&!'zwFSp;ToWK$�@Zm<NitGqc&7Z誽!iC z5}c;IC:n19=hLF=0j(�d#;#@G 8-#vu;{  ڀjB ?EE7ߕܦJͻ*i˂. 2;.I'N\o50T\EeWPF-r$*i\T> }E\q}䪰}9iC9RhMYj4 =ETњ5~=+,uRg%fM.HN%h焸`{v.Uь3S&qԯG7Gpsy/ C^K;W LJrɗe$qXF/:@A֦c#6P^h"*2>>mP٧kKw}DuR cw n4ve��uW\?S~)1<ִO߲Qd#�8Nnh=KHC~=EKFd1/"D݆Ad}N#ܫ2!©膧_#lfS.v؍v^6lm:&I'H�jyN؃GxnߙeX0>qG}%9~92` ͕u4:]4f~AZ�!ݡӵ )e4Ǘ~ )e�W^ Moun݀XcvǚR_dZM}ܽe�ڔ!\*]& l*rG S Z*ICqHICrH/xIxwt9:%䛵$njgA/$ YgV]GÈ% 蒛SR)M8OKYꀱd]@�t|7'oǵ$WFroeu�w'nVNZMnYd 'R8CsO)s!\D8۹מi;`S\1]YNC3].~'lBz�t3u SM Zz}8<O^BM`qjA;-->�?҇I�-i0ӓ.KYhЇG=V:ndtZAɶELG;ce3 lc2Zڭg ᴮ쭵 E)ۄjmh.ډ]pt(P m%WrJR=6U*@-A_*E KRkUZRRրT$Re~ v]h9\JWd'"cː^T|d+,dJ[kҏ!-.{rI}A'.9|gϪ^яXu> }R:`͒Z͓Wöreuz ;Q3YiQku:�_fMpuG+>]Aq4Ot곹:8;jS#fjw# #({ {-%HŬkG>|ӏ}2\&!r�-񺶼I�tDo&_L4~ߢуEe?i0yܟ"T1KM�~SZ08{-48 Y.KHA^pi>B=3Hɸtr8he0ȺZ-f{IG0¶Ĵ[26U +.]WV]]sʉQvO_ 9Td .V*kՔJS08]YVNyQJHo!HSJG sWUV]`D4"QT衦U+Zr)6!۔K'a#&\6/eu>uz$LNpчNI�EC7_Goɠ1{[�{]h쫦3/:7^yovZc}pNJGy>s˽Yy'S᰺V3i⳻q煥s4�xĬr%ʙnmYuMk^~wuct2慬%Tm&=Df> ,mmYFs*^'$�%&ElM.>>*n}iu.@dC姵%=^?Lv=wUЪQ?;w~<4{AфqNkGOʮBFsvk tVsv贁{է3>ְ2Eکm_L?Hlla=02"2Y k>i7ԘdQQD%9[Q �x'㎣n,fyn/j57[ wl/7"u|nO<%?qs!Z *]tĩT$uAɴʏp ZJ9lx0r|g'Qۧ#rj+/.Q5gͩJm_)Շ ?IO]fj>u7'gǵQwkznejB O`ۿU񚺭}X}>\s`N$$+ph]8j}[<JIHGN]<,9~V8sfѢ8�GO=\s|Yi KMGJ E�esvGK[] ~m%~SO8䴆FzO=:A_OAZpi&:\Zp*N@=EC(IfDa&[2 l&GGk8vR#[i `E[`JԍCWsFUL#X-CB .j�Nj9U-@H ~)H8ZDJ)Ⱦ*C<ET5ߪT\runJy*Oz\8\H7:©dsQB|)y&-i+,<%}Sj(dZM1$qJSiZKQ#ZIymtN_g:9RzYD=I23OfξvVv\/3立cYF(uNRgy}{'W^N^._H1݇F5>ZQ= r̽;pK(\r4 W~PAѵ>cqS*F'H?�*w^k�0|h+b-; k/)L^c@R? I}XÓywP~GOukE)4Ƿ \p?ZCItM-w-9>YgPyoяIr .C7ޖ&Y�O8B-0w@d0 kLJ 7v-7v(1ײeQN+v8uDd~6-\6�UdhG)hRdug6vڍzU#*XQc *�ɾ~ {+dr Ը)$R T ZJ,.htSVXQEH�+T<YWV5(A.Ak#=ULZmhn6̞bbQk>z{8fjaZ'Z.LSQ#ɢ3mp*\yw{.O/< jx{ a'Ʊ+WFǫ])<Oxq~?ESy*ϲ�yraXc$촤ҍ6͚)Z٫$UZ8K-vOf&5�ţjs�O/O p.;y>:Q\% %۲R3N|S-8%wyLi`dtXf{q 9bm\-q;d;Gjx牃l%dsC+P~VߺqjukMMQ k6pzClRXX2FŢInז�/>0~vy?r\0:5{�(s,P#>h'c@}@7Ö|=$^ ְ-VG&u�j7vG/�̕4q~�be]dk4YVAHq8]=vQt2}U�v.b'B|ZImŖZ<NY#6N80)u#WgϪ�r>\XpR3!6W,ӀuׁÇ=w'gSS_eu4E~'UU'ڝ9N9,F|=>� '\U�sb9&*}8�Nj;Y=>*<ok: !5WZZ} #+SO�O^J ŴZLg/ɵ_+J �V:>=B '-f<mfA~KO8-(4쟇L,`I#-xiA b=0 D왎*8њ {@4ڡYB ++Ç @H@M+Da`WT_eqR'P< Vr耨纚`$® +jG%r Z…[\ ITq*b. u(kJ/u4QfsClx7ܤ%'ԀHM�-+]qU]JjlX3XR멦=?4qikݟg,=_zz$ݩC׹yWf?Qt 3×$tۗ4!6'W]lҵa,/+ ~?+oI>Ҽ084 ?xz9_0c/qc?⟉m1ſ A#}ziJ:poP1YNLq[8'#"l9R,./h!֞z>0*tO{lf{6m^Q2�p Ű/~=ޛs�K-9o(_/<1_DZ`+yq[}w3ә<r/)tO g in T@29:")1`Ut8&l8S}Gd#߄BWOtV(8Wc\qn8`0i^ 7*hRL!A?U4W�+rVQJԫUiBEpFaRG!U#sHH:e*4su%1\�)uAD)!phTFW./lDc{*e f)\{ TZ:*~ʟ5xts �}YJ-qK+&ԃBN:A 9kIZME�,#I?UYH YR>Fe綞K8oոQ,$%VYZc7D.8^:<ƷmvA&7$P֛_q; ]tW kWZ^Mw^z�9 r|3mspef{G$M\h7Y4k [e]8o-,85sn{]w`dNktaf#\ mE5Cx֜5Mi$A�<-G\]]+;m Q;D0�_$H2:G">m cx<؁cG]ti;و\dB>(~?QXC{ULqӞHY#{$g|Y<[uZ}#R]K#u(kpsH28,}˭+ߥL9nod>:I;;ZZC7Wkzpx_Ŵ -/�`]x]i�խ5:g8[㏖:lq"M68澫7d_?~i$lgN~$fWOɞVS^KI7l3% g\I LjԳd).Y SpT"ҵӇ 99<wYjyN,NMkKU 'SxVĀ,mWgrC~^!yu:d5NDUwY囲ai!$weY=Xs huksYm$>h-]6-}/qckiHh~Qec`I>[YhO'Z}!~=5t*tDzЏOTEbb1]&Y("MR#YF*ᩐAj% +KV*5C=pzJP (^(CE`2vk }oA $VA5HRH/j ªFU-A*,u\ERT{1Ԩ+KawでKAZI8Q\m<F+&Fm^y uyÉ&$WPg֑v�'\8pZy>/S#UB?u ,McU }&čaߪ:]Aq+<uŎϮ%Ɖ@YoI4βlu=y4ɡ 9vxksm3ŀ3/K4O]Q%<w�RϨ2=;d8Mk,wZ4�;%pw_YrzLpFv4AC- ;G ~}K;ɥDN@>ȑZy'$h9i+p,!}Ccv0:}lʰѽޢ@Kw'Lv Uy{0 U+!`'f[OiOSmW7P0XR[r%DInq8^¿VӜ~r^M?7؃K\9ls_]>Vj#!j;^Ѹ_~Wi 8uß꾊&N chKnx 2Z׶^aYǢR)+;#=KU:p@*.L+U.њl'OԻ 1Ue™SUgЩ4`z(n1vO| Rzdʿ*]=mw 12<%FRJe<9@.yA,ͤij s&B0M^/4kxKǨaw=c 18ٚCPu+O9[U-Hk+9KTP$[Vt:[W]ͬKO)]C68! rZtE}_u_䔘}Vj=ㄻ{�' M<eQ(չnn@3ج,o-Hwg9sOVˁ#m{*w1sΡ+lAz}˅_a",4sfY nšg:  YO}Tmnq>,J:Q&䜥5DDh(iWCdpBߥ$sԕXv)XkKMe nWܭ߹T?D @Ҹ=ϰ07؎'M_*!y9إR{) toJbCy'$am[!6]k?w-qi<dN7^ɩ4;N6Rj�#CN*ߡ|4Pe2pxV9|FH viu-2oyeaϦ89uu:5ς009UtX|ٍ׺SW -g|Um;9+BMNv,Q};(Ikayy+ehiayZ0ֹLpA%ě'RVyKam<noxHi@dm kJ9#%}O;d\wY[w)!ɥwt&N9j At} tRj([;Z˚Srwqp\-Ndz�;}.Ī蛾#U$<(=/:bL+Sq?"d;uYNFT wMG%Ou'EMiĐIujATo/d:K贴 -84UVnG8Dzb9~M:v[Zm�M-(4 Y9rσF0@i? \tb;<p4plP >,8Pd_DFHTFaP^u@5jSHV+B *.5aaJ e»\ U AURRA* UQirU q6Jb'zwt-U\䗎+eNg(�!<t#|J=rm+&ۣ#MܤWT?}391?&)\,ٵgw5^ +󏺛]8pZ՟W뀾>'U"mWֳͩi:X={,^Օ6J,Nj}5) uE�~`ӸVO'>8+vH^0x촠 &5| 84H-u8`4.}+KOG\r|VLVu %ä�SCjtzF'ksiNaܷ;_͝ǯHKSlꕕen$BAufMnJ0I&XEukFb@:⫐$Ɏv  y?"`877]HU`<=]1]WEn.>[ c>Iwߔ17,H6>pٸ|e?N9tiwCAVl^�SREYi%sFg9}+~Vc6E iN8d\򽗁 U=WN:CVZ=kVs�qg5`-˔mwr*ϼ;k_&kh<[Eq^˦e_\FZ�M:R]2MFYzL68+Ln9y\ѿz=n݋PyUxll?lW �o~4OѸذ$V˻UZ# r T35I/AS;B/ _RpdnY |sRϐac(Onc)܄ΧTC9ǺUIU/p XbhN5jrle.]Iu6 U8 k插TEϑ{;X6~ɥm՞OIٴŴ/ˆ& yK~יŤ,9aW#O_tR.(CS9dF�Yv?7,6hC2P= պ)={%=t3u}Kp'건!hM Ӵ?啎ST5 U5W!5,n;p,n:>#oo u-&EId;}3TvFPԷii >lg!ڲ8# ıA8%WHI-~~ M:w3#Um;h"*]vd�1Muj5%kEVO*.Y:؁ɐ%C�;%Li FxBPeӛrt_F6�* h B�['(s4Ȥi%.ͧZ[@61 hii, T!R8G@H^IC00 ~^uRCA% ko#E) s7ʼsNx}. g+;ôv^@F:S)�ƷL!Խc_H<'<+Aiq�p@u5n-qmU̪m G$b螴5M-\Ain�Ȫ6|A{r7^3e'R 8&t29/)&D;h  E]7R4#Ixg"D]0Uᖲg&mj5Iifqu8Q#>685+$ڢ\cLzpIkꌒM8Qs{?XkOs-),ïTȁՀO1{𧼕>'8»4v03ʇsHAq~/;헦` Zz}{hC!OT:JZPQ->>]iHg)4|zOit#贓L-}>m3 ء¢0@pptj"3cWhDOҰ TvP'E)\* aMIiZ#R˓ R)E \WԀrU7 E* qY] A(Nu*=~K63 Ir~J˨Iяg'蓗QCJmYJϟWZÈڠ/~)bJk>#We60:_N&>K]V_wfol|G?uwz +Q!$>20?e.͕F<3LOVV?>ۜshii,֦E]?TxőEg_ 4YZ}xVEby~Mm>HZ] !Os\0>B}-wOk!Vei> I4R?TG@-0xN+ijh�CYfתex].uC$ 6=62U ?+g!]]51+믪�bN[W{8]U n']r= Xkܫmmq=ܤ<g şQZIm 78}i\n$$64d�|'hfmG; E{'HAM8#˅Li[!R 5}+yl 웅9ޤ4�^ s\(!5Պy\i)c p9acX5h3#Hא8YϒHb 6(WYu_Hi<XWx`XA;�q.$-yr.a|]ek $#XI<#ˁ|@󰜷{-/uN~[ŎWxYt.<s^whǛ#)ʔc{oNì-; PgAzZ?} un7JCsފ�`�m=JKĥ-i8I96uSz.^óKE]p&(%pq&{^ ^ %眔95 3HvBZ2ؘ4$xv3,qtEoOhm!Ղ9TP@EIuNto쾲E#1glȚy3,*Qs)T3.򷲈Q}&km69T2mp,X0jwL^O6I|Qt=y-uM}9){j>PIh9'i.h'khA`d1+E9Zq&=NFCԹOE}w{8zUXL(iB+iED?$ Uӏ;i6 GKMa+%N207FAkI]Ds;cW$j׼@4nƒf˧i-n1}c_wF}GVvx�vMu;J l5w;܋nj$]cΣHX}#i;xQg5ذT}Q1Mg)+Z;oy"؎LEhGF�ӂb&Z,Q1CVGEX#?$}\CM-{l9#FB,6qSlI6PA:Z%P}m+= JAQ\"Ezt`<9ہpNA8ihm90y`<Qp֍qkNh+WäivE-~eKMM "SAN{^o5tY{M˫.~�춼"oH^N6EZI ].yu:{&ǎ{A>-? {XZRic+2k|�^eїz#ogPn]vpH$th{]A%z�wY#۔6`:_+irϕ/ҺBѳSz_ x^? 6kMC ~m'�zalE#$}LdrR2H' Z-&o4Al:` ؠd5f2ڑ�aR_(-j md\JڃqjWqu J%xP^+@Wr nK4҈J3<(!ݕ @Zԃ|.܀-!oV_( `=PʷMmA\NUm˸]a4%6P>g{Get$pW@]Yڝg4QV6ks[Wu겵~!:}_u'kC>#S}K6m[p\,xj5BMKqYJ{TUgm~F8*57 [KDs||<ID:~[O4Eg'/O�{-4X ҀkhOC=@ZLr̓GU' g:POä�}tl:OcNE~N=(PN�E0ȏdthDуOE4qhm_KӲ=c}gK2DK+ XA:l?*z1+Z qs;z++M,v5 @@`m'2ҮVUӏ+!y7=DFALH퍲cwʇOClM#ܦ^�@sezFU/<0ܸ,@}'JDļTv:˜O6S%]k';S3d,ho´apcA*S䔛ȍ69cakIh� DM{'" V_ܘ/5qv7AP&M<y&"i-23Yo6k<?lGS, 4=#>A憷JGS{’R^!a-y=~1HY\|}TtlxFc{1抹֙e='|VKkMc�9xWyM�fd{wMi2gUuqRO+s`ù~l,}]:[Qxe]uF9l�8<Zՙ4ҖBb q0p&/wG& jg4 � ]+>LJiv^ ߚQbu~UͥŷHvrv:$ˮk귇m"ܨՅ/k]|a{ecWʶvEYva;V˔{(um܎U5yvy60RjaV-7)O%GC;~l D�3!u;,Ffp<>R.!ؓkC\(~OAOdseSVnՒ&qiָN뭍,ypiiZ%8 'IB̭ n%L2oy[2$a ұ=9obK42Le<fX[8+F-;H`i2pCX=A{+<~1# IHy8n' ڍ hu�NB6mi9u43S ] E d1 vُ#8m,(2]0K5P.674i qM9�"K;ݥ0pcZ^,:h0B]c)BՒBRW)nmLK#a/燴rc!Bi9it3K&H[t dvZ+lF| r}Iv2.&8[q-lp|{Z\- shDD�1KmhVC$[@kZhh|pdұvBc�5glL*Wn.!E%=Csȭ``wD-mqh+B.%4(+ zM[+K*IeAg ^8[mn9Cd{C0bz7,Ƕ)'sϲ#FgG4WNU!h/ B(;LA45V321 X:0\1 SK;ێSoMdOn�粱ѴBYy1kgH.r ?f @졾sdCj6|XR+ &xwNE Aq-dfV-0&TfiAM:ؚm.:�W46hRQjj�<&ʠ)8j7!n~RbGɄHpPU]5%_(.ޒ+d4}yJ%kJ͔wYp?Ku9)yTK*워'Kdp.͐tbe#d=o6l FS)J8H6_tFȖ=jwRYW%PrF֗ܤ8O`}Q}%!m굵C豵Z++[9>>++3gUUtzvXڿ揿 UOu>4 Vw7n<xxoչGdb;Xݬ>F8�7 L.SmEЌ'|ݳtKVEui#耬;-&+CK�[m:t0+kjX<ZLyrZσF=ZчL`}r8�W&΋I֓鸡T4IB5١웎 9sQZAl6"5LCۂj"@ jWԐygޝ>u-k/_wI{;^yV<o~>zO'\6(0 p! u̺]6};rV@$ԒpO`D]ϛXk!.hV-LER:@4\Ӽ-'4qv h�QYm;hE}n _4neԀ06gKۿsE~mnPݬD >G+6YpQtˏ09*O @O~rihR;G~Yq{>|xij7 # hU68TXF3hq=)!jFSH$Ca9f/<)ԞӺ<69n+cM3-۸\k߄lD]_QZ Iuxvd{}4rS�kbmioD4Ce\1_E|3[8ns`#'&\ǎAY+ !"gK,<n7Q$O{Aq\R �嚸#Tq Azs}_ocN74ػλN<HOSߢS_⬜4eɗ_: [ Tc %7J2wj=C:q1upe0ޙ2Hk-BȜ}N,wn:w18gèA$H^1pʈ\msJ͗UO{E~wU]u]-[I z\9F[cu蟅NL<O i&l`�"uNkÉ!�EǮ<p+OJ$pp[[D9sE1mMdK>ؖ1�]TC4k-c=T9n˧HE-;Mxp5cѼ<_Yzo/hZh_{1"0ǹqs]c6"--LW:9wr-Hih4ɼIO`jGhg&bl"LF O^4k =i#i�;!:}GZMWMX q{jG#YIXK|AXm u,GḸt5Vf:@?>I卌�9i ^EҺ #Ie7uF6Èhn I8(X9ldww畝lqm4^ޱQ "J-'a o){[`$w쳲lZcn8ȆO�'50>�icH_RH <Gvrists65ͼUMxڋ$D+mZhHhuw(UC "z6ieQ8kpMiiBvy4� KJN5Stm3#wCd3px%uQ22�s}T}z_K-ddfu-_�F.sb(7EE䒟‘-TC/-WRCD0$)C(#3d*"0y#r#SmZ3 moP+g+J GO\e6X�yfKpOiwikqn@NJbM96oҷdBSSCt/#IG8;x!]tGw=4DGKZ:i9>\+7|Zր.U U]X~uchDN8 :kG蚎]Y1c Nݵc.cS\+|k+ht oma ‚d�n^(!T68DA*a`#h/u R 9_i)M+謎1,դ&$tU?{'yCSj.ZIG�nW,!']06ئUa'ZuG*fێPhKVTSo==GV_I6lJ3 C~6d? I蕧'ME%V$rz-Dp5{3[<]`a[ qDpJ@T23RT{~c7DNq䠗B\?Umϟ'AۜMY?YIchAUD|~Ku4Rhm GKkitb9~M.+_I8_E~+I>[Ki+OM8{`( I4e`u e2 aJk($(*ͫZ v�}HCR$‹FUC'R۳}A_ ;З5-zr=SD9#Zڦ~v(R9 ֱ'qx@A+ڨO49~O( \Op, J!isF^<tevĸcH9Mϲ`XOAb\Z v<Һm)ڭTP xK``�VK%=-kDIrjSS{bå�E)4^2A�desitxZ+h.mmlZHIa"~#㎑F,Wizco0C"i.Vv3oYz&j2M8h1,z;j%hKvH:2ŭ-9ޯbԹQeJj颇I;_tj|nzfIU*,:8vI$s�kvwi8i{4>p^[`fҧ?Zh}pɱm-(X{,K + ,l"8XG~G9i p%#׍øWr$ٰi5˧^7tAqhhqp[b{ecہi#/We2{x !#[# <m34~ǜ�\tґmYg]wqzO=l=zv wDin1GnwsʬcAi(-!C>rx^o[.k-sZ*5NWi촓HKFVܼsC4>R=Cen/ҢaD?4l1u:21]y4H$acY3]mp$mv4iO.^K'6Bg�?\H붜"F4m~6>GNYsdz{s?/L7qҐՉo)]Ls`ƅ߶r[:͵gKV6GTf8Sua3�sFӄ3S.$v-]92hcbЈNex>#.s\z(drX1#W1[*d3P!]ט2H%|RH^@rr渹H^g?qW!g>llaޫHUiph5GG5�Z�ZF8a[i�Q+\lV-Ksu]}>!J0n(FOnH7~7zH!BQf?K.s}łzكջye SykFY:WQen8?tgB^N>u~#LrVY^oCmMiu-V1N7[s<jFx ꅕNimG{^v4aVW8Xh` D�1i̋&hz�Es-jSqiwuEë4o ZzK@=M׺j3.1.RK0|ש48dY cI87=}leZLq󖞠�uYsdF]GjS# %0m`=OtM`-$[gd�T;*?K`sWwǻ_36UXѼt=ͨ\Vأh&Kecۼ[뎪{͒q4441ʻsy+B  wO62謍h �VJk"pGn Jn\6[NrvL5 (;C)XKuSn[9w;73l>m8&?q9vVix洗�'lh3PU�cƌUj'f4vBIY-o9O%m;7jZn+S1<G- 6{rDɕM?sy U6wZ̀0rF�8#]ݣ[YسF8pUU1GZW>꧔ (B+# ;pigoaPR+,wyґy cYϰ[{_E禈%+$-t?.'i�C~7H.OSQXXEf'3 ¹mWCc*4]AGdTF ƫ>PG_:ӡ%GDPS櫺z&@#|-bF"Z)Z8LGULM,n+o*̍W!E*&M P`V 4z~AIÂx?KZZ_xf)ry~M>t_􅥦Њ҃B1 Y>mp)l o^;HZPhi# mgE4='읆hG�Y3|&E!<8'mb_u""PHC@;\ C]JvTPZ}ʂjA}\_쨠}9P>TUPI2vX<ѡP=rkn'J* k�xg'w8 #vg2K<ђG70A�ZM}n:~7/Z7X|X.6z+\t -q\Zz[e/ S>,v@kS2HZj3iA-s}68\Q㉟`/Cj#.y'Yert?S2W�ldxUΉd6'xqKk&%qonikh4&x �mVΤ!] �yMh*H pK~ ܪc{kGMs/~kU,xR3pkMt)}D{?K@dq k~'7l#pwίjCߔxIPl!r{%%\m8 CcsxuP/k[Yrt'k(ڽ];tcU`ts;ݮA'^0ZKYhBH?3 _mm=�:3=P/yfޔ;bKy9,pVA++>KwC|R׹i[z$^(u*W.iS{椉쵴3GӸ<NA}x헭2Fh nemh%oh_ {)SZ$ 5ӆ</) uE|*^x̚'8s~;znGo+SX'!`iqK\ 5tw66G`!g$9.m%cأ۽[8t.( p=~z,;iÕڽ),"p2+u(pxt6^3i4nÓdx4Eö7Gb@?15 <w Lq0Wxf̀+ِOEmpkagIODqƟP q6Hݴ�qy/1_&pl5pJ!1y :_i �ˣ^jy[,nuOk sisvu 'I40kj]tZ jsݵkOਸ{Ǘv7BIRH'yZ~{5~s5chkt:}Fс2a=;{v8J˩ZK2{L%xnAG8!/a6, Nm@+uW[G-j_5 $a&kӐhitn6Z) tbTG!<{gVY?g {͂6w O!o(}:- aR4ah, ^)+`:/{v7d-Ӟuv󚦍<rG:ہ~ X&muDXn#^Ikx nks ӡh#P~0 {Ųc7eO97Px@B"rA䊴,1旖-![at0֨Ͻ*Lpi;n:j$ws@?w�Svts>@@wY}1Qḁݾ[:ӧ8-bx( uО +^~ۃ#z[Wvz?g:6^V<O; T1fCP {h/>,p6.xK?Ez|�ohwF]KKRagmz#L0q% )<9Jϩ S[Bur:y?h"v^�vW>VM{exN/4M2j%[ph8C08 YZ V@e+h]9ͦ0 +fSd Mi|. ~іLx9( u#�>=ø1' d>zhyOj>h�$u}Ch:5ƾ�߶w"ho�w3r #ϠɍF?C<Xs�cܽ(ېU\\UZt. lZT$�aɶ$t:ɔ>ZP$G2$߹ZEDbOt:JxAQƟH9KDU2PnikV('`sq|4Cp=+[A%24-HkP}سdTr캱0[R߅FU-"+UJ-+\.}ʝP V W @@ۃE*3[\Yob =1:1&cK/-;]ŞM>0& y!>R=0ۦ(ZWEa�>iR!eZgOlr+9&IR1'-O#vS>=5]ME8>QY '  Q;X-�upυpaT4!XF \Ochl6='F(m�ЃEZh~i1TlZJZv-0LAd ��W^~Xle=6aoWYݔQ.۞mKq]ҠEںKlp>S1F1^6l 0jQe} #RLl 3Ys_-UsA5\Kdݸ//ԘprCiљbmdci$vqrw')5MogP>#<%dվW4b9FaڶDôu3I)6ߖʏ-q2]Z-/չh4Eoyt>pxh'̙碹?_6񱕀 liϙn?8LJ4p8fȱMW֗;0d|£vŠS&ۦJZ;xH }ԕGzV ܬo0;k /14w$GDY�]_Gc^U/5<uUrZ.`’`=iW$hL2J54-ã9AcR4 trӚRӅ>dNB,-7#D`9O$GϺa.wi\Ff8<tAo5#sdhF ߪs F[M#(~.YS{_6:wY:\{IG{lUi{?tl6hœB?+Hy"7S~:> 5+xtAs p�˗,}5MyqӸiA?3SA:-GS2')?']?DɏL!Ns {pSr1ΚzIOTSk/ )]y/ArVǺ&ݱ;/JYt|H;,<wOSœU.^w6 �GȟLO�dc/YD῾-6xq@ NҼ6XhWD\ ;eVߧRݭK)O k"s ȑ dfW6<o�Q2:)G{Z\-f>7] /m5@Zz;v|׎i"B%Ycvr!0F =Qtj"e;:SqqqBK׊=:/-si{KZ{!atᗜя MfH^C5 .g#!A^P Դ\n]>-/I4-ۨRtgՏC,: 3�n*�YKok[Nei*<lc粜][?\p4k^ã}Ldzo]_|xnFW< \5^-zr�VS.BӢ}U5 s s&D$ ́I.nlLձ-ӌUzJfc ErXb66o na yCd(o+{v~ {t7xiz;+ }oj68PGu_xii-k׽9Tn`w9,.?5~^a\i!� ib1qiN과sM$8GB3x.2-I۸= [J_ikms7<u+#tns7n:.,卯.vk+wß0IȼF 76Z-5h"/۬X[�{_<e W �6c~~z}:ruuqZygnDIg1z$Fian֢C-53v $x Mt=k巁{roF*W{a�=$%iqdN^Z q]cڭ.p<-tltpgB,L<ٔ ccl{ȟ,2~_{-p%1LPhZzlOodgyd; -$˕M6F=fI#9U:%JZE۹wISCxwz/S+Ttq1B3'~sƑ86wOh;ې9Vb4y$sCK@TkGNFj6тoi+huM�rhC<IFM8?oƉb dPWF9;}H_d n腿cA};,p9^a[E{+t-4{n7]VpqI'FZCÇPpG� ͟kCAu+I=d$}-huZ,r x-KGL+\olr#hDӗ1a%uc >@( WPup�TmU� S\`EG6�,G옥} h* TŞ1U!}yc<{�!g:<u*"]{'6p# BjDl_)ep0]Wuq~i�! b V ZJ@E.ʕ7ZR:= PfWda͊NMTVSb #OI/*#ddue! l‚drm�T3Agem50XnR(ۛGsڍ�mFؤD� V S-vWkX1\FkٕũF`$eKUKpّܮ-lfj!tnc ៏|h6>F�ѺxxLNii^[n9<-uu<k?(;$Ӵm#6koH3Ǵgtׄiw᱂ȵg�7T/*mehIM;v춟qq+z4ͷ: _(T< 4{$?HRkO~M Do.T6 &o'6mNoNɢ,Ξ`NlaجJx\D;qLj'cqpni[α\;a3#}NMgy 2NK1dGk^;?w`6ɰڿ $} D[Ԟ-SDdpQ!Ж+,AcA`*X^cd}kaioch;R4uNBX _d)p{lhZ]�z74,헦x?Gp�'P-wuFdŇOKHliq%&�tc|x;ZosDƖi)ZDhl'VVM6[3x _;çLkCLWp8!tSϢH.inxEѿghn w&֘e/ɞr|�>bDq"/jLz%\Ajk+Q᳈%cef^(^#.괭-~coeq&S)֡4A+Fu,\TֹAZBfjNZ-4o+R)u;;HS;)wtg#M.|IGH͓]=֗Bk 4Z 9UYTkHVwϪ=7@Os+Zg j%{@ѽGѼ#ZFϪ2y- K陨NBfY߽~El۶F/o1~J { 5=׏*J4~La__~,]>kKAoi;i tQZXG<Qūyn}H N--%ƙcQz! E%DCu޿M}+4%,чe ] .ڠ.ŵǸUׂ&xk4rjF%vYa{COf~{c,ёm!j ~ůnXӰ÷E[KLdpk',u_p4(ЃWx꽮9ڇ5yu:GC}@W &CGܲѼ:HlZѿ8t]M376괚&+a׀o 5C/#x7Rcӈ q2:b�U|_P�.M\{^"sx,&|Χ›d?Q&H]T]z g@ni=^ScCWbW m6b7X=~os(Ϟeix3QOd=Cm)<zg`(+<bXiW5y31XG$qk[qg2f=S=~?l.˝m}_}V~.w ~'kuOX]+&?=]<ñߋtL\kqg\ݡ ȤVG :|m/_wOtL֑^.I+in·k@ lk_[˛U "})Wh[8J7<WL#j ,D'SF,5zRkX&˒S ;O wF˽ϹHJLtVá !Gb]7q]n㲷2qdѱxMO'#O-MLdt8?~;ma9N�MtU2O&y\˹%F^֊g7/4 <G$S{ h "KW2t%.t@hcU%%{"&8[�2kx ҇?=qh3?s*8 <YڱtSq-n/É Wuyq<=@Q�{]+'ad?v~?26Q\:Yuvc~ͅ�y\'Yo1;$pl�撹ϣVqH<+ IƏTKF>fs4XlfAWKDⓂBZNvKigGT#쀋 �v;z? uӜAڊMmy�X�?WsgѶ6+¶ջ%Zep3ʰjjisEZb 8ZAUW @hX #/�4ZB�Q�{TD S] RX (R+)L$.*rAuKn@^�UR}wZ @WXj7 (#W#\P6�f{+DdSREq\s_k4W뮪 A.%A)׺]n*H$QUT.)W�g2Hwp0BV�Vupu]Ճ qސÔ@\:*Tp\^�<F\|_M,8d4U蜅; m5_E\H-y9 ϻc1{^xw_up|u ծ 2ԓ &c v2H6<rk@"G#v-ozDMyuCԬ^iqVά�l,g!xEz/bɃth(̾ ȑ>=(-l'2,4Q)�9Q1 7UHyJeI( ؇eQ;511Y% '4z jeˈ}*t<fY$h΍ItVTxH )OJ\5>X׆xt,oZ#;<(y#6q|?F8FQFƏqj]2]yYej+qc-Ɂy ϷW vNV`~s寶.x!/Ra$t! -K4yWNt.5ƦD](#ĭ4{Jl61Q7)kkk Cl(tX yd_{$aϖ'G*n4mxI!Cv1 ̼mswQD}zK N<qþȁySӯ^!: m}f%kZ}845KпΗY;_(_&<]N&rCç>cv5hׅ1LWi:y .7}z`9~wH$� � qFN5 WtnXzWt{5Zyt� $t |t}M>?Q&BKCuxvYp wD#{� R*ɦ&=�E: .pa c̑�Pƍ�Bu\(Tv�C7am9U򉥛|@ltd_>xFGO7O+oQ]GzY_5YE~>fG+i;6D�=IXp̧a<j=sFkF"YVActտq_O}7 GsӺvjt[X5{-Ý.cpa]W~յf0tۅz,bB9gs@{kv{nMG N�^Ƨ:dcɨu`OM{ˏNeڂ4myy'{07R`uMӺ̖#csja{ԝ6Aw H]Cu p+4A�T-~O7 rc+gTt^-0ؿlS8yؚ^3AO {M y?%z-n�~�c<|b▘{ I=+v \�^j']Y5S qdW= aM(spA TrV;�ÚɧF:mtSJua 3hl1|oI}34UQ)ga|wP$vyZQmi>Mq` Xw�kghC]6`x0/lӃ/b08NA8?𼧌iH%iazYM>x(7~vJg8*91-W?C@:p[^Ƈ`6E_@dII m&v]\Yu^R.vMoPhuƅ\Moxf06ۈg:}'2!x1W99# x\~qn77 k_6eP:/O冣s٧ /.5k.�ey5odtp˨ 5:1>[TC O{XYJ)6=f,tvZ_FNhitAj\3m JHDmdn㮑.?ky;O $kandN>VDƶkTĢ ܱԒ]`@\ekLk#,/:d{uR5N9(�.+fH\Ip��̥FZ|8"m\3fMl,&bQ4uqE3�{+Xti01Kĵ 1r==Su7wP) % i=V48c{#D ,Î}d"Y8X5x˪lfD}4n4b/ uk͙Y (Y3p}<gv <]6^H.ӗU6yZLh Xy@%iCmd[V?|]3kx4Q.2chGo X$`;+9ťpUЊ U(=o uܡ $4&?F;]iHTcH%t*~�EjԬ+R@p\ \j PG!Z@v].Qj˭#Z6ХB\\*%iWy_U00W>ͮ .E�rz$uʩʑhѸAR]ܡde+ 'wt7)QPgDB\AWj�NU vCH7P/=J(FrT*[=,M}TؾU6G�/QׇI}/ξ+ຏ <M՞~-À?!|�R!q|//_+1EWHv"=R31o] Mt\g[zKޛ�?//8UZz8b𺰷N>I6CS=~g z eΑR'[,hօpn v YyŠ֫)2p35QX%c$t6S ]:Y)�YM~͠<M�tbZV12x| tO$G &cjHC-0�ܱ0'-ae%iǪiႝ&r<"x30ZFyDOoci67s I}C᭾7$N7wՆRVfAGPLJ4%/X~2\�,V%ի:85'sG#vkZk=�z8�r׎[C�# ?RdٴyWE鳐E8Udi<̷YN,-ƶ-dw~L6ǶKǺ9?icZQ֝n3rdrKa5].hj&&}1<|Q3<8G+Aa7[n캞3C5nh<h�t#DD2m`/_IaK,j] (bՊ!^jG3{<dSz/>7/k sE[n^ЄO>xyha4ݷ>?_BɩHHܴ2VNt^"o݂p)iu摣#vN9 p?+?4O{G.4{dh{/@<aYx-\/iD- ؓz6G"ߚ7tᔾ|xgӶoB=/?f im�7LKkS_<4i5̊2bFݣ;pouK}G4FNlLuWZ${̍ vA̼-i v6>HV=qeFqQt{ŬWd Y!ۗBY3vDD8z~տSvf)c#ᚒ8iuV2G� =NLb%m>Jټ<+Zdz]X?O@\G0?�^ MEi5`8jmPi|#_P],~|t٢v~-.=nk|d4~)+52Tp~b.kd 5hM2PsX^CqE;CڝP$ 0jtHFLxwدG@|֘�#ʩ,%{t{aq--pék:)M#-~H3 'YM];'/sv7=Dž$ZY:GږK0 c xxL<O F9Gae:G,Z5cOț^l旟U$3:GJnNu3U 5 ?qa5\g]x>ii$'YCaWO#٭X}k <$Vh^rM ,"lЛVB,]g^xdݦ3&U轶a7.yg>7܅Xvߋ?>зԺĬ(s=ᚑ,fa$g.hICKӄ @5ǧtsoxD=G4ghk,7)&,^HyqZ.Һ]9é�a�<�wӿæ -iykc뷜,?~?0ob_US 51 In�)c 3{U<W#LƛB-ŷN/-_Kˢȅ9<�dH3Lu<c3ձ":|Q⺹miAfK⮍]sg}O-sNXjOcruM>M0ZY;r^l,̰-7\.$k؅6UYγ춴YܿS 'xЎJqXk$I: "|pHYL$9q'8٦trt6G{]4asOr~ >m<D-ԫkYhd^-$0{x^c|#S⚓&vyWpu!˭ԇQ_z]#9 6�hIt/yG$ ];AHsXqNĪ Jo7<vn`}֮U{Emy D#xI{w=;s¿-T\:959ZZ}k@x8֬S`O9\G6$6{/3ez]x]>STJ񌥷끳EC. ܠPeX9 A `mQW ՀUV N'\)H \EU'7:q9PPi.BsNF3|ծ&P9]hو\9SJ/6{+<_E\w*dzИh{U!-cT]LlEW7(q յweRPR&K@ \79X= hPOT)\P�+RqQ©)Wq@w([҇?<IMwH |Ք7KC6fJQ=kP$_44Kn1Ū6^ٯ-�=M&MD^ZDW_:Xwu :=cK/$[y&8S;^KSvKĽE/Gnbۋ#ǭ6Hp}t]`p)zckv߸ SO[(3N폂J'|8ZΧSOS?ϓZFu>4//]<bXGuG"ߩh$()o4zoEFۼ)A8sڴ[^:0{9q॥[ܨ!a:,=^tc6+ᑲnʻu,@- ߸7NJߔւDW+;t,r24p"Кo~H$x-f h;^$9PqtH1,"=dS�qoxlP-φC~iH w 4 >o2 ;D "#'B=-J] _Yn|N#G]947Ū3\dAIn] ؝VI�u?)G6%#D8qa9�NC]#ޒ!h}Z(3Gw U1|^)ļ_npyVS=-{IalCf}l5|x!j c]cpeӆV]<_ 6i#ojKͣy,{EuiS>!Xi sfإf@j8 яSFgɖ?Hiàw;\;{4z׸te,ͱЬfxNC}6X�0P=2-&]~Vu^|R=L0ͨn,7h"od ^.Lā_!{/ÿcs51n-&ho.κz|.1pH)dd ]a9@mc6(Ectk�8-B:6W2xc;qh0I_-,i4O+(z1*6+O�x_6OϚ-hpLG3 ǻs忪O]W.]m0pG[$t͚Yf^KzW3Q+h_75~$1 oODZi?pߌià6e<̓ 5AGa|nH;ݭԉaHtr#k<i<%t-"-RmnEWi&t2 aqk:|%Uk4Πӂk`9n'$D`?yj6PjIGsZɱfiEz˃NSp2]pG+d-]>f3mrxuz(CII!1[܏wt馚7;8eMN <sxp]/[?qnC#هKZCMpӲ٘N�LIpo9OцR歅-E>7˩YM�ˌD#{_#7ךVwm)ٹD\pKO0oS= %킜ǭwZ0C 7{YwvP苤LX _&"vfi'O1V,7#cŶЩ]SM|ڰZ Kg>lFCXHO}3㦾-_0!4zj*llQsmfG S\Г:Y5^縂$&i)e6(ƑzO.lz'[8^stڃ][ x7ǓD3d9ƳA68 ;LZ.*?yğ2kt˨Wď!6/_*Ň[vB'q&OZA�vWN?s˓�fwa|pkj5O^dU#Q- CCzuѵ)ODeY{&<IhxC݃_FLt.7 _tO�_,xSu^u݃Â<*)w�^;@Ox0 ovӜrӿk^C]p]@׭nX Eb2]?9vz.,o::oK{(5[^ (@[�sg*/Gmd[dmgt޹xdqZ�vNJ!20ڻM# cY�=ԝ {\y@S{lKeCC~J_`|͈E1ޣpE\SQ;R@!`{"d' u^S&.�/-M3�qgl9.ed5eL2Fת %6Vz]itzwe4.b�Et> #``=1 p E]/=◳Ѵiz<yoӏh^.͟v@8l;8VA2X ).) 렀 tVՁ(  �jÄ& .�@(YA]j ҕBrFʣ*+ TWeTR<.\NN B7Y0h`_JUB[wb;TS-$eIQx\a2 Z[W<"TuTYTj9 gr.p8;=,�8V$4w\B(8䣣Ҥҩ?H!r<QC/4aVGeJJyYe\p Wš:KS)&[LV/#*7A.rxG} >;f3NTeՆ" /6j⒛}H3yO⺥7 GsKhV{R q㏅?xC&s�|},M@v M ,vP\NFl--:R%nh{:;ieO .sykcv k)\v[MWfPЯM5p~yu, [tVŒ䵟 > TQ1'*F6sf04}ePĻ l)9 ;E|v4+D$d@rI,u"{[sSMNkZkSJ%/;G7ûO_ uu~[C,O 7c^z|h v�d$kT~K-MJ_;?OK>?i0Xe2|4"K<M'. RF3=ZKMR,z^j]INz4 6~F?EMѽA$@vhq[+$k"�j&8X5I۩2r# ~_Zfz,5�PqطGvMn^p?h0uZ ndžěلi7sE!+�+=}Mt.naK4k$:nt_Rt˛8\h': Aj$$Za}S),tZ1da}{tڽ\d.t4ϣz/G:iU+AP:]#! 3O"uBd,y&^K%3Rm7o 2IdK4?OedV{XѵAk|S^'Nn=YeX wi`sC�v(jq# ,q;*k�3Ç,w,_ǫђ؞vʺ':ZU+8_bz /P7p襂I m@EWǒj=FvOJ;HBX<IvHzTXh5-sfi'Ћ~7K 2tMYỗJ+-vٵ$uӪcx׆\߳;c]#^y&~EtGCǺ1=^{>t(M4nxxsQ`ۅlsؠj> �pװMG ^cf[>)?ix.-5~.{Q׎s.~u4 ۅb ;ԱG9s${uX%Lն)氹Fv$kpWnBѪ{[1{^�wj[ 8thy�QeCH|OS5]76Sߵ]@m߲I"fi>tqJ_L^`|0<+N|;HygxMOckkИ'^_ Sjsxæf1g"_╱4tZ/0CoktP#'!щɥYh4sNo^�Yx gF||R> :f&=|%jRDr;hI_6CcQiκq:w~Ù0_$+& ZZIizyS+4sBЖQٸ &Ƣ[$[s{BSZ�#[{"O7k.V` Fp0IWDj&#^^IZv SdgX;\ *E`ݞDZWu# q<GOF c_T]"-�4fk1lޣω4HˁMIy&́S5&ߗϹIirLuq Yr RlQkCQtֽfo辯�_uZ9#-|@-w@/M,߈ckl k.,7y26?#�G֫t_=Fu4ik8\#{[Ep%+TY c`�OͮkӢz(ƺ_ `�_\kb й7};aoQ}B߄ZG#7+�|B9\øy[y_Z�&ӂ q( ryl4W$' czJSA/IM]+sYǻն]v6: o7꭪b7c}&3EMopY.;."S0:�rV|VM1<zN0:_ώ^e$zmXw kxq$he,ɫgǹИ+k#mcZx!{(/ .qĭ(^m Dm8ђNkj0Ӛ aD%=M)X?)6VI&}A'عm| R?rJ]yUO5=G]981on5]%y{/%uz2QẒ*DҺVA+Rk `m A޸�]˃w~U.T‡9BRG9PA*AT7BFA*-E$E9h ZrPʭ+eVvJFk ST]Z=Cw9\} |*r[.UyPT;R9]#UTdBkX;\Z9S!L)s`_7%s\g; P9T.69ΥBˉT#+iPx K`7P\,Ӛ)G tGpA I5ZN;GFG}+ơ%݅Z`G eW|z '"_LQ\w_78m?rӻΗS /I4X/#u02wmϤra[n'hJG]n9Ŭyup=\@Я{!{ 75Vngm(kA൧/ҫ #wbR'Y5倎Gigb\H!fGuǪa{o{- +ָ^喛Ϧ#CeikuGay";ZN;+vLO#,)4< `TT.i=#J,sI$L#r-K%Eœ8<}SvW|2m, [ʋJ7I(aGcfӒ!kꅮҍC\ŧ�"[a̻U,:8  8cdm1G1pZ)OpTΡy}֬3jΎ&Kp˹O7$]+߬rkCi~ȝ]枳I͓S8Ƈv rI}##n)^34[]+cpeX`l-ԷQKdo@Ñ#nd@g޺/3&>d5] OK Iv^H3|S<$A&Y2+y?Ј҇i$ɍ(#fuP0{IhsZHcck#l[{,d2yx= k&O5{NG^4ìˑY& 8^nB[.N#OPLqY3nXokwüJ]We ;�h}O#4(Ii5ئtn |ώCAsO,*ӛ,ei͚(w? s]؞i*udy {?E4Άě[[3*8 a p{|`MK&˙c\m}8Tx@ٞ|\w}@<,_^t>aiw?nkmxI ׵��ŬU%JGk{`.{FI'|0;K#5^쑶`u#BsΫ@5O#42#]Q[&uOR?'%;zo]Kı� Ӿ;pdi>(EiF]�DߦX l]I#A."׸fQVbj#8mv͍ݷتdgEC�iˉh8{Iwb9q`.ZSz괗}<>}<0jx*'5t0Z=Mݫ't[3.H[dXƒxӳsƨ;SΌ2Iu0Fs3JO7SuS[F8!YKfOaNV,[~TcUK>ѫo| J氀<[u!g~]S iH#՗Rxt2u8IB.i+ ]o3yڳ.4nOn=,h#кÉKNQAtdgUۚKX �uZ^Y.K<2&[9]Ri=0˝)n3]}�_O s|BG[ha3�!V8n֜[9|כ3˞lW/.Ή2I�6ײg�pkNs`/L,fIz̒=^Eof9yz2RHib- a>onRcarMF k<sɯe~sGk{ڷ h(Us.98exmpiNȏsk{-;m\Q׆y3_ :ú2�sf=�e|q9h,vUMCcw^^Cq*G ߃P}FOȷ*ׇ}:6=}jHiCSZSb'y=keo-;,ۑa⺣{KxLgO;Qs_+Bq+62y~,QB#!#."PF<(]v(ْ.mLn-mNikcCc+:"Cf+CO!!'i3 p ӂ,[Jgo�r$- [.RA}tAϊ w (tM hLrN#�!jѨ=#6Dtim42YZOv|Zeк9_< ipתYPc-WYݽD`1@hvqhG2G\.0ߔP´|=\\ �*9ej;nA.@.S wuې I}%NfwP}.܀.䪞ZrePJpJ@]r+#OWXW(RBPU6�T*IP7U\RH4T9U$P %VԸ6K+r:ҰAW V*p5RP쥳IRi o .cRq*xRpy6ҥ*uOVWܖĕV�EG8*ߪ]S=%sR )gWm CI)ꍫtG`7 -5 dLh$oqTPAfUVyN^ )"W]/M2 _O >a\/E$[x#Djcun#9it01sz lhZg'W}<Du&!ΐ8=�!TxxOhc'yeSe#w\T<{.0$M{3%\Vfs.0CN馑ηHˌ XE9BVgI|`OBJ][3i"uL;\KKwʝZysI[ g&.9$ߣȷPN&H\޴V;"gh=6ipYCJHlpL1yKE8BzNMҲl5M}PtO Fm?![s{{=N5҇x>PCåd=NV2I^ׂ`2GTz-AqGۋ_@au~$zY$(-Y$|Ǜ12LV};654_z z,iψo ں,{K+$$@TWopg/ E3ZC% 6O#?iNLgam\<롖5Ri5/8۴ qc}LeQ6IJ�qn)t9ygvݤԂZ{^!={#MHk5Rz}_鬒|=NH4?4HpmϜx)|rOۖJix:<+辄Nݒ6i{5:7G+y^*,|aak$vJH fGN,S&Mftϊhɵ4J='/{bkkfuFM�W(N| 5>c#68]G"#%R5·ZNcqm2m--pi`6OC~9auw�װ*ehè5l8HPH觓@1iODfGkk~Ԛj5%'6[yw:6Hi<e/ s.1D4`AތO,x,I�oܢk'M 5c-�ԞjҲ>Y54"Դ ʼh@ѨZcTj6+ߗЀz>cR+T@1IQ=A/kgb쑡 ~sd=6iio4b_EefL4ΗR!Ղoip#>{p"ZǷAi;繆Zwb/f`yfbP.}jҦ<#I RM$kzCZx) ~]zgC$|@ <!n`#mGinmgkR('/om(uGjZ MqϣpVi#n9H2{ Ae$F;.w CNŤ^K!7ϷUvztqC4NXVY{?t ^֖�y0֚J:0?إ'F p{}^& +$mnd Ig7;/1s:_,5�"f%R駣ӗF�HZni|)Mrh%<mY)n͎vq%T2&6-:+cUGftR6O/9ݜWǟ-�[$.{m^4o+Z!aoR_')iY #l$f�/7,X7xvQ74_EӇB~ŚUk㯢�n6t shP٧1iG p,RVXx }W k^=<4CfowZWTx!z?d/A0E% _O/L^8^G)֘o$_`Hd5,[Yg]�M :֑~j64RG7U<BVG!^e9 wZnroPIZGě?w^@trJ!.WWu5 ; vV#niku&|B[Q��ejwm𰥟#q8EOҿLllϨ-6ryꓝţ%7v<^:#I|KSzV Q=ͨ۴W%Gپ\m^{4Z bȤw* w@ =JuE/;-L, B\IIYpw>+ v, \G8M� r dm~c\q<P럕#oTIPmn@Uxh(WD# {RT thļ)ݔ#]i % ’R-qr(܅ vEN1ې]*(%\ eEUE jAAj ~DM(r PGu(mH*EP%q*6ANܮ$zSQHWCOg TSr,씒N{S-$y&HoC(/76 P<<7+=rim j#Pk{)*C9M)/oPdxÝG(.zCu)ǹV͞MbFTcc{!;p8FVԶ]~튺5"U-F)i2ָ'!o`xO{^$27{:t\ܲ651 Gl$NIh\\9I cF4Aԓnht!, kOW@|mek"8;O7`40"!ŇW4fHpIZwp*_2pzWk@.iIYk8{.,C_4xF{+J|8G0 #>k6AP@8n,G 0e05/D;yb8sNYm gŎAog| ӗ0;(! fM�3!q9p*6{??Y\0L4$nVp`$ڟ> Sۥ�{pxMe�_Lk[[\  ŸȓI(.=c~L0cK]sXs^7wV$x#Eǘ>O8 6~ȧV>He1Au5)Z?]kZ1n}Q ~7 t:tqQ,56H.x"8ۦ8fo +i'~Y&�dQ?(#ôqܭq%2' cvkOZO [6�m= SQ$r}Dmq!\fIV |ۓh<ŤX*g�iuumvLz?NiuK/cK~#z\!j٢ẗr? j dv?E]In!œ,}tb]O8wcOHxߦ+T!/ M<ΑuNBᖃ]-跙#tn͕ 7i�~VT6tk$i16 p\ c\M+3ZCGDoow8�y(`lHyv_=trtxN:'iC[bDb7s$:@@L%އGkwc&i#%`մbm ;괲NncւFjetO$I E'Wg%iagKlA zg?K"H&#E5h;FѴ&N7Lk nIhFQ)bmk&ڊ8!~/m{t{g1\v*dk|@FrݖFG+'FS k7 )+X!25nCG ~�0\%fۍNĚ@dsC:#Zcq.')^b,QCɋm?Ca2ٴ, nhc!)2~GVrz8[l1hhtsFnA <X]KC"t%.YI{HS4/wIi�}=hAcØ͛e7W.pS^ٖ+tY!mUXu] z4r\m#V~{OCv@gp[qYzM+Ϋ_^OА�;A}7~zy?2 <*W~7-_䶃h/߈<9#n_ifγ\Nxr\j^Q͸rި]Sqŭ7q_G%0+hQ8_4ZPwgy>=ۿigo7aU$ixC6t^.`iOH{9~5�&?Ey�O]*X93BөŽĵ+8rs_Xŵpq3z0& 7no7k!ZNJx\|+癿 4ѱn}CF p>}f)f -h^>;,rryu�-j<cy/>: lTM۾Gxn{c.kfyDF֍<eͻZp\I9 hfn>X"AJI߸^sM蔚GHҹe˻]}E\E`#^4�u�Xt/riWi/+CoYTt iPu0 m3v91[vx+GO$mGӲ w\WkmYX6G-۞uS>L6f !3nqw�Vp sꩢ֗O7҈hMAl@El=yZ�^_СXlx{xp&FIKM%Jd9kb}U7Aq>{‡ա XT?uW‹IZX]ꫪY&ЬKWjV:QJ. U@UM($6O¶�Sh7R�A) ja�: T.IPR/JUHVh@ц5pU$@ *�ʊ|t+͞£ʚCs.y}>ec6?t)YK,cc PWIerIwUmEy5CR6+U"h�*ds wU;YA=+ի"M"!tm0m-$Ml#+#"+#? \U0"|.k5{)Q8OBR:vZQa*R_K t+[Q#CNV&*3# udzqUnht^~x#W?'2}IYx<ZRnz,/Mg h-7Ef�D,^ \kP֜dw 6M.>ae%,19Kvtѱ9N3FD@7)!|`=ۻr s\᤾-#dtRm=Rh5{Av"nI AMpD\H}w}a%& OID7O:3(Mty Ԝ$|#6}R�;qkLE>e keRa-H}TtIkY,{ T[N}k},ЅmY!KL:g|Ǽm>ɪ8K98-slIt5:GA~ZOW+U~)W;hv�y@ieԇiiဍ.M/!.-hMRfhbcvczMlrKcY%4m y^;]F#2mH?ǵJO뿿 t/zD^x\ f&ѩ($!v$�pt#��Ndyy';J-VDPKdgt-٩V֏^Ce|C_ч*J pK$$}|zEK/t?;sj9ٮP͚Sjϸ4�&;<)k)$KR| p4L~IYZF;];%!6X4J~VG::x>�+GS?ҶX|W;g;%5blsGQD0=63\a5V  ! a' <cetGStNiz[&4Q6O sG k6OdGC,S9�m-zr/G#X2`~Is�.\ .s$ ѵL]Ii%࿐pd39I:0A֮;R G4Z�Vkf{*k]sP?庡m'd;Ok^0F$2J;.czɪ&E'}ŋ`<^#9u~mGviltsCUTlwh5Zi@tfz?󄟉 eknmG+\7@(嗫 ,14ɰ8yZZFLK=N:3{:ǎ:9<aq7=eӯx:+Y&�XOdcz,f4Ѻw seoe{¨G4DqF=ˆ ctvE\=UKI4ózẺ{â{dsFƻkeń^:b$ XvuMUU/kmЇ[ x"H,fHquz|<8eupWWNnl~X[6H͍]�^صRdz�95_�ԝ$ZtGsXE�#3YJ8Kd; p]d8?+p 3T@o<.ύ;s ^xHGU?'& D66*x׻ s_&q_Ȏ}kK'J ֙vׇ}$pGA',Y˟?lx_H|{xůi^$ +{� ;`�v&#.[ztŇ_? ?NZ +~8H,'cak~Ox"ӽHM�a8�NYu-r�OY->B)}NnniLp8Xrso=Үb-,)<gufGpP[,Ytu1;օt[x!rW8fyֶ <mcNc4v0gӸ 䅙LP`tˈn(NFѵOK:4x9.u4s2˶ޞv)mw+kLY#@o=W,q<鴯lmߍϜI$sb@*ǥcI2q)7zF7^aRKY6 d@~N<YF%mxsvvƃ<_kR3O#h R:W0]cam*ɥ-9CGt7:CRse}Z�۔ !Su+4 CoV`4jXM&FDt:=T! . ½eMvA*J A8%ƐWrg*8tJT)*TmE( T)` BX*%.r ݅w^I*FYix_D(JRusg|qWe(@q#B8* u¨[Wc*̾-pHTOb8Sha+tﲒJ ]SR/~TCO3[E"עouMwTڬpŌJ)Vo#"q1iَTFX%DJQY;IufxRS…}T{Ty-�^cW ;o x\ߺ3]V6^绢-2Vyc~A\�>VnCZmck5-Сؼməf˝spU{ewGa@d꿲 w+,iDY?$14z)}*hղAtm2ct"9XI$#2c/l|>:.C1؛`%vvj lTL߹dd`w푵`+P~H w~9J@Rn% *: ?TZǘ1j#?98f_ACe&g2{0Gt@pDW~*oVґ>Zi贙His4lq++OS` ?D% QFNdku$@@dEg:hiI,ڭűhaܕ:V22YM !EOçE -ioWm�mWǺ]Kw&tU.SƵiKx9XKkݗi6p]96ͪtMs�h=ծlFY� FI+,8_ԜFƳ/I5ՎZ(4m .>eݯ4[I' 7<VԾ�:C۵v~xMQ 6<.,5�2/�J %d4tv"X3OoOCx| /dLCO~ǁDx+Ƽ :9^Rm32BxsOs,}}L#/O d?͏hx@p_ /@Bþ+&Q;LɮZo >8om`JY;-:ɮ?M++}qcs^c4cmzn^3a@$yg4~`Ý`_W7.:tqeޞn3^<QyIii%cl$X1ѲgE}/ A8ۋ^�stߡsX{s < %%v�ނId63K+=/P])t{Cv@Ӑli;2<1�MKc:2:?ٞLFl:75noq4жvT3ۻS<m7m- Z7\So(MC"=Nŋ᧞9 <ZY3IdVtԲz$�uգ5,lQ!a쯟K+c#h#(l$OìZUmL; Z�tO?i+Ky4x.q)p>$!ÂË<<z>/i=y!i7=RF]$9op_6@IaV8cq$q^�+-e[kf?xiq~?Pk vHxˢ!VM#pOV1^KYRIx}x%gi 3U>@o?Jӏ\O?~�K5xo kGh u2{xd#MGE,.W[/�p陖 4XC~Z=1 ]yd?\�dӇ9$|UwY5:_%0DY^iMDo4_pq$2%7{;]:g1xD<7y+xbD/bك9þ/ݐD8NW|+Ugyޓsx8I6/uէT[ͦ8.<Q yT-3yk0\z_J_.YodFI|2F7ۏЦc"fN<cDs1J Lv╝oJk|b )4-k9^xgLCN�?:ڦ~<~Բ� E$7E�&оt}p=Φv@i+wG{@.)et vZ:wGn򇨚1ݟ趘Ui֔HP&HMxNG3�> k@/u &#Fyurc@ܫ먋G'K{ i&�zdi6/tav=<@"(:vsdtFveG:CСγxV5QPK ThiH(RĢ»y?�( vUó%fv.Кe]Z|I7jEF?45N�W(ۅk;.|[^zQt~ῒ2-U\ @APp]i*ROe䂄*>mTŪf.�ZU!IRk* $(~9QK${%ʇ/!eYH?�y=ɻkmQ QU-ײ!T9KJCR%Fߢ |R%C'Iy(% P\(Ze肒@k3(¸3sTOQH@z9�9DTC@!AyS8Yh;d8y[KJ<�E2;P 7RHj-}mUi ۜ|n妔FF�>-8;;֝챵sSUc6_W$m ㅑ3+/oSfZZlXY۶$M8*b$ǽ-y Nh$_yq+"VfKp;#m4uaL2<�^A' a`y"r8ɣQ,x"6>B s^+:b;7siU&xuifK{݉qZQysKQ$q#6ƞ tPI9xvֻS+SdHV~ $Bҭdyō@W�t� 9^ݶqR~fx!nVK.(/I&7upMQ9t}C՞HNJZikQ(|ҞA8H-/%{M�yN^dwZǾӞr]{uJKci.$u'_Ԇ>pw𿇷k�..Wv2qgs/;mn3Lư#zm#UcK@aqq err^x~yʂ7Ht/e�O-k5$�X"2(}7oĺ<EsAh1}_3�x�(ӆ�� L$=K\Cۀl#[aMZl�?Dn廈xF|=eҼE?(AgWhu-U9꼾\tGUp�7y7>a{N +CfwTkqӝ&68sOe^S^*b!d<es៎Z~;k%[#�jq+�NM9k[1' ^1 q3oJ+]u]W{]{p\�R>7ktm$�i##xk8&{P#??Ҍ,˧[t 8-uJtc"C/I Q/F[{-< ;ۆW#d  7Һ5Θ?8=ԪFG-a]n%Kn֙h4pkhQkFDcx�UX뜦iY+5:m0g)1ɣS>ɮ{<33u`ꋦC0,垠Ӑ:*6{5-s Lv.c\Y;L>֯N4O>N]]$ftmԶfAۺ)F7msHh]_P|:`|z)}܅r ָy˟oHf\2^$I絍ܓbYSiآ8{ԉ�=M:-QolF>v:F( #>#ybF66G:660I{|{Hv_@}�)W{9v�0'#M$l Uq@C@2�]0׺ֽ[vDu9״-6n+VYM5V7=::37qY6_dnJ<27v0#Y|I{FE}%<ncy&s+ a_3kk%ƖP8-V9QɆob&afᑵcS^*xDv XZ/4-l GOI-{Ig g# JKbBL/#`0~csǎbtt9vm->I CFh#j� Dq gج|gyq,aq<;Y#[~aa�ڗvь,]40=el#6Y\\8'k.Wpq7 44%]s_&l'vk ?)qn : .p>[Xe>ȍPވApt4E�0]1 $=Tҕ6Ó*8t5nuU}:*MdWT+?@ӅSӟsż\FV+ۭyN~p<'t >8Ymkб-O3k� ($rF8e>CNma7ShQ#�)K'mzm>G?e<'P?e;s z/{qjzc>/Gy3KDhVJ3o`*VvLvF N),�i!pm#<cPx GE5FR#{ָWw+?+<�(l6G?򴟑JP<}ɵYF@im�53焛OepS-ͬoFU sqݔ@od05S�vH.Z9P Z@Ўw@9U8:CI.Hp@҂kJCBq y!ܲ-5$;*Qark1CKH{HXJH++ZcutBήn(M%;>[$QjxC2R]b:Ktr$<*F8)̅KeAxWϾJ7e;댪ͥĿ*cЦAbV'DBp.}ӰI6m6$کt7饾DA$|uDۈ+]Gv L4fKvi=V8%VI2#M#otl&taUʙ5sZ#%~=pBhZ4%fIm1<ދ3P|Û14r Zкa\i%sea;f"6K^` ,ﻮܤMn~wm*p-8i >iw^sd-%ido2!s xq'63ފk`GxyE2ىp482GWΟR(a'l,e@�j~H}ڲ0@낲҆WquuA8R3-twJxJ:PU%ҵ'TnBGUs&S{92j79^lc{qq=GP68EMf�4 -HNGu1xf+ kǃӻ- ;j]Yq'<RkwEkZkw^hi xX'#vcTiv,7|++Sɷ[-iBI.pAoӕIҬ4>gF$We�榼S;pmILKEcdՖ3~GfA;ea'v | ;5zwG(V/E$eq?\o59gM#|io+"4o& /rgFut^7e/ztɽ)x{2`k7Qfks36 i4 Nf+דRG#9S4r>x2W0;\I|Ce3ԽSԇ}5]bH7[c`X\@|m&}ǵls5{X֏ ]WL!{tP%k``c29MV{쉻#@1Grǹ>7Yο@'.F7 \<Ҁof"ڦ�w&�q�[#2t:Aꋉ<:W�7޸ל{6X) Rd8ѱX᭳gܫugejL6}r�"&{Q'trJ*I+vznSu6;[6 I.Ӷ<Y$3QCW+nib3|cX溇4EMix^Zfu1/#I89|E%okGO0s{ nt3 =N[ӎ(-9,4JI!ysTt2>(e.p8z\[4庝TiCĖ$wSX-[tMtf]ud߶1#�8{�ƙ/,cZYLol6\M'ͨ@صYx>YvZH<uw8^D!{$ꃪ)^-se-e X G7|js\\zQvc6F=-py罒b:iQZ;^MA7hh.c-!~ݭoS.(H/kw:0r  4ۙP _&߼ZKFF?0E{%XȷFq"$$HG9ŦV Aډ|Ih -<z.i ]K@�^Fshvf= .q< %X̺)ze)_6iݳHϪG �"0+͐%I/*V?kv>�A~Kf0vH=Wgre;Orle�D`j:GNR#4]C;ϐߨ#ko-cjYpQΑ# 8litΐn+)T3}�-rZo*v\ߦ^<ʫam]S Hͅbȓt'i4oE+ͺ9\ 䋮OS>�ML#q4?@>)\Ux# }+Ll$VJf C@ ,7^˜<[㒽DŽo^NoE�^(kU¤cy޽HvWU *GhmW+纻pN[�qg*Ӵeϗc(-9[KD` �uvhTR<NoUV!#WnUߢ(Z (hUQHL-xR U9. kAt&ʃK䠒My+DŽP�HƻUڗn@%\ `V݁H8\9@x!7#ϴQ6VSI)O  ͝ta.Q»];hRIV:D}** GAt8� LviЪ ]qfK6FJVgRvD "LZFHgXhOB|a%k]hѼUy'?teqf'nMDˢ6]-m<4Z0hA^8갎�[LtFhqi7(-YZ J>!XJwO Ů*4�mT+SX!Dh-/Q ZFGšF#ʾ8Ou�*&,a),8>m,qZ+X<r㄃m{@w豵OMPzɰ�uڴޯQ# DR2VZa4wbJRY?�۪4BWPZ$}Vۦes2 q+ɦq\3 lJ;#~B1'hqF(H pwTܒ~ *v`nםKU,m$ /md9xXɍ8dF^b7`;o}3<;SrZ;x^OF{o>D@u�Rh&cno t kql}Ø#ZI]ZB֍L%04fә4sw~FKmߧ,�VQ4R-{m]hS\+2a>-Wu^5Dc9eۈVf7斷>ֽ#:tJ;}M;==u0_DW\,ϫn0ϊ̶Zr u 5͔8 ..iⷸG<YͣTKe:487|/wb|k}n+eǖޢ}1{ td$]V�%8կ̒>ĮK$kn٧Р8 c\ZH"eI¾p=z?_1P(mD^VY&4<Q7h�gZ]^}וU]^+ҺW^k=txp'U̘uu\5IޫnZ6[_S IJŊXjkZOR<LGZܴl:_6xd{GPڳ,%ax �l;._u+KZgKu.5/[{�.P&dCMfk{$乶:U ԺG8�,ujn͏NlM k˶{C16^kBSey2e[]$9 `bcĒG3e,6Z[S=VzB�rOЃΟQ& tts-cf6;o :i6橴WN̎#mQ֨$ͧFٙsbv֑~]׸@fx?2F8�yv?z*k<c1LFײ&8h]DIj8;]dP8BeHIvÃ۞"fͫ~Qb-e �9 x2Xږ&'8c/ihVv3\: Yxxl푚?ઠpD/Ӻ5`ueT@u3aӖ�ouo^O >iK|c SH!X;sdnVčH<J `;xCva.kh:&up�Qwcu틩6T7�[f0YkEzUuNh4Z&j G4K6_Pw Y#9U=A N6h4u5j׸iNoO!\Aio!5zm1guS 7Yyt6"w;h#'1lĹh\GH0$ֻN͘r(D8˲M}ZQ=NibїGb)k,&=U :%</ߘmNedl�qTF~yO tʖ Xs`_ ]Z4涴'y7eqxoN$5o%īm0b?BIdn,ol˩wѹt�( bgd6Z7qB Y4ex0z6n6uH`%tv%ԍ~4r\ 9VW�*ԃL|ЎV{r˖{-ҏnN=$=� fŭtj:m!r4@6H!p{}Tڼf/uT:wJ}Vk c;Y.Ck5m^:5?z o;�~)ǖ~FG+_tJDNpƒ!~Ѹ;GxF}Y_t#çf�gS}F0K<~DcH@b(ZC/W+_YwG/gr֋:;�X-mcBػ%qgپ67hWi+m[eX5sB(BHoTr %GL�Jƫ5V@qR*T' L\p g80"MZ2Z\T®X\,uHբl@PaH(p$`rjZzw 䮽Q'YӼL TPIPw W_G<Kbgp'Tqv�tz,~Y ;bϛ8Z2z$b(R2%u'do!%*K%{{IJMr@q ^ Zvdps^6hn{}&G@-<1۟,tZqDG³"M2kԗXDJKS-ʠhUov4(%3#BdQBja] C�\ၕQ E)ZrW &Ski'v&|kSZ+hiZG7i s{|ڛM 9EbjA$ݚzm|D)l[g :w>FnNkܓ|^d%칳m&˝=$;'裺˻8uZBA% g_`yN`*FiJSZ߰Y-Q{DTܸfUo1ƬH}ɤ{%$I`j8k޸5`wjvcRLg'9>RMls"/Q=(Bl/"d4l| Ap,y7Ut"Vlr. ^9�ol4Ep͑ќD@C# so XFf>=v%-Q}\�d#)ֲF/5CC''e .g�',MƷۡŮ2B*͸5SfPԺB 'f;?Ut9`=)sHg$O8^fi1n'/c!{^p2 <v&עOhɤsDŌ/;PQcs+�<;uG j57 w2tq3WpT{ hC#�/ٙߴ0 !`O44c/�+O>O25>!:9+u!.j`ꉡ-#ܦ[zɚKm_|%�a睞_F]ךx%'zI%@gVqsgI%|﷓2YM{pdilQwZZ{Q;|c;,8DHv~=ޜsK 15ת1mw#/O :yIKv2�[@W%{ֆ7 ,/QkM:qmh|2f\_xt# }-q6ny:t}c 93<&1# I~c2G6c7 WN ѿp$̾(]| z98ܭ24᎘LmۻR-j#"b%|m-#$a./}$1ɘuL\]|_v0A�Ro>^=F>YN7 65u_EUbd3woM֯M.g>Mٷtolokt/ō:k:ILi⍏ sUQQ&U0U>!B 5[e+-c~AO'#[2Ka| </Y͗2 OXemˢAod{I XIиE4Zr nePlyD5̝BmY Á+vF=[IDOckLk EOSL鄲j|9҉ Ygy\ekZ$/�EiZ9u"i"B&o5FK_t^l <I,06Yv:~A8xEd;QLִ5`=Vyhã`,w֎rii؞-$Ht)^^ݎm9ԲksC V�9]A5:f>2tNx 8^]~XX7hC $}6r3ͧJD|KY=�58h0]6-0>?N퓲V9‰lm5i3ܮ{^{U統B+#<օ-dĞ\,qnEr;"ܓqWL<SdKeи4XaӂB<[x{.' -rUDR3v-С3<cz8#[Md^?,tAxŧ V|pE-awŶ6LCKlw:XKBVdυ;M]WMdϠxVtY UwI;Z78#�P`IɮV07k_uVGv W+JhmIY]G4PnS1itayڐD7B8,>> 3KnalĵGHg9?+K~s�hbY)CO�E:7W_ts-�'-t6t_^>R8?x3?꺦csQ޽^e95˜߆xhS<17�?�_oCMԷˊcz?܏1M.6V@򶺣,˫F2b4͸}ӰCG k"MAsO^s[יm54JH캸ck*᪬WVekSJH=JG "-BE(nme-+amQ ; ՉP+4( {(a 4SehW 2p�9TO&:5@QC$]tPh%T\FI+9Sh j¸ :*T +5X@hj$ '(I4qq^Xd y{LHㅅm gbUd}7,F)Ǻu썍,KLR+\v'mgSZ{98X79KASi_W1Gur񟅥KLqFY oMmpDXN .1ӟ*+}-A9#mKPD)+Xg*wCI0zY8�ZHfӐ+*~$!iM.eFsAt1SHG$'Z5#w)Y$ei@C�Vf'`ƅaTBx`Ad7=ǩ 9v-j1pתã/Ls\c*s<^w\q�1]e}Z ɗnnG;ll~~anL1wUbk%ObxQfcv9d{CܡE!/"ekK[WF՚p�IjyHuAIYǒh+UqLvY uXnj,큧 \sLckI89dzc"9i[>/-VN@`|Kz,HojegrӌFi`M3A-ol758{jtHz\~k uaT]v@u#ktU˶'6)[Q>B7[ v<? ^q^֐S0Sq qdE TA }qknv8>tԝ\woYm^uQ"H^0ˤѨy{֓L!)c{¯="tK5MuB;KSHlc$@%t+ϒI$hE�Q&RucxEPcVIK�{/F+k�UHחI=~fO/5^S? Z!2]�#? Qta}Ao[>֓JQ/Z¿.OۇQZ|#jsK=;nG[zt_Yf  m&';QU�kV>6IF#$-/F.FFF8kLјdYًP61W(K_t vwfha'`;(fi� v�NLe+vv٥1{dZBc1i_셴]`JN^;l탮;]nq;ߪ 煽4Ey%cqm֖Ћ{K=VY n"{wmq#dޞB^�>wPSwY%g?kh8UN$-=B!%͒j<3-ֻ]T]H.h0փbO7U+]؁yaC09Mi&diy>4:`ۻ&$G/� 7CGl툓 р$ÌBߺ[;j]F62ђmGdԲ//Rf 'ap9մuQD   4MpHea!ĺ�,qwU1'.5 <js7N1?4`BS~])4͎W5ָ,pGߪZm,2P׼pЌ9Fֆ?T4Yʅ8`~\M/ ` u}88>7w 9$籟A޼{v<<4]7 p̬pgmHA UOZ_=,:C�/v:wbdj` GS5:شK,�= jlnMI\R{a/} #&,2Li,/؃6tv+)#:g<2JYĤUՑS)gۮ7H ߌg#3`h�n!v+RW -ƼfRj%ӗ*WӃAWWYw b")7AV`t|Ytm7_"#$t'0aqs\5]s.>iv5)hÇu)ZfY 06< gCs]ȿn:*-R缂$ i7XӞ:;/jDioiZZ>/9!iqyǚ|xvyq/OW. $€"E q[i#,~%f)JFF=[nIz?#CZvx |cًhss򰴾4X1H͇]�u<'\gZI}-Nc4t+, �ket=\)(X4!Z^)>35.?ĒKq4pǸo/w}VDyg5mSx� v3J+ϩ; Q 0e�l7QIR3Jyq$2fkZz|ldc?EVהz7V}6}iogWPv9u|DPרgH?BA#W6z~(V\}<b #61m'>G8c\?1?� >ǕLp6zxب�!�V04Z&W@\kVgmkf2OK Z('I�|+K#7F=RxZ3G^5ڧw|2x㍽Qr=ikEнQ,�CCjG9]X* C]BЪBSF*qPI*H*y+*).5�|KKSyOGCjWaE0X\HU.68hP$q�{.Kti6o)A\ R\OQ@#TxQh Cj9 i$]j KJ Z( )*<.@ 5ήB@9+v8Ws&^: @erFg`Jl\agMYࡖecZÉҨkۢ#lg&i4pf\/)7yONpzUx1& S0AZ✴gOfGNhA>FÀiAiU*~qʻ7�@U+Ep-9L tbCEa\Nih m1&$x gk?V,$#8Y2IH+B^J깬|#J͔Ij$ UDb_Uq-78W'쉧q DΏ_Q#y_p$ziӒqy�deƪqs[ JY\meL;$� NneGi~-_CfA $`#eǺ˖wY-kKA%gK>Y �8[H#�z U$'5 &55�` F ^\7dIU(m8q;-[uV`KgkE3"&{K+>0y MKa`s(LJzSpj.cvV@6BD dט+<Zv QZt+=ZhpK/azHUM� xRb}N(;触u@u 7̈́C1萯. RЪm{n;+U lrblR x YIsxkݼ8Uz#6 i檩Zc}kA6GD"*dz$TwJvi{nH2sGr5̅ow4'\X2 '%HV�ɨgdJA?,6i`.{X]\ī$8w8Y?Txqk5OI#cFMdVn/'[RDݺ7Pj v䟪^Yzf8^@E^i4DWN�RHJF%D}T2[ˤvKGõP50=Ggx):iu#tX+!e&zAC@4I++W -XF7PրC${GST't69evX2q2ֹms&{\2^ֱ+'Z8G78ۻFB ;kKןBcM9pE:¨v͒;h66f-]8?>s"`0z]ya6Gpmp!kx.d YtrYi4sI i2_eoM4:h]{)3doaGM5 "-|CcM:GZCI2qkv�fUkͬd.~tȢl_5u,�a AƆ{#kez? y7&6!O6i:HҷPdoTqdsaiSh~@,8%gA#ߧc߬@7̐Qv)ݩ1:P08p'Bі"ͪk_Cb#I9z=y3K;eilS|gq> L>1$cO!m珲 FfFֺ=D0;%y'|~c[imtqF1幌$h %L4F mmpזq@S):V8$[ctAyu4y]F-Ӹh ^9y]4KBt:TEk[Y~bPKٹF:Y%3rI8c(V4�id-/@ 6*w)bxIҗ Y!Tj4ѾLgck垭@OǫK0;xvdkj+DŽN7Ǫkeו܎kԲmaD`n3eq uWYt͛L ðFH�ío{9d,Dno썣ny(n2q .M3%k`;[8X ovO&X͛Iৌ`d~[#wi,MV<XE-|uN6hU!sOC@�R&F e{$"�e qBz:A#xA O,84PkNJV& �hgm�U96;M JRL{y: ׯc p#a<g#K4c#hډs'ě\~imi:G4M�<1Xc/u]+gK#z-'f05׺ Qi^<__&sK^. yrIԏ /<<Hv1fF { S{boqMtnங[[;GZyvZXh,|P<bc}'q)ڝCcΖrWwx\Q9 51.IǗڼřhW=kOs/-m?</H۞J^W<:]DYFSxfhb?|FhGfaW:; l!G_v5@c+7Q%bxox?R H1{ ̑ۏ }rkibkq�K~q%S~ɡuDۃqTO毠B{8wtPFeue֕IH:/=)w.Ta}ơvvzU6\$j<(TǠ!Ph)-}(ժ<�jZ=F�.fw'{ =s)V . s WdiR/+&Ҕ\B.*Hl!([^CzN^ͮRgd\P k66uPSYPH�OCȱ(nmpQ{MPpBVg(>;S=XWJ)JG7v a]zr&;m#IK#b3QU{M=uZSm? einǺƴCC%%QU|+]<٣#%P䓀UسGbq', фWer5WqKGlqp$N!L;4X 'ejw9KnY+$vNA�?)t#=N#؏kO?ߢ cZ>9u-or4č;AXOq쏧~yJoQk˳KģM2^ʼ!X/ NkU=%mx�{^zm|.k>sIi-#7>FvƘzøpsZ <uxTmk{vF|IMr馛 ][q(g$v�Dvrhcmߢ)mn1?VoБH[! ݑK#stu6�IsJ\H,8$MC׶Ӻ@Mĕh8 pa {!SSjYYw<Vt7̟ۚpDP7ƋOz*4XOd}LZg0[`Zn9W62̈́yF+kX<OQYBM3\ ed-D$TW8%NdA,h㌐;�كD10 ;*Αh~}At@wO%vF8g+}{TRǹ`9ϡNJ.Iti'V$`4yG^�p=@62�KTQsF$٢?ql LԣּCCX3C!hꖿl:H c<�~:PC< G>j% \R<n! f~Rw7Ooմd1YBdqWOo�'mWZS&Jp_X,-kaIE B KHe۲$s+/ƽ�YZdkrBR2=EϷ֜ұ.� wCΒHvyJ,�B \ln�e푎ȼ8Y eDŽ7j&-H) dn}NYtsES&--s<KilCٶZ㙖[f]=zϑnB)wSLMnhf!SG{\HFAs ~m.�WJU1Y+*83kkO|hC0�246~xŚ$|,K{yzpX43=G)-w-]ˎ,ՕXɲzz+άϕiB@#ۺ{,ZFbqa.̀sD:4h[~huUuJgI8L湒47�# nϴ$z6kso:&EѶ'707p-+("k:[8ꉫX)Ѳ6ϴ%q\q} ld׷ p7 {&牟mMӾSY 10ş6{ursp8܇Y~ dMlMԷ;.sl`ͪvۓtD' &ژH$4}7B: [8ocGQ]/?x`k[a$Qݹ]T6lx4W4@*Ǐ7mFV&GX=�}- )v*GpSi  H2 Pʼs]HU߉<Bw>9z@ huE3�:c١u_ú#&JgHȥos@.%ppt-mV-tLdmF[j {kFF=O\h_~ _tZIf/LΉmC0~W?G<Sg&VxDnlsCm#^?]ChUwO ?؏O "4l2ځ?Mo!KWK%qӾ 83L[CCI{'ĒjC|Fkq򷡃CqqWrKz9`6@}Jv=\,s˿7*1?ZȶO;tt] \n/`[`9+%"w/#'j ?xD?`ԃI�u-Y_M¼ua{2zjl�W6n'M՝^n8^:3Gxtqs}}E ?e{)C]4<EY[d),G/5`$�?k'̘>%' 'ߊ|d�E 2}-(ZjZԏoe7 ߇!?�'gpT[jꖦ=mwMAQIlx 㰼{N,ü�"Etl?ҿoæ {Gg9dj3C@ԨV݄meZx[/2;K4z=úHG; r;#-%Zvy u�/<"2R@"K*\e8B*U:eW x*9|ÎuJ FƇvò v gh;lh;u!h�H4Fk:cSMt ;BlGeQ�hiE < iH<#FvGy(`-sLe5(-OE3A-F]WdqY\(99LN䣜̝ khz2M-P9DT�Z4QU}VG3 ?eu۲ִƘ.ED M쐓-;N#(&/ Bhi'{HbUuYXCV1.65HrɎU;R8Zm!).!LMs K!)9S:Xh !c@h4-j!2~%9D,B pPճ-)6lMlU^�h׺z#(p$cҜ9HJ}S(ʞZo֕Ascj.\ɑ4D{.{g5?*$zo !o.YdGQo.cĞ~/ܯ5T/ݸc.NKvߎF~YnpZ#躲8Aܬs�>V~wӢHmiI|F@hHG9ӷe ^.-+iM v1]]/K8 qLTypj9Yovߩ(OV:@5Ih?%MM^RN7%Wc_mvv8D6f?w>3?6Eg4wRB` R520#~V^UKONNg<ɞ֗~N¦6OQiE\]}%wn윧uYq-h5k#T\^HcYno]{npkm' l0e?H^9 ha <:4~Dh%<Y:2 ]0IGO9!tc^MlM}9Sn3|>An"ZQaA%d@ Ls +7qxat#":;s%2 ׹D+av}tlgT:XPa < & n%~G*7k#qѭ Qt&+abfVѵ7m:AГi[{ܻ?OdkEӹh8ޕǒ-l�?z;%R=;]]()h @;* �&P8"s f:?PiA,eJJ{.H#I0HSHo3$�yIP545ƶc6GidCdjR;dN 6]s;Nƺ1_~R]dlS2{c9Oj"s5Wn!3H!%'S\XOq={* d-s|M b?bFD^ lZ֛W *Iߥ{7鍽F;]t2)ؾuГ d n/pq}|FIs&{C SQ|lsm܎pSM!p4CHkS+9C !b�U;NC!|OSf<,Fu@I+*:*׳EHD6 ?TJ8 j<�6€ @vsUtem;S͓H$^ӵUc }C`u5 Uc^'o,|8y6_' ZO-�VI^o.K1%Ǐ'<U O:Idq<]ZR&Y�cI'_FZy6]18\qK%ns^Nes?xۣ3 a�}{KC^]&Z-pX5hC\�G#z-^͕NNȭFpcyF_A,:<z[Ò/j#k&cMyD?&S5xvCZ\k,<~g0yY잂bCO .z9;&kQE+6¥c˯̮a>ygznx'&\$}dov-yO$9ki@h)D��ZeMf붏xk5"D@KNVAGǧ�0Kiu i=8ox#dorCUa?Eyc]�L;Nen65>*]2juC;\\ S߬ cETևq%Ԍ\)֣;7St 6 zc#V'|OPG卭``RֻˋX(ӊAֶǏ?v<}BOB;[3Vn)KDo%Ӆjŭ� 뵾+jLYx϶sL?6bqO# ?HG5#g 5y> _}$,=_�Z�gs\ϦQIXd҈x7Rsi)|w�Зut'i?/G^) >:H?/U6hÇY /H.(5S^ߪz=&:� U60z[+}4 'oX~<mm7G&3Ϯ9 Aۇi �x*?h~cҽm7T˾@(ч1jӹ޸ڒpX*"qF}%h "3+O=@;}·!=-R< ]Sg;~i-]Gw#@gP!S~S!*pPwW$l_(P TڶD-RR0ʪE *#ãfo(J#$pfy Bb1H*5jCTJeLKj7MgTF$d&>s\$ٷt!r ,Uh,FP&p#ĶYJ^B:f&HLJ(Nzq�+ɮ$qq�遲X]@!Lk Ei֎V*wOExMi: ~67h]x�Ihd) euZxF`plMR,myWӺrF2@C˦V`8PsP?hۦj0UPUf^)',݈  >i۾y^Z=AK4m'uZ>osOZͻ<HYll�^g39^7Wpaz=#6" x^/h.^�Ĵ7/$xҁW?4XyJJE?+NxH4u[ϓ{ZKt"g.ڔ(?E~"YK>8i׻b0Z�cv}^[n=�&!�Eq $x~Sod~YF5L"<u{ƻ{hQ�O餍`-1wL~ޝ)^8/pkz`6m֎̆G OكJюa>Idc�8nZdK͡Q ^ d 9ǀm-lmrRqS?` vP0cGl�Ә+Np0Vya|RxX 8Mֲ7IpCM%(4?-5jf:U ’aC[^Gc)>!kz.r<<6##w3w!~fScy/?ۢ֓MM,iey")3!;9kd|6Z:`&#dlڲwiht[ZLA[%;ĉK;ro'z7M#F jiacK^0,7g$Sl �_T { �GC ٠ (cm/h) 4.~I� NS5{H4r(ZsCBNuӵ8ɻqF"9"lB I ?*lssqA04DX tdssz+`P:Gw9S6LֵK#9sI'FYc˨vA8',NV,\x߰2bLe9n c :`WBOdܛ>ivo9۞+ 91HkI&UVf1)45?| o^VƖVF1)]6drGEьԠ|QTD4Ih]p5^<" [nӋ\Ec�6~av6ŭ_?ֱtڣ6upƴX%y qqX:u3IGX�,sGy{W+ȁ�Y]? P;yEWA^m+` zK~/[e>G/I�_ auB8>4CY ):Hj6M ;[7,#,?Z?C&Y믏se2RCw U&V\y^u4`Y5}Hì`g7P wX�ֵ1N7_rfju<nCEet,\ 5EF5-4?EY4ls5:I卦c{n3ܰRacaffcq?Y)za'y k`@(urD|KQK'4 e܁`O:qL>n{+ZNSq>z]DfO-?bIwl=�.\n}vnP쌸䆒~χDzf2(>Yc^MS~Iȴ^]~ϥ{Qte=F7(2j 'ix~VI8[C;x�(?Du0_@ '[j@aU,7afiImD >TWi6dt{X-9oGW!j,_IZLEcc9�~twHZ8ğ @F^Q@d:̍ho:?ƚ 6cBY'q-<ch-$xO#.)+Ƥy/c.ibE1V�3.* c1aS5ӏ?H^?�-}Ҽcc/o+/F?8YeǗjmR״v|1^(~k<|ˣ^� 煻{�aM`)wc4Հ 8s]~+HQ(hOZU8kW 8wAh]@fUwv htVXÇpJ;#V0lOZ{W2l{ÝQ?hwZ?(|P%gΌv 6)N\*:0:*H2b*ŧ@ Ou1O`qF+QLnyD'{nWWJ "Ǻ *�Q«0ح4pf?<ϵ͵beʷ v}pehqTO2Џw.6 eK"*wU:}R�NnJM9Uڼ: jd-#"H ֐rDRQ7Q?E8Yz|,21LUDCU]Ztbӎ`ZZY7}V Ҍߺ6]ah8Xs}Ӎq3_ (R\n=J!;/hGe'�N5Y6F2]6Iy-cByeQƸQ vM kzC?er#+\�'kZ �)UkZu"3wP׀{,=cʍG6+.}}Q}Ye-&64%InFܑ}3i)u2`|0DIìSץm#(xKM..^h49-ſlנtI#Kx8핈c=-h3npE8Y[θ/)z`Iz6J%bC`%V7O.$Bz_ h^w4Wb;Ӫe4kq ƹGd ontqO1:+o'lI6sl4тÜvMymk0}ʩr id~r45~R[ o(YTɊM{3�iu,sZDb@K+;4Pcf^~I-�46n/)qѐ3ils+;Nݻo! \(35rIQmC@^vR'(~ɱ^@Ih>ǹ(}@,,dy6R�c<+8\ ^xwoaG20s{\)rhW� rMzcm�@\@G/noW8IC#aHɭg-M&:xyQqc>J2=μ¢3qwp6KAV_yMmmnt)!{<6G`d�y%pyc7_!,7փ yh=s\j۴H8�GQ;K��uoU喴$n2ʨtmnZI|Uz{<nilM O1esW@*E4:6ܫEy{Fm(V#^<NZb]]o|#:^'m'@k/1Zt�PPcVu-Պ;D11`ägպ75q�t]D�yM0 ,Oau2Xknw�z%~ 31M{z(dsI j2sq*E $q�qyإ@4l{+4|Sn-ſN>0d4Gnڇ|MҼnx.UQL4:;ÉO_W 13Jka1hhJȀFZ9pZZ_ ڏ'/k)nߤWnHZ2;Sit18^֘{Qe]�wW뷗x_qs/N;{d�X{<m-�NW6 |7 £ W;[.Ŀ|j6Ic",i ͅi|4umc6�/_3Ykݲ@Uar|A'5d w .UYp͚ċYͶ\룎xd="MVȝC2c[WæLC<V]ZG�ҝ K.@Ãc~Ck*ȼ80G\ oM=4K70Gz]&G,{ZGQ*/+r.Y'Gv4"t9~~p{jFJ T18UD&+Q]vg= R5Gu�ZGfX Y]zDn v?~ydaV/dNR-.h|rRxj[;\/;ХRkZ6PKu}Gi|f=WXF3kJrۨp+Q{؏K~'sLPr:-h:^䒈dti^X>?WmڦZSx#;C Yts\FK ?jQ1p?t~.,i2K[}s.y-#%0UMG/XFDf�逿i<HO6�@&o:E�-!< Ym6>;c mtD5^|d.�kK<%.Q֫1e;p}Iv `�hp #o_h_1Gt�\6g'O�j_եVGYx|΋_iFVEQa릺G�fW!y+h3G쓘�x$/_`GN_W/l2KHhmPk io}{=/pYqé y#> SDizDG<6%TĒ{{(wԤ $h6peˮ ?yU%�ə *]6M*rigw=Q?nr5H#K_aP<RHF&D0NTR7=NPoӑEG6{=o\8l}bW°9AuQNTܮ/M$ W uBB AշH;�T<wWD!K:RRC+'NYy{R!;$%'[{=� H\Ф<S>R9U6_R$%‰D͟JpYZi$}ƑhM%HUX6゙kre:+YBsba'l#OiۑH@DʰTrV+s_7''e} AuSP9Lj&hjKnZES EHs*|4{Y,mDBl>/h99+ri|+4Q�Ylq4NL`$(ICr֪&+Kt`S??U|P{de}+t֏hnҺ F`HӺmY\a ;ozԒ-j YMh.^"{enn2U.w<,�Uu奧n.>Iұ?ջ=⊜� GJ �sOp\Rձ m8WiFmc1d5278kZkE4eg$05J8 \J^v9]oP>NF4N; S{RG"MJh2^Jrf191z*p 4rH $-4e}qW\�m4o#jIxS-3p4:)Dt HmX@1B FF*ɯjLMK/w-qL` 4F{Zx{Kj8=qAj.Aj$Zxc}g�63ҀEnXxrks ,giP|k(O8�rS~~阣h9o^=LVU vt, kL0mh�uqw9wѠ+^Hݻm w!LSCvev's�w�HZ8Ow)s9` 9nԺ!Pi�,r{m-1d~>-`ӱi�'K~pցaWgE4`+ [3FA/>&i%̼|# d<By"iӥ_~Rc=*ycW4zjiZ:xäTA#~g|b^x[$MW{qw;++dM?#4KL&2F9#?x\l,A7�FmWda y$yZ$Զ+4!MWOLm\98m%ꭠV8HM|O[[| ?"TDudLa.|pppZ~^t:LO|9a`dMs},kI-CgیuKpt:H]Am;0hd kHil\$>Ihn (}Z}tz=8_mmQu׭챎}vw%12gV2#$Ժc^38p3]!`~ lo{#s4<ݍu^7S�;)7Q.JXKȆ#Z 48꜅Odšڈ_&I^)h,m~LLB,<{w$rKZ6ׅ fdM(pn>d"AH] 5EWϔ|;_Gag$KsH2D;|g"l͐`-=A8ViVٝ'8M~uJO=ͽ�Η4)q7? uڟ❚V˨s(#j~fs_7dɢKiu-lQ)^\uG#wtm/=:9AaÚ+#68@lռ1Nu i ?$ԽžcpnǤ|Zi3yej1Q횗6%~6K+`-�Q5E?)w> /~w.�{M'٩C.˽`-=W~do#X^[Fh}UXZݍtI+@[^s߷27Q 8-|6�^A<\ 6sr`X3ȚkJ<r?M?SJ0p!zA FQrf>N 70)[H$<?=�.|#i6h0|֯µ:(g8Cn�{BrezNhDL̀ 1L?uq!e?sGXr>#_K*gW%6Bu^WC]0aie +4DׅA7 0-u4oof�x+0˼zXi ؆"Ĵ·CoN'ẓy'hƴZ\6|<uMhY|{xo-=)1d_5,-C<״d8Q /;X^z\o^O+'huJ ŞW)v2QI1C{ߛ-uhVcl4v\Nٙ�nOPAH{i='x7*bqy}`TyC(Pt8\UPjuʁm Pb6knYV@h7H)X`FUDߜ}TeiPF4NE$`e#**e-ȵjP֞5E@:˜Bu�@ w8T 8n\ @XV.B8P^.9KږFmtΫbGrrJ�葚Jy BY cm"H;N P%7Yzgg@�J~7Tqw<-maMcϲ͝c�ڇ d\7R7li׎V�Apz RF|`�`4�[&[ɨX'V 5SMX� *`!:$1Oe!6ԸV}#`=F٪YF8=3A&~"z~OS�+&}Y'Z\Ԓ{(o5ڌ}:ΚG1 gN9<p8Zz}3@5a~O\z2hG0ycNo()\yim]1^Fs.݊M? 8�s�tDk1i�K.WﲷM,&ևP&U6Ez{m|]]&O9uX>%l)][w9^/Us-fMl+ Վ/5reYφ'eߪ꣰T9sԄD}x#0�4S[k2YJeel6\ #7svM*#UFݹՒRsu6ǼY8RXDy< )STG쾭*fq9s~˛Hǭ'j-S0 vQk{{[YZ7wF:ws$@\KYyQ̆LF0}rұ:==~n;RGL&Y!qi-54ܔ'<;bnJ,ZV0xrߤaTD opF yX\ɮ"HR3n=A#=+7hriX\N>6͑C[ѰcbrRg2K xa�T[v Vv7P5KSQZ]vqK']@ -kGV^ dM$z7AsD q^I|CIZ<ӻmm{kuXlQ3d`V2<=Y] cG "+A>c۟OYsc=<?wK<Tɇ4MW{hإkPW@W 48@1?<�ez+3k|?\+H2Gi.d:lʛ\ZCm2HmD2\ݭAl^EG ]jMkA:I|Pw]=wI=Oc{H;uH2j,i.�o*5,Ea=$~4YNB$sAO DH\:=eSzNg V\ws"�>px{yaVcFr4eo#"`7:_Rch.XvWeg1h|؄Oui[GAKOQtƴX'1n�ӵ& #b|@?UEԇO$L$p>n;c ߶tKN?^t.8 `+8$D�V ʏ[1yLc^R�}Oh4@�)_(_) SȻ#u}Oϑ+Lϲ#4s4цȺ8.c幻dQ}pSZ;Z` g6{?QqDl8hǫQ7UB6fZ;�%;pcllZvoX� sxu�Hu'K%2@0yW❵c~!ZY GV߅Y[^<s{*&a~0BMHJ:vC0s$-;w.5 kLr[Ő'Gd9ynG'dxmCfh^1 hnxYbbG=C\|nkJѓc lk虂Ӌ 'h~;/@;b=CCHH0C?�A!h M^2!o1uGDM3|Oto⁦.cRF[G s^ȝk^)4�Z:=^-p~L+k !R vFO�I-!k2vmꡇu(hϒ�RէM3u$IlN&?J?g;m<д2/?u~5F:zLzxY=:G4c�InHE3rZ;?fB,b.lV̛p|Apk'N^-aEס궴/SneX=6[};,�Ca#(m#\iy,nr |_?,ĺ!vOC`~-ˣF;xt$:'ts2>˦]R^!пOX^ML myln* >:'V}_/CsE kY>ˬ{­WʓЌԀ8w*Llw7mCn.64MjM=c찀OBY+n<8si{(Q@Q]vPkT^^xU.�KDcMAo#@s츊}PDOעd.µ[ӢEc(AtЮA)Ra@6}ʂmw..=P5 練5�CU¡QC8?)˂%�3ȉ>�IV2cK@`SJ:@I]!1i$yX[HL6)XALbmZJH]`^'3o(F^F vXo%).V:ll5>Jz;x/@ ,:-zo(4;DAн^ީM$! kM0 @nBX´~ͺ:9@P^�*)]IHͧ5OǷEeMTpI,R-s�R[@Fx"͉ WO:0 =C\nl\ 3zrWuuThfh?it!窻tϢH+Iu}K+lCKLYKI)H^ 4:! < NC46D8 'Yp4:{C:ofoi$X�!G!7K*&rJf8E�Yz?(h?y?63{-ǜ2=nK^scmi"/enu<<M8jZAv+6}q@ k48k"mZ=TJde0}4ւlo=uxqk"K7݇S.M4(=:J ݞ G{ӆ� N]FNyd2߬^z"vW-d.sH$u} Őƚp?jZC#-J{c?E^I$c#$_gr ;2#Vpc4@,{푰7k�>8ТLkES-�-d2 &Ӆm jY:8YkrU 7Nާ;赝{gc[Ί�^k$d~O oˈ!D[EC4pi"hLil-&[hSğZI^^hi�h4̒K+if1.~\OT/-<셧h��Ais5>s=(}s,mXv.IӂKH6z&Lv6]\{v'ZK�vi܌|q>ZNyd˺\I%9^DɨlM~R.NǏkdVZ絇0ԯ7Z-cTx2�+8elu8K7Mt!7_<l15Lpm hckz Y}&4;+bM 7A Tf&Fq�{Dﶷ9EJPvS(.i,/c2:gM alq#lΪNrEBAh3~[ut  sFNaB91}gKU<<qz4Ћ|铊Y[Eߨ�U?~L]5~f WXݝ=#"3;Tykl7$: c{Iֻvju:K۾&8ɓJ'kƜ5Y5d~R`|t>]Uއʁ^#HI?@vXat�+Z9[ѵx -ԞոR{Iᆲⳙ ډ]~t(u�tMf 5q4ϕf gpsܩj#/yd_(74ݚB! n7gh^#3cAc<�Dky~s.I{A@ Զ)䆟9u97ܜHkMu I|F3eƾ'o 'Q#k^^ XsH?U1-nB{s,]rgV}[P3{<U$ewKՃ�u1#v-]#. \=*kOԙ!ɑd_67l٥]`Heص>CD!hsyʍ[/a3&I ,9F[4ӆ;%%l5vԅF? /Qr&X!eѠSNZSq7gݻip)Zw=I=΄qs+�8ǺN)$pySoɴ4>LMX]8,IFZb�Qœróok| CG*, ʧ!vQ=,\~T1 gQ5M=cy+ ;G8ix'4ⱷso7b),}0_ӆS8,z= EqVA^3G(Gu ӏ=YC;*Ӛ胤8)րrc*T͸&vP[\]i\@n;k;2'u߂"%pM߅[HdTcs?05 L9o٧( e4.C%x(R0U\Q葈&!M1'dk>gfp AFz*\ MKZz�20ӟuR+UR7.vӇA- pe_4dl@UdW3PF1�diP}Ū4xڸ#,!(bhT0F`W0vUɆ眬ٜSS HH{/+;1]vE v@MDT6-҂>9 dWEW\ a'&KEիliCvGF�_ xC,\HO&Ɓ\qHa' 6tMt?DG\ /Z'eV9JyN%hH/wSqXͦӏuHy'2ǎ".U͈7s[\($VrK1ӌ'Lt2P%gVDn phwuGU Sq_ 5RiNxU9wS~>[k$zi~z% ])je乎~|.A�;%v@v>^: Q@hLJ`ƌD�OzױOF<: FuwHj 9ďr-e?~ѭ! lny Z=DLpSDem-VU4 eoUoHaCMajtLq VK[cc #'�dW[$+07f�7 qp|fQZ 6h{*K@`-ubˬ k 7�U$MS(H4SA\ݭ'Z9z)l>q5&P'RK؞ON²Id4/m.m˥%=~'d$4E:],KH꠴xp.sj}_KY]pl}0#iF�6NͺURw ü7S\o!hy75 Y場> Դ&�>S7|.͝v�85?>x,lm X@uRc?]Ծ3Ըd�,B. NIYGd㒫vHЏeԛc{: Ȁwi =*4͇- &.xhRXn'!s3\Se:fO+Xt.>C "IrdGbh0:[m,lfH$߫Hd,X9fjF%c c3fi4k\�{h~f\M<mStJ<wH�}F`|痓Vǽ;rl]�|i9$-ڹ8] {uy5Qf6 ou'`Nqn?T9cI{3xBfEjm: cy-GY̚Yy<3՟ {ifPֶٜGzs6�ޠ�.Q3ָ6:HJɥ h[jt-;l5ާpǹNLGzY+8kE{}]#[miK&6g.[/Qhтo.Г}8Diu+))cQu Gqϲ4[]BR.Zoo;_(!1=(DifS8ٹq�Q3͖wKQ@ )匑4Rm6=3MlΖtq^WTٞ[oG;ߵi;bӝ qqt't}3CdM24Émǻ�h/~(h0]3np|!C3dpU𶣅(Z<OwN•LiB)slc~hzKN~wWTOOK\8pUq.V1_ l'5׻WqcK㦃kYh!>[bͥ~Fzi� k`O- rv�>=\(nk 1JDCp4{pI@)/])[ Bm`q셨2\C "G!_ V[WEv-<?KD.K-p-4BЃRf`fod<*M&A#/?xn=/gi�CO,#+|l=hxΟo uơWf~^1nBOV^}�B:g-{v:- hꖈ[g0Q3s\ZC 2)g0�45kF6i5Av`#>ed!n¸pͭʎ,(qklr_r{x-q*ՙ)h�oe16Xwű{zaH=hGqQ賂G'H{{zI\ p~us�Y«k#_\ 2$CoLwF �*�ɤ@ԍP200IXG<(<7-eK) �{�xWh_oefW( )_o4p%W ]T.tgyQ3hBFP^&[zr"ӑIaeQSp=ajr:ꊽX U)DfjB)th�uA{?TĔ%M{WcnHh̏QScaOG-V86 %uJ#NU<Mm4A ,lhM~3m :�,-vr]hѧI(rfZ9+(諴h9db&(HsʌI :RJcW57Z,V=1/x~ FXsGi>pG :AwI?{]-&Z+=/H`Yxg9Ԇ+mhJ<Q>|nqKǺG`{ZZx\7_ \wY:3Y+f95 ,x->QKkvߕzgmxAԭ<NG̹ifF@usQniwyt ?P93=>OB}8[�Q 3l,4eXotK`[AmI%ݧk2{M1y$vLh opT8C8l64w'\He#l :AS|$캜PpN|1BSXܒxo{|K^9k C\?5vt$[6B�lq7u�D;E3ON1<?W̤u^�XZ6٣2':7_ OA}ɚ@@-˨VI: 5L݌Y[x~áHW7 {r&i&@�:usw%ʾOyz794tZS˿d2O%њK{WEc,Qdn+^v͆�r\j֒o;u홡KzѓI�^t vř >-2V7Q3S!T \=I&AW? `ju A1Ԫu3M\iGV]<[T"< c{U㚗Mka虓Yt |:N8|~ikQ˝d-TiJ~ Y鮵Vm6h)ZxGczwVk<ZƎz}E&?=R5CQoɿhk"sߺL3$,8^w9"J>T#?+_G៻n1O+=rm5&-)c)g�+YBT$&qf7`<^WC0�}Ӝs]  dc6(".Kx<X$u:iC.p?k[:Ne14_䖒K#cy>-.ZGBn#;ÛSAiN{o|ւ.yd~2lY^qn7EE%Gކ;�Kj@^ѓyʼr5}-WU*/.>(O:76mtyAZ]1/^2ӴRpkt :!Ql8 w.w=�q%h4lӐ@rcZ=<dCc,-=om4p?27w7Zb[Xq�mOhxyˈSK%Boe9")VB=&};m9{4vo9] &165tViY jzdVB!HNYE+nHFѶ9VTDLL9?'tFEYӲb G[엑O$U!FW-;0h-)`jWkò--= BUݏP*\ݗ dر}r'겿sQ= [k"qo?dx~qto@ڤhc?яuѿ> 68uocr�u6mH\*ڸ<xcG<9ŷ0pS�c)=GdzYٙhh$okys<B0CT7g�>~P.'sD`㰐Z]\Yyw�<|n!=HWN< X);c'ou:gj *dQ\E{*B B|UG2BB�.8Uq u#C;@Pr )t,44'X ߪ$dpZFh<tWY->(6-:0CE*9lt@�`Y#ă! Oh*B&\-#vQc k�hsCH>i{ "tFҟ+ VrzMp"صPp.N T9E-k@K�(h!?:}UI]h}ˏL)U $3GC,юq80>h؊0)fJ [Us藒~R 4OOCcQ&Y/oE?�3bA) F=Togcf6E/me߲ToEz *W1[`�㢈ZUIj<׿9='6VFB FwCdGbBD ,czMIp{c )CSHQYqG<ڼQS!FnL;=JjW;r`Я"gj$XlZZ8&彺pfnu :U0), 4p%ƽZm&֛p⻒tCU(dFMHdb�Y5 .{%4Bgm2L=d9&yqgi)u"BoԪp'z l"3 0T4=7V>2S&ͽq4EYn1Vy[BH<SI0->۞o7iY8Ee64]/l hU{o[g k%u'^V4lZv)7n3StF?ߤܴ΋[ -$\p\ܥ!4.1_u Y>w3n˿eC4P�17C�̇Lfl�v)5ɫQy.9?4E9NP-E7HKShæC�OS۟<qv5 =wjum 2m?~OBPF~G0׵!klY5^I2�)IvzL0�Z, e蚪Mh<2YjHNe5,t͑kP'xi� #YSk<\4 h%)&|ڀ: |; - uAhJPB ]^,Gg �%/}�OuxNW}Cf8,"德vVl&Y(DrJNaܔχT~W~ �HhNf*N;U.u:!lB 1#fI;q3Ӳ28�xv.!).표B{'1mKbyQMd퍣?3�"x&iYcq3533C-3B?}#O^]n/qi2i|CYthEiHl,ˤ{ :GjY[/Gĵ7htN&2 kblcK.u',nI‡@g˨vI[X˜J-KBԺ2jZ,i W,[\Ih'<%΃Hi7OW�;,=O<5Q40q}VYGE*L9m,Dn9EIJBZ8ѸF�Gt]Qn`.�X^[`>$6c .qx{]5 kB"CZ}O5Op .H|@ }3v4�(͉Ҽ鎹=OHNwHw oT}.tsMғ Z֋wvTJ#NHZYf$hЦtLvX9!s#e?j\AT >dFgj&NI!2l~i:wcc ^hEø-[6G{�8;CF75\{CK2;ծ*YmXvۣqTFPe*͔SCgn"]p\{H]ܥ hU7Vmub]Tl) Mݡ5ʳo4٪b'h%YQlFDk\Z\I^C]bNN Ym9kCJxK}z;׷KZ^gÝNw^Apo{r=͌o 7LGOC)mpWdsԟ\GT L(ZD"R K~.ȷG\Z$ Be 1ި_qAxG ѹwD9 ,Z{/&A\vS?3r=ͥQ+vZ2DGfU4M,C)D,lhor=9N nn:w ' Ae_/)Q( iZ3X/@]6T%tvqTB=GWJU"sUkbB >}4% 8Oq7@/ }]4#~p:'{i=_\e?6ZJ-$i&A䏢]ʋU#p NG*g,EnmZ /5."TR,} %kZ}[\@ii|k^@@iViA&iXd-*e-UQ6NJm9"r\,ML cXvim,p[w7f!8Z�֎gxԼU]n#H̀IMnUQUfjr:se/,& %b0meߓo15q$:1]A.X1M�Q>#<rmC`rZug$r9W(ѝۏ?ThA+?y DvZb(cŌc'&9vސ+[eG<%߬Wg!"Hx ZZ-{pހұB_N&n*gU Fm;zXEFCTuj7Q m%yk\�4�hi;֋.5G, i.8'uZic|[aGs[9{]u#hv9[)9>>q1ƴI!'S_?D n(wu:}6h%ҟ/K9Ivx͊U'0Y> ɬ`ϖS,sw%܁VPKE\�^�ϺM�1mTM7_eWdɆ'<?wyP�dLm\fA6BnC8ljyl ozVy>ގk�H%ėyKW1FFC4.ި.7$+)emTSɨlw9[wx18eǠ7�|U^4o=S#'HiM{5<20'KaQПu:"׍ 2/�+lxGF^9^GkKekCCcFޟnb&w UxP0"=RS'VEv~P㐐K>кWoRq&tstִk?>^/ĵ 2i`P _~P^sXa}NowPƝ(cd8M;ҖS:A DGh�{;v:]a莶[~SPǗ;S3tZc f27ܬx\��A|}.qq?|1=n=EwJBxD0Lz?Cv`HDIjgW;^rGJwJb60@ιL:m 7_�eհ)YF^vfp(�o(淿ft[O97J-�tMm;9  25-I? U~y˲)4d-'<"AhS^hOd %ix U1gsԼV od5U'OkIpr'C%s6}b$}Ӛt{)ם41kٍL;]\1� M$*v[MT XO#%8딆f17=q.8~`:4Bzɺ99,HeqDp# tfeTWO>�`V9cx7Cw? 襲uzRWUp<vDy$IK^߅ڵֲWU"3W*G �\.>jeh;YH4dr865^a^kBx 2gMt+g0bM%+0|ƖGo t!پ bJL6őE > 400 4ܨ�e]jBMWs(ݐȵE6V)S^8 >2QHЗj77C 401G 8ܙ¶PEZҨS©EUMqU$ڊQasPE.?(4*=I8CsZQ(J EkEvA@|L䡴dtGd^zFcl?�UʋL`)b$+,2^IA@p8B[i1yNz$&I t(M*X Mi4ۜ>P-sխ ^S=F(5z{@YcmCe �pvQ ʺt l.- 娲:ϓPO {ad%VyUH#d- 8XjwE߷F9iF,5C]UVI%~h0�SFqn+lc+]v@;iZJehm^Ri;d֒u7v:-|GEu\|ӧw59{GZY! E&ht rmKpw[͒-ZJ@8QvAKn< {)Mʹք,GfPN;auG3MQ #rR: ?U,[0j K@p&J˫28TQJ\�52e~P^jf}\M!bzI:_nإl[9l~ù=wåӻK{t%=SCR<Caup_ݽ %?R0E zr~�ဈ|!Υ�G(+츜FZ�Sf|KQ&l/ n/ myKo\Knc.y `#$c)]}]#R罡.'zyu/7_e3Ty'!+o24hclsɴjՓa&{gK3z蝿P~PnwTq{k W+Yw;5- >c N�i|;If=R8~ѶAn{D"cK/XrI6Q&U!W~g}�?+סK[/N% hn*|#@u[zh?CA6T>{_FfI_�t_Bl,lmBrh/>4#$$IW<r6r,8PK(.\qPm4{k#s4QI#/l^Kw,�xkϗ,? )Y71-3/z|oes-Fآ G $k]8q{hKx^TPGBϨPMζ96h;Nw|z8xC[W$KR5zH6hVN"`OG4?Ed)ܩc9ͭ�c;�.Zv2ao~%pA{B)&]6ц-^� h4 9>OZ+.1CsOK).2i%pQ:k#`&S:3fХT,Ӯp`]I=D֐ڭah 'ko(H_t沣+.!=%kC[CR&@I -Hͨ$h#iˬc* Myq%C&-#E=lVsTz&l(ktO LNš$WlXKZjKa%dptY8<4ESrzh Q|R)) 4ӒǺџm4nVw%uڠت(qNc.kk蒲9VesbK.i+6ۆxDs45h;pN/NmFb U? UykKRTڨ͠Mv7tj?Nx99%-C}-ôIPj`=<&`~Er4444?E VQJ#&އU�E'|<֫%vp9Pz\N7-)xrߔftaR8ʘϪ LryVuM%MR 절A�1`ܫ -jU}*H";<)w 8TWrU @!I=0G"ʚ(L7Ss <on{*#ZzgU,4Ҭb�ap$c۔n r; 9*ʂ`T]u@9Hu| n=Pe� ;?EW7� Rx@)=]p!Z@=jS = 7Qx=)J:R; F]@존f$}{ӕ4),91I#6?͟Q_ׄ9&zh?xJ\1#8)нK$HEۺ|o#ׁhH-k@�r_&vNzt즎tr�Wʳ-QҊ<= ͕/󕋨W+gPn;,Dy(OY=VFp㇖w趟EX#Tkc='iϺ3g`'=:+�e<ܩ˱i踴].)ʠp$%}BZ hZԙ66smx:fc?ؘ w_e~4ilu e wDVg64 Pr,w>@2M &]eMEGꬴvU�8YʹQP_MƵ.U\4N2Yq9fÜbѱy?L{8Ml$t迴<Q6l=J z�n9/6\y :Mo:30i2wGVL֛Ƈ3?kZ/cO Y!Zy06~IX2_RTu];b@=<f탪[Ow|ӳkܜ;EգI;kH? 3S#H]wORe t&͑WicwS՝@!{羣ȴy:4=Sz]k=ՅeW0X� fײm':%@G 癬׾/Ӻ8/o$X?ӆkFAx#^w{{#K7f�U{˼�w,gĸrOk{Y$@vJp6 ?g`3㪜eΝ0)C �wN̻�0�BG:y(I&S,'<.([J2z" Jxmw`h$|I8Sl#4p~Dp>-C/K�~#A-H-z^Vn9e;4M 8:.w| Íhmxa=ě'ql>|7G|&Bv#.>�Ԫ�{:u�?aֲv;-i�DiSO4 $$tA-;,ΖW=IN담 5vꝻ):/$<DzH0%27ʼQEݻ^goӰ^ag524�07jx�`cqߕ1DO~}ՃCEmj6呧�VY "~vɓH/{,zZ;=W <rs{HvqigaM1#v�-@W&bD`%g� )!#GqWBIw41|?iX]6eC|E2L,iԏX[ t;#lblrǓgVJbWn}* <2]IZr$X�9qB/q|"pYx%E֔dU+Yc+ړqz"4*~U,} vWa)�C܈Ed)8'=tTA"#*Ok`(ܡtN*Po(ʑFB~DZEg|Ӂ-(�<sj-Yut 4!a>W\cKt,#8� #H]quPcKJ tLam*Kꏡī*2cH BeUyµ(-A¯Ds{VpFM\7(6RݩVe7gKY"Ai ,I-{'쵑ȵaŨ PIBJ*9\ cMkT4 "�|BY->@3Q•b&B! n*UuZZZIC|-Q9Yx=L#7S/9UZx,tG .,BQpq}PHTQC@_0˝I ]H+xgφx+9z= h*lHih^E09K�9Ѳ(*L-(SO`I58 SAQ9 yթ,; N� __*ԔҤ}Nb9m @$ySٝRҽƏuh(Æ@K mVŦ-,�o;eH 8$G!0*:vixöc�g y�outJpQ$ 7,C` MI]\@TM?K>w]a9XEϿ>Y"ds_J͐I�(~_$1aVGDu UkR5CKmrTvyuOԵJ6+ 7;i79X{.ML1IL<ɮyA W, Q^#0 qAwoᑷYox0_5$*G 6<XmfzF�dzӺl̚]4�+% Y9�tvMѠӳ]F]&_iXyWj 2ZFzvEw6ۈ$P'skxoKp6witb�Y' F<)7RF"�aг tQ5ӿs\oq>ֲHϺ~mdH%8۸]!$ghEK& b?Z g=sw$E 끕UoMPoh`8ڌG1J3/ᱳ smGbk/[W;:pANcn^]}Jt8;I<V˞�< kŷIGp賓uNht�f?�+zg޵[D6tȇww'uR?h%uv?+MP�Wǻ`�=b h�|)M%� 9wuh< zMkWu$7KI -<GF0p?CtP4 ߩp7N쬈214u33gΐnx=NѶ&N?J XCu߁iF7ӎQzk}66s~٨w �-).sFO �s+Bwv :Rb6i2]� ; U| fwm>Ey. X<)]|,\9UGսN#�Mdo;]Miw?IjzwXٸXHU᭢Pe}U6FkM$_62Q]&$] 2HfNh͈[ge2U�grAUX0l5ov58E�)*)�a_7Qvae[ heX6ϷDh]e&Z>Z^?ZȤVT~FѐRZwW CaL7QjI 4h GTy$46UE&nlQI4PoE&:8DܖuWb,̡TϷ#L.O@ׄ`x$+Jptst=g96Mz H񑕽 9rHNԤgésIr>2wXBev KEP4}�F_(n2|#9ueuU6@{#uk#8䠑Y <2;rVn_?dCq=Y|d%I Uw\v0C^2e:@B׵!v^V+W(o8a!Gn4(+}d6@'<#@G)&|ت=ҁI2%q�TnPR̜,ٙdɢBXrpjcIJM8E}ŃQci^sU`tYsGg8$nnwTV\wp/AJ.Z6Z--V|gmZG@ S �hl\Zg:ah(%aqqʫ!6vw(7(ZW B Mϣ@,sdW{ q1 W,[}Q2IssKN&p'h[}f1ULqt+sL.%$W,$Y FUrFy Rqufp*tK+tfZ�UÜ%$Ssi8�Q4Ğ沕| U6 '[;4Yo(og+)YAv ӶNq]>O`ߔZ>N?zD=P40$MCd1+TlszVB$ZHƣ 3d-1r׺S'Iq"hh-vl3`�A'.3<| $�Cst=nwU=�5o4Zb8o|q>GCӎ2lto`) FY\MAߴB4RS|;hP(8r&S`'49k@.q�Zc¼*mc3k//#`: :m` m-zGp :t']nշɁFoǷɛY.o7Q!{*K^]+O-u^#h ٴ}։EY8*buԢ8Iyz K >瀓wꋤ%x/y?@<s6�[0سQ+_36 O4󓏔vA7n%%EӚ6+=%.X/Kg<@X^ah6[F1I9?Ԣz5z%Ĺ$PWc";8Cr,wm7� %U ]Acznt%y]:C 'ĥhbio,_Z~M%� <o?z;ۧhQksUTe|Sqiuq'ԟjq�5W~Nw]]Wdu#ƚQ]9vsd?i_Ⱦ^KI$䟩NDހx 2L">eh%(:G�.x3RiȽ=5 }Q5X.ۨ'! z ygi8|y |Y'Vb<C+7<rԸ!56uKyZ_=y<2Ex9=Dڿ)o@F:c kȷ_ viXUm=!?O<aq6X17nk.dVjU|zU3Fcx@қ< 8G ܠlOR# Ҿt)hl!1(ICa4`\+i"VR%Mw ݀(8=;)4g <`)i'MudeEi ' <R-HA ͦ_Ot 18O_n:5ve|&$�  5_SQ)-kixZQXCu:-!q|-7ibzc[PZxN\uW$}bgٙQ�x A@r$�d}\DHt]3o2i#D)G?B!oɻ .?T7_(CgF96q洓ʈrayF+lԦM*_ 沀fGb UQiR\H@ fìawe["f�qo%ֆЊ\$�; ڂTA60^Ot܉!PJqhG< FRW~ZHEbE*]AW7ZBebNXVVRze+R3FVu"iw잒NT)6>{-};<I T-&XqdoLE6ΉӝTE7<-$;J,Sjakj]}Vz5�Im`Ҽ4NJr㏺uM9U{QED$y2t&nXqeUytHOFHZQ t!$ V^Zkp<!Jg(2u7Df,,mi!VHGP  K/$T5 ko"8;&+4�3V YvB:CAa>P靲<t  K-~ t<� ΐ>9OX}ڍg; >��rFG[^vw>Y$Jl~p"MrƗ-R}B<T֌$9)+"M%*,Bi�L5hcvG;͊K dLsBKdQw')}Fc4j5fOLTGM5#}?MG6 cb6?!cD*�qT� \CЂI8Ӝ$q#g-"͜kgX4=ʽMTX3laGK`ґH'�zCxc\(gvtZa<2/4Z �Y{N\/JwӲN q\n^6MWH}0hQu _mu)kK�iVF r{9n9|Jf!M#HxuHps縒_$V9-A-& !8h?],BҏӒ7@-E\RѿRedlkn?9>=> �򿆏h}&7?Ӹy9 ?5/&j[PuI6i\^)N(�~b~& :`=ZnU#Mxs~ z4e*A-~ g</??fw�ոd vzkOl⨛Js'9H\yZؠ�q>AKEo 7Z $E^ZxvIAv7᧴P�Y a"[(?�#"y|b,lX կE4x?8C}l; x=)2HUӯTfƤUEvURU`alBπ,Q]a21ґcھ"C lV@)chl9FkpXAV`KV԰ *G Yvk(;RR;R)jn ;n)]D�6v({hW1&5HKp 2UAJhW ;W"$�({j#]C**y�RofN2 P6]v ( oVH25 z$bwDKEZZfӁ[zLcA5 ZqͰъnobB g>*ypuTjkWrӌ#o*ߞaG"[NTv@ـrUYū 9E*$*ܦZP* {R30X7]!I.j�/aD6/ IGAwP@%_vk`.piQ� XJý# ۏGY)/=\|<?*x^<H'CEpPzee[oW {AuP�C.´9JPZJǔPܷ 92JwWaVʾ!zN"mV�!y LwV[,uKHl=tri]+yRP%y|iּg=VK8&J?)!�_T]}S <" TS{iRFB,+=\OQz>( [?Uz NvC5ǡQ%?~W1éB4-\6nӸ{QԀ)~R{`O1$�))h!K~%́9;GTF<M$H#_|{G*OP3#P@Y�WJ7IOVlD,L99IHK+U!iIy^P@p>4Q\4]%'&6( RU ء1 m$,M2ֱČ4rM G[/h|:(Z&qs{NWAi<"(`% t'۹>^%HCkz\E=� NQ uRnpG٣\5^Rf7�A` |~r.g藙v[&ȡT kf`Smu6הf+rpU*l4X9K1溟<@|GUƚ?T#ڹZct.~I5q{KUW~Re~}:4{�|LxtP 3q^ u޺db7k"XLㆷ@L}dsɯ݌�uooqsۜrG?<},<,o}du z}I$?"_\rO&RodRUR:LT 7֑ UxHiŦyu)ZMC�Mp*߰> 7djq4 w) Uo:)7KJZzKxLLڏFzKV0_t92f+]cwmP�P3%Vj4,v,B8~i}@: :%iȣXDzpf% x\/e�d|2�W,,g+ZOLv]0Y?m .w B?~ۡp+9Ef mQ쥭0l!ll)ٔf8 Co ��m iRY`(iO!]T74cЙ-^/)+P @@蹢V DU@ UAR9A,Z(3]~u?( SCNyUs׺U{l #EB*"I*rɣƵqoHW UՔij㾥<2d)TH=B: ^$`9;iV!I5Gz_<9 #O.nJ{OMU(:"Ӟ\R)xO(֜a 4wg=XF H(S Þ-A('5P^j8 9@u�}E<)$P[8J_3fn(o�v˵ܧ2*k[f=J%J�-(zL`cYRg|TW^)a6lg]^yjPWT͡2B`K R0$4+C V 㒂HA. �(Gw@w87$d"$&@Trm8@'Ā|$ ҒvQ37\g dVqJȚ yB27U2] p+cHܬNs:1{e> ŒM瓚gڷnq# 99QrDN�IhVZ;V xQy'e[N�@XL90H=JuߠUI%2L,$O14B܃)u XRMs'-)pa7lshy:{92xs5ׅVMVj6HsHO!p=�hqd'KfXZ[kC=C- 4<d:Z>tƉ%XW`tæ<Xtl?~ݷdhi"#ĤccjMf#tzv2]G�>,]^}dl/K=i$ѻCxI# :ϧ"p�!e :R]d[x1_$8W䂋TQ%&0`� r44g7*IQKhK{+n8PtuZC8WC<7DёS4h|9czd/|Kˉ<7uW;1I0^ײ΋<hc+h=NGAI7^ NU]i3S/^I: K+#y%)�LPߨ% 1_[UzD]es שGhvzI>v]_\NgB~>zu:iˇUNWPKu> bޛJ<SYm VG"@Du xc^v?R4N\m6O]C�MWi(dgZ&$0  Gm 9SoѢz/sfͫ4WFB+\c%1P4]b4f^{Hi$=, �a�K5=g|=ZZG#5Rs-{RVlG}k(muQS6-!n X#Z+$R$7W +XQt[OU,pAJ olmaXX*QZ5ʥlU)#@;Wn"JjjӰ;7yuH>Zt>%)w~Tdby+BT Wo8K*%9G7c u±eQjJ ޞ\0HDsH<.a-�#*ʬꃺ8J45UEi֍{--#=A+�mKIJ&bFq@6U]{3,p�fGf6]b!q5 9@t @)m8;R2RP^ORc iQ?-$o'-ߕq(f³\;wTȎuZXVפQYEI:ǚR;@i=ʡ |ګ%}5Wj\:HZ1T@68FwZʫ[@}qdiG rJnd'C 6'(#HkthlՀ- u)wb(%Ll7xC{7J}GAgW$W*�Z2Մ΢LstĚRAG+W}%!IrNӀLr\2LpIWgãxF:,o hj ,KiL<H_S%,eޥI 8skINhgJ0Gh%声ˤ�ēKCIVk9vVhB% U0UΖ�Dm=\IBZީO%*(9ӲJs8;s*crNUnIֈ<KXo�X ȵQ;2sk>rOHI?DbFq5 ZrPevKEvR^ƫhhDNc¶C16P ~ʴ0�L hyn~u+nI '?JjBIcg%MGF n&\1yBs.'<q# b3Z;ڰ�{e(&j @Rl*9*\7B* ,�QB�{+UR Y\ZJ8Wp.(,tB �]c:�P{�ZK+#;Z�<jFxOg5 ߩsFD|QoXϻSPO^di^wsIFw/ZZ'bN2H9#&v$46 2? oUQD7=_2!n3DYL;GWk}s|7OF(ÝYzkmk�fGgWu⺑.嵱nz ~HYTi9epU۴ɨ,}?nQ۟ �QkM (Z,^S?&x4�ѷyw.#D߃"xT "1ǁ+0hˏs]ߏ!@k(vy1Wqc!m4%!kkAT۵e1 uY`._$Ud\~ڮ١+itM`g7Hm WsTc"TV~E WFƚ~ ߥ8hSZvxsj%u2v.UqjuQI�U3OA<z>_lݹV-W 6 ]]\+e>m Hm,(Ջ@i@<uP:'-B}i]ʮ;ZoVQYVSߠ\NE}TfZ "uNECmy*\8SnIiJnTB ,0H'bh>Px9Q�+[b#Ku/gA:#v@vM8leG!\\C 54Gʃ5ap %נi B v;yzF]4 ^+G&Wf�#ch ͥY#EtElj.`dH(M(u(SH8SPp; )CMg;d;_~M47WF ,e=;OEXۑܢѪ ot | ʹh�֛6\9 .*{TNA{0o(@'D94)PPZ{"J4ڠJ]x@dgcPd4Ob�·ҩ5L s쉏˨AC}͎bUMRdyoAPTyȼ K8nXR#Ev,3(cFک2{F#Z 4lʣ4[F Hi %fpȨ]hsݐU黣 YSik|k*Y:05'#:$/$}5̌sk`�S싴OPQUQ&!UIuH80m$ WFa?7hE@W1#kԔ�} $fP .+B-hd92g�0S{Z1q$=�*lr:rvQ/erEwte8Y: k`oz2{<57?u>-~mI(>P5&\qO^a5OHqn7ʗ0ز>ߪjC="iݒJN&XDzЎ=e`hUz3 ]uHKE1c� CG6GnI78]TW/4 5P iN'd5Rak!9}8Eu:A40Ttx %G|5K˨Ԑe@= &2!AMNC ࿣GJ>-^]OUV:- FJ)$</Mh GJ8ǩK<s${ɳiP�S!7ɣ�qeO0pjϲOk%{]`? \oLǷ$]NsoPU)Xv'FzЂpMwY <?�j(cƝĞ�Nёxh>ϗ!ܬiSYwO:;0a?T"hҼ}'z˨H@@I79?ew9qָF#XQr/v63ޑ7zF~[Y9UO®'4* 19]re\+*nUċ�F01Ro MiTxVqhݵPV悐�zGa Ҟ59DҼpƸ8:&�u�rH'ZAt0H<"{Z#MB$uNhֆ%NW( | T!^yVaAZz#'8nC蔿@WT <TmZ0N=7f*y<�r$"3D)UM9ɣ_1R\y>Jq208fR0⾩w�P%*B"̭̈́U.o�4|e8T1�rh.p9S,ȼDQ�0tc`e6 (�q 88^঎G (hX]|8y)<a].״6=db3�攗P{7�O3O_)ajC%Kt)\U,Ee\]6\p(]l1<0fR[~Ȑ*W~T7: %KF6B-i¾-9HhoQĄѪKI֕{r=\X7AJW*q'T0dWT8KLP5PI`�GYW<aNm^o"j\e:5ttfj A J'm %\ I�s0 @0uWDxA.<s|6W- "BNYy9N"\uYzr'xV>Ctf$wLr-gZve*_LBy Y12$+'PI!7+$i<'nąvcˊܢD˪KY,7D`4W^:պF i4/+Y^h2i}VC կ=2=gӶn 9%kFƁQݼ$¿V)B:7>D=N%ZMH4Cl.+>.f~VܤaX�&F٩8dloY^uz엕ڼd)p ;,K=Rݺ#6pMMhI=k"RC4_/w=PȢPj 7! gLMH$z+I(7K F^AϨbZTG'c( &VG q! Rkd (okmxLJvťT <97r}X_Բ]:Dxt4m!"V3~1F縺G\瞤~(D^@mҗPv֭htҚ�a)ڷ#K�qjK\gҸ8;~dR"E� ):CdxZIB!hY,tZHDcLF=]\'jCc}E9m|Us@W%㞋 ~k$Gqki sU?J4xwו'�g`~[o/93Q{dQ4tl.{2,W)j߷[@�~"\<JwFAUEVU䐆;VHњ?)-=')k9E~Y2phsDgDN6ZO| p}%TX'DT0S:`d'9ׇ'=gn,9<gz<A,=RuQ}, KtVQj4N'PmZ7GP\H$=P^ p*~.BgHT[�pvy5l^B3/#t 36%iij՝E)Dk;17c(O*q-9B>D)q&RۮTE<դtWҌQ77.`Ps{nX(/~ڭ ps\EMĚ<UUu)k2fmM(WZИo~P[Ҳ݄"¬glWA Q[QzZIaa>hd.<\]IMF1:`Mgn`vF@F.ʡ 1#SsYB`=EPrp6 D.#\C qS,7#1?tq^kߞPC?^@J3n1LftA$hs+:o42;*ت.͡n7p W coTJ SC=5; h>}v*l0=RU՛C*X6W=зQBw$Pkj&�.$Y䂂Aq,MU"@9Mp6(¯)c³]Dr; 薈G͖2M9:cc6S 5A\5Qvi{؂L+)RN<J !eZ6血끄Hooaщ'JYx8곿e7[s1 8,Y�uPO�", j o ցK\0g[ rN9oeL% D-3>wʻRʛz9 {Zq 9仒h5*(O>(iʀKR<$gOHVH{vNV?P,sl{4͂~RD:ն<Au{v`IFD]pŦ쫵*kZr>Ȭr\vO4˵%!Q�ZGٮo4C#'�)Bk|]+c�d�fh<%f Oj*0zVs.%<GIZuGdT64O&O$S1g%.=O,}3ΐF?'56O\4c,�eu.w'KZWnFg}};mq$5�!d�]ӀErS赢C]pN2@q5 բ<QCI_MÚcK?ޗxkSWGG?T]9=wHE]屬CnB=(x6z7mKK1$T7Hչĸ?|+1^;ZQ[AzJwҴoL@|pYF`ȴ-7 (&wu[MC{l*{7$_ (X1[plܮ7o06z{#AӾiE:79#-k#_CJphWY�ym3,2i$`& }^2 ~$ZcuG˶$uBn_;ORpT\~DU">Tap l+ Gc-!q\ͥQ-y+7gw$X4Tzڒ~a'R}<?9@XTCTZk1_t7Loܕ *dU譞;OZ38Haoem )0'Ӵy[]NWE-8g=>,s1Ec�2FFv;c4: L&gD ցS_DŠ5P]3Cϕk= 5$S+>x8,X�!IF󋮨NVDTZpFkOB|*PfD#]g g5O)(tDP#TeXxU6 h+0㕣'I<zz\(pOWcm3BF4@z# #hT4꣑I327-*NG5}ðRѬV"J*(29;+:R�PG7d\m/#F PS OAyɗ4Q*�%#Rh(`X7@9FhNaFGAl-'kVvdJ$GIx* Y$ۜU-%)җwY\KWUxgnS:H a֎Յ^)A Z[ ZWN810%=%P'>f)Wǻa=ۍ߷dHÚR֎ev_9G�}d z۩;w|߶PD=h܀'3A M Ը]ynuh 'VO{ _Psd,CA9.YuQeL'42≎nC7T&FKJot 1%G]|gI�!5.ROBI!FQ@ NUCJwQL�2keC[�H=|pn`U! k@zpmsN?2. *x\w}ۏ O{,j0|CTv}SW(t@EW^Vyam54 P }ӽM#uldxRf=\I8 9 ʣE0+@hi{@z}+@Y`=wtϧ�7ߺ?{^%!輮&D¶6XzUIֽ@l?Q)=CEߢp8}M >$!4M7Xu!W%I]8n$ Bl]Tp[_t8Pi78Z` !U嫎+RbCVb%2ޤx] t@FTKC*<,x:�+{E҅\Â?DPna)ZFMWt֢?+PT.p1uKaDof,b^Z> Um)C�h- ?XDZ_@.ZPMmt*7ҽ`B hجuL^JÕuJn`C8S6]Z�*]9 R7K*eT s}[ 9=2Ѣe'zʚM쥮 (hbdӲή \ [:Pt"*E[8RpE˼i61K1eH{v[_CJ4se+[6y ,t^t6#uwI&`6ovF4݀/YqV㔃sXVpP/x͔ M^YoBwY%CӔ\�y[*H=m6+td4QC(`&p]0L`7\!Er8FUeĺh@Qye 8Ao¬ <zDr�S.eQGmT` Fj6peF\a0{%Xi"(ESw!9hm !g~Z-3UB$]eэ>% !m2¡g|Yp$dwўMZ8.Z4+`9iqC8 ! 3Oj]˙+2v'01 !Hzh;@],,CTe4v\YR(- o0 [:80"N ;X5]1;j)!aQ.Th�)kc-Ձ}rd'vx 8W1d`h�KA&N}CK-A& [gnǷuQ/1q=,FΞQԓ&9IJ{(-K/ ;z_ 9#Y4FSJH6ѐmS84kaPX/ԂEp WTG^sRE)=uK쐙O9$mZZN!/)6�jZ$]rR˻P-Esm>?- h�� HIBeSCʸ{XG_$r>!V@a q�E?\ZLK/NFtiS$t�h=L4\�H42@xHՙ:@PܡP޽] ;hA)@]-q.�U&MY< Ӂhäg9Y"8SYf[l-߆3h٫z๠ԭ0$e#usdsLB( �R.{;FLh#yB vuS}- 8 :PoҚù[d'A?=X'Pb{^U h9U ś «M4Fdc%Jm QhP!^:& ǖ 𜽤 |^ 0lS+o C7E�[oq:mfd�妓&A2fWn/<>mܭ/qyq8#fG)kݔ|WGMBCE-fs+]c<% h v\ࡗmyb6d;p/@Դt!wBNJv*v;  @p�'>A!--7KSƬ2z&b~Z?TH͊Ů m(٬gMMbm&,l}QPʌeZ[D*Wm!9TG'WC"QEoYӈÖ9)VG=6a);<!^A m^~Fؼ.ӟ?c:uN!fJ+a qlF9]%h#DP^<C� ,D�i ,Qm=�RH–Y`NWf #+2�=@!+>[K]u7 yE`4m*&)7 nRήP9?UW>tVC=a lnA~Va\R*1@8]7Is�se`N/XvBmf`AG&L R}jɼyک 8@HK`["3*!tqY;ɎJS&VN\\'n-PZALDةUNb;TcQZ@(*ㄬ]ʌ SM .'-9'Z-v'6}(mBs>\मV{ ڮ~᠂S et J6EXP=evDȮYS zw]2߲%`pzcrrΩܪ] *OJns {ʬqdh (uuvS3y=oKGf|,$ C슥)$Z L/[q9Ut0:ņ-8HI[G\;vY@g{cU<䥽YAor[ -(VàK 摒]N}Na �$'#* Y=1t߆iC#p$|g#O4,4f�R�4}qƦu D[Iko H=4]n14uʉ{Y)UF0n ׳6On)t¸w%qK@n.Zv 횏%Ƌ\߅,yqw|'ӏ umeT6+p1 Φ}7?y}yGA-Ը Pshע\8U7AsH?;s:O/KM\TBrEzJ S iG#iI vm Th\X=\{1kA C3Q$qCdWds9#%ՔH J,KFP9 B1SZY4="Y4ثE5uVGv4q۰nmmiK>o4'x넦{\~I,IBPpUa6iOe w$}Q %d4-Q♆,sh ٥gH+')(B.[7 *\AբYEtIԴNiip)z0˽Ko8U�<bRN&\Eg{ vLX=¤9!6kG|cx\QrvVI`1DDHfpj_~UĖFIBKN �D9MJAi8J*2\f%cL;:zuۅn~VQ!+Gcya/]e tmYzn"2(#^AwgN9- "�-oe%T)��eV41RaյPsG~k*OT>e\)BAF$7ʃw)�g)¥a]B#Y* (umTBDe;D�!3t`WBǺEQV ;7G9@VBPEr'͠mLniAj#  ;f;[تu\G6\Hݐ%-�(W e&+PSJR%A'Kdz# 8WUkд^Sa2K:yhNQhYNZ�tjhI5yA#+,!? Ӕ;%52_w/ et}3#+&#ۛ 7*>0cIM+:}Qq;Lmk;X R b?ϲ#e47!q38; ' &b OΘlІ6M#akiQ2hؐ5�DP:tW/ !iqGdiQvӠ,QC0xq{RbvD|# S5?7aQڨ@n:~I5o*1@qi._G�=)p�YB$FT zITGPǜW8͞ˇ 08㔬"YZ(8I-m~`굮h#$|,ӛZ4i?/;g'2GێIJIgFJ`#V �΋ ڻ,OjS.wV@R.ւہH2CiFsn Ra6pDONrE,oJMrFS D̐\/&|n7ƵEC#^6qqU?՞NFnLs0dZB~998E' xFH6r- ϡ{Ht"Uk)h݆~;$i>`q\-u�o5jKyHkrDҽi§qkeg NP�tȢITGdKdsjb} N(P7{-MCtGnh(@^1IZz43�@nQŴ+( [ʤOtZTr;o#T1ٰJcZ868LiM,u=Mk5ҕپ.'+EPI49G즜Ҥp+uիE\( 6}S/9Jb0mjG֓Ma�ਕW.>rJf&uY#0~iX3kUȢSmRrTU)�A>nlHۚ 2ʱv[Qy#m^ «N9(ݪtۑ; xDz ֩7HV@- }\r4l�{-1Uс6�e^Io w\k*>ryC%YPzײaWe)P'DYU1AG @&(RY8o0[9ęt@P<})_ �Տ8 @REiG(i*>J ҔUU+ A"_O. Z �ur]U瀸QvZm *@KI9(O~(ar wPٵ-,Z`HH]cv:ۅ`O8~>3ܩ0 WlXi+�NaU?4cJG *isAWrc8++4 FckAI y<i )_o)bK  Ŕ8N@|ORm ~U oʤ"6"sΞ`ќɝSݬm\+c6˨vJkӸIWKi1?�y$a4f.0a.mUKL;̙Ńp@)GD)4=҂z &WIyQ$e'04>IY 4{. KLshp`d!JpIjZД #2K<gA%In{7nLi& }8J)( :6$)n=Jw(l^腥OW]q}<koR;pؘ^'+x;7kMmh52Jq\uVjOn�FQI`v2(l=3B*p,wNfn{ RE(JdtH"oz, $ $Сa=k/S ;@)ò6M%o-fAp` ÏZ|{\( 2OX8*&dEI˚.F2~IꔺVv)JyA@-kk"BVo{p7H)VVsjv5uOK->:s˲@S};jl4+n$Gs8H}a LFS%�sUamQ=c o9D:*amdp2 `USfU&\(ZE[rvQvm_LsA7},-hGUtLJ<oh5ٹ건q`OʁE6.P<VHN7?U^%f.+hiCYNB)ruhJV8Mn"LQ)v\C.‚ F!áʮzN!T B.^!" Nf#1x@ɸӳ0X#7!dBշ-E)S@.|R(�XSwM6#ZNՔppd[Zҥ{ *@$ICS:*2 | (Z5ѓJ!#6"g:6镭&�,%=d,xF1qautJH 8d8�E*4BmdlSE rր= yf8r1(n` ]oWmr#)xLTcyWE�A [ <lUQ P6B9T+4h*HګJp*zApWj8h!Hpm ir^U^.桖BFSM)Ub)4QT Xh!LI f`x8LDM% WX*6<Xћ;U<uqk]94yA Ĺt@nKd,z # Y; t9+\#nU-oW|aTOV2r�GY:ɣG),Y�+\}�K'$mgFWQZ\d,M.~?Q0U*EpTk%=~Q#gopI%o1w464(v&1y͏;<h?q=aGIC8MR[P 'U'W96O;=JAƈPtAV^W-m{ŏkT61ܳ!<~!Hn.8zWhK,jZhS LjW4RЖyJ94F({~0($WThmfEGP #nqa@|t ]u]jLD6@"ehH £<&X^oS#8wvo�RO/egOzbݠP�8*^�JU_DGXqVT�wɸ({H2+"*"CFh8rۤ}�lwSsHFKFZ6t7 sHRïw:!Odlh9mp "$EǸM>ӻ9MߥgRu@hE6xYבTuǨ)MFV9E(R$5+H-c~jQ`̪?y }<従i9Jܩ+�;*W@~RƉ<GlWqk&77* f+\8o^/@w\y\y6pU1~r?)Pu Z)aU+*�OrЀZ_@, GAMs fbqS<*V:ঠ`:h)z 8# p^Z(}VwYdGӻ# D�h-X �.YV(P>dL+H^:6XR@L:(ەjmW7$gbR0_ S!k eTǔc3 0#UP6Sʶ =%/"rCA>&m@`GO<+61d eWFp/4V-=:"!fT= V+lFkUpfOUº9A{So x*3&mvǞ"!Yw)d#_(WG `-2#$+,DEã I؀-4p{;!AhugmPAo@C:QˮZZÀ(ژ|8Up=AIU!"1B]xLEͣ4RUwWʂV SJ W<<V$�ӟ|/13C sK XͅVHy$ۍ&>Vp=am:%^Sm}4uNZhSâѕoqWqu@UcEcH˔<;;P�|g1Iqq9YS?8#ꐚADQbu +6nnO_#+Mr~6 3ʇ@VsCGꇴcQ4EըGPH'!B} kA? 68_   u IBLlAn\/+1 HGJEDBbfS9NdM <d;+D�V <;�YKLNN-# +5!1h:}A.Fvs6$REFknhR*U (]CX6͞+�d*p9up+eMq9+JKqIUZhT$WhT�)qu u|mhF+d6M#E@MVdG½q]10֋*Cah< 9S!ت MH{\N’+ H�-vs cIP+D}' m9<'#I?B. �i$yFPe)(ŏU;\F@Ǻ#_m%D" .«Nў;gRADyTPP>EÚ\ZX%8)luS GR6BqM]ͥUZr+v"QSF 'q{i lo׍]чIŢ6WmWa%alaT猢C5)8'�gCx7D 앀'[E9h.e|1(,=EqkǏ{go 0chV^ZtΙVFL60q+2k 衭3[pj+5*op& P0PZ�^}֪\(o%A')%ޢUܮvk{+, Tw ( &[i.! H{H~@Ts+A,�e8M aO+p@O)u7/pLlKvX ڰ+0 yTskc'@SaiɳEXsi/nW�>"Æ\Sr=HI4(X;^E v!%XqKRRlښEێ  kJst 9Sږ}S.$'姟'Шc6qj>� )bƴ䄦:]kC|tG|p;p?e}m(SjZlΒ~o 9g.$O!1?Ap5"'Ѳ~SLvM+9CwRi<+mYJ͔㯎=CCq3N{xireTUc M~J!'@K[xj_M>$UZJ*ӐZIʠ¾br\p8nA {)nO삅49QD` km ]:R&>Ts}B3 RGv‡ pCp{ P!-`P4plBdaPB"a{ �2U k,D1@Wt(DZ ih%xtN <"XɜRԅžw)T g=B7Xeh#ꍍ\6C0A@_<chz,>r#BWIҒ@N<II -ESU욁GD*t\%c~FkRDSqڤ*[k\A*7F( V gMC63qI[T  )ͻ*=grmHn8AP@'إi=@IG%:}No%:YE4,՛I7Ѱ9u=U4 QypV 6NFUh¬#5*!5@Y  Up-w�U?sNJZ=կPR}}V9 F_~0YQW h�ѬeSBnNQ OCKOJnZ6Uh5xXlhՃ ց]uvjS; *NWyX!1ȣHX* / RvT) '$: Y%*pA]6q¸8Ž%\T4R Li�aʥV"sܩk,I@�U%#UԮ[IPӂ'5hT+E @ͥaN{1VH)ǜX%# L*;xP~Pb9ppNU\pQ[av} !Ih E*@nC-UAH<DLfb !p̣З|6^Gl|,@]Ngjk)Xۖީk&qy*R+EkQZ(-2n]AxGy,QxJ6〒Կ;Df۵<;֎XYGY[[b{z4 @q)ڊMz1%TFj^'K_U[+6lkmԺSM4k7Hq GMzV0'Icy(ӲTJȚ<ŀѕ$a%NJlH:V5C?~H%" y)Czp%Ƈ<?~P_N7PU?DqB$\4SN%vT;`QHǹQ a-o)y9lJDr-KӲ`P*\9@1z¬ +Rp'BtDO9T\(cooul@+:BA〇bhu}1ki<::HyWYTPd=vÄQ (k19 F6P<ppqm'P'ޓ6 Ŧ]JRyy\.Iݕcg];<&}G)vc޹L;6OM Ku)�A4^KBUΧyDa.�V`[jKAsJ^6NFGqLa8!D+S }e2DU^dZ �E`]{eFtz/ Q R� Y1H8WNzU\TӀ`z-$tW[]`P/ 27vCM{c;YuPwJ2 7ӀUG\ pqSzM] miojNqu[:1{kYP3?Ei]UNM#EZPYJcu׏=v''"f/+HMH_4TN8z'w)ĵ# M0gFLDӗFJ~4#aw7/ F N9PQԪ$ JD^S^msEe\d* 氢QRZ7i(U :!y qP{ ͡w9 (Zv+P٠ATB1Jy)(fcY?d"#)W~K@y�KH!#ઇ`$zrBM$H%^1$h L[D#eGʣ(7~T(٤?_^eԀ\ ;1U!(&~2;*'4e0(Eb(On8M@Y@TYT6`ԞVVNUNΞLL{,9 v*< wGn !›TmԄ+%VI7 ֊6r70|=*&ʹL*vㄬ[@ `uh賡f Iք56g~ԅJJ Q :% * /.(,K#qZ}P+ 'VNhԒCHUp 5I5xrR7@'sC zf'쀳E6qU p�C+,M;[2wAU }yXF2F~U&D�WLs�{x�S `>H}҆�.SΌ}|tX�L͠*m*m zN˲44Q+9�RfK+%h=Ͼ5>pe=gbBO\.J[­"{@ kZcTwl#tH"B,甶>m#F.1n2W�-6TFauZ~AsmTZKt12d{ �FdNCѠ8Wq\?7(0%u)QEf{ZB*K1ǂQ.(� W<׹A{wTVhxUZf[p Dsa/ z}�_W<}12D!s\pJ+? �SnwQJfvyR[e rPԗr"h}-ZFUa%0]Zv tEB$鍻"YY}rօ? NZ\*ҍLkHrpch-?Gވo0эRώJF_ϲB$VlttWtAEr͞K @EQEa(pe#<Ue.BIʳHU E6a, }-�seC*pS|cVqf(i4oK7;r9ʹ':J9UqopdB{Z* *EJ9aY!֕2uf胫14xV CYTp).7ݮyu3uohB# yWcB}O5~8Ӆ"GQm&IUJJ4HK!@MH- ck@B4'0H�b\ Fꁰ Y jNNij]i?I P 4axFTK'{ CtՀS 97鍛,~ q>ò[- eeIZvr tvCj 0STHY*H\MIH |BTj-#I*}7p�F}=&+AC/$ fv$mQTӀ8H�{) ʩq�V}SKVc8g+-9Q#URBi=;&1]I);d2`;Zq':D\I'qBAGMBCSД~粣V2+ 7׍,yõuCMXw6 Yԕ hJ6YW9(wXQb08]n((MmV.Wt: ~T;Z^R@tr >]@8\A<sjy]VQ6-Wn �HBգD=Y]Q`Z~jsFÕYR\ Y1 rش'UGiFSQmp4E@ۣёڮ�H([>˭I5cސkm縵nOy]\ h_ʇ8?4-s$$rr+ 1ty1a#EjU_ ܨw9N@kv0:~/Qa� O( =\)D<mO{pW8LA;-M(-fC-1&)sM*FIn'qZjݕ6FV4R]-v:Rs ViT9ttDpRQRYKjiQ^[̾ꐍi7#žW۞dX A eH G(w =ÛUR0G<矪B6LM1) GޑZ@rוSSo_2 <$B}FC{T. sڨuʊj OUnTv$"1=IQOi °b$-0] h͢ By*68\cPe} )ic( 㺥̡9H>pU21!T= 8Ĝ$&v⌄(n4TrN*h(Ƌw i]IOT8 �U :mF}'(@XG45lyf$%}RϜ6 Z ll�OO[OnXvAΣO\)*Vl}ђ:RVv즪.»eCDeY*:b.Ee5W�`pYi#4�BSh&FɯӑwJ\@ J�8R_EfCg LD=&Ѣf74\ I D-,9iC5h.s(eȰ'FFѡCM.h�g!RӸ+epyA(+iA~.v = 73x. Kr'(x')Q[.sIE ݋EUNXbI�OB/@%- O(I\MN�$$A)WYO;T|Ytlh,PꚊCB]\©vT/7N#�) _9PMPF tL@{BҲ$k8J/Pdk(ʝh):+W*x=[VǙpP%xN@pyꀡqY=pH#^Վ-X YQUFCCug~sI%W&QF4Z tL"a ʻq1xp*�>&$.5`#qhon,. PE &#`s8 ;NG,92Zou]HD줴}7X3I 9Ek H(P\rjR(aM6 R{)fHJӇt>tUWeA8]D hiϧB^>hIJwTqKrpV|E/5)]Yy/ų~VL}ߖecJnqYzBh-XyY@PFkI*\GgY� Y~{8ʓi((Ǻj& mL� fCD-U:(0JNFL8% >@ظDHX= J2m"0{F4]#HHs4kDUTp8$P[&#(͋w8StS h6C`asTDWcEp/f*q8Eo$ )0pZ5gQoS%Ԩ x'*I062~ꮳI7HgvkF!wrk1,NT= Sw NN6@+?6wDaIa)$~FB)Ick ;'5�9XV Y捥Ə@.ص� 6!3JLрl9Fxp�$;›-ya|wHh(I>`$ I"M+{+zU K-uQ&N}/~Jw"g<|MúP7fy@W2%T+2Fj~l*A vY'_}U ~d~:*JD%Hd'vۯynhH{TP{S ]՚$%^3N$P2Ŏ RYI~n^6*YL5jޜM�+ z-W(qTRΧwT~CMe�U%([zѸŪ 츴o(9 ; "p|,!iV1U )FE+H4)=)]Φ/:0Q9ޑɯdEZ0 ) 7@`# 6#&)%&9K列3'` PdqQ_%&HV(b0� ^Ev;#)b );[D/vU~9K;)39#Fn:+ H H՛Uo􁄏BRhUpFzXSV2JyF.XA4jbPф Wt?mQL'U<pCr$vWʭwEmBr]H$v bʰ=کi ^Bzuf ײZ악Z6sӐ4/o *�=W*p:qP71D!33XsO{,,|M2Y74}>ΟY[:sVŝh6DxE5iaPxDyCu D5Q4hQ \)X;4ɴ7U*9={A~^B%)X>E#` DkqI£p%ReHrgtpogp#<�v. R($b=@ vrY oM-~rƒڡHDr rPJ+h$#qy8A{U/t΀d�M捓Mnm"LPt H^]1oN$EYΠֈhJӊ�L6zdPJ4&ӵ2v-@g+j$sk s\˿u<eĀ6N2hws@YLe_ cZ9z#" e`6WF/4҆ EU�%H]Z (T8=e!p$,CI4xIZRK?e+"FzPwRHT#mvPMdyϤqP0fPU1U/2kIxB8vW'p4ZeWq' ,h8DMYM.7cuD4r&hG}+?e1Kj="-1la,sӓ_8oR.@- #$z'&M)y �wSH!Ek쥣% nS8 %U>S};Aq9Br:"HY@R09Vfy$N(R~b'H@Z%񓷸V{nHtҫJUy� v@QڠrJu 2Oh&W#(gJQ2DOsJӘ]b(7UH6HSf1)wY5IѲa !jbzSOnUgѰe#N A!#~7aKK4mxۑ ,mȪHmj78))iAi='nc5 (jv( N CT:&ʖsLW5#wb vg>m= wDú#/HYVAGd)1ҚZCj6DhmxZVߢN&O@+Ta58@i/bl.wD+r֒iLFAIL}>{M1fAZ:nE sHxcO镳q(8OQ`E"#/P(A UgMPIB1KUhh|*MPpV`9Bv epeiRVV*%&qJ+`?:4jң pQTnUsp<RBKrW9#_A.*q# |f!ilhh+NUZ@ ef\BJ #iIN,{uZ [J "Vsl AifFm3qH->w h(m"2Rdw1ָR֦H 0 B%aqU\ Zqye+1um4f]+>]>zָ68�P*P*풍 I=oE#6~RG[@l;-h$~)!QZwH:&օ:ڥ>X쑗hn T^ mrY`e[4 ʒa\MD1SM tuv(qKFV&d<+#`%^c/aCdȍ2"3!h`7G&q+H` h�^1- K!P8MRFr 3$C^(Є\*Kۊ{RWUyPZ@e 5Ԅ8QtdeVNyBh"`(h!o¤=+7*WASo\Z 7<$k#<|+<>QxLhn$y@H߹ao>։AoQ]Ͷ.R.As,>bE zVVk,$ QFYE8ڼ-j@rhKGUHnqj{#ˢs-cs| 4k Eޚ.1rvZ,E:tHԜ"}>ba`\sP\֛*閷M),]Å^@쐣t=i #o$mR{[�ap]*LOɠtt*D1G}]JI.VpaMXB(ʣ( TUf ͣ0YZϢ#DbԁdVV0lhi?Q*<bqu^?e =՟B]##]|n'c鸎0JPNU=1Ȁ4Dž,oΑ[g`tҞ })SՉG hO "9W  j@v% H%\g j@ mI dcAP(.<:D\#$G$ZJZ9P4 �esAr 3ޗn#[ !Qw^xL5cҚB wUvYLDh\()o) ÕFA\/m(w';KI&ƒU  AN!B7,ńIh=M*JaDxT0#0SBqF<қ. ;g(.o(8D$vhyd]u-BpUy<p: eԊ?3pre<E}@bݴu&$p -l�qrh,ZSQKg^E *65k}-6T7{ŜM-HQ6hيꓚ50IKM+4i[ )E,:+]k}^AD?*+�ʣ  AjUPg #?NRDT. 8DvNT@PJgTx�d6u+LpO8U~z! �6 z%U ;#s*JJ4=$-�PY"Z()(�ed:!8Y9@)#N8A/vk4$cG2~p@~x PCl-�]+y J4$qW.ޏE{H<gP: >iLյeqVX 3s`ҸD]S\FiQ z-0i %6I)vťjOiв^-]}-*~ΙSsBA��', !w䴷P-$AkE 2-#Br{fG~a1F7V1R\)$e<LB03r0[N¤춡ֳd94l7p *]!^nxP{# SLxL1+a@#Ff#1 &J@M{g)@b5^鸉Rp)Kz!Gb |}QG V}@ڕNP}SJ}g)]fY# sDCLh}{ci<-pcoJc7[:C$x[^Gtʵ8a) = &O°4 Jh{J=Ҳ<leK_gi_vnգ[ 2:$&"yVc댔8Fգ>gg)!*q$o [O(]H".K!* ^oj@fm[h D�*W#Z )\1mA'D*{v@0*PFRTCs!.2'8TU tVqq60rx>E`Cx@+F)H6 ���������������go-cloud-0.20.0/samples/server/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016263�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/server/main.go��������������������������������������������������������������0000664�0000000�0000000�00000007242�13670045075�0017543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Command server runs a simple HTTP server with integrated Stackdriver tracing // and health checks. package main import ( "context" "errors" "flag" "fmt" "log" "net/http" "sync" "time" "go.opencensus.io/trace" "gocloud.dev/gcp" "gocloud.dev/server" "gocloud.dev/server/health" "gocloud.dev/server/sdserver" ) // GlobalMonitoredResource implements monitoredresource.Interface to provide a // basic global resource based on the project ID. If you're running this sample // on GCE or EC2, you may prefer to use monitoredresource.Autodetect() instead. type GlobalMonitoredResource struct { projectID string } func (g GlobalMonitoredResource) MonitoredResource() (string, map[string]string) { return "global", map[string]string{"project_id": g.projectID} } func helloHandler(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Hello\n") } func mainHandler(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Welcome to the home page!\n") } // customHealthCheck is an example health check. It implements the // health.Checker interface and reports the server is healthy when the healthy // field is set to true. type customHealthCheck struct { mu sync.RWMutex healthy bool } func (h *customHealthCheck) CheckHealth() error { h.mu.RLock() defer h.mu.RUnlock() if !h.healthy { return errors.New("not ready yet!") } return nil } func main() { addr := flag.String("listen", ":8080", "HTTP port to listen on") doTrace := flag.Bool("trace", true, "Export traces to Stackdriver") flag.Parse() ctx := context.Background() credentials, err := gcp.DefaultCredentials(ctx) if err != nil { log.Fatal(err) } tokenSource := gcp.CredentialsTokenSource(credentials) projectID, err := gcp.DefaultProjectID(credentials) if err != nil { log.Fatal(err) } var exporter trace.Exporter if *doTrace { fmt.Println("Exporting traces to Stackdriver") mr := GlobalMonitoredResource{projectID: string(projectID)} exporter, _, err = sdserver.NewExporter(projectID, tokenSource, mr) if err != nil { log.Fatal(err) } } mux := http.NewServeMux() mux.HandleFunc("/hello", helloHandler) mux.HandleFunc("/", mainHandler) // healthCheck will report the server is unhealthy for 10 seconds after // startup, and as healthy henceforth. Check the /healthz/readiness // HTTP path to see readiness. healthCheck := new(customHealthCheck) time.AfterFunc(10*time.Second, func() { healthCheck.mu.Lock() defer healthCheck.mu.Unlock() healthCheck.healthy = true }) options := &server.Options{ RequestLogger: sdserver.NewRequestLogger(), HealthChecks: []health.Checker{healthCheck}, TraceExporter: exporter, // In production you will likely want to use trace.ProbabilitySampler // instead, since AlwaysSample will start and export a trace for every // request - this may be prohibitively slow with significant traffic. DefaultSamplingPolicy: trace.AlwaysSample(), Driver: &server.DefaultDriver{}, } s := server.New(mux, options) fmt.Printf("Listening on %s\n", *addr) err = s.ListenAndServe(*addr) if err != nil { log.Fatal(err) } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/tutorial/�������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016620�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/tutorial/README.md����������������������������������������������������������0000664�0000000�0000000�00000000315�13670045075�0020076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Getting Started With The Go Cloud Development Kit This is the source directory for the [command-line uploader tutorial][]. [command-line uploader tutorial]: https://gocloud.dev/tutorials/cli-uploader/ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/tutorial/gopher.png���������������������������������������������������������0000664�0000000�0000000�00000042404�13670045075�0020616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�����T���@�� /iCCPICC profile��HǝwTTϽwz0z.0. Qf� Ml@DEHb!(`HPb0dFJ|yyǽgs{.�$O./ 'z8WGб�x�0Y驾A@$/7z HeOOҬT��_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2�$ 8xtr�p/8 pCfq.Knjm͠{r28?.)ɩL^6�g,qm"[Z[Z~Q7%" 3R�`̊j[~�: w!�$E}kyhyRm333: }=#vʉe tqX)I)B>== <8Xȉ9<QDhʸ8Qyl£sy0OZk(�5Hݠ>yP:8p΍Lg kk Ѐ�$t!0V87`ɀ2A. @JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1�s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ�"XA<NB%#ɐI.HtttL&kdy'|V"a$%(Q%.1(B/%$V2G\ i)SjT)aYitttUI [&_E1 BѠPX-z%8CաzQEoYeYUgdGhMEKNІh(/qZYcI˒%srrrBV;rn;)2*\RV** O(W)VSUVQPNUޯ|QyZ⨒RrVeJjU-S=.Kw'+=5%5O5ZZڼzzz# C#VL[cFSUW3WY^OWkN[G;L{vNNC]nnm=C/QM}XB?^Jl`i58`0z)oiaCaa(Ϩ腱qn^O&&I&&LeLWvjo22mN6w7hir2βZP,|-Yt[|[XNYiZE[U[ 3 F15ziw666&6N.YY^|NݎiWk7bO?d?tsxvlppsJp:ę<b+Z&V]=ν}cyOna/e/W Wx+}|a{|Z[=O>�P44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ E  <hؤT 7 E7--֢o:}$dwZUQ ۡ΁S+Nuwv}ojȞ)9K8v\ι/]~pq==/]~bS+vWN_zZu}}m?Xo~FM]: ^zmלּ302tw8rx.佤{/gܟ!a#G叕cșQѾ'AOƞӇfܧn>[ly邟~_Y53rW򯎼^{7so}x>|쇊z>yz;l���bKGD������ pHYs��.#��.#x?v���tIME)hb!��:VIDATxgeﮊl`E QX""T(+E(({ Xأkٍ_L6>8i9>{ΜySOK!4~>{-Zt]w͘1cܸqwiֿ>gϞ;C׮];wܩSu]wn;tl[o;ثWC9?묳.뮻{]|5k;h[o+o4iҨQN8>}ѣcǎ-Irp믿.y#F6m#<ꫯC6駞zj޼yӧO袋ءhwy礜x�.[ouٲe|-/`^d [W\q9 8X)ɇY[b^"rp,ѣG_x_|1Vem3f y晧z*fL~xunP= ꫯ^`_~ito{4h޽{R)<N: ={}݇sϽ<K6= _ gvۄ x$;߾ W6eʔ_~6?rHݭ[DLxkygyl\q}ъ+0`x3pnadM{o^&ѽzɓ'c ׵Z l P�KZOK_}Uc]/3}M7 <Vʚ8q~htoT] j=cKΝ /MyC{=Cލ}s=XMFv-vmWnAn~ŋq�uliFFy%s׻k((^kOY#g8'FO<q6*?k!lb?DE[b7W{rJ{ A:wesYfAB_[ӟr)DT06[Ro6Xoq7 x/voI$6qUG,Ii>K.… AQGEZ$ 6y!Htyn;~3#<Ӕ n;Y|ARZ2v}Rlf!C$YEgcН\СCKo'Ӥ L-T a <3 `w9qͥa=Q0P6] X ;4 ՝XSd7pD'Tl+/s-PFQ'Z;)ǧ&m~1ktk[8A4zG^~弖9xL ߝ9s&/ /6ߥk3Ձ=OV* &Pae *"<D*S$C /Ej4K ;#9Qatg/FSqFy7v] r;hN#\H6>]ʾc a`vu T{o=ܓ<(;%|Qu tJ =Mшf=N"]cu=ק}ipWVtguIm)cArwo . %-e)x\(*(oj΁i(i(C}MES1SPC],|%IgNwr7իA6S^ |,]T }㎃~7ߤB1%H${\n]}.3gݼ =(Ipw:S}*ҝ�WfrGEIUޤ?0,_= $|J 7BzxO:5P4>oy+xrtǑ }]P<aMN2yrrx]x|=HNg 3;/J77Ƿ'0.oa?2zd2{9BMZZ$ ##ǫ@ea916L0|I'ŒƼ OaO-ԟ`ӝQqL?5M$ vt7 uuf4;^<r@NXL0yadJgrT7AnqluqRݚrKBkubaʳ?aBt*#ꌷsGR2>jr ~nآz|[%O>9l-dIuBpL3ZuI`!+'NY=Q[ID_$xcD4�nsV;/(Q{du婓;O nn +9v|;ZBkJ(Yo5HFLjiN5R#$⼺wժUDGvYU-:-Qg[8xdKpY#:O{4~}a|']<U?%≾EW߰D[‚'5aԏ]wuW gneԎc+H D_>쳣)Q"#+mȇ,Tl )"w"Q_/|I-K\9 Ϙ#vm?vCt.Q4RFCd!)|%5!یL|83{?UdXb듥',QL6}kFwҰ,ERӑ�]3-v7 *$;jw %3LJF|b2y ajKQ_NzR/){oKA/&4eAz} *)unoPyTZײR.zEiTZJw&Q٫BuxK}N}=QL/+\<|V"<7=N|BCVs∎%Z(o"0$o& 4#6 # @.|"@-?DN+(X-�Pu1:_~oiU%>MYDk@Hy%WIs\Nx8.aM &.Gӹ!zIrH  69O:@[8 %JE kGy%'5GEoDנeAN )D. 6GJ{U$܏X $PQ*,a!4 %_#hQ1iR*{="m]e;Hd"u|t'D4zEk+d\1YZpEz\l}]jҚMZ1hn:L8HKcϻBMP%MMKҮ톀x%|%JggYTt_Q¼x=6cJ]ˉCgd\Y6G#meeJcIIrJǚ"82PD� bK3 KZ.uۥ,^M$ wH]Z҃ I"OGjVD3IwJ:JD6,,?vbjHhs}tW[.\, BDίUWwtV_jE2l]>'7QiDԠ 2%zx4&SZ@F^Rs^Ge4#]:<cJ =IQ0H< uiIFwȤ�x!fkYSݞ2pNP9|7~�BN;iܺh;=<[]Qڒ'U1'1}t2cҔ8~ٔ*1hl$ ă3!cQ)kD#EJWU袨2&r.Gi>5@tk׫-)&'myJ׉IC!)k+ WG4,T-OKH@F7|\Doʁ;U})}XX=z9usy]EyM#=kMwIߊ{Ba-18e+e8E5,n%mVS`,'iOzG&8!4Mtzcg\xwx2OcDOo %!9> ZwsgNLfFFtG|dիW!tH=)Ҿ܍;KZR)nWҊ~4Lя]ƖQYV}?/=>5bDppR ϋSE^/qтp;1rh4UtUL$ %8.Xq9WFM$IRjV<T1 hln.;PW,gFػT`?=KUA.46ֱw%Bw �<,Dfh[ɓ"X'GÎ9Q-ݻwybYB خ UM 9+!~~\o"\'x,]4r\9 /Z-JܢǑ:MD?AN<7QޡRícX-1|ΎJ0Tt0jq96ᝐAh 0'恈]lH_k[Ow8R{Eo[<?e׿D&<E+ED)o_P!TW 2.j[*cC4xSfX\xY7M|,;ʆaJJwD%!%Ibл٬5;f O0&m%._<\jRبUx)I_vD43Ž%3a�3"IL{%w#˂JJ9>to-h˥lԉhҿReI?6,HHE"զv'~GVK6XzѼRFP֐ Ul&MHg'bV^:I?})"u,%Iǚ Q ഽuRe/uZ'"1%jQ0CO#GaX}?<Tͯxy䑨l*jRFCh{m-8yNW J[q0+Hq08HeGqtei�tomkC*2J'C:<b1Pm\'9,vB;dNQcA*òb5%P[H65mz0rZt/]c3h7\)JIr)$BX)ZY^~hv(ԟbe3'G一J:1bvI�)JKf>a |ϖoRKZ*�tCڕ5Wɳ!:I ;Yhψ>4kVo&3} XȻe3 Z>,֑u% Lw\tmLѽ h#ȖꀒNwTBĬO%g1S#-ݣ`|Ht#mǔlOi@YV9BVRP_)pz;}rf(e/Mi,�:q[)Q~N{jTeNwq tBWg}B6$ƨ60̿*Dq[Z~+rP xNEwsF Ucģq ie}JV"W*%{5\Trv̓mzzZ9{z;a&٤9Ve dXyt)Z.-&HTBΗI+<DUmkΥ{T,x̨2]bN0V 'Fٱ:,#\C+E<=z\r1e-zEUΛ7O.T\E˵wɮ#|)3CvH9(jOѱôzMEwT%7]̥"ts OE~Oړb QmZiCծyIĊ wi+IXqx]Ù>�|~c)b)hfO,l25pRM$e DxRVˣڞ<lJ+9:  ̓v Z=]Z9uś u՚Ñ C 5"x<P|>H)BqadBw|&-=QJ UKeź ~| +Dj46}Hdh9޺ThR@ioeqx,ks ]`:^.r_QB� 4ǪN_FFV.UO5IUY b1 @4e`9:+`?Q<[Y}&h s R'@ȸPHOzPAhb k֬! l.[;</ oR!.B`»+ȩ$sD=@H( V/ZM0;~,1Dr҈۪c(,ꮆ^AA*] ;4R5-)l2LX)6SN_'̀X Ǟ4m%l)A+ -L#ltS9ʓ '/7=~d.P3bo#AC$a]DڱcLjY⃕&A;M&/tT _;DսsY.~SfT%'qu$2+yhu! JBŅ<|v٫[tc{&elN|wl9..5+[QxEALVA{ҝ -z9Yuc>L)χM,cABl=ft'ġi5 ( nƀ {dЃxҝl)'TTZ/|PQ)!Ayw  vcJ5FwD= /kH/Yհ1Ծ- B3O7=!_S" w!쓪懤4[{! نYWgE@کߓ:d/#adrzT 7P (V Ξt bD:hAc'/6WI ;'݉)X`4 344}@XXE٫=T`%SgFHx6|:i� {*7dNJ4%8:&¦ThAܒd^%3rD#”-+U-H4jM inJ:AD HW*ȣې%Nr|%^! 13�QT_9C$L2#9vYel"rghvs7KP+t z=k Mj3}>tGۖA$0M륿;TcWƖT2M*ϦBsT͔/'X.IS*�R@/Ž=hAFX>LȨ=vʛ0}Ӝݩ\rHR�'v3 :E:"l8K?�1hq*kUQ>)wC٩?r=f6jAP]铕{ w $j PJ6 OEL"5O_2(g\%[} 1 X[L>tXG^l6ZR5YC٧L);n$^$ڃ^ ഭ>\U5U64. QGn,eBw '|Y w@kJ:lMFD1ʫ��#Fi7V{&@T2qXNkPJ!4cn۽L^ԇ7iw% 52WRC[J{e-`ӿ_�q7rOԥ@-†JwstG}]ФcYbjpHb{XNN7cF@&nO>8IDtޢ't/;0WUeUmc\dp~j~:o_vovg D7�2EHF&{ Ow ,/k~R澻t"]=%"j{iVD�oqoDduO"'T9sCn%be!ND߫9|c'26`v]f4zc{K=p, [.횞yL檶!JHu7?kJ!C/sѪ|@6p"t'S�i!vcFgْ�!O3^0WzR_лTh;rK ;="J۩ JmJRK՗tIs*KRѫ֮HаlK"CflFXFk I\P%[>N b{0 4$#sc}DitRg(IH? lK5sFӸ\JfV SN ca]*XC}Ĉr~BӝjeU @wU b MP| Py,)DVŐ(SWh;A$<[CQ("|ǛoĔ)SlU Lw@EN5[Cӝ4**&Vׯ!#D;{4Pa0rJ￿0*U 4@` *R~f))mCӝz.<j  MwzG149{-Qst't,iͤPt16f+J uMwf0t'.rEXI'dkchrr9xokcz`h]} Q/ٳgH0Ֆu!@#@!PS0qr6]w-!,*b.Ƴ~ \r-!,L&>Lw !)9my a=�jMÐ0 Ow3 dc?\Xq .A5Җ uXȵ^[<ݯ*9u]ז(vmBɓ'Ow+|M.]`l]{W5`efrb^2#f5sOw˗/2?N;-Zt_p!,V9KR"e42B;&;3g\2^yly aq.Bf~>llﷶujdԤ Aqcd�{y׭[7[o}'y!@]cXγ!D`EuG_}WJ G ?ڹҝ::zf:ٳ Ui0-†UVϟxbҝiӦ}jz1jԨ%Kg1QwRN<8묳]{WvAueՠ;}lu6h?bO>H#ꖓ ta_~x6|C)Ow5(TϘ1=zdcǎy*[CX3Fص۲':zKWFX4l&'8>3:tzmy a*Vo8‘G)]&M(t& ,1]_}(ڵo;CȌM4) cǎ&L 0@0Jwx[CXvm(u!"5φ@>|L1ZyJwBol7x]fЖ ^zC�ԇTܡN*B-!,[Fb>lԘ=\޷o4gsWl6Jw~k~GbȐ!1e;([*!̿ꫣGm>WNDZ駟l+#F`f6l!RdC6TqR1 tG+%|c9&:-X;I>Me/&O?Tԩζ1);O/?siŽJB! (l̈́cs_/3t~wݔf?C}.%@|KO1GTT# 93׬YSR+qq} sc"?|iݼ]vE8F;}D1Ib(V4h?^3r6oәnE-uwc i 6,WEw.{`2tM<=Nw@'fR7nwȑ/TiM[Cpꪖ VZ?NUb2ߥEΝ;ʖQ1>ޣ_ޡCRcV0<RrphzA[t�aG0ioc< j zFU>n1d 0C]Em.ć>֗mDAcb; ֨j cd{Z /E}Jw$ la Y`ĉA;W^1dch6*~m[C4D ]Cuqw~ 7 k0,ƺ{wvt'CL{1;]yѝlj@TFK/TGlCF:tt].qK: JSQ54 ho`m09b2)ՉT72;%c os뮻Ƅ L5 a~20\!#0l :0#$'q 'تNK-KȌ!ڣ+jQ!dKbASѝ@q%1d y;LTa00 b莚rb>J?F ݩ )ۀY[Cv5j0Mի;Г`-!;\tE´4CQS=T0e[CvP CwڗB>}-!;`>HE>LgDL�4 L]bk7lKb: uo͋TtG]-!;E.]}Nѽ}ܹ$JtZ�;J4 CM~4 ^�ݙetwg0x@Ęzztgzҝ $p=5#& ;eJG}ԖĐ&L#- nU?$lIt񩧞*h;)-ZdKbLNEZtl2g08ҽݝ_ j04�1`˗/%143ݙms vǕL%1dx;tSѝX;o0{ոjt74뮂ys=gKbŗEy?p n&aj�oft R/ڒ_/Llh(xw72ɓ U5røqi]vfFJFwCn(^#n FwC4# Mv T -n_560 k dtpĉfƐ(\iCw4T �?,d_~l 6HsU54� "4q ŋM+4; r�3udZu*c(ݗ,Yb c/ҌѝX… ma Y �L";T= iӔf|Iat!ưaÄcݻw ; Jwma YIKw w1w}p"N:W~w#:+=Rf2Ŝ9s;fͲ1ǹ+fm[tGf֓!Zdkc[vQG?Z*RͤIlm A d(?5-쓳?~!,U?`Qٌ3ƖOf?viCYWv[2AϞ=BmC9`ZGNM3[C@0]3f=P9 b„ :)TkhZ{rN2đG)իWcb BoѣPkB.Lu224P6S/t;w&^u['CRILtN }{?GNK?Ihrf#F2Gt<c d0?|a:GݯJ99|'gh 뮻 {�t 2̐QUMNSS` fHSO=UԡC?PSԩjf?m ?Cw$Zk-+|7DT0Lr-LV~~~W! *Fw4goZ6[<CR`uMwpIt^sgd+![o3>#l (ݜ0`> l .ߺQxP`GD$slO>B4w<AaVҔYDO *ukz~cKEO7 .VP H)U23;Ec.f @W 'Q*t{k[k=pp9(I.~%C4H/K.5DAF~^t`7FEQsG[2=z om  p)-Y�RzawᡇRJlV~i_~֭^_nݞA[o|7o^ޒo0rC[oVBۀ�9zK>?s-Dl2[ve{A-R;ja[vX%&l73AJG1ٳgG_>`!ђEM=oB4Su&yӝHIꕣdonƩE0~me]r 2BѠܙgYo6 W^mh2u]U9rdR]ҥ F&{g2.qƖkmtomFodžnh G-x wy(& m<@e<w Ŏ;%/25jm$ca^{MۇN`ƜؖOnEr;3yG >nӣNvy2Y}{_g�ʕ+ ѿcaaș[UWЦD}d*StGC=\;3_8pNg%pBwBy} /Qp #|~G>~]6!ݵNk>ebOu7ޘֱc%K9;`,]h?/%X,\D'ۚ[t2'3No*gqXChQZ@&v}wVEtG1G}Q uLBs7^f1k<x ɓ'<>^Ǥ.!=zF9s#"4^{Xo ;;iҤ;C)ȨW柑{Wa>[JF?~gΜ9en L={VW_!CrY4%yRݲp1Pt}F%Nõ񥁳ކ8xt7$g̘:_Ŧ??X8N 9w\oD?CY,ҡX{XR饛nҐt^n|T0"K<+w]ҌLvT*Y*r;wv ImOXG`tgL 4v?Q% hzYss2l :2DANpb? )7n{xʔ)|7{U ) /0B.U1a^X$zW= Q HbM6,!-%O`8Ċ+FݧOhO](6z_<2 ;=mP^ۏLLzLgKq| \TUZQw)i*:gp`D,k /.ؿb*HtgSN;PЕ, _%'u ƛn)&Є o\&nNpZY":+>t ݛ5{Ddpb�H4iD^{o3!K&*bzRWl0~NE2qD ~R>m!:DʹshNOF-R2nhaiULjH*ȔkCM,8:!S�;ZҚivN��&C;T+e.Sca0Ysz|2*ȁI!NÕ6R[GuTsH/BYM�LqEpx IT n 'ܑCKԎ؆Фy0`'C˛ӨsGZ\RvqvJ^9O[R5 X-YxqeL oXO%E*Aw"$ϻN#�D#x)]EBGyAMmLE4#0>wN.$Zw H!A\lZNrn<o.D<C?z L.[eYuNJH00kX]+ /FX<L;RIj)Ie+Ș[|LO)Ccm{q ]t毾z̒9000ix[su<Zw' DސTP%ͭ- WZ;0mڴO)1,U?u7| A4. 8a曹:H2cƌ v/>ُ�@XH+|w'"3a;?x8E 6֋e&=Xy;ԑuxij᷵@V"K5S0tJ{mLuYz2ޛ-{o4J9ő_k6=G: rc LbE 012L 6N4����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/tutorial/main.go������������������������������������������������������������0000664�0000000�0000000�00000003225�13670045075�0020075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Command upload saves files to blob storage on GCP, AWS, and Azure. package main import ( "context" "io/ioutil" "log" "os" "gocloud.dev/blob" // Import the blob packages we want to be able to open. _ "gocloud.dev/blob/azureblob" _ "gocloud.dev/blob/gcsblob" _ "gocloud.dev/blob/s3blob" ) func main() { // Define our input. if len(os.Args) != 3 { log.Fatal("usage: upload BUCKET_URL FILE") } bucketURL := os.Args[1] file := os.Args[2] ctx := context.Background() // Open a connection to the bucket. b, err := blob.OpenBucket(ctx, bucketURL) if err != nil { log.Fatalf("Failed to setup bucket: %s", err) } defer b.Close() // Prepare the file for upload. data, err := ioutil.ReadFile(file) if err != nil { log.Fatalf("Failed to read file: %s", err) } w, err := b.NewWriter(ctx, file, nil) if err != nil { log.Fatalf("Failed to obtain writer: %s", err) } _, err = w.Write(data) if err != nil { log.Fatalf("Failed to write to bucket: %s", err) } if err = w.Close(); err != nil { log.Fatalf("Failed to close: %s", err) } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/wire/�����������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0015723�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/samples/wire/README.md��������������������������������������������������������������0000664�0000000�0000000�00000000207�13670045075�0017201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Wire Tutorial has moved The Wire Tutorial has moved to [the Wire repository](https://github.com/google/wire/tree/master/_tutorial). �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0014761�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016266�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/example_test.go������������������������������������������������������0000664�0000000�0000000�00000004367�13670045075�0021321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awskms_test import ( "context" "log" "github.com/aws/aws-sdk-go/aws/session" "gocloud.dev/secrets" "gocloud.dev/secrets/awskms" ) func ExampleOpenKeeper() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Establish an AWS session. // See https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ for more info. sess, err := session.NewSession(nil) if err != nil { log.Fatal(err) } // Get a client to use with the KMS API. client, err := awskms.Dial(sess) if err != nil { log.Fatal(err) } // Construct a *secrets.Keeper. keeper := awskms.OpenKeeper(client, "alias/test-secrets", nil) defer keeper.Close() } func Example_openFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/secrets/awskms" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Use one of the following: // 1. By ID. keeperByID, err := secrets.OpenKeeper(ctx, "awskms://1234abcd-12ab-34cd-56ef-1234567890ab?region=us-east-1") if err != nil { log.Fatal(err) } defer keeperByID.Close() // 2. By alias. keeperByAlias, err := secrets.OpenKeeper(ctx, "awskms://alias/ExampleAlias?region=us-east-1") if err != nil { log.Fatal(err) } defer keeperByAlias.Close() // 3. By ARN. const arn = "arn:aws:kms:us-east-1:111122223333:key/" + "1234abcd-12ab-34bc-56ef-1234567890ab" keeperByARN, err := secrets.OpenKeeper(ctx, "awskms://"+arn+"?region=us-east-1") if err != nil { log.Fatal(err) } defer keeperByARN.Close() } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/kms.go���������������������������������������������������������������0000664�0000000�0000000�00000015254�13670045075�0017416�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package awskms provides a secrets implementation backed by AWS KMS. // Use OpenKeeper to construct a *secrets.Keeper. // // URLs // // For secrets.OpenKeeper, awskms registers for the scheme "awskms". // The default URL opener will use an AWS session with the default credentials // and configuration; see https://docs.aws.amazon.com/sdk-for-go/api/aws/session/ // for more details. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // awskms exposes the following type for As: // - Error: awserr.Error package awskms // import "gocloud.dev/secrets/awskms" import ( "context" "errors" "fmt" "net/url" "path" "strings" "sync" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/service/kms" "github.com/google/wire" gcaws "gocloud.dev/aws" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/secrets" ) func init() { secrets.DefaultURLMux().RegisterKeeper(Scheme, new(lazySessionOpener)) } // Set holds Wire providers for this package. var Set = wire.NewSet( wire.Struct(new(URLOpener), "ConfigProvider"), Dial, ) // Dial gets an AWS KMS service client. func Dial(p client.ConfigProvider) (*kms.KMS, error) { if p == nil { return nil, errors.New("getting KMS service: no AWS session provided") } return kms.New(p), nil } // lazySessionOpener obtains the AWS session from the environment on the first // call to OpenKeeperURL. type lazySessionOpener struct { init sync.Once opener *URLOpener err error } func (o *lazySessionOpener) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { o.init.Do(func() { sess, err := gcaws.NewDefaultSession() if err != nil { o.err = err return } o.opener = &URLOpener{ ConfigProvider: sess, } }) if o.err != nil { return nil, fmt.Errorf("open keeper %v: %v", u, o.err) } return o.opener.OpenKeeperURL(ctx, u) } // Scheme is the URL scheme awskms registers its URLOpener under on secrets.DefaultMux. const Scheme = "awskms" // URLOpener opens AWS KMS URLs like "awskms://keyID" or "awskms:///keyID". // // The URL Host + Path are used as the key ID, which can be in the form of an // Amazon Resource Name (ARN), alias name, or alias ARN. See // https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn // for more details. Note that ARNs may contain ":" characters, which cannot be // escaped in the Host part of a URL, so the "awskms:///<ARN>" form should be used. // // See gocloud.dev/aws/ConfigFromURLParams for supported query parameters // for overriding the aws.Session from the URL. type URLOpener struct { // ConfigProvider must be set to a non-nil value. ConfigProvider client.ConfigProvider // Options specifies the options to pass to OpenKeeper. Options KeeperOptions } // OpenKeeperURL opens an AWS KMS Keeper based on u. func (o *URLOpener) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { configProvider := &gcaws.ConfigOverrider{ Base: o.ConfigProvider, } overrideCfg, err := gcaws.ConfigFromURLParams(u.Query()) if err != nil { return nil, fmt.Errorf("open keeper %v: %v", u, err) } configProvider.Configs = append(configProvider.Configs, overrideCfg) client, err := Dial(configProvider) if err != nil { return nil, err } // A leading "/" means the Host was empty; trim the slash. // This is so that awskms:///foo:bar results in "foo:bar" instead of // "/foo:bar". keyID := strings.TrimPrefix(path.Join(u.Host, u.Path), "/") return OpenKeeper(client, keyID, &o.Options), nil } // OpenKeeper returns a *secrets.Keeper that uses AWS KMS. // The key ID can be in the form of an Amazon Resource Name (ARN), alias // name, or alias ARN. See // https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html#find-cmk-id-arn // for more details. // See the package documentation for an example. func OpenKeeper(client *kms.KMS, keyID string, opts *KeeperOptions) *secrets.Keeper { return secrets.NewKeeper(&keeper{ keyID: keyID, client: client, }) } type keeper struct { keyID string client *kms.KMS } // Decrypt decrypts the ciphertext into a plaintext. func (k *keeper) Decrypt(ctx context.Context, ciphertext []byte) ([]byte, error) { result, err := k.client.Decrypt(&kms.DecryptInput{ CiphertextBlob: ciphertext, }) if err != nil { return nil, err } return result.Plaintext, nil } // Encrypt encrypts the plaintext into a ciphertext. func (k *keeper) Encrypt(ctx context.Context, plaintext []byte) ([]byte, error) { result, err := k.client.Encrypt(&kms.EncryptInput{ KeyId: aws.String(k.keyID), Plaintext: plaintext, }) if err != nil { return nil, err } return result.CiphertextBlob, nil } // Close implements driver.Keeper.Close. func (k *keeper) Close() error { return nil } // ErrorAs implements driver.Keeper.ErrorAs. func (k *keeper) ErrorAs(err error, i interface{}) bool { e, ok := err.(awserr.Error) if !ok { return false } p, ok := i.(*awserr.Error) if !ok { return false } *p = e return true } // ErrorCode implements driver.ErrorCode. func (k *keeper) ErrorCode(err error) gcerrors.ErrorCode { ae, ok := err.(awserr.Error) if !ok { return gcerr.Unknown } ec, ok := errorCodeMap[ae.Code()] if !ok { return gcerr.Unknown } return ec } var errorCodeMap = map[string]gcerrors.ErrorCode{ kms.ErrCodeNotFoundException: gcerrors.NotFound, kms.ErrCodeInvalidCiphertextException: gcerrors.InvalidArgument, kms.ErrCodeInvalidKeyUsageException: gcerrors.InvalidArgument, kms.ErrCodeInternalException: gcerrors.Internal, kms.ErrCodeInvalidStateException: gcerrors.FailedPrecondition, kms.ErrCodeDisabledException: gcerrors.PermissionDenied, kms.ErrCodeInvalidGrantTokenException: gcerrors.PermissionDenied, kms.ErrCodeKeyUnavailableException: gcerrors.ResourceExhausted, kms.ErrCodeDependencyTimeoutException: gcerrors.DeadlineExceeded, } // KeeperOptions controls Keeper behaviors. // It is provided for future extensibility. type KeeperOptions struct{} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/kms_test.go����������������������������������������������������������0000664�0000000�0000000�00000007526�13670045075�0020460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package awskms import ( "context" "errors" "fmt" "os" "testing" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/kms" "gocloud.dev/internal/testing/setup" "gocloud.dev/secrets" "gocloud.dev/secrets/driver" "gocloud.dev/secrets/drivertest" ) const ( keyID1 = "alias/test-secrets" keyID2 = "alias/test-secrets2" region = "us-east-2" ) type harness struct { client *kms.KMS close func() } func (h *harness) MakeDriver(ctx context.Context) (driver.Keeper, driver.Keeper, error) { return &keeper{keyID: keyID1, client: h.client}, &keeper{keyID: keyID2, client: h.client}, nil } func (h *harness) Close() { h.close() } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { sess, _, done, _ := setup.NewAWSSession(ctx, t, region) return &harness{ client: kms.New(sess), close: done, }, nil } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (v verifyAs) Name() string { return "verify As function" } func (v verifyAs) ErrorCheck(k *secrets.Keeper, err error) error { var e awserr.Error if !k.ErrorAs(err, &e) { return errors.New("Keeper.ErrorAs failed") } if e.Code() != kms.ErrCodeInvalidCiphertextException { return fmt.Errorf("got %q, want %q", e.Code(), kms.ErrCodeInvalidCiphertextException) } return nil } // KMS-specific tests. func TestNoSessionProvidedError(t *testing.T) { if _, err := Dial(nil); err == nil { t.Error("got nil, want no AWS session provided") } } func TestNoConnectionError(t *testing.T) { prevAccessKey := os.Getenv("AWS_ACCESS_KEY") prevSecretKey := os.Getenv("AWS_SECRET_KEY") prevRegion := os.Getenv("AWS_REGION") os.Setenv("AWS_ACCESS_KEY", "myaccesskey") os.Setenv("AWS_SECRET_KEY", "mysecretkey") os.Setenv("AWS_REGION", "us-east-1") defer func() { os.Setenv("AWS_ACCESS_KEY", prevAccessKey) os.Setenv("AWS_SECRET_KEY", prevSecretKey) os.Setenv("AWS_REGION", prevRegion) }() sess, err := session.NewSession() if err != nil { t.Fatal(err) } client, err := Dial(sess) if err != nil { t.Fatal(err) } keeper := OpenKeeper(client, keyID1, nil) defer keeper.Close() if _, err := keeper.Encrypt(context.Background(), []byte("test")); err == nil { t.Error("got nil, want UnrecognizedClientException") } } func TestOpenKeeper(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK, by alias. {"awskms://alias/my-key", false}, // OK, by ARN with empty Host. {"awskms:///arn:aws:kms:us-east-1:932528106278:alias/gocloud-test", false}, // OK, by ARN with empty Host. {"awskms:///arn:aws:kms:us-east-1:932528106278:key/8be0dcc5-da0a-4164-a99f-649015e344b5", false}, // OK, overriding region. {"awskms://alias/my-key?region=us-west1", false}, // Unknown parameter. {"awskms://alias/my-key?param=value", true}, } ctx := context.Background() for _, test := range tests { keeper, err := secrets.OpenKeeper(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err == nil { if err = keeper.Close(); err != nil { t.Errorf("%s: got error during close: %v", test.URL, err) } } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/testdata/������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0020077�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/testdata/TestConformance/��������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0023171�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/testdata/TestConformance/TestAs/�������������������������������������0000775�0000000�0000000�00000000000�13670045075�0024374�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/testdata/TestConformance/TestAs/verify_As_function.replay������������0000664�0000000�0000000�00000004402�13670045075�0031446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOdMePSL/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "a77a764570a5d315", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6ImJXRnNabTl5YldWa0lHTnBjR2hsY2lCdFpYTnpZV2RsIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:54 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "d3a50e08-bcb0-4f7e-9f6f-33d642567bd3" ] }, "Body": "eyJfX3R5cGUiOiJJbnZhbGlkQ2lwaGVydGV4dEV4Y2VwdGlvbiJ9" } } ] }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������verify_As_returns_false_when_passed_nil.replay������������������������������������������������������0000664�0000000�0000000�00000004402�13670045075�0035640�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�go-cloud-0.20.0/secrets/awskms/testdata/TestConformance/TestAs���������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOeCIySav5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "a26fb17ade54ed0e", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "53" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6ImJXRnNabTl5YldWa0lHTnBjR2hsY2lCdFpYTnpZV2RsIn0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:54 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "f541bbd7-115a-43d8-8e14-6fed20db8556" ] }, "Body": "eyJfX3R5cGUiOiJJbnZhbGlkQ2lwaGVydGV4dEV4Y2VwdGlvbiJ9" } } ] }��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/testdata/TestConformance/TestDecryptMalformedError.replay������������0000664�0000000�0000000�00000022603�13670045075�0031525�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOdDEBX6/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "28e5dbae6e8de8db", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Encrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJLZXlJZCI6ImFsaWFzL3Rlc3Qtc2VjcmV0cyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "381" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:53 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "22e32269-ddd4-40c8-8a22-6cb5b6e54d88" ] }, "Body": "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3R20vU0RWckd4WklVd0RHM1AxSndISkFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTTZubVo4bHdHZitsQmR6MHlBZ0VRZ0REajl6ZFRiSkxNcE1oUG9CY3RFcDlYV1BlSXRES3dqSGp4THN6RW5VK252aThvaEw3eGhwb1M2Z3JCN0YvWFZmRT0iLCJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyJ9" } }, { "ID": "eb267ed401486b5b", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFnSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3R20vU0RWckd4WklVd0RHM1AxSndISkFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTTZubVo4bHdHZitsQmR6MHlBZ0VRZ0REajl6ZFRiSkxNcE1oUG9CY3RFcDlYV1BlSXRES3dqSGp4THN6RW5VK252aThvaEw3eGhwb1M2Z3JCN0YvWFZmRT0ifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:53 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "0dd987ac-258a-413f-ad6e-afd99b7530c4" ] }, "Body": "eyJfX3R5cGUiOiJJbnZhbGlkQ2lwaGVydGV4dEV4Y2VwdGlvbiJ9" } }, { "ID": "32da374b84c10201", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUFlQThDYXpDcHdybGZlNE0rZ0JBYXVKWkNXMXhmQVRNNm5ZRTUzREdqbnR4WEFhYjlJTldzYkZraFRBTWJjL1VuQWNrQUFBQnpNSEVHQ1NxR1NJYjNEUUVIQnFCa01HSUNBUUF3WFFZSktvWklodmNOQVFjQk1CNEdDV0NHU0FGbEF3UUJMakFSQkF6cWVabnlYQVovNlVGM1BUSUNBUkNBTU9QM04xTnNrc3lreUUrZ0Z5MFNuMWRZOTRpME1yQ01lUEV1ek1TZFQ2ZStMeWlFdnZHR21oTHFDc0hzWDlkVjhRPT0ifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:53 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "213edbc4-c35b-43b4-a5f2-6a07b4182ec3" ] }, "Body": "eyJfX3R5cGUiOiJJbnZhbGlkQ2lwaGVydGV4dEV4Y2VwdGlvbiJ9" } }, { "ID": "a88cb138c02d1d39", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3R20vU0RWckd4WklVd0RHM1AxSndISkFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTTZubVo4bHdHZitsQmR6MHlBZ0VRZ0REajl6ZFRiSkxNcE1oUG9CY3RFcDlYV1BlSXRES3dqSGp4THN6RW5VK252aThvaEw3eGhwb1M2Z3JCN0YvWDhBPT0ifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:53 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "f752a7eb-c8f1-48fe-9024-8e51a567d7a9" ] }, "Body": "eyJfX3R5cGUiOiJJbnZhbGlkQ2lwaGVydGV4dEV4Y2VwdGlvbiJ9" } }, { "ID": "fb340a1e85ce9025", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3R20vU0RWckd4WklVd0RHM1AxSndISkFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTTZubVo4bHdHZitsQmR6MHlBZ0VRZ0REajl6ZFRiSkxNcE1oUG9CY3RFcDlYV1BlSXRES3dqSGp4THN6RW5VK252aThvaEw3eGhwb1M2Z3JCN0YvWFZmRUUifQ==" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "39" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:53 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "f6eea6f9-c615-4db8-a57a-295668e1c34a" ] }, "Body": "eyJfX3R5cGUiOiJJbnZhbGlkQ2lwaGVydGV4dEV4Y2VwdGlvbiJ9" } } ] }�����������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/testdata/TestConformance/TestEncryptDecrypt.replay�������������������0000664�0000000�0000000�00000011103�13670045075�0030222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSObALAiX/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "e83f2ff27325626e", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Encrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJLZXlJZCI6ImFsaWFzL3Rlc3Qtc2VjcmV0cyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "381" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:51 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "219fd545-5469-4755-aed9-ce2364d2b232" ] }, "Body": "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3SDhvNCs3KzV2dy9uWE9POVVva3JoTEFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTUJVdWhqR0xEMkZkakVKV21BZ0VRZ0RDVHZ3VUVhVW1aSkNqelMrOTF6NzJmMHFhV0RXSERMbmxKMW15WDQ4ek94WGNhTmZBYzVmSXA2TjlzSDBWZ3pBWT0iLCJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyJ9" } }, { "ID": "121b0abcdd239420", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3SDhvNCs3KzV2dy9uWE9POVVva3JoTEFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTUJVdWhqR0xEMkZkakVKV21BZ0VRZ0RDVHZ3VUVhVW1aSkNqelMrOTF6NzJmMHFhV0RXSERMbmxKMW15WDQ4ek94WGNhTmZBYzVmSXA2TjlzSDBWZ3pBWT0ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "172" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:52 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "d50ae407-3e18-4bba-8d34-e5ee35f232b5" ] }, "Body": "eyJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" } } ] }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/testdata/TestConformance/TestMultipleEncryptionsNotEqual.replay������0000664�0000000�0000000�00000020436�13670045075�0032756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOcBNY74f5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "764d1960cb780f06", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Encrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJLZXlJZCI6ImFsaWFzL3Rlc3Qtc2VjcmV0cyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "381" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:52 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "8cd3bf8a-4512-4238-809a-886a649bd951" ] }, "Body": "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3R2tBL0ROanAyNytGMlM2TCtIR0JVWEFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTXZ4TFZtbm53OWV6K0xmYm9BZ0VRZ0RBV01aKzBOVXpUVTFYSTdjMm1zdlhiY0Yyd20wZWhIOFlUcVcxNFNoL2lJb2x0czBWM0RuNzVGd2kxamtyUUFJOD0iLCJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyJ9" } }, { "ID": "cbb588fac69efd58", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Encrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJLZXlJZCI6ImFsaWFzL3Rlc3Qtc2VjcmV0cyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "381" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:52 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "53ef938f-09af-43f2-9b5f-3117d4cd9458" ] }, "Body": "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3RVFsT2Z3R2IzMVphL2JsYmxiaUR5OEFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTXlyaGpjTyt6eFJMaGVRdU9BZ0VRZ0RETTAwSWNtbUJ1ZXdmOXM4eFNxVkZML0xwWVJ3a041TFBQWEVqWlVPVThVeU1nNTdUREtxUUlSMSswYlh4QndoND0iLCJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyJ9" } }, { "ID": "7c9ff58ea835ce07", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3R2tBL0ROanAyNytGMlM2TCtIR0JVWEFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTXZ4TFZtbm53OWV6K0xmYm9BZ0VRZ0RBV01aKzBOVXpUVTFYSTdjMm1zdlhiY0Yyd20wZWhIOFlUcVcxNFNoL2lJb2x0czBWM0RuNzVGd2kxamtyUUFJOD0ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "172" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:52 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "634fdf20-6930-403e-aa52-e0ebc4449562" ] }, "Body": "eyJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" } }, { "ID": "49deacf64ba8057e", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3RVFsT2Z3R2IzMVphL2JsYmxiaUR5OEFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTXlyaGpjTyt6eFJMaGVRdU9BZ0VRZ0RETTAwSWNtbUJ1ZXdmOXM4eFNxVkZML0xwWVJ3a041TFBQWEVqWlVPVThVeU1nNTdUREtxUUlSMSswYlh4QndoND0ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "172" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:52 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "bb4c433a-104a-4428-a5a9-f3489a7639b2" ] }, "Body": "eyJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" } } ] }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/awskms/testdata/TestConformance/TestMultipleKeys.replay���������������������0000664�0000000�0000000�00000020436�13670045075�0027703�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOcJG7C0v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Amz-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$", "^Authorization$", "^Duration$", "^X-Amz-Security-Token$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": [ "^X-Amz-Date$" ], "RemoveParams": [ "^X-Amz-Credential$", "^X-Amz-Signature$", "^X-Amz-Security-Token$" ] }, "Entries": [ { "ID": "873133bfeaa8ad78", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "73" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Encrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJLZXlJZCI6ImFsaWFzL3Rlc3Qtc2VjcmV0cyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "381" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:52 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "8535741b-2aaa-4e36-b815-a186ae071bba" ] }, "Body": "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3SFNCbkR1MlBhN1p3N1NVQUgyb3lzWEFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTSttRFdWNWRSazhpOXBuS3BBZ0VRZ0RDbzh0WkFjZjhaUTVaOHIzLzRCeVBhR2hnL2VtRFZFUE9ydGZGeHJhRGZyVWhxOGJXRzE3MTRlb0c2WDlVNVFWbz0iLCJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyJ9" } }, { "ID": "b84c6144f996fda9", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "74" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Encrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJLZXlJZCI6ImFsaWFzL3Rlc3Qtc2VjcmV0czIiLCJQbGFpbnRleHQiOiJTU2R0SUdFZ2MyVmpjbVYwSUcxbGMzTmhaMlVoIn0=" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "381" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:52 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "0a5cbcbe-6e56-49a5-9075-ad8f99bb7270" ] }, "Body": "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdsc3NJbnc1K2t3TXhhNnI5NVlvY3pCYks1S3htRFZHTytaWkU2SW5yZVZ3SHdmZWQ3Q0I4NGlVVzBZU2phblByR0FBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTUhFUmU2RzJFZklQZUxIZlNBZ0VRZ0RDTmsvOFpGZHBlRnZoNE9LUEVDUFVxNGw4djFscmlwZjhzMW1ETVpzUm96ZVcrTUYyNzdRV3RManl1SVJXVGtWUT0iLCJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5L2Y2YzYyMjg5LTEzNjEtNGM3OC1iN2I2LThlYWU2MTk0OTRkMiJ9" } }, { "ID": "9566d8248d58f101", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdQQW1zd3FjSzVYM3VEUG9BUUdyaVdRbHRjWHdFek9wMkJPZHd4bzU3Y1Z3SFNCbkR1MlBhN1p3N1NVQUgyb3lzWEFBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTSttRFdWNWRSazhpOXBuS3BBZ0VRZ0RDbzh0WkFjZjhaUTVaOHIzLzRCeVBhR2hnL2VtRFZFUE9ydGZGeHJhRGZyVWhxOGJXRzE3MTRlb0c2WDlVNVFWbz0ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "172" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:53 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "ddf20770-e03a-4f83-a24f-4902699bcb84" ] }, "Body": "eyJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5Lzg5Mzg4YTdlLTUxYWMtNGZhNS1hMWU1LTA0MjE0MWVmMDI2YyIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" } }, { "ID": "11b358c7101da00a", "Request": { "Method": "POST", "URL": "https://kms.us-east-2.amazonaws.com/", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "253" ], "User-Agent": [ "CLEARED" ], "X-Amz-Date": [ "CLEARED" ], "X-Amz-Target": [ "TrentService.Decrypt" ] }, "MediaType": "application/x-amz-json-1.1", "BodyParts": [ "eyJDaXBoZXJ0ZXh0QmxvYiI6IkFRSUNBSGdsc3NJbnc1K2t3TXhhNnI5NVlvY3pCYks1S3htRFZHTytaWkU2SW5yZVZ3SHdmZWQ3Q0I4NGlVVzBZU2phblByR0FBQUFjekJ4QmdrcWhraUc5dzBCQndhZ1pEQmlBZ0VBTUYwR0NTcUdTSWIzRFFFSEFUQWVCZ2xnaGtnQlpRTUVBUzR3RVFRTUhFUmU2RzJFZklQZUxIZlNBZ0VRZ0RDTmsvOFpGZHBlRnZoNE9LUEVDUFVxNGw4djFscmlwZjhzMW1ETVpzUm96ZVcrTUYyNzdRV3RManl1SVJXVGtWUT0ifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache, no-store, must-revalidate, private" ], "Content-Length": [ "172" ], "Content-Type": [ "application/x-amz-json-1.1" ], "Date": [ "Tue, 9 Jun 2020 06:30:53 GMT" ], "Expires": [ "0" ], "Pragma": [ "no-cache" ], "X-Amzn-Requestid": [ "814d1eb5-5163-4715-a4b1-023e74256f8b" ] }, "Body": "eyJFbmNyeXB0aW9uQWxnb3JpdGhtIjoiU1lNTUVUUklDX0RFRkFVTFQiLCJLZXlJZCI6ImFybjphd3M6a21zOnVzLWVhc3QtMjo0NjIzODAyMjU3MjI6a2V5L2Y2YzYyMjg5LTEzNjEtNGM3OC1iN2I2LThlYWU2MTk0OTRkMiIsIlBsYWludGV4dCI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" } } ] }����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/��������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017674�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/akv.go��������������������������������������������������������0000664�0000000�0000000�00000024060�13670045075�0021006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package azurekeyvault provides a secrets implementation backed by Azure KeyVault. // See https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis for more information. // Use OpenKeeper to construct a *secrets.Keeper. // // URLs // // For secrets.OpenKeeper, azurekeyvault registers for the scheme "azurekeyvault". // The default URL opener will use Dial, which gets default credentials from the // environment, unless the AZURE_KEYVAULT_AUTH_VIA_CLI environment variable is // set to true, in which case it uses DialUsingCLIAuth to get credentials from the // "az" command line. // // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // azurekeyvault exposes the following type for As: // - Error: autorest.DetailedError, see https://godoc.org/github.com/Azure/go-autorest/autorest#DetailedError package azurekeyvault import ( "context" "encoding/base64" "fmt" "net/url" "os" "path" "regexp" "strconv" "strings" "sync" "github.com/Azure/azure-sdk-for-go/services/keyvault/v7.0/keyvault" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure/auth" "github.com/google/wire" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/useragent" "gocloud.dev/secrets" ) var ( // Map of HTTP Status Code to go-cloud ErrorCode errorCodeMap = map[int]gcerrors.ErrorCode{ 200: gcerrors.OK, 400: gcerrors.InvalidArgument, 401: gcerrors.PermissionDenied, 403: gcerrors.PermissionDenied, 404: gcerrors.NotFound, 408: gcerrors.DeadlineExceeded, 429: gcerrors.ResourceExhausted, 500: gcerrors.Internal, 501: gcerrors.Unimplemented, } ) func init() { secrets.DefaultURLMux().RegisterKeeper(Scheme, new(defaultDialer)) } // Set holds Wire providers for this package. var Set = wire.NewSet( Dial, wire.Struct(new(URLOpener), "Client"), ) // defaultDialer dials Azure KeyVault from the environment on the first call to OpenKeeperURL. type defaultDialer struct { init sync.Once opener *URLOpener err error } func (o *defaultDialer) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { o.init.Do(func() { // Determine the dialer to use. The default one gets // credentials from the environment, but an alternative is // to get credentials from the az CLI. dialer := Dial useCLIStr := os.Getenv("AZURE_KEYVAULT_AUTH_VIA_CLI") if useCLIStr != "" { if b, err := strconv.ParseBool(useCLIStr); err != nil { o.err = fmt.Errorf("invalid value %q for environment variable AZURE_KEYVAULT_AUTH_VIA_CLI: %v", useCLIStr, err) return } else if b { dialer = DialUsingCLIAuth } } client, err := dialer() if err != nil { o.err = err return } o.opener = &URLOpener{Client: client} }) if o.err != nil { return nil, fmt.Errorf("open keeper %v: failed to Dial default KeyVault: %v", u, o.err) } return o.opener.OpenKeeperURL(ctx, u) } // Scheme is the URL scheme azurekeyvault registers its URLOpener under on secrets.DefaultMux. const Scheme = "azurekeyvault" // URLOpener opens Azure KeyVault URLs like // "azurekeyvault://{keyvault-name}.vault.azure.net/keys/{key-name}/{key-version}?algorithm=RSA-OAEP-256". // // The "azurekeyvault" URL scheme is replaced with "https" to construct an Azure // Key Vault keyID, as described in https://docs.microsoft.com/en-us/azure/key-vault/about-keys-secrets-and-certificates. // The "/{key-version}"" suffix is optional; it defaults to the latest version. // // The "algorithm" query parameter sets the algorithm to use; see // https://docs.microsoft.com/en-us/rest/api/keyvault/encrypt/encrypt#jsonwebkeyencryptionalgorithm // for supported algorithms. It defaults to "RSA-OAEP-256". // // No other query parameters are supported. type URLOpener struct { // Client must be set to a non-nil value. Client *keyvault.BaseClient // Options specifies the options to pass to OpenKeeper. Options KeeperOptions } // OpenKeeperURL opens an Azure KeyVault Keeper based on u. func (o *URLOpener) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { q := u.Query() algorithm := q.Get("algorithm") if algorithm != "" { o.Options.Algorithm = keyvault.JSONWebKeyEncryptionAlgorithm(algorithm) q.Del("algorithm") } for param := range q { return nil, fmt.Errorf("open keeper %v: invalid query parameter %q", u, param) } keyID := "https://" + path.Join(u.Host, u.Path) return OpenKeeper(o.Client, keyID, &o.Options) } type keeper struct { client *keyvault.BaseClient keyVaultURI string keyName string keyVersion string options *KeeperOptions } // KeeperOptions provides configuration options for encryption/decryption operations. type KeeperOptions struct { // Algorithm sets the encryption algorithm used. // Defaults to "RSA-OAEP-256". // See https://docs.microsoft.com/en-us/rest/api/keyvault/encrypt/encrypt#jsonwebkeyencryptionalgorithm // for more details. Algorithm keyvault.JSONWebKeyEncryptionAlgorithm } // Dial gets a new *keyvault.BaseClient using authorization from the environment. // See https://docs.microsoft.com/en-us/go/azure/azure-sdk-go-authorization#use-environment-based-authentication. func Dial() (*keyvault.BaseClient, error) { return dial(false) } // DialUsingCLIAuth gets a new *keyvault.BaseClient using authorization from the "az" CLI. func DialUsingCLIAuth() (*keyvault.BaseClient, error) { return dial(true) } // dial is a helper for Dial and DialUsingCLIAuth. func dial(useCLI bool) (*keyvault.BaseClient, error) { // Set the resource explicitly, because the default is the "resource manager endpoint" // instead of the keyvault endpoint. // https://azidentity.azurewebsites.net/post/2018/11/30/azure-key-vault-oauth-resource-value-https-vault-azure-net-no-slash // has some discussion. resource := os.Getenv("AZURE_AD_RESOURCE") if resource == "" { resource = "https://vault.azure.net" } authorizer := auth.NewAuthorizerFromEnvironmentWithResource if useCLI { authorizer = auth.NewAuthorizerFromCLIWithResource } auth, err := authorizer(resource) if err != nil { return nil, err } client := keyvault.NewWithoutDefaults() client.Authorizer = auth client.Sender = autorest.NewClientWithUserAgent(useragent.AzureUserAgentPrefix("secrets")) return &client, nil } var ( // Note that the last binding may be just a key, or key/version. keyIDRE = regexp.MustCompile(`^(https://.+\.vault\.(?:azure\.net|azure\.cn|usgovcloudapi\.net|microsoftazure\.de)/)keys/(.+)$`) ) // OpenKeeper returns a *secrets.Keeper that uses Azure keyVault. // // client is a *keyvault.BaseClient instance, see https://godoc.org/github.com/Azure/azure-sdk-for-go/services/keyvault/v7.0/keyvault#BaseClient. // // keyID is a Azure Key Vault key identifier like "https://{keyvault-name}.vault.azure.net/keys/{key-name}/{key-version}". // The "/{key-version}" suffix is optional; it defaults to the latest version. // See https://docs.microsoft.com/en-us/azure/key-vault/about-keys-secrets-and-certificates // for more details. func OpenKeeper(client *keyvault.BaseClient, keyID string, opts *KeeperOptions) (*secrets.Keeper, error) { drv, err := openKeeper(client, keyID, opts) if err != nil { return nil, err } return secrets.NewKeeper(drv), nil } func openKeeper(client *keyvault.BaseClient, keyID string, opts *KeeperOptions) (*keeper, error) { if opts == nil { opts = &KeeperOptions{} } if opts.Algorithm == "" { opts.Algorithm = keyvault.RSAOAEP256 } matches := keyIDRE.FindStringSubmatch(keyID) if len(matches) != 3 { return nil, fmt.Errorf("invalid keyID %q; must match %v %v", keyID, keyIDRE, matches) } // matches[0] is the whole keyID, [1] is the keyVaultURI, and [2] is the key or the key/version. keyVaultURI := matches[1] parts := strings.SplitN(matches[2], "/", 2) keyName := parts[0] var keyVersion string if len(parts) > 1 { keyVersion = parts[1] } return &keeper{ client: client, keyVaultURI: keyVaultURI, keyName: keyName, keyVersion: keyVersion, options: opts, }, nil } // Encrypt encrypts the plaintext into a ciphertext. func (k *keeper) Encrypt(ctx context.Context, plaintext []byte) ([]byte, error) { b64Text := base64.StdEncoding.EncodeToString(plaintext) keyOpsResult, err := k.client.Encrypt(ctx, k.keyVaultURI, k.keyName, k.keyVersion, keyvault.KeyOperationsParameters{ Algorithm: k.options.Algorithm, Value: &b64Text, }) if err != nil { return nil, err } return []byte(*keyOpsResult.Result), nil } // Decrypt decrypts the ciphertext into a plaintext. func (k *keeper) Decrypt(ctx context.Context, ciphertext []byte) ([]byte, error) { cipherval := string(ciphertext) keyOpsResult, err := k.client.Decrypt(ctx, k.keyVaultURI, k.keyName, k.keyVersion, keyvault.KeyOperationsParameters{ Algorithm: k.options.Algorithm, Value: &cipherval, }) if err != nil { return nil, err } return base64.RawURLEncoding.DecodeString(*keyOpsResult.Result) } // Close implements driver.Keeper.Close. func (k *keeper) Close() error { return nil } // ErrorAs implements driver.Keeper.ErrorAs. func (k *keeper) ErrorAs(err error, i interface{}) bool { e, ok := err.(autorest.DetailedError) if !ok { return false } p, ok := i.(*autorest.DetailedError) if !ok { return false } *p = e return true } // ErrorCode implements driver.ErrorCode. func (k *keeper) ErrorCode(err error) gcerrors.ErrorCode { de, ok := err.(autorest.DetailedError) if !ok { return gcerr.Unknown } ec, ok := errorCodeMap[de.StatusCode.(int)] if !ok { return gcerr.Unknown } return ec } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/akv_test.go���������������������������������������������������0000664�0000000�0000000�00000014045�13670045075�0022047�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package azurekeyvault import ( "context" "errors" "log" "os" "strings" "testing" "github.com/Azure/azure-sdk-for-go/services/keyvault/v7.0/keyvault" "github.com/Azure/go-autorest/autorest" "github.com/Azure/go-autorest/autorest/azure" "gocloud.dev/internal/testing/setup" "gocloud.dev/secrets" "gocloud.dev/secrets/driver" "gocloud.dev/secrets/drivertest" ) // Prerequisites for --record mode // // 1. Sign-in to your Azure Subscription at http://portal.azure.com. // // 2. Create a KeyVault, see // https://docs.microsoft.com/en-us/azure/key-vault/quick-create-portal. // // 3. Choose an authentication model. This test uses Service Principal, see // https://docs.microsoft.com/en-us/rest/api/azure/index#register-your-client-application-with-azure-ad. // For documentation on acceptable auth models, see // https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis. // // 4. Set your environment variables depending on the auth model selection. // Modify helper initEnv() as needed. // For Service Principal, please set the following, see // https://docs.microsoft.com/en-us/go/azure/azure-sdk-go-authorization. // // - AZURE_TENANT_ID: Go to "Azure Active Directory", then "Properties". The // "Directory ID" property is your AZURE_TENANT_ID. // - AZURE_CLIENT_ID: Go to "Azure Active Directory", then "App Registrations", // then "View all applications". The "Application ID" column shows your // AZURE_CLIENT_ID. // - AZURE_CLIENT_SECRET: Click on the application from the previous step, // then "Settings" and then "Keys". Create a key and use it as your // AZURE_CLIENT_SECRET. Make sure to save the value as it's hidden after // the initial creation. // - AZURE_ENVIRONMENT: (optional). // - AZURE_AD_RESOURCE: (optional). // // 5. Create/Import a Key. This can be done in the Azure Portal under "Key vaults". // // 6. Update constants below to match your Azure KeyVault settings. const ( keyID1 = "https://go-cdk.vault.azure.net/keys/test1" keyID2 = "https://go-cdk.vault.azure.net/keys/test2" ) type harness struct { client *keyvault.BaseClient close func() } func (h *harness) MakeDriver(ctx context.Context) (driver.Keeper, driver.Keeper, error) { keeper1, err := openKeeper(h.client, keyID1, nil) if err != nil { return nil, nil, err } keeper2, err := openKeeper(h.client, keyID2, nil) if err != nil { return nil, nil, err } return keeper1, keeper2, nil } func (h *harness) Close() { h.close() } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { // Use initEnv to setup your environment variables. if *setup.Record { initEnv() } sender, done := setup.NewAzureKeyVaultTestClient(ctx, t) client, err := Dial() if err != nil { return nil, err } client.Sender = sender // Use a null authorizer for replay mode. if !*setup.Record { na := &autorest.NullAuthorizer{} client.Authorizer = na } return &harness{ client: client, close: done, }, nil } func initEnv() { env, err := azure.EnvironmentFromName("AZUREPUBLICCLOUD") if err != nil { log.Fatalln(err) } // For Client Credentials authorization, set AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET // For Client Certificate and Azure Managed Service Identity, see doc below for help // https://github.com/Azure/azure-sdk-for-go if os.Getenv("AZURE_TENANT_ID") == "" || os.Getenv("AZURE_CLIENT_ID") == "" || os.Getenv("AZURE_CLIENT_SECRET") == "" { log.Fatal("Missing environment for recording tests, set AZURE_TENANT_ID, AZURE_CLIENT_ID and AZURE_CLIENT_SECRET") } os.Setenv("AZURE_ENVIRONMENT", env.Name) vaultEndpoint := strings.TrimSuffix(env.KeyVaultEndpoint, "/") os.Setenv("AZURE_AD_RESOURCE", vaultEndpoint) } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (v verifyAs) Name() string { return "verify As function" } func (v verifyAs) ErrorCheck(k *secrets.Keeper, err error) error { var e autorest.DetailedError if !k.ErrorAs(err, &e) { return errors.New("Keeper.ErrorAs failed") } return nil } // Key Vault-specific tests. func TestNoConnectionError(t *testing.T) { client := keyvault.NewWithoutDefaults() k, err := OpenKeeper(&client, keyID1, nil) if err != nil { t.Fatal(err) } defer k.Close() if _, err := k.Encrypt(context.Background(), []byte("secrets")); err == nil { t.Error("Encrypt: got nil, want no connection error") } } func TestOpenKeeper(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"azurekeyvault://mykeyvault.vault.azure.net/keys/mykey/myversion", false}, // No version -> OK. {"azurekeyvault://mykeyvault.vault.azure.net/keys/mykey", false}, // Setting algorithm query param -> OK. {"azurekeyvault://mykeyvault.vault.azure.net/keys/mykey/myversion?algorithm=RSA-OAEP", false}, // Invalid query parameter. {"azurekeyvault://mykeyvault.vault.azure.net/keys/mykey/myversion?param=value", true}, // Missing key vault name. {"azurekeyvault:///vault.azure.net/keys/mykey/myversion", true}, // Missing "keys". {"azurekeyvault://mykeyvault.vault.azure.net/mykey/myversion", true}, } ctx := context.Background() for _, test := range tests { keeper, err := secrets.OpenKeeper(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err == nil { if err = keeper.Close(); err != nil { t.Errorf("%s: got error during close: %v", test.URL, err) } } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/example_test.go�����������������������������������������������0000664�0000000�0000000�00000004170�13670045075�0022717�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package azurekeyvault_test import ( "context" "log" "gocloud.dev/secrets" "gocloud.dev/secrets/azurekeyvault" ) func ExampleOpenKeeper() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Get a client to use with the Azure KeyVault API, using default // authorization from the environment. // // You can alternatively use DialUsingCLIAuth to use auth from the // "az" CLI. client, err := azurekeyvault.Dial() if err != nil { log.Fatal(err) } // Construct a *secrets.Keeper. keeper, err := azurekeyvault.OpenKeeper(client, "https://mykeyvaultname.vault.azure.net/keys/mykeyname", nil) if err != nil { log.Fatal(err) } defer keeper.Close() } func Example_openFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/secrets/azurekeyvault" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // The "azurekeyvault" URL scheme is replaced with "https" to construct an Azure // Key Vault keyID, as described in https://docs.microsoft.com/en-us/azure/key-vault/about-keys-secrets-and-certificates. // You can add an optional "/{key-version}" to the path to use a specific // version of the key; it defaults to the latest version. keeper, err := secrets.OpenKeeper(ctx, "azurekeyvault://mykeyvaultname.vault.azure.net/keys/mykeyname") if err != nil { log.Fatal(err) } defer keeper.Close() } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/testdata/�����������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0021505�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/testdata/TestConformance/�������������������������������������0000775�0000000�0000000�00000000000�13670045075�0024577�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/testdata/TestConformance/TestAs/������������������������������0000775�0000000�0000000�00000000000�13670045075�0026002�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/testdata/TestConformance/TestAs/verify_As_function.replay�����0000664�0000000�0000000�00000005243�13670045075�0033060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOUGPQ73v5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "e5739cc1e75af134", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "57" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6Im1hbGZvcm1lZCBjaXBoZXIgbWVzc2FnZSJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "119" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:44 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "77bc7d75-9db4-456b-bad6-c7525ee7da45" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjoiQmFkUGFyYW1ldGVyIiwibWVzc2FnZSI6IkNvbnRlbnQgb2YgJ3ZhbHVlJyBpcyBub3QgYmFzZTY0dXJsLlxyXG5Qcm9wZXJ0eSAndmFsdWUnIGlzIHJlcXVpcmVkLlxyXG4ifX0=" } } ] }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������verify_As_returns_false_when_passed_nil.replay������������������������������������������������������0000664�0000000�0000000�00000005243�13670045075�0037252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�go-cloud-0.20.0/secrets/azurekeyvault/testdata/TestConformance/TestAs��������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOUOl4jGP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "d59ee1fdba57eeef", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "57" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6Im1hbGZvcm1lZCBjaXBoZXIgbWVzc2FnZSJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "119" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:44 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "7a12ca76-041f-401f-9c19-8418f2db5396" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjoiQmFkUGFyYW1ldGVyIiwibWVzc2FnZSI6IkNvbnRlbnQgb2YgJ3ZhbHVlJyBpcyBub3QgYmFzZTY0dXJsLlxyXG5Qcm9wZXJ0eSAndmFsdWUnIGlzIHJlcXVpcmVkLlxyXG4ifX0=" } } ] }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/testdata/TestConformance/TestDecryptMalformedError.replay�����0000664�0000000�0000000�00000030736�13670045075�0033141�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOTIHrVVP5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "dd37541102535580", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//encrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "61" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "437" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:43 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "3c487536-0922-4988-80be-1d375f9499b4" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiTUF6UkNCUWZuTFR5YW5LdWZmMUw4SElNSnpudVNwWXEtYzZzUzhOZDJTTjdZS0YtYXU0eG1Dc0NFMmhsT0JtV2ZQOUFlTnF4V3FSXzRkSjVRdzFhaDNxV09uREtLZkdyamVlVWR0YkxLMFFSOS1JNDBTd2VVWlJtN3c3SkVqT1ltZHhRdWdLb3Q5MHc1TmFFTVdZY21mMlNwVGhCOFdlM0dpVlRTRjAyUDEzSmFYMFhTX1JGM0hFcnpFNWVmT19ZTEtKdV9lcmV2czFkUW5meDZJaHJVMEhJYUZ0R21TLXVGOFdBZm92Rmc0dDBFRF9WVlM5bEdxTG1sQ3FIUnIyeHhtenZTbHMwbVNYbUJEVGFEb1A5cGE5UmJZdlVzRjdMdDgtVm03bXJvUVRrekg5ekFkM3hPdGhndUw1dmdqSVN6Z2swWXBHX1B5UmNRbDBjZ1VfMUJ3In0=" } }, { "ID": "5aaa841e3de00c5f", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "375" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6Ik5BelJDQlFmbkxUeWFuS3VmZjFMOEhJTUp6bnVTcFlxLWM2c1M4TmQyU043WUtGLWF1NHhtQ3NDRTJobE9CbVdmUDlBZU5xeFdxUl80ZEo1UXcxYWgzcVdPbkRLS2ZHcmplZVVkdGJMSzBRUjktSTQwU3dlVVpSbTd3N0pFak9ZbWR4UXVnS290OTB3NU5hRU1XWWNtZjJTcFRoQjhXZTNHaVZUU0YwMlAxM0phWDBYU19SRjNIRXJ6RTVlZk9fWUxLSnVfZXJldnMxZFFuZng2SWhyVTBISWFGdEdtUy11RjhXQWZvdkZnNHQwRURfVlZTOWxHcUxtbENxSFJyMnh4bXp2U2xzMG1TWG1CRFRhRG9QOXBhOVJiWXZVc0Y3THQ4LVZtN21yb1FUa3pIOXpBZDN4T3RoZ3VMNXZnaklTemdrMFlwR19QeVJjUWwwY2dVXzFCdyJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "77" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:43 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "2e6c5efb-d13b-42db-b950-7b7c5004dd3e" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjoiQmFkUGFyYW1ldGVyIiwibWVzc2FnZSI6IlRoZSBwYXJhbWV0ZXIgaXMgaW5jb3JyZWN0LlxyXG4ifX0=" } }, { "ID": "4cf7f7b19843b16c", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "374" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6Ik16UkNCUWZuTFR5YW5LdWZmMUw4SElNSnpudVNwWXEtYzZzUzhOZDJTTjdZS0YtYXU0eG1Dc0NFMmhsT0JtV2ZQOUFlTnF4V3FSXzRkSjVRdzFhaDNxV09uREtLZkdyamVlVWR0YkxLMFFSOS1JNDBTd2VVWlJtN3c3SkVqT1ltZHhRdWdLb3Q5MHc1TmFFTVdZY21mMlNwVGhCOFdlM0dpVlRTRjAyUDEzSmFYMFhTX1JGM0hFcnpFNWVmT19ZTEtKdV9lcmV2czFkUW5meDZJaHJVMEhJYUZ0R21TLXVGOFdBZm92Rmc0dDBFRF9WVlM5bEdxTG1sQ3FIUnIyeHhtenZTbHMwbVNYbUJEVGFEb1A5cGE5UmJZdlVzRjdMdDgtVm03bXJvUVRrekg5ekFkM3hPdGhndUw1dmdqSVN6Z2swWXBHX1B5UmNRbDBjZ1VfMUJ3In0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "119" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:43 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "44c5f88a-97d1-4959-bec7-a9f2520060be" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjoiQmFkUGFyYW1ldGVyIiwibWVzc2FnZSI6IkNvbnRlbnQgb2YgJ3ZhbHVlJyBpcyBub3QgYmFzZTY0dXJsLlxyXG5Qcm9wZXJ0eSAndmFsdWUnIGlzIHJlcXVpcmVkLlxyXG4ifX0=" } }, { "ID": "a9286e199e456ca7", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "374" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6Ik1BelJDQlFmbkxUeWFuS3VmZjFMOEhJTUp6bnVTcFlxLWM2c1M4TmQyU043WUtGLWF1NHhtQ3NDRTJobE9CbVdmUDlBZU5xeFdxUl80ZEo1UXcxYWgzcVdPbkRLS2ZHcmplZVVkdGJMSzBRUjktSTQwU3dlVVpSbTd3N0pFak9ZbWR4UXVnS290OTB3NU5hRU1XWWNtZjJTcFRoQjhXZTNHaVZUU0YwMlAxM0phWDBYU19SRjNIRXJ6RTVlZk9fWUxLSnVfZXJldnMxZFFuZng2SWhyVTBISWFGdEdtUy11RjhXQWZvdkZnNHQwRURfVlZTOWxHcUxtbENxSFJyMnh4bXp2U2xzMG1TWG1CRFRhRG9QOXBhOVJiWXZVc0Y3THQ4LVZtN21yb1FUa3pIOXpBZDN4T3RoZ3VMNXZnaklTemdrMFlwR19QeVJjUWwwY2dVXzF2In0=" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "119" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:43 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "721e7285-66fa-4fd0-acd3-6a7d55d64ed7" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjoiQmFkUGFyYW1ldGVyIiwibWVzc2FnZSI6IkNvbnRlbnQgb2YgJ3ZhbHVlJyBpcyBub3QgYmFzZTY0dXJsLlxyXG5Qcm9wZXJ0eSAndmFsdWUnIGlzIHJlcXVpcmVkLlxyXG4ifX0=" } }, { "ID": "77f5e3458b0ed081", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "381" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6Ik1BelJDQlFmbkxUeWFuS3VmZjFMOEhJTUp6bnVTcFlxLWM2c1M4TmQyU043WUtGLWF1NHhtQ3NDRTJobE9CbVdmUDlBZU5xeFdxUl80ZEo1UXcxYWgzcVdPbkRLS2ZHcmplZVVkdGJMSzBRUjktSTQwU3dlVVpSbTd3N0pFak9ZbWR4UXVnS290OTB3NU5hRU1XWWNtZjJTcFRoQjhXZTNHaVZUU0YwMlAxM0phWDBYU19SRjNIRXJ6RTVlZk9fWUxLSnVfZXJldnMxZFFuZng2SWhyVTBISWFGdEdtUy11RjhXQWZvdkZnNHQwRURfVlZTOWxHcUxtbENxSFJyMnh4bXp2U2xzMG1TWG1CRFRhRG9QOXBhOVJiWXZVc0Y3THQ4LVZtN21yb1FUa3pIOXpBZDN4T3RoZ3VMNXZnaklTemdrMFlwR19QeVJjUWwwY2dVXzFCd1x1MDAwNCJ9" ] }, "Response": { "StatusCode": 400, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "119" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:43 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "5552fab5-feff-4949-96a1-8e4375c317e1" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJlcnJvciI6eyJjb2RlIjoiQmFkUGFyYW1ldGVyIiwibWVzc2FnZSI6IkNvbnRlbnQgb2YgJ3ZhbHVlJyBpcyBub3QgYmFzZTY0dXJsLlxyXG5Qcm9wZXJ0eSAndmFsdWUnIGlzIHJlcXVpcmVkLlxyXG4ifX0=" } } ] }����������������������������������go-cloud-0.20.0/secrets/azurekeyvault/testdata/TestConformance/TestEncryptDecrypt.replay������������0000664�0000000�0000000�00000012706�13670045075�0031642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOQCWVkGv5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "b497e57d1fbcd8d5", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//encrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "61" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "437" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:41 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "31fa6a59-62e1-4ed2-829a-c29d873004dc" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiUlNzMnBtckJpWHdSYUN0SzZKY3BIdFBZN2thcFN1ZUpBZVBwVEwwQlIxaWlXRFZQbzlNTlhrVHY2TzdJTHpZMkgzS3hrV2FWOEVheFNKcjhjOGN0bmg5T0VhNjdFVTlnNThUaktvc2tyM2ZhbDRhUUJtRi1QeEZsNjB0WHROcTltV3M1RlhrQk03dHVIUlE2SlZFeGk1RlozMnN5QXZUQlRZRUZuMlFSR015RzFja1l4aFhhcjBOYjlDM3hCVlEyajBvUkdCZ3hXV21ITkpKbTk1dTFaUlhHNUxjWlJaZlBVNmhvbzFrUjFkekRwSFgtalJsdjJWT2lHdjVOSXh4R1JjY0Vpa0hObVZUMW94R2ZibF83WFg1N3BJLXBUWTFjUEFHM3FKc1haaE02NGZ5TFQ2R2xoby0xeHc2Smlta1ctX1RSOTNlWXA4eEIzTHBFa2lvdlZ3In0=" } }, { "ID": "c327fdd64ab4b192", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "375" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlJTczJwbXJCaVh3UmFDdEs2SmNwSHRQWTdrYXBTdWVKQWVQcFRMMEJSMWlpV0RWUG85TU5Ya1R2Nk83SUx6WTJIM0t4a1dhVjhFYXhTSnI4YzhjdG5oOU9FYTY3RVU5ZzU4VGpLb3NrcjNmYWw0YVFCbUYtUHhGbDYwdFh0TnE5bVdzNUZYa0JNN3R1SFJRNkpWRXhpNUZaMzJzeUF2VEJUWUVGbjJRUkdNeUcxY2tZeGhYYXIwTmI5QzN4QlZRMmowb1JHQmd4V1dtSE5KSm05NXUxWlJYRzVMY1pSWmZQVTZob28xa1IxZHpEcEhYLWpSbHYyVk9pR3Y1Tkl4eEdSY2NFaWtITm1WVDFveEdmYmxfN1hYNTdwSS1wVFkxY1BBRzNxSnNYWmhNNjRmeUxUNkdsaG8tMXh3NkppbWtXLV9UUjkzZVlwOHhCM0xwRWtpb3ZWdyJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "123" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:41 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "2251c51e-854b-4a2b-bfb1-97c293afd47f" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiU1NkdElHRWdjMlZqY21WMElHMWxjM05oWjJVaCJ9" } } ] }����������������������������������������������������������TestMultipleEncryptionsNotEqual.replay��������������������������������������������������������������0000664�0000000�0000000�00000024257�13670045075�0034312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�go-cloud-0.20.0/secrets/azurekeyvault/testdata/TestConformance���������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSORM7hV//5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "e0944a768dafed0f", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//encrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "61" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "437" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:42 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "f26fe97b-face-40c1-89cf-0ef75d3f2276" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiSmoyYXZoYUlHWmhtQ2dSZUdaZ0ZWWnBnZWZ6djZsN2RrRmtfQ0lkRHFzQVFhTFlDY0poenE4T1ZpNUJJb2RWd2JzVTkyVDhaRm1DeWZRT01LUFlsbDZCSE1JY29aUW42VDZ6Z203M3czTDlCZElOR1l2ZXF6c2NIMGtaOFE0WlVjeVJwYmtHRGJhb3Zzd3JlcTN6amptdTM3QnJ3T0tFb3ctQUVfQ0J6MmM4VTVmZndaTUxCc01mQURMdnYybTQ4Z0RBc3ZFeHg3Rlc4b2VLVENlakNiZGNGMkdRajJOQU5WUEo3MlhrMWUwWWxuUjQxQS14ekFIRTZjMEVWMGI0dk1WaS1sQUdqV2wxbVNWc21VQnlpMjVybFF0cUFVUTV5Y1c3aWw4cXhKUXB4N3FSd2ltOUJTeFF4Z2YxUEtlNHRqLURlTExrNTNxY1p4czExaUtmalhRIn0=" } }, { "ID": "d0deb8d565b51d0c", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//encrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "61" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "437" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:42 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "66b1e1ce-45e5-40a1-a73a-6e79b9401ad5" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiUHpGTWw4SGo3SEZScnNrMmJWTEZDSnRsUmdfeG53VzI1eE9xRmxsX09HQ2VCcG1VZjRSNy0wVmN6aHFkQXhmWkVXak5VT0RwVlVwbDFFWnlhZ21GcUJoc05nU09pcG5wMk5kRnJGS2l0S3E2eGl1SDFKTVl0TUpRQ0E1cndZdVhzMUNPeDRtODlPaFc0eWI1S0FjdnRrR3RiU0tTa3VWbkhnTWUzY3Jrakd4bmMyZGxlbjJCcVZYZG85VTd1WHA4X1BfeHVLOHdqX0s0anRQVGd1ZzkzYnpPdTVWQ3M0cC1nbjdUcDVyWUVDcGhMdWU3WGg2TEgwTjN2RVdqYU1xWTBlZkZwaVB0Ny1PMXBqZlNfTlpJZDc5TjhvRUdsVDlkcXlvdTFTZ3JURzlya0tTTkM5S0UyV2tLdnBfVlA1UHdEaE9KeVdFOVlOTnpsc2V0akZFNERBIn0=" } }, { "ID": "2c1f1d9c7af432f4", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "375" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IkpqMmF2aGFJR1pobUNnUmVHWmdGVlpwZ2VmenY2bDdka0ZrX0NJZERxc0FRYUxZQ2NKaHpxOE9WaTVCSW9kVndic1U5MlQ4WkZtQ3lmUU9NS1BZbGw2QkhNSWNvWlFuNlQ2emdtNzN3M0w5QmRJTkdZdmVxenNjSDBrWjhRNFpVY3lScGJrR0RiYW92c3dyZXEzempqbXUzN0Jyd09LRW93LUFFX0NCejJjOFU1ZmZ3Wk1MQnNNZkFETHZ2Mm00OGdEQXN2RXh4N0ZXOG9lS1RDZWpDYmRjRjJHUWoyTkFOVlBKNzJYazFlMFlsblI0MUEteHpBSEU2YzBFVjBiNHZNVmktbEFHaldsMW1TVnNtVUJ5aTI1cmxRdHFBVVE1eWNXN2lsOHF4SlFweDdxUndpbTlCU3hReGdmMVBLZTR0ai1EZUxMazUzcWNaeHMxMWlLZmpYUSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "123" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:42 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "08b113c6-b60f-4c36-9065-1508fb5e0bbd" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiU1NkdElHRWdjMlZqY21WMElHMWxjM05oWjJVaCJ9" } }, { "ID": "f70ce5a1f79bfc1c", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "375" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlB6Rk1sOEhqN0hGUnJzazJiVkxGQ0p0bFJnX3hud1cyNXhPcUZsbF9PR0NlQnBtVWY0UjctMFZjemhxZEF4ZlpFV2pOVU9EcFZVcGwxRVp5YWdtRnFCaHNOZ1NPaXBucDJOZEZyRktpdEtxNnhpdUgxSk1ZdE1KUUNBNXJ3WXVYczFDT3g0bTg5T2hXNHliNUtBY3Z0a0d0YlNLU2t1Vm5IZ01lM2Nya2pHeG5jMmRsZW4yQnFWWGRvOVU3dVhwOF9QX3h1Szh3al9LNGp0UFRndWc5M2J6T3U1VkNzNHAtZ243VHA1cllFQ3BoTHVlN1hoNkxIME4zdkVXamFNcVkwZWZGcGlQdDctTzFwamZTX05aSWQ3OU44b0VHbFQ5ZHF5b3UxU2dyVEc5cmtLU05DOUtFMldrS3ZwX1ZQNVB3RGhPSnlXRTlZTk56bHNldGpGRTREQSJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "123" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:42 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "5d312ee6-7ce0-49f5-97bc-fb0cb65047ce" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiU1NkdElHRWdjMlZqY21WMElHMWxjM05oWjJVaCJ9" } } ] }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/azurekeyvault/testdata/TestConformance/TestMultipleKeys.replay��������������0000664�0000000�0000000�00000024257�13670045075�0031316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "Initial": "AQAAAA7WcSOSJq6dd/5c", "Version": "0.2", "Converter": { "ClearHeaders": [ "^X-Goog-.*Encryption-Key$", "^X-Ms-Date$", "^User-Agent$" ], "RemoveRequestHeaders": [ "^Authorization$", "^Proxy-Authorization$", "^Connection$", "^Content-Type$", "^Date$", "^Host$", "^Transfer-Encoding$", "^Via$", "^X-Forwarded-.*$", "^X-Cloud-Trace-Context$", "^X-Goog-Api-Client$", "^X-Google-.*$", "^X-Gfe-.*$" ], "RemoveResponseHeaders": [ "^X-Google-.*$", "^X-Gfe-.*$" ], "ClearParams": null, "RemoveParams": [ "^se$", "^sig$", "^X-Ms-Date$" ] }, "Entries": [ { "ID": "be5fa18b6a13169c", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//encrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "61" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "437" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:42 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "893de7cb-8115-439d-b60c-7c981c39fbc4" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiUGxaaUlNZzNPUjNiWXp6RzluUl9iZWs4RjVsRXZRbkJxcGw3LVdqUHF3SUo3c0RqVTlqNXgtYnNzcFBQTm1FbGk0SnB0WXhRQ05aRDlySC1GeGRTN2xCZGEwaTV3RXRSRHpQVmFSRTRpS1FUTENuQmN2bXIyS2NSSmlXeTZUek8tUGczdXF1WThPdlVTdFJiOFBiSEJ4OE1pbDVtWk9hYWNyQTRQdmtqbnNpYjhzYWkzZG1LSFVwVjdsLUhBcW9COEJLY3RVWkVaRUNfTHUtYmZGWEo0TnZlZ3dUZVk4Z19aZlBZVzQ3WEtFdlN0NDIyY3lTVjR3aWktcE1DNWJsZ2dmMjFiS2hpakk5eFBWTzFXOUEtQnlFTUloWEJFbHBsaDdSNGZOQkxvQmJUbHpWbmxMZGtmeThoQ0pqRk5qVjNtM2ZRLTFFa1REeWRNdmduMmZudXVnIn0=" } }, { "ID": "f017050d5d81b1f3", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test2//encrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "61" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlNTZHRJR0VnYzJWamNtVjBJRzFsYzNOaFoyVWgifQ==" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "437" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:42 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "bc2abddb-1a51-4584-b2b7-e045cbce0fe2" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0Mi9mNDFiOWI4ZDU4NmU0MGI5YjFhNDVjZTZiN2VjN2Q2YyIsInZhbHVlIjoibGVvcUl5X1RwcVItU1cwdUdTVHQyLU1jOEJ2LWxXZWREeGlTMm9VbUJHT1JmYUhfVHBRc0VBM3VyWFVrUXBYeUtYcFUzMUNoOFpxaGdVbU9KQzNpM0FiQ1paRFhaUGptSFM3NDZGSlJlTW93YkhaWmRFVHk3dDh1bXVnYldXTXZieHM1eW1LYzNON3JaYk1WNWo2cDlKVDQtQXJiRWwteG5wdEpmTEVETkZ3MGJkSV83RTJQclU2NnkzOUVvNlY1T0hzTlV4ZFN4YnZGcnB6TkQ4UjJtWEhpTTRaanZYRWZxYTJNbjhxam5NX3BfeWZyNGtnaEQ2X0RpVTF3MTR4dVR0YktTM0NBVlZueXVESzZUS2htLUlUblRlYzJSM3puR2J1YTlOdGtTekE3aFNSS2puNk40eFN5WEJtY29OSlVtY0tMSGRiRW44TFl2UzBjNHJCdzZ3In0=" } }, { "ID": "ea62fe93fb71f879", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test1//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "375" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6IlBsWmlJTWczT1IzYll6ekc5blJfYmVrOEY1bEV2UW5CcXBsNy1XalBxd0lKN3NEalU5ajV4LWJzc3BQUE5tRWxpNEpwdFl4UUNOWkQ5ckgtRnhkUzdsQmRhMGk1d0V0UkR6UFZhUkU0aUtRVExDbkJjdm1yMktjUkppV3k2VHpPLVBnM3VxdVk4T3ZVU3RSYjhQYkhCeDhNaWw1bVpPYWFjckE0UHZram5zaWI4c2FpM2RtS0hVcFY3bC1IQXFvQjhCS2N0VVpFWkVDX0x1LWJmRlhKNE52ZWd3VGVZOGdfWmZQWVc0N1hLRXZTdDQyMmN5U1Y0d2lpLXBNQzVibGdnZjIxYktoaWpJOXhQVk8xVzlBLUJ5RU1JaFhCRWxwbGg3UjRmTkJMb0JiVGx6Vm5sTGRrZnk4aENKakZOalYzbTNmUS0xRWtURHlkTXZnbjJmbnV1ZyJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "123" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:42 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "b9f5a283-60e9-4870-9f9a-840a49508364" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0MS9iM2IzMWYyOTIyNjI0ZTFkYTdhNDJlNGQwNGQ0NDExMCIsInZhbHVlIjoiU1NkdElHRWdjMlZqY21WMElHMWxjM05oWjJVaCJ9" } }, { "ID": "09aace124c912d4a", "Request": { "Method": "POST", "URL": "https://go-cdk.vault.azure.net/keys/test2//decrypt?api-version=7.0", "Header": { "Accept-Encoding": [ "gzip" ], "Content-Length": [ "375" ], "User-Agent": [ "CLEARED" ] }, "MediaType": "application/json", "BodyParts": [ "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJ2YWx1ZSI6Imxlb3FJeV9UcHFSLVNXMHVHU1R0Mi1NYzhCdi1sV2VkRHhpUzJvVW1CR09SZmFIX1RwUXNFQTN1clhVa1FwWHlLWHBVMzFDaDhacWhnVW1PSkMzaTNBYkNaWkRYWlBqbUhTNzQ2RkpSZU1vd2JIWlpkRVR5N3Q4dW11Z2JXV012YnhzNXltS2MzTjdyWmJNVjVqNnA5SlQ0LUFyYkVsLXhucHRKZkxFRE5GdzBiZElfN0UyUHJVNjZ5MzlFbzZWNU9Ic05VeGRTeGJ2RnJwek5EOFIybVhIaU00Wmp2WEVmcWEyTW44cWpuTV9wX3lmcjRrZ2hENl9EaVUxdzE0eHVUdGJLUzNDQVZWbnl1REs2VEtobS1JVG5UZWMyUjN6bkdidWE5TnRrU3pBN2hTUktqbjZONHhTeVhCbWNvTkpVbWNLTEhkYkVuOExZdlMwYzRyQnc2dyJ9" ] }, "Response": { "StatusCode": 200, "Proto": "HTTP/1.1", "ProtoMajor": 1, "ProtoMinor": 1, "Header": { "Cache-Control": [ "no-cache" ], "Content-Length": [ "123" ], "Content-Type": [ "application/json; charset=utf-8" ], "Date": [ "Tue, 09 Jun 2020 06:30:42 GMT" ], "Expires": [ "-1" ], "Pragma": [ "no-cache" ], "Strict-Transport-Security": [ "max-age=31536000;includeSubDomains" ], "X-Aspnet-Version": [ "4.0.30319" ], "X-Content-Type-Options": [ "nosniff" ], "X-Ms-Keyvault-Network-Info": [ "conn_type=Ipv4;addr=104.133.8.78;act_addr_fam=InterNetwork;" ], "X-Ms-Keyvault-Region": [ "centralus" ], "X-Ms-Keyvault-Service-Version": [ "1.1.6.0" ], "X-Ms-Request-Id": [ "73497ec9-baf3-4862-a40f-9a19421d3ed3" ], "X-Powered-By": [ "ASP.NET" ] }, "Body": "eyJraWQiOiJodHRwczovL2dvLWNkay52YXVsdC5henVyZS5uZXQva2V5cy90ZXN0Mi9mNDFiOWI4ZDU4NmU0MGI5YjFhNDVjZTZiN2VjN2Q2YyIsInZhbHVlIjoiU1NkdElHRWdjMlZqY21WMElHMWxjM05oWjJVaCJ9" } } ] }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/driver/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016254�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/driver/driver.go������������������������������������������������������������0000664�0000000�0000000�00000003730�13670045075�0020101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package driver defines interfaces to be implemented by secrets drivers, which // will be used by the secrets package to interact with the underlying services. // Application code should use package secrets. package driver // import "gocloud.dev/secrets/driver" import ( "context" "gocloud.dev/gcerrors" ) // Keeper holds the key information to encrypt a plain text message into a // cipher message, as well as decrypt a cipher message into a plain text // message. type Keeper interface { // Decrypt decrypts the ciphertext and returns the plaintext or an error. // Decrypt *may* decrypt ciphertexts that were encrypted using a different // key than the one provided to Keeper; some drivers encode the key used // in the ciphertext. Decrypt(ctx context.Context, ciphertext []byte) ([]byte, error) // Encrypt encrypts the plaintext using the key, and returns the ciphertext. Encrypt(ctx context.Context, plaintext []byte) ([]byte, error) // Close releases any resources used for the Keeper. Close() error // ErrorAs allows drivers to expose driver-specific types for returned // errors. // // See https://gocloud.dev/concepts/as/ for background information. ErrorAs(err error, i interface{}) bool // ErrorCode should return a code that describes the error, which was returned // by one of the other methods in this interface. ErrorCode(error) gcerrors.ErrorCode } ����������������������������������������go-cloud-0.20.0/secrets/drivertest/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017154�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/drivertest/drivertest.go����������������������������������������������������0000664�0000000�0000000�00000020620�13670045075�0021676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package drivertest provides a conformance test for implementations of // the secrets driver. package drivertest // import "gocloud.dev/secrets/drivertest" import ( "bytes" "context" "errors" "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/secrets" "gocloud.dev/secrets/driver" ) // Harness descibes the functionality test harnesses must provide to run // conformance tests. type Harness interface { // MakeDriver returns a pair of driver.Keeper, each backed by a different key. MakeDriver(ctx context.Context) (driver.Keeper, driver.Keeper, error) // Close is called when the test is complete. Close() } // HarnessMaker describes functions that construct a harness for running tests. // It is called exactly once per test. type HarnessMaker func(ctx context.Context, t *testing.T) (Harness, error) // AsTest represents a test of As functionality. // The conformance test: // 1. Tries to decrypt malformed message, and calls ErrorCheck with the error. type AsTest interface { // Name returns a descriptive name for the test. Name() string // ErrorCheck is called to allow verification of Keeper.ErrorAs. ErrorCheck(k *secrets.Keeper, err error) error } type verifyAsFailsOnNil struct{} func (v verifyAsFailsOnNil) Name() string { return "verify As returns false when passed nil" } func (v verifyAsFailsOnNil) ErrorCheck(k *secrets.Keeper, err error) (ret error) { defer func() { if recover() == nil { ret = errors.New("want ErrorAs to panic when passed nil") } }() k.ErrorAs(err, nil) return nil } // RunConformanceTests runs conformance tests for driver implementations of secret management. func RunConformanceTests(t *testing.T, newHarness HarnessMaker, asTests []AsTest) { t.Run("TestEncryptDecrypt", func(t *testing.T) { testEncryptDecrypt(t, newHarness) }) t.Run("TestMultipleEncryptionsNotEqual", func(t *testing.T) { testMultipleEncryptionsNotEqual(t, newHarness) }) t.Run("TestMultipleKeys", func(t *testing.T) { testMultipleKeys(t, newHarness) }) t.Run("TestDecryptMalformedError", func(t *testing.T) { testDecryptMalformedError(t, newHarness) }) asTests = append(asTests, verifyAsFailsOnNil{}) t.Run("TestAs", func(t *testing.T) { for _, tc := range asTests { if tc.Name() == "" { t.Fatal("AsTest.Name is required") } t.Run(tc.Name(), func(t *testing.T) { testAs(t, newHarness, tc) }) } }) } // testEncryptDecrypt tests the functionality of encryption and decryption func testEncryptDecrypt(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() harness, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer harness.Close() drv, _, err := harness.MakeDriver(ctx) if err != nil { t.Fatal(err) } keeper := secrets.NewKeeper(drv) defer keeper.Close() msg := []byte("I'm a secret message!") encryptedMsg, err := keeper.Encrypt(ctx, msg) if err != nil { t.Fatal(err) } if cmp.Equal(msg, encryptedMsg) { t.Errorf("Got encrypted message %v, want it to differ from original message %v", string(msg), string(encryptedMsg)) } decryptedMsg, err := keeper.Decrypt(ctx, encryptedMsg) if err != nil { t.Fatal(err) } if !cmp.Equal(msg, decryptedMsg) { t.Errorf("Got decrypted message %v, want it to match original message %v", string(msg), string(decryptedMsg)) } } // testMultipleEncryptionsNotEqual tests that encrypting a plaintext multiple // times with the same key works, and that the encrypted bytes are different. func testMultipleEncryptionsNotEqual(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() harness, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer harness.Close() drv, _, err := harness.MakeDriver(ctx) if err != nil { t.Fatal(err) } keeper := secrets.NewKeeper(drv) defer keeper.Close() msg := []byte("I'm a secret message!") encryptedMsg1, err := keeper.Encrypt(ctx, msg) if err != nil { t.Fatal(err) } encryptedMsg2, err := keeper.Encrypt(ctx, msg) if err != nil { t.Fatal(err) } if cmp.Equal(encryptedMsg1, encryptedMsg2) { t.Errorf("Got same encrypted messages from multiple encryptions %v, want them to be different", string(encryptedMsg1)) } decryptedMsg, err := keeper.Decrypt(ctx, encryptedMsg1) if err != nil { t.Fatal(err) } if !bytes.Equal(decryptedMsg, msg) { t.Errorf("got decrypted %q want %q", string(decryptedMsg), string(msg)) } decryptedMsg, err = keeper.Decrypt(ctx, encryptedMsg2) if err != nil { t.Fatal(err) } if !bytes.Equal(decryptedMsg, msg) { t.Errorf("got decrypted %q want %q", string(decryptedMsg), string(msg)) } } // testMultipleKeys tests that encrypting the same text with different // keys works, and that the encrypted bytes are different. func testMultipleKeys(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() harness, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer harness.Close() drv1, drv2, err := harness.MakeDriver(ctx) if err != nil { t.Fatal(err) } keeper1 := secrets.NewKeeper(drv1) defer keeper1.Close() keeper2 := secrets.NewKeeper(drv2) defer keeper2.Close() msg := []byte("I'm a secret message!") encryptedMsg1, err := keeper1.Encrypt(ctx, msg) if err != nil { t.Fatal(err) } encryptedMsg2, err := keeper2.Encrypt(ctx, msg) if err != nil { t.Fatal(err) } if cmp.Equal(encryptedMsg1, encryptedMsg2) { t.Errorf("Got same encrypted messages from multiple encryptions %v, want them to be different", string(encryptedMsg1)) } // We cannot assert that decrypting encryptedMsg1 with keeper2 fails, // or that decrypting encryptedMsg2 with keeper1 fails, as Decrypt is allowed // to decrypt using a different key than the one given to Keeper. decryptedMsg, err := keeper1.Decrypt(ctx, encryptedMsg1) if err != nil { t.Fatal(err) } if !bytes.Equal(decryptedMsg, msg) { t.Errorf("got decrypted %q want %q", string(decryptedMsg), string(msg)) } decryptedMsg, err = keeper2.Decrypt(ctx, encryptedMsg2) if err != nil { t.Fatal(err) } if !bytes.Equal(decryptedMsg, msg) { t.Errorf("got decrypted %q want %q", string(decryptedMsg), string(msg)) } } // testDecryptMalformedError tests decryption returns an error when the // ciphertext is malformed. func testDecryptMalformedError(t *testing.T, newHarness HarnessMaker) { ctx := context.Background() harness, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer harness.Close() drv, _, err := harness.MakeDriver(ctx) if err != nil { t.Fatal(err) } keeper := secrets.NewKeeper(drv) defer keeper.Close() msg := []byte("I'm a secret message!") encryptedMsg, err := keeper.Encrypt(ctx, msg) if err != nil { t.Fatal(err) } copyEncryptedMsg := func() []byte { return append([]byte{}, encryptedMsg...) } l := len(encryptedMsg) for _, tc := range []struct { name string malformed []byte }{ { name: "wrong first byte", malformed: append([]byte{encryptedMsg[0] + 1}, encryptedMsg[1:]...), }, { name: "missing second byte", malformed: append(copyEncryptedMsg()[:1], encryptedMsg[2:]...), }, { name: "wrong last byte", malformed: append(copyEncryptedMsg()[:l-2], encryptedMsg[l-1]-1), }, { name: "one more byte", malformed: append(encryptedMsg, 4), }, } { t.Run(tc.name, func(t *testing.T) { if _, err := keeper.Decrypt(ctx, []byte(tc.malformed)); err == nil { t.Error("Got nil, want decrypt error") } }) } } func testAs(t *testing.T, newHarness HarnessMaker, tc AsTest) { ctx := context.Background() harness, err := newHarness(ctx, t) if err != nil { t.Fatal(err) } defer harness.Close() drv, _, err := harness.MakeDriver(ctx) if err != nil { t.Fatal(err) } keeper := secrets.NewKeeper(drv) defer keeper.Close() _, gotErr := keeper.Decrypt(ctx, []byte("malformed cipher message")) if gotErr == nil { t.Error("Got nil, want decrypt error") } if err := tc.ErrorCheck(keeper, gotErr); err != nil { t.Error(err) } } ����������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/example_openkeeper_test.go��������������������������������������������������0000664�0000000�0000000�00000003470�13670045075�0022223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package secrets_test import ( "context" "fmt" "log" "gocloud.dev/secrets" _ "gocloud.dev/secrets/localsecrets" ) func Example_openFromURL() { ctx := context.Background() // Create a Keeper using a URL. // This example uses "localsecrets", the in-memory implementation. // We need to add a blank import line to register the localsecrets driver's // URLOpener, which implements secrets.KeeperURLOpener: // import _ "gocloud.dev/secrets/localsecrets" // localsecrets registers for the "base64key" scheme. // All secrets.OpenKeeper URLs also work with "secrets+" or "secrets+keeper+" prefixes, // e.g., "secrets+base64key://..." or "secrets+variable+base64key://...". // All secrets URLs also work with the "secrets+" prefix, e.g., "secrets+base64key://". k, err := secrets.OpenKeeper(ctx, "base64key://smGbjm71Nxd1Ig5FS0wj9SlbzAIrnolCz9bQQ6uAhl4=") if err != nil { log.Fatal(err) } defer k.Close() // Now we can use k to encrypt/decrypt. plaintext := []byte("Go CDK Secrets") ciphertext, err := k.Encrypt(ctx, plaintext) if err != nil { log.Fatal(err) } decrypted, err := k.Decrypt(ctx, ciphertext) if err != nil { log.Fatal(err) } fmt.Println(string(decrypted)) // Output: // Go CDK Secrets } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/example_test.go�������������������������������������������������������������0000664�0000000�0000000�00000006025�13670045075�0020005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package secrets_test import ( "context" "fmt" "log" "gocloud.dev/secrets" _ "gocloud.dev/secrets/gcpkms" "gocloud.dev/secrets/localsecrets" "google.golang.org/grpc/status" ) func Example() { ctx := context.Background() // Construct a *secrets.Keeper from one of the secrets subpackages. // This example uses localsecrets. sk, err := localsecrets.NewRandomKey() if err != nil { log.Fatal(err) } keeper := localsecrets.NewKeeper(sk) defer keeper.Close() // Now we can use keeper to Encrypt. plaintext := []byte("Go CDK Secrets") ciphertext, err := keeper.Encrypt(ctx, plaintext) if err != nil { log.Fatal(err) } // And/or Decrypt. decrypted, err := keeper.Decrypt(ctx, ciphertext) if err != nil { log.Fatal(err) } fmt.Println(string(decrypted)) // Output: // Go CDK Secrets } func Example_errorAs() { // This example is specific to the gcpkms implementation; it // demonstrates access to the underlying google.golang.org/grpc/status.Status // type. // The types exposed for As by gcpkms are documented in // https://godoc.org/gocloud.dev/secrets/gcpkms#hdr-As ctx := context.Background() const url = "gcpkms://projects/proj/locations/global/keyRings/test/ring/wrongkey" keeper, err := secrets.OpenKeeper(ctx, url) if err != nil { log.Fatal(err) } defer keeper.Close() plaintext := []byte("Go CDK secrets") _, err = keeper.Encrypt(ctx, plaintext) if err != nil { var s *status.Status if keeper.ErrorAs(err, &s) { fmt.Println(s.Code()) } } } func ExampleKeeper_Encrypt() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var keeper *secrets.Keeper plainText := []byte("Secrets secrets...") cipherText, err := keeper.Encrypt(ctx, plainText) if err != nil { log.Fatal(err) } // PRAGMA: On gocloud.dev, hide the rest of the function. _ = cipherText } func ExampleKeeper_Decrypt() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() var keeper *secrets.Keeper var cipherText []byte // obtained from elsewhere and random-looking plainText, err := keeper.Decrypt(ctx, cipherText) if err != nil { log.Fatal(err) } // PRAGMA: On gocloud.dev, hide the rest of the function. _ = plainText } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016245�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/example_test.go������������������������������������������������������0000664�0000000�0000000�00000003623�13670045075�0021272�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpkms_test import ( "context" "log" "gocloud.dev/secrets" "gocloud.dev/secrets/gcpkms" ) func ExampleOpenKeeper() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Get a client to use with the KMS API. client, done, err := gcpkms.Dial(ctx, nil) if err != nil { log.Fatal(err) } // Close the connection when done. defer done() // You can also use gcpkms.KeyResourceID to construct this string. const keyID = "projects/MYPROJECT/" + "locations/MYLOCATION/" + "keyRings/MYKEYRING/" + "cryptoKeys/MYKEY" // Construct a *secrets.Keeper. keeper := gcpkms.OpenKeeper(client, keyID, nil) defer keeper.Close() } func Example_openFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/secrets/gcpkms" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() keeper, err := secrets.OpenKeeper(ctx, "gcpkms://projects/MYPROJECT/"+ "locations/MYLOCATION/"+ "keyRings/MYKEYRING/"+ "cryptoKeys/MYKEY") if err != nil { log.Fatal(err) } defer keeper.Close() } �������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/kms.go���������������������������������������������������������������0000664�0000000�0000000�00000014366�13670045075�0017400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package gcpkms provides a secrets implementation backed by Google Cloud KMS. // Use OpenKeeper to construct a *secrets.Keeper. // // URLs // // For secrets.OpenKeeper, gcpkms registers for the scheme "gcpkms". // The default URL opener will create a connection using use default // credentials from the environment, as described in // https://cloud.google.com/docs/authentication/production. // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // gcpkms exposes the following type for As: // - Error: *google.golang.org/grpc/status.Status package gcpkms // import "gocloud.dev/secrets/gcpkms" import ( "context" "fmt" "net/url" "path" "sync" cloudkms "cloud.google.com/go/kms/apiv1" "github.com/google/wire" "gocloud.dev/gcerrors" "gocloud.dev/gcp" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/useragent" "gocloud.dev/secrets" "google.golang.org/api/option" kmspb "google.golang.org/genproto/googleapis/cloud/kms/v1" "google.golang.org/grpc/status" ) // endPoint is the address to access Google Cloud KMS API. const endPoint = "cloudkms.googleapis.com:443" // Dial returns a client to use with Cloud KMS and a clean-up function to close // the client after used. func Dial(ctx context.Context, ts gcp.TokenSource) (*cloudkms.KeyManagementClient, func(), error) { c, err := cloudkms.NewKeyManagementClient(ctx, option.WithTokenSource(ts), useragent.ClientOption("secrets")) return c, func() { c.Close() }, err } func init() { secrets.DefaultURLMux().RegisterKeeper(Scheme, new(lazyCredsOpener)) } // Set holds Wire providers for this package. var Set = wire.NewSet( Dial, wire.Struct(new(URLOpener), "Client"), ) // lazyCredsOpener obtains Application Default Credentials on the first call // lazyCredsOpener obtains Application Default Credentials on the first call // to OpenKeeperURL. type lazyCredsOpener struct { init sync.Once opener *URLOpener err error } func (o *lazyCredsOpener) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { o.init.Do(func() { creds, err := gcp.DefaultCredentials(ctx) if err != nil { o.err = err return } client, _, err := Dial(ctx, creds.TokenSource) if err != nil { o.err = err return } o.opener = &URLOpener{Client: client} }) if o.err != nil { return nil, fmt.Errorf("open keeper %v: %v", u, o.err) } return o.opener.OpenKeeperURL(ctx, u) } // Scheme is the URL scheme gcpkms registers its URLOpener under on secrets.DefaultMux. const Scheme = "gcpkms" // URLOpener opens GCP KMS URLs like // "gcpkms://projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]". // // The URL host+path are used as the key resource ID; see // https://cloud.google.com/kms/docs/object-hierarchy#key for more details. // // No query parameters are supported. type URLOpener struct { // Client must be non-nil and be authenticated with "cloudkms" scope or equivalent. Client *cloudkms.KeyManagementClient // Options specifies the default options to pass to OpenKeeper. Options KeeperOptions } // OpenKeeperURL opens the GCP KMS URLs. func (o *URLOpener) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { for param := range u.Query() { return nil, fmt.Errorf("open keeper %v: invalid query parameter %q", u, param) } return OpenKeeper(o.Client, path.Join(u.Host, u.Path), &o.Options), nil } // OpenKeeper returns a *secrets.Keeper that uses Google Cloud KMS. // You can use KeyResourceID to construct keyResourceID from its parts, // or provide the whole string if you have it (e.g., from the GCP console). // See https://cloud.google.com/kms/docs/object-hierarchy#key for more details. // See the package documentation for an example. func OpenKeeper(client *cloudkms.KeyManagementClient, keyResourceID string, opts *KeeperOptions) *secrets.Keeper { return secrets.NewKeeper(&keeper{ keyResourceID: keyResourceID, client: client, }) } // KeyResourceID constructs a key resourceID for GCP KMS. // See https://cloud.google.com/kms/docs/object-hierarchy#key for more details. func KeyResourceID(projectID, location, keyRing, key string) string { return fmt.Sprintf("projects/%s/locations/%s/keyRings/%s/cryptoKeys/%s", projectID, location, keyRing, key) } // keeper implements driver.Keeper. type keeper struct { keyResourceID string client *cloudkms.KeyManagementClient } // Decrypt decrypts the ciphertext using the key constructed from ki. func (k *keeper) Decrypt(ctx context.Context, ciphertext []byte) ([]byte, error) { req := &kmspb.DecryptRequest{ Name: k.keyResourceID, Ciphertext: ciphertext, } resp, err := k.client.Decrypt(ctx, req) if err != nil { return nil, err } return resp.GetPlaintext(), nil } // Encrypt encrypts the plaintext into a ciphertext. func (k *keeper) Encrypt(ctx context.Context, plaintext []byte) ([]byte, error) { req := &kmspb.EncryptRequest{ Name: k.keyResourceID, Plaintext: plaintext, } resp, err := k.client.Encrypt(ctx, req) if err != nil { return nil, err } return resp.GetCiphertext(), nil } // Close implements driver.Keeper.Close. func (k *keeper) Close() error { return nil } // ErrorAs implements driver.Keeper.ErrorAs. func (k *keeper) ErrorAs(err error, i interface{}) bool { s, ok := status.FromError(err) if !ok { return false } p, ok := i.(**status.Status) if !ok { return false } *p = s return true } // ErrorCode implements driver.ErrorCode. func (k *keeper) ErrorCode(err error) gcerrors.ErrorCode { return gcerr.GRPCCode(err) } // KeeperOptions controls Keeper behaviors. // It is provided for future extensibility. type KeeperOptions struct{} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/kms_test.go����������������������������������������������������������0000664�0000000�0000000�00000007073�13670045075�0020434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package gcpkms import ( "context" "errors" "testing" cloudkms "cloud.google.com/go/kms/apiv1" "gocloud.dev/internal/testing/setup" "gocloud.dev/secrets" "gocloud.dev/secrets/driver" "gocloud.dev/secrets/drivertest" "golang.org/x/oauth2" "google.golang.org/api/option" "google.golang.org/grpc/status" ) // These constants capture values that were used during the last --record. // If you want to use --record mode, // 1. Update projectID to your GCP project name (not number!) // 2. Enable the Cloud KMS API. // 3. Create a key ring and a key, change their name below accordingly. const ( project = "go-cloud-test-216917" location = "global" keyRing = "test" keyID1 = "password" keyID2 = "password2" ) type harness struct { client *cloudkms.KeyManagementClient close func() } func (h *harness) MakeDriver(ctx context.Context) (driver.Keeper, driver.Keeper, error) { return &keeper{KeyResourceID(project, location, keyRing, keyID1), h.client}, &keeper{KeyResourceID(project, location, keyRing, keyID2), h.client}, nil } func (h *harness) Close() { h.close() } func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { conn, done := setup.NewGCPgRPCConn(ctx, t, endPoint, "secrets") client, err := cloudkms.NewKeyManagementClient(ctx, option.WithGRPCConn(conn)) if err != nil { return nil, err } return &harness{ client: client, close: func() { client.Close() done() }, }, nil } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (v verifyAs) Name() string { return "verify As function" } func (v verifyAs) ErrorCheck(k *secrets.Keeper, err error) error { var s *status.Status if !k.ErrorAs(err, &s) { return errors.New("Keeper.ErrorAs failed") } return nil } // KMS-specific tests. func TestNoConnectionError(t *testing.T) { ctx := context.Background() client, done, err := Dial(ctx, oauth2.StaticTokenSource(&oauth2.Token{ AccessToken: "fake", })) if err != nil { t.Fatal(err) } defer done() keeper := OpenKeeper(client, "", nil) defer keeper.Close() if _, err := keeper.Encrypt(ctx, []byte("test")); err == nil { t.Error("got nil, want rpc error") } } func TestOpenKeeper(t *testing.T) { cleanup := setup.FakeGCPDefaultCredentials(t) defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"gcpkms://projects/MYPROJECT/locations/MYLOCATION/keyRings/MYKEYRING/cryptoKeys/MYKEY", false}, // Invalid query parameter. {"gcpkms://projects/MYPROJECT/locations/MYLOCATION/keyRings/MYKEYRING/cryptoKeys/MYKEY?param=val", true}, } ctx := context.Background() for _, test := range tests { keeper, err := secrets.OpenKeeper(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err == nil { if err = keeper.Close(); err != nil { t.Errorf("%s: got error during close: %v", test.URL, err) } } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/testdata/������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0020056�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/testdata/TestConformance/��������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0023150�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/testdata/TestConformance/TestAs/�������������������������������������0000775�0000000�0000000�00000000000�13670045075�0024353�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/testdata/TestConformance/TestAs/verify_As_function.replay������������0000664�0000000�0000000�00000000652�13670045075�0031430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPCReplay�������1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequestl Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordmalformed cipher message��� %type.googleapis.com/google.rpc.Status-Decryption failed: the ciphertext is invalid.Q (type.googleapis.com/google.rpc.DebugInfo%#client_ciphertext.ParseFromString() (��������������������������������������������������������������������������������������verify_As_returns_false_when_passed_nil.replay������������������������������������������������������0000664�0000000�0000000�00000000652�13670045075�0035622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�go-cloud-0.20.0/secrets/gcpkms/testdata/TestConformance/TestAs���������������������������������������������������������������������������������������������������������RPCReplay�������1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequestl Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordmalformed cipher message��� %type.googleapis.com/google.rpc.Status-Decryption failed: the ciphertext is invalid.Q (type.googleapis.com/google.rpc.DebugInfo%#client_ciphertext.ParseFromString() (��������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/testdata/TestConformance/TestDecryptMalformedError.replay������������0000664�0000000�0000000�00000004670�13670045075�0031510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPCReplay�������1/google.cloud.kms.v1.KeyManagementService/Encrypt 6type.googleapis.com/google.cloud.kms.v1.EncryptRequesti Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordI'm a secret message!�� 7type.googleapis.com/google.cloud.kms.v1.EncryptResponse dprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/password/cryptoKeyVersions/6f $�u]lf|GVL&D edH"@ >�(\s҈po;+˛Yk6#>#AmFa!% jțFM}2" (-��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordf $�u]lf|GVL&D edH"@ >�(\s҈po;+˛Yk6#>#AmFa!% jțFM}2��� %type.googleapis.com/google.rpc.Status-Decryption failed: the ciphertext is invalid.Q (type.googleapis.com/google.rpc.DebugInfo%#client_ciphertext.ParseFromString() (,��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passworde �u]lf|GVL&D edH"@ >�(\s҈po;+˛Yk6#>#AmFa!% jțFM}2��� %type.googleapis.com/google.rpc.Status-Decryption failed: the ciphertext is invalid.Q (type.googleapis.com/google.rpc.DebugInfo%#client_ciphertext.ParseFromString() (,��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passworde $�u]lf|GVL&D edH"@ >�(\s҈po;+˛Yk6#>#AmFa!% jțFM1��� %type.googleapis.com/google.rpc.Status-Decryption failed: the ciphertext is invalid.Q (type.googleapis.com/google.rpc.DebugInfo%#client_ciphertext.ParseFromString() (.��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordg $�u]lf|GVL&D edH"@ >�(\s҈po;+˛Yk6#>#AmFa!% jțFM}2��� %type.googleapis.com/google.rpc.Status-Decryption failed: the ciphertext is invalid.Q (type.googleapis.com/google.rpc.DebugInfo%#client_ciphertext.ParseFromString() ( ������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/testdata/TestConformance/TestEncryptDecrypt.replay�������������������0000664�0000000�0000000�00000001636�13670045075�0030213�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPCReplay�������1/google.cloud.kms.v1.KeyManagementService/Encrypt 6type.googleapis.com/google.cloud.kms.v1.EncryptRequesti Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordI'm a secret message!�� 7type.googleapis.com/google.cloud.kms.v1.EncryptResponse dprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/password/cryptoKeyVersions/6f $�u nOoNFlNuFpf>�(\sPXE}r,7"Ǹ!c9$;$&pP:?4nq➌RB "(-��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordf $�u nOoNFlNuFpf>�(\sPXE}r,7"Ǹ!c9$;$&pP:?4nq➌RB `���Z 7type.googleapis.com/google.cloud.kms.v1.DecryptResponse I'm a secret message!(��������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/testdata/TestConformance/TestMultipleEncryptionsNotEqual.replay������0000664�0000000�0000000�00000003457�13670045075�0032741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPCReplay�������1/google.cloud.kms.v1.KeyManagementService/Encrypt 6type.googleapis.com/google.cloud.kms.v1.EncryptRequesti Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordI'm a secret message!�� 7type.googleapis.com/google.cloud.kms.v1.EncryptResponse dprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/password/cryptoKeyVersions/6f $�uѿ &~nʄAJWV>I*asQQ>�(\sIAhxx3F,W\F&at y 4JU Y"̶֯ (���1/google.cloud.kms.v1.KeyManagementService/Encrypt 6type.googleapis.com/google.cloud.kms.v1.EncryptRequesti Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordI'm a secret message!�� 7type.googleapis.com/google.cloud.kms.v1.EncryptResponse dprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/password/cryptoKeyVersions/6f $�uxW ]>rU)<R^c3nX>�(\s2h 6V֘z#w;Cމ]齔Vt2,a>O[q f9H."ɔ (-��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordf $�uѿ &~nʄAJWV>I*asQQ>�(\sIAhxx3F,W\F&at y 4JU Y`���Z 7type.googleapis.com/google.cloud.kms.v1.DecryptResponse I'm a secret message!(-��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordf $�uxW ]>rU)<R^c3nX>�(\s2h 6V֘z#w;Cމ]齔Vt2,a>O[q f9H.`���Z 7type.googleapis.com/google.cloud.kms.v1.DecryptResponse I'm a secret message!(�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/gcpkms/testdata/TestConformance/TestMultipleKeys.replay���������������������0000664�0000000�0000000�00000003462�13670045075�0027662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPCReplay�������1/google.cloud.kms.v1.KeyManagementService/Encrypt 6type.googleapis.com/google.cloud.kms.v1.EncryptRequesti Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordI'm a secret message!�� 7type.googleapis.com/google.cloud.kms.v1.EncryptResponse dprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/password/cryptoKeyVersions/6f $�un0Ӵ{h14-:,XÛRC X>�(\s8!�~1憿:׬[sq|cmz U)@߅| {'%eqe"ɰ (���1/google.cloud.kms.v1.KeyManagementService/Encrypt 6type.googleapis.com/google.cloud.kms.v1.EncryptRequestj Qprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/password2I'm a secret message!�� 7type.googleapis.com/google.cloud.kms.v1.EncryptResponse eprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/password2/cryptoKeyVersions/6f $�&l:Qo$xmnһ$Oժ_'>�cp~c2bf/U+6 @HcgqzoLRũLq@T"ϻ(-��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Pprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/passwordf $�un0Ӵ{h14-:,XÛRC X>�(\s8!�~1憿:׬[sq|cmz U)@߅| {'%eqe`���Z 7type.googleapis.com/google.cloud.kms.v1.DecryptResponse I'm a secret message!(.��1/google.cloud.kms.v1.KeyManagementService/Decrypt 6type.googleapis.com/google.cloud.kms.v1.DecryptRequest Qprojects/go-cloud-test-216917/locations/global/keyRings/test/cryptoKeys/password2f $�&l:Qo$xmnһ$Oժ_'>�cp~c2bf/U+6 @HcgqzoLRũLq@T`���Z 7type.googleapis.com/google.cloud.kms.v1.DecryptResponse I'm a secret message!(��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/hashivault/�����������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017131�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/hashivault/example_test.go��������������������������������������������������0000664�0000000�0000000�00000003365�13670045075�0022161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package hashivault_test import ( "context" "log" "github.com/hashicorp/vault/api" "gocloud.dev/secrets" "gocloud.dev/secrets/hashivault" ) func ExampleOpenKeeper() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Get a client to use with the Vault API. client, err := hashivault.Dial(ctx, &hashivault.Config{ Token: "CLIENT_TOKEN", APIConfig: api.Config{ Address: "http://127.0.0.1:8200", }, }) if err != nil { log.Fatal(err) } // Construct a *secrets.Keeper. keeper := hashivault.OpenKeeper(client, "my-key", nil) defer keeper.Close() } func Example_openFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/secrets/hashivault" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() keeper, err := secrets.OpenKeeper(ctx, "hashivault://mykey") if err != nil { log.Fatal(err) } defer keeper.Close() } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/hashivault/go.mod�����������������������������������������������������������0000664�0000000�0000000�00000001344�13670045075�0020241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018-2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module gocloud.dev/secrets/hashivault go 1.12 require ( github.com/hashicorp/vault/api v1.0.2 gocloud.dev v0.20.0 ) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/hashivault/go.sum�����������������������������������������������������������0000664�0000000�0000000�00000157775�13670045075�0020312�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.39.0 h1:UgQP9na6OTfp4dsAiz/eFpFA1C6tPdH5wiRdi19tuMw= cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.44.3 h1:0sMegbmn/8uTwpNkB0q9cLEpZ2W5a6kl+wtBQgPWBJQ= cloud.google.com/go v0.44.3/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.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.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= 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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 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/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= 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/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 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/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-amqp-common-go/v3 v3.0.0/go.mod h1:SY08giD/XbhTz07tJdpw1SoxQXHPN30+DI3Z04SYqyg= github.com/Azure/azure-pipeline-go v0.2.1 h1:OLBdZJ3yvOn2MezlWvbrBMTEUQC72zAftRZOMdj5HYo= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v37.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-service-bus-go v0.10.1/go.mod h1:E/FOceuKAFUfpbIJDKWz/May6guE+eGibfGT6q+n1to= github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs= github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g= github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3 h1:O1AGG9Xig71FxdX9HO5pGNyZ7TbSyHaVg+5eJO/jSGw= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.13 h1:UeWMTRTL0XAKLR7vxDL4/u7KOtz/LtfJr+lXtxN4YEQ= github.com/aws/aws-sdk-go v1.31.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/census-instrumentation/opencensus-proto v0.2.0 h1:LzQXZOgg4CQfE6bFvXGM30YZL1WW/M337pXml+GrcZ4= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= 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/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= 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.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= 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.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 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-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= 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/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-plugin v1.0.0/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/vault/api v1.0.2 h1:/V9fULvLwt58vme/6Rkt/p/GtlresQv+Z9E6dgdANhs= github.com/hashicorp/vault/api v1.0.2/go.mod h1:AV/+M5VPDpB90arloVX0rVDUIHkONiwz5Uza9HRtpUE= github.com/hashicorp/vault/sdk v0.1.8 h1:pfF3KwA1yPlfpmcumNsFM4uo91WMasX5gTuIkItu9r0= github.com/hashicorp/vault/sdk v0.1.8/go.mod h1:tHZfc6St71twLizWNHvnnbiGFo1aq0eD2jGPLtP8kAU= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 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/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149 h1:HfxbT6/JcvIljmERptWhwa8XzP7H3T+Z2N26gTsaDaA= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4= 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= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 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/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= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 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/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/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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b h1:lkjdUzSyJ5P1+eal9fxXX9Xg2BTfswsonKUse48C0uE= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= 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/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 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= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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-20180823144017-11551d06cbcc/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-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc= 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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/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-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-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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 h1:6/JqlYfC1CCaLnGceQTI+sDGhC9UBSPAsBqI0Gun6kU= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200317043434-63da46f3035e/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509 h1:MI14dOfl3OG6Zd32w3ugsrvcUO810fDZdWakTq39dH4= golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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.5.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 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8= 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/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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 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= google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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-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/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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200317114155-1f3552e48f24/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200325114520-5b2d0af7952b/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482 h1:i+Aiej6cta/Frzp13/swvwz5O00kYcSe0A/C5Wd7zX8= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8= 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.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 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/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 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= ���go-cloud-0.20.0/secrets/hashivault/localvault.sh����������������������������������������������������0000775�0000000�0000000�00000002021�13670045075�0021631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env bash # Copyright 2019 The Go Cloud Development Kit Authors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Starts a local Vault instance via Docker. # https://coderwall.com/p/fkfaqq/safer-bash-scripts-with-set-euxo-pipefail set -euo pipefail echo "Starting Vault Server..." docker rm -f dev-vault &> /dev/null || : docker run --cap-add=IPC_LOCK -d --name=dev-vault -e 'VAULT_DEV_ROOT_TOKEN_ID=faketoken' -p 8200:8200 vault:1.1.2 &> /dev/null echo "...done. Run \"docker rm -f dev-vault\" to clean up the container." echo ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/hashivault/vault.go���������������������������������������������������������0000664�0000000�0000000�00000012717�13670045075�0020623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limtations under the License. // Package hashivault provides a secrets implementation using the Transit // Secrets Engine of Vault by Hashicorp. // Use OpenKeeper to construct a *secrets.Keeper. // // URLs // // For secrets.OpenKeeper, hashivault registers for the scheme "hashivault". // The default URL opener will dial a Vault server using the environment // variables "VAULT_SERVER_URL" and "VAULT_SERVER_TOKEN". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // hashivault does not support any types for As. package hashivault import ( "context" "encoding/base64" "errors" "fmt" "net/url" "os" "path" "sync" "github.com/hashicorp/vault/api" "gocloud.dev/gcerrors" "gocloud.dev/secrets" ) // Config is the authentication configurations of the Vault server. type Config struct { // Token is the access token the Vault client uses to talk to the server. // See https://www.vaultproject.io/docs/concepts/tokens.html for more // information. Token string // APIConfig is used to configure the creation of the client. APIConfig api.Config } // Dial gets a Vault client. func Dial(ctx context.Context, cfg *Config) (*api.Client, error) { if cfg == nil { return nil, errors.New("no auth Config provided") } c, err := api.NewClient(&cfg.APIConfig) if err != nil { return nil, err } if cfg.Token != "" { c.SetToken(cfg.Token) } return c, nil } func init() { secrets.DefaultURLMux().RegisterKeeper(Scheme, new(defaultDialer)) } // defaultDialer dials a default Vault server based on the environment variables // VAULT_SERVER_URL and VAULT_SERVER_TOKEN. type defaultDialer struct { init sync.Once opener *URLOpener err error } func (o *defaultDialer) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { o.init.Do(func() { serverURL := os.Getenv("VAULT_SERVER_URL") if serverURL == "" { o.err = errors.New("VAULT_SERVER_URL environment variable is not set") return } token := os.Getenv("VAULT_SERVER_TOKEN") // token is not required cfg := Config{Token: token, APIConfig: api.Config{Address: serverURL}} client, err := Dial(ctx, &cfg) if err != nil { o.err = fmt.Errorf("failed to Dial default Vault server at %q: %v", serverURL, err) return } o.opener = &URLOpener{Client: client} }) if o.err != nil { return nil, fmt.Errorf("open keeper %v: %v", u, o.err) } return o.opener.OpenKeeperURL(ctx, u) } // Scheme is the URL scheme hashivault registers its URLOpener under on secrets.DefaultMux. const Scheme = "hashivault" // URLOpener opens Vault URLs like "hashivault://mykey". // // The URL Host + Path are used as the keyID. // // No query parameters are supported. type URLOpener struct { // Client must be non-nil. Client *api.Client // Options specifies the options to pass to OpenKeeper. Options KeeperOptions } // OpenKeeperURL opens the Keeper URL. func (o *URLOpener) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { for param := range u.Query() { return nil, fmt.Errorf("open keeper %v: invalid query parameter %q", u, param) } return OpenKeeper(o.Client, path.Join(u.Host, u.Path), &o.Options), nil } // OpenKeeper returns a *secrets.Keeper that uses the Transit Secrets Engine of // Vault by Hashicorp. // See the package documentation for an example. func OpenKeeper(client *api.Client, keyID string, opts *KeeperOptions) *secrets.Keeper { return secrets.NewKeeper(&keeper{ keyID: keyID, client: client, }) } type keeper struct { // keyID is an encryption key ring name used by the Vault's transit API. keyID string client *api.Client } // Decrypt decrypts the ciphertext into a plaintext. func (k *keeper) Decrypt(ctx context.Context, ciphertext []byte) ([]byte, error) { out, err := k.client.Logical().Write( path.Join("transit/decrypt", k.keyID), map[string]interface{}{ "ciphertext": string(ciphertext), }, ) if err != nil { return nil, err } return base64.StdEncoding.DecodeString(out.Data["plaintext"].(string)) } // Encrypt encrypts a plaintext into a ciphertext. func (k *keeper) Encrypt(ctx context.Context, plaintext []byte) ([]byte, error) { secret, err := k.client.Logical().Write( path.Join("transit/encrypt", k.keyID), map[string]interface{}{ "plaintext": plaintext, }, ) if err != nil { return nil, err } return []byte(secret.Data["ciphertext"].(string)), nil } // Close implements driver.Keeper.Close. func (k *keeper) Close() error { return nil } // ErrorAs implements driver.Keeper.ErrorAs. func (k *keeper) ErrorAs(err error, i interface{}) bool { return false } // ErrorCode implements driver.ErrorCode. func (k *keeper) ErrorCode(error) gcerrors.ErrorCode { // TODO(shantuo): try to classify vault error codes return gcerrors.Unknown } // KeeperOptions controls Keeper behaviors. // It is provided for future extensibility. type KeeperOptions struct{} �������������������������������������������������go-cloud-0.20.0/secrets/hashivault/vault_test.go����������������������������������������������������0000664�0000000�0000000�00000010713�13670045075�0021654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limtations under the License. package hashivault import ( "context" "errors" "os" "sync" "testing" "time" "github.com/hashicorp/vault/api" "gocloud.dev/internal/testing/setup" "gocloud.dev/secrets" "gocloud.dev/secrets/driver" "gocloud.dev/secrets/drivertest" ) // To run these tests against a real Vault server, first run ./localvault.sh. // Then wait a few seconds for the server to be ready. const ( keyID1 = "test-secrets" keyID2 = "test-secrets2" apiAddress = "http://127.0.0.1:8200" testToken = "faketoken" ) // enableTransit checks and makes sure the Transit API is enabled only once. var enableTransit sync.Once type harness struct { client *api.Client close func() } func (h *harness) MakeDriver(ctx context.Context) (driver.Keeper, driver.Keeper, error) { return &keeper{keyID: keyID1, client: h.client}, &keeper{keyID: keyID2, client: h.client}, nil } func (h *harness) Close() {} func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { if !setup.HasDockerTestEnvironment() { t.Skip("Skipping Vault tests since the Vault server is not available") } c, err := Dial(ctx, &Config{ Token: testToken, APIConfig: api.Config{ Address: apiAddress, }, }) if err != nil { return nil, err } c.SetClientTimeout(3 * time.Second) // Enable the Transit Secrets Engine to use Vault as an Encryption as a Service. enableTransit.Do(func() { s, err := c.Logical().Read("sys/mounts") if err != nil { t.Fatal(err, "; run secrets/vault/localvault.sh to start a dev vault container") } if _, ok := s.Data["transit/"]; !ok { if _, err := c.Logical().Write("sys/mounts/transit", map[string]interface{}{"type": "transit"}); err != nil { t.Fatal(err, "; run secrets/vault/localvault.sh to start a dev vault container") } } }) return &harness{ client: c, }, nil } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (v verifyAs) Name() string { return "verify As function" } func (v verifyAs) ErrorCheck(k *secrets.Keeper, err error) error { var s string if k.ErrorAs(err, &s) { return errors.New("Keeper.ErrorAs expected to fail") } return nil } // Vault-specific tests. func TestNoSessionProvidedError(t *testing.T) { if _, err := Dial(context.Background(), nil); err == nil { t.Error("got nil, want no auth Config provided") } } func TestNoConnectionError(t *testing.T) { ctx := context.Background() // Dial calls vault's NewClient method, which doesn't make the connection. Try // doing encryption which should fail by no connection. client, err := Dial(ctx, &Config{ Token: "<Client (Root) Token>", APIConfig: api.Config{ Address: apiAddress, }, }) if err != nil { t.Fatal(err) } keeper := OpenKeeper(client, "my-key", nil) defer keeper.Close() if _, err := keeper.Encrypt(ctx, []byte("test")); err == nil { t.Error("got nil, want connection refused") } } func fakeConnectionStringInEnv() func() { oldURLVal := os.Getenv("VAULT_SERVER_URL") oldTokenVal := os.Getenv("VAULT_SERVER_TOKEN") os.Setenv("VAULT_SERVER_URL", "http://myvaultserver") os.Setenv("VAULT_SERVER_TOKEN", "faketoken") return func() { os.Setenv("VAULT_SERVER_URL", oldURLVal) os.Setenv("VAULT_SERVER_TOKEN", oldTokenVal) } } func TestOpenKeeper(t *testing.T) { cleanup := fakeConnectionStringInEnv() defer cleanup() tests := []struct { URL string WantErr bool }{ // OK. {"hashivault://mykey", false}, // Invalid parameter. {"hashivault://mykey?param=value", true}, } ctx := context.Background() for _, test := range tests { keeper, err := secrets.OpenKeeper(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err == nil { if err = keeper.Close(); err != nil { t.Errorf("%s: got error during close: %v", test.URL, err) } } } } �����������������������������������������������������go-cloud-0.20.0/secrets/localsecrets/���������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017444�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/localsecrets/example_test.go������������������������������������������������0000664�0000000�0000000�00000003421�13670045075�0022465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package localsecrets_test import ( "context" "log" "gocloud.dev/secrets" "gocloud.dev/secrets/localsecrets" ) func ExampleNewKeeper() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. secretKey, err := localsecrets.NewRandomKey() if err != nil { log.Fatal(err) } keeper := localsecrets.NewKeeper(secretKey) defer keeper.Close() } func Example_openFromURL() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // PRAGMA: On gocloud.dev, add a blank import: _ "gocloud.dev/secrets/localsecrets" // PRAGMA: On gocloud.dev, hide lines until the next blank line. ctx := context.Background() // Using "base64key://", a new random key will be generated. randomKeyKeeper, err := secrets.OpenKeeper(ctx, "base64key://") if err != nil { log.Fatal(err) } defer randomKeyKeeper.Close() // Otherwise, the URL hostname must be a base64-encoded key, of length 32 bytes when decoded. savedKeyKeeper, err := secrets.OpenKeeper(ctx, "base64key://smGbjm71Nxd1Ig5FS0wj9SlbzAIrnolCz9bQQ6uAhl4=") if err != nil { log.Fatal(err) } defer savedKeyKeeper.Close() } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/localsecrets/localsecrets.go������������������������������������������������0000664�0000000�0000000�00000012154�13670045075�0022461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package localsecrets provides a secrets implementation using a locally // provided symmetric key. // Use NewKeeper to construct a *secrets.Keeper. // // URLs // // For secrets.OpenKeeper, localsecrets registers for the scheme "base64key". // To customize the URL opener, or for more details on the URL format, // see URLOpener. // See https://gocloud.dev/concepts/urls/ for background information. // // As // // localsecrets does not support any types for As. package localsecrets // import "gocloud.dev/secrets/localsecrets" import ( "context" "crypto/rand" "encoding/base64" "errors" "fmt" "io" "net/url" "gocloud.dev/gcerrors" "gocloud.dev/secrets" "golang.org/x/crypto/nacl/secretbox" ) func init() { secrets.DefaultURLMux().RegisterKeeper(Scheme, &URLOpener{}) } // Scheme is the URL scheme localsecrets registers its URLOpener under on // secrets.DefaultMux. // See the package documentation and/or URLOpener for details. const ( Scheme = "base64key" ) // URLOpener opens localsecrets URLs like "base64key://smGbjm71Nxd1Ig5FS0wj9SlbzAIrnolCz9bQQ6uAhl4=". // // The URL host must be base64 encoded, and must decode to exactly 32 bytes. // If the URL host is empty (e.g., "base64key://"), a new random key is generated. // // No query parameters are supported. type URLOpener struct{} // OpenKeeperURL opens Keeper URLs. func (o *URLOpener) OpenKeeperURL(ctx context.Context, u *url.URL) (*secrets.Keeper, error) { for param := range u.Query() { return nil, fmt.Errorf("open keeper %v: invalid query parameter %q", u, param) } var sk [32]byte var err error if u.Host == "" { sk, err = NewRandomKey() } else { sk, err = Base64Key(u.Host) } if err != nil { return nil, fmt.Errorf("open keeper %v: failed to get key: %v", u, err) } return NewKeeper(sk), nil } // keeper holds a secret for use in symmetric encryption, // and implements driver.Keeper. type keeper struct { secretKey [32]byte // secretbox key size } // NewKeeper returns a *secrets.Keeper that uses the given symmetric // key. See the package documentation for an example. func NewKeeper(sk [32]byte) *secrets.Keeper { return secrets.NewKeeper( &keeper{secretKey: sk}, ) } // Base64Key takes a secret key as a base64 string and converts it // to a [32]byte, erroring if the decoded data is not 32 bytes. func Base64Key(base64str string) ([32]byte, error) { var sk32 [32]byte key, err := base64.StdEncoding.DecodeString(base64str) if err != nil { return sk32, err } keySize := len([]byte(key)) if keySize != 32 { return sk32, fmt.Errorf("Base64Key: secret key material is %v bytes, want 32 bytes", keySize) } copy(sk32[:], key) return sk32, nil } // NewRandomKey will generate random secret key material suitable to be // used as the secret key argument to NewKeeper. func NewRandomKey() ([32]byte, error) { var sk32 [32]byte // Read random numbers into the passed slice until it's full. _, err := rand.Read(sk32[:]) if err != nil { return sk32, err } return sk32, nil } const nonceSize = 24 // Encrypt encrypts a message using a per-message generated nonce and // the secret held in the Keeper. func (k *keeper) Encrypt(ctx context.Context, message []byte) ([]byte, error) { var nonce [nonceSize]byte if _, err := io.ReadFull(rand.Reader, nonce[:]); err != nil { return nil, err } // secretbox.Seal appends the encrypted message to its first argument and returns // the result; using a slice on top of the nonce array for this "out" arg allows reading // the nonce out of the first nonceSize bytes when the message is decrypted. return secretbox.Seal(nonce[:], message, &nonce, &k.secretKey), nil } // Decrypt decrypts a message using a nonce that is read out of the first nonceSize bytes // of the message and a secret held in the Keeper. func (k *keeper) Decrypt(ctx context.Context, message []byte) ([]byte, error) { if len(message) < nonceSize { return nil, fmt.Errorf("localsecrets: invalid message length (%d, expected at least %d)", len(message), nonceSize) } var decryptNonce [nonceSize]byte copy(decryptNonce[:], message[:nonceSize]) decrypted, ok := secretbox.Open(nil, message[nonceSize:], &decryptNonce, &k.secretKey) if !ok { return nil, errors.New("localsecrets: Decrypt failed") } return decrypted, nil } // Close implements driver.Keeper.Close. func (k *keeper) Close() error { return nil } // ErrorAs implements driver.Keeper.ErrorAs. func (k *keeper) ErrorAs(err error, i interface{}) bool { return false } // ErrorCode implements driver.ErrorCode. func (k *keeper) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.Unknown } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/localsecrets/localsecrets_test.go�������������������������������������������0000664�0000000�0000000�00000010011�13670045075�0023506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package localsecrets import ( "context" "errors" "log" "strings" "testing" "gocloud.dev/secrets" "gocloud.dev/secrets/driver" "gocloud.dev/secrets/drivertest" ) type harness struct{} func (h *harness) MakeDriver(ctx context.Context) (driver.Keeper, driver.Keeper, error) { secret1, err := NewRandomKey() if err != nil { log.Fatal(err) } secret2, err := NewRandomKey() if err != nil { log.Fatal(err) } return &keeper{secretKey: secret1}, &keeper{secretKey: secret2}, nil } func (h *harness) Close() {} func newHarness(ctx context.Context, t *testing.T) (drivertest.Harness, error) { return &harness{}, nil } func TestConformance(t *testing.T) { drivertest.RunConformanceTests(t, newHarness, []drivertest.AsTest{verifyAs{}}) } type verifyAs struct{} func (v verifyAs) Name() string { return "verify As function" } func (v verifyAs) ErrorCheck(k *secrets.Keeper, err error) error { var s string if k.ErrorAs(err, &s) { return errors.New("Keeper.ErrorAs expected to fail") } return nil } func TestSmallData(t *testing.T) { key, err := NewRandomKey() if err != nil { t.Fatal(err) } keeper := NewKeeper(key) defer keeper.Close() ctx := context.Background() const plaintext = "hello world" ciphertext, err := keeper.Encrypt(ctx, []byte(plaintext)) if err != nil { t.Fatal(err) } tests := []struct { Ciphertext []byte Want string WantErr bool WantInvalidLengthErr bool // true if we want the error to be that the ciphertext length is invalid }{ {nil, "", true, true}, {[]byte{}, "", true, true}, {[]byte{0}, "", true, true}, {ciphertext[:1], "", true, true}, {ciphertext[:nonceSize-1], "", true, true}, {ciphertext[:nonceSize], "", true, false}, // not invalid, but Decrypt will fail {ciphertext, plaintext, false, false}, // works } for _, test := range tests { got, err := keeper.Decrypt(ctx, test.Ciphertext) if (err != nil) != test.WantErr { t.Errorf("got err %v from Decrypt, want error? %v", err, test.WantErr) } if err == nil { if gotStr := string(got); gotStr != test.Want { t.Errorf("got %s want %s", gotStr, test.Want) } } else { if gotInvalid := strings.Contains(err.Error(), "invalid message length"); gotInvalid != test.WantInvalidLengthErr { t.Errorf("got invalid message length error? %v want %v", gotInvalid, test.WantInvalidLengthErr) } } // Encrypt should always work. if _, err := keeper.Encrypt(ctx, test.Ciphertext); err != nil { t.Errorf("got error %v from Encrypt, want nil", err) } } } func TestOpenKeeper(t *testing.T) { tests := []struct { URL string WantErr bool }{ // OK. {"base64key://", false}, // OK. {"base64key://smGbjm71Nxd1Ig5FS0wj9SlbzAIrnolCz9bQQ6uAhl4=", false}, // Valid base64, but < 32 bytes. {"base64key://c2VjcmV0", true}, // Valid base64, but > 32 bytes. {"base64key://c2VjcmV0c2VjcmV0c2VjcmV0c2VjcmV0c2VjcmV0c3NlY3JldHNlY3JldHNlY3JldHNlY3JldHNlY3JldHM=", true}, // Invalid base64 key. {"base64key://not-valid-base64", true}, // Invalid parameter. {"base64key://?param=value", true}, } ctx := context.Background() for _, test := range tests { keeper, err := secrets.OpenKeeper(ctx, test.URL) if (err != nil) != test.WantErr { t.Errorf("%s: got error %v, want error %v", test.URL, err, test.WantErr) } if err == nil { if err = keeper.Close(); err != nil { t.Errorf("%s: got error during close: %v", test.URL, err) } } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/secrets.go������������������������������������������������������������������0000664�0000000�0000000�00000016440�13670045075�0016765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package secrets provides an easy and portable way to encrypt and decrypt // messages. Subpackages contain driver implementations of // secrets for supported services. // // See https://gocloud.dev/howto/secrets/ for a detailed how-to guide. // // // OpenCensus Integration // // OpenCensus supports tracing and metric collection for multiple languages and // backend providers. See https://opencensus.io. // // This API collects OpenCensus traces and metrics for the following methods: // - Encrypt // - Decrypt // All trace and metric names begin with the package import path. // The traces add the method name. // For example, "gocloud.dev/secrets/Encrypt". // The metrics are "completed_calls", a count of completed method calls by driver, // method and status (error code); and "latency", a distribution of method latency // by driver and method. // For example, "gocloud.dev/secrets/latency". // // To enable trace collection in your application, see "Configure Exporter" at // https://opencensus.io/quickstart/go/tracing. // To enable metric collection in your application, see "Exporting stats" at // https://opencensus.io/quickstart/go/metrics. package secrets // import "gocloud.dev/secrets" import ( "context" "net/url" "sync" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/oc" "gocloud.dev/internal/openurl" "gocloud.dev/secrets/driver" ) // Keeper does encryption and decryption. To create a Keeper, use constructors // found in driver subpackages. type Keeper struct { k driver.Keeper tracer *oc.Tracer // mu protects the closed variable. // Read locks are kept to allow holding a read lock for long-running calls, // and thereby prevent closing until a call finishes. mu sync.RWMutex closed bool } // NewKeeper is intended for use by drivers only. Do not use in application code. var NewKeeper = newKeeper // newKeeper creates a Keeper. func newKeeper(k driver.Keeper) *Keeper { return &Keeper{ k: k, tracer: &oc.Tracer{ Package: pkgName, Provider: oc.ProviderName(k), LatencyMeasure: latencyMeasure, }, } } const pkgName = "gocloud.dev/secrets" var ( latencyMeasure = oc.LatencyMeasure(pkgName) // OpenCensusViews are predefined views for OpenCensus metrics. // The views include counts and latency distributions for API method calls. // See the example at https://godoc.org/go.opencensus.io/stats/view for usage. OpenCensusViews = oc.Views(pkgName, latencyMeasure) ) // Encrypt encrypts the plaintext and returns the cipher message. func (k *Keeper) Encrypt(ctx context.Context, plaintext []byte) (ciphertext []byte, err error) { ctx = k.tracer.Start(ctx, "Encrypt") defer func() { k.tracer.End(ctx, err) }() k.mu.RLock() defer k.mu.RUnlock() if k.closed { return nil, errClosed } b, err := k.k.Encrypt(ctx, plaintext) if err != nil { return nil, wrapError(k, err) } return b, nil } // Decrypt decrypts the ciphertext and returns the plaintext. func (k *Keeper) Decrypt(ctx context.Context, ciphertext []byte) (plaintext []byte, err error) { ctx = k.tracer.Start(ctx, "Decrypt") defer func() { k.tracer.End(ctx, err) }() k.mu.RLock() defer k.mu.RUnlock() if k.closed { return nil, errClosed } b, err := k.k.Decrypt(ctx, ciphertext) if err != nil { return nil, wrapError(k, err) } return b, nil } var errClosed = gcerr.Newf(gcerr.FailedPrecondition, nil, "secrets: Keeper has been closed") // Close releases any resources used for the Keeper. func (k *Keeper) Close() error { k.mu.Lock() prev := k.closed k.closed = true k.mu.Unlock() if prev { return errClosed } return wrapError(k, k.k.Close()) } // ErrorAs converts i to driver-specific types. See // https://gocloud.dev/concepts/as/ for background information and the // driver package documentation for the specific types supported for // that driver. // // ErrorAs panics if i is nil or not a pointer. // ErrorAs returns false if err == nil. func (k *Keeper) ErrorAs(err error, i interface{}) bool { return gcerr.ErrorAs(err, i, k.k.ErrorAs) } func wrapError(k *Keeper, err error) error { if err == nil { return nil } if gcerr.DoNotWrap(err) { return err } return gcerr.New(k.k.ErrorCode(err), err, 2, "secrets") } // KeeperURLOpener represents types that can open Keepers based on a URL. // The opener must not modify the URL argument. OpenKeeperURL must be safe to // call from multiple goroutines. // // This interface is generally implemented by types in driver packages. type KeeperURLOpener interface { OpenKeeperURL(ctx context.Context, u *url.URL) (*Keeper, error) } // URLMux is a URL opener multiplexer. It matches the scheme of the URLs // against a set of registered schemes and calls the opener that matches the // URL's scheme. // See https://gocloud.dev/concepts/urls/ for more information. // // The zero value is a multiplexer with no registered schemes. type URLMux struct { schemes openurl.SchemeMap } // KeeperSchemes returns a sorted slice of the registered Keeper schemes. func (mux *URLMux) KeeperSchemes() []string { return mux.schemes.Schemes() } // ValidKeeperScheme returns true iff scheme has been registered for Keepers. func (mux *URLMux) ValidKeeperScheme(scheme string) bool { return mux.schemes.ValidScheme(scheme) } // RegisterKeeper registers the opener with the given scheme. If an opener // already exists for the scheme, RegisterKeeper panics. func (mux *URLMux) RegisterKeeper(scheme string, opener KeeperURLOpener) { mux.schemes.Register("secrets", "Keeper", scheme, opener) } // OpenKeeper calls OpenKeeperURL with the URL parsed from urlstr. // OpenKeeper is safe to call from multiple goroutines. func (mux *URLMux) OpenKeeper(ctx context.Context, urlstr string) (*Keeper, error) { opener, u, err := mux.schemes.FromString("Keeper", urlstr) if err != nil { return nil, err } return opener.(KeeperURLOpener).OpenKeeperURL(ctx, u) } // OpenKeeperURL dispatches the URL to the opener that is registered with the // URL's scheme. OpenKeeperURL is safe to call from multiple goroutines. func (mux *URLMux) OpenKeeperURL(ctx context.Context, u *url.URL) (*Keeper, error) { opener, err := mux.schemes.FromURL("Keeper", u) if err != nil { return nil, err } return opener.(KeeperURLOpener).OpenKeeperURL(ctx, u) } var defaultURLMux = new(URLMux) // DefaultURLMux returns the URLMux used by OpenKeeper. // // Driver packages can use this to register their KeeperURLOpener on the mux. func DefaultURLMux() *URLMux { return defaultURLMux } // OpenKeeper opens the Keeper identified by the URL given. // See the URLOpener documentation in driver subpackages for // details on supported URL formats, and https://gocloud.dev/concepts/urls // for more information. func OpenKeeper(ctx context.Context, urlstr string) (*Keeper, error) { return defaultURLMux.OpenKeeper(ctx, urlstr) } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/secrets/secrets_test.go�������������������������������������������������������������0000664�0000000�0000000�00000013117�13670045075�0020022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package secrets import ( "context" "errors" "net/url" "strings" "sync" "testing" "github.com/google/go-cmp/cmp" "gocloud.dev/gcerrors" "gocloud.dev/internal/gcerr" "gocloud.dev/internal/testing/octest" "gocloud.dev/secrets/driver" ) var errFake = errors.New("fake") type erroringKeeper struct { driver.Keeper } func (k *erroringKeeper) Decrypt(ctx context.Context, b []byte) ([]byte, error) { return nil, errFake } func (k *erroringKeeper) Encrypt(ctx context.Context, b []byte) ([]byte, error) { return nil, errFake } func (k *erroringKeeper) Close() error { return errFake } func (k *erroringKeeper) ErrorCode(error) gcerrors.ErrorCode { return gcerrors.Internal } func TestErrorsAreWrapped(t *testing.T) { ctx := context.Background() k := NewKeeper(&erroringKeeper{}) // verifyWrap ensures that err is wrapped exactly once. verifyWrap := func(description string, err error) { if err == nil { t.Errorf("%s: got nil error, wanted non-nil", description) } else if unwrapped, ok := err.(*gcerr.Error); !ok { t.Errorf("%s: not wrapped: %v", description, err) } else if du, ok := unwrapped.Unwrap().(*gcerr.Error); ok { t.Errorf("%s: double wrapped: %v", description, du) } if s := err.Error(); !strings.HasPrefix(s, "secrets ") { t.Errorf("%s: Error() for wrapped error doesn't start with secrets: prefix: %s", description, s) } } _, err := k.Decrypt(ctx, nil) verifyWrap("Decrypt", err) _, err = k.Encrypt(ctx, nil) verifyWrap("Encrypt", err) err = k.Close() verifyWrap("Close", err) } // TestKeeperIsClosed tests that Keeper functions return an error when the // Keeper is closed. func TestKeeperIsClosed(t *testing.T) { ctx := context.Background() k := NewKeeper(&erroringKeeper{}) k.Close() if _, err := k.Decrypt(ctx, nil); err != errClosed { t.Error(err) } if _, err := k.Encrypt(ctx, nil); err != errClosed { t.Error(err) } if err := k.Close(); err != errClosed { t.Error(err) } } func TestOpenCensus(t *testing.T) { ctx := context.Background() te := octest.NewTestExporter(OpenCensusViews) defer te.Unregister() k := NewKeeper(&erroringKeeper{}) defer k.Close() k.Encrypt(ctx, nil) k.Decrypt(ctx, nil) diff := octest.Diff(te.Spans(), te.Counts(), "gocloud.dev/secrets", "gocloud.dev/secrets", []octest.Call{ {Method: "Encrypt", Code: gcerrors.Internal}, {Method: "Decrypt", Code: gcerrors.Internal}, }) if diff != "" { t.Error(diff) } } var ( testOpenOnce sync.Once testOpenGot *url.URL ) func TestURLMux(t *testing.T) { ctx := context.Background() mux := new(URLMux) fake := &fakeOpener{} mux.RegisterKeeper("foo", fake) mux.RegisterKeeper("err", fake) if diff := cmp.Diff(mux.KeeperSchemes(), []string{"err", "foo"}); diff != "" { t.Errorf("Schemes: %s", diff) } if !mux.ValidKeeperScheme("foo") || !mux.ValidKeeperScheme("err") { t.Errorf("ValidKeeperScheme didn't return true for valid scheme") } if mux.ValidKeeperScheme("foo2") || mux.ValidKeeperScheme("http") { t.Errorf("ValidKeeperScheme didn't return false for invalid scheme") } for _, tc := range []struct { name string url string wantErr bool }{ { name: "empty URL", wantErr: true, }, { name: "invalid URL", url: ":foo", wantErr: true, }, { name: "invalid URL no scheme", url: "foo", wantErr: true, }, { name: "unregistered scheme", url: "bar://mykeeper", wantErr: true, }, { name: "func returns error", url: "err://mykeeper", wantErr: true, }, { name: "no query options", url: "foo://mykeeper", }, { name: "empty query options", url: "foo://mykeeper?", }, { name: "query options", url: "foo://mykeeper?aAa=bBb&cCc=dDd", }, { name: "multiple query options", url: "foo://mykeeper?x=a&x=b&x=c", }, { name: "fancy keeper name", url: "foo:///foo/bar/baz", }, { name: "using api scheme prefix", url: "secrets+foo://mykeeper", }, { name: "using api+type scheme prefix", url: "secrets+keeper+foo://mykeeper", }, } { t.Run(tc.name, func(t *testing.T) { keeper, gotErr := mux.OpenKeeper(ctx, tc.url) if (gotErr != nil) != tc.wantErr { t.Fatalf("got err %v, want error %v", gotErr, tc.wantErr) } if gotErr != nil { return } defer keeper.Close() if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } // Repeat with OpenKeeperURL. parsed, err := url.Parse(tc.url) if err != nil { t.Fatal(err) } keeper, gotErr = mux.OpenKeeperURL(ctx, parsed) if gotErr != nil { t.Fatalf("got err %v, want nil", gotErr) } defer keeper.Close() if got := fake.u.String(); got != tc.url { t.Errorf("got %q want %q", got, tc.url) } }) } } type fakeOpener struct { u *url.URL // last url passed to OpenKeeperURL } func (o *fakeOpener) OpenKeeperURL(ctx context.Context, u *url.URL) (*Keeper, error) { if u.Scheme == "err" { return nil, errors.New("fail") } o.u = u return NewKeeper(&erroringKeeper{}), nil } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/�����������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0014617�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/driver/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016112�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/driver/driver.go�������������������������������������������������������������0000664�0000000�0000000�00000004154�13670045075�0017740�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package driver defines an interface for custom HTTP listeners. // Application code should use package server. package driver // import "gocloud.dev/server/driver" import ( "context" "net/http" ) // Server dispatches requests to an http.Handler. type Server interface { // ListenAndServe listens on the TCP network address addr and then // calls Serve with handler to handle requests on incoming connections. // The addr argument will be a non-empty string specifying "host:port". // The http.Handler will always be non-nil. // Drivers must block until serving is done (or // return an error if serving can't occur for some reason), serve // requests to the given http.Handler, and be interruptable by Shutdown. // Drivers should use the given address if they serve using TCP directly. ListenAndServe(addr string, h http.Handler) error // Shutdown gracefully shuts down the server without interrupting // any active connections. If the provided context expires before // the shutdown is complete, Shutdown returns the context's error, // otherwise it returns any error returned from closing the Server's // underlying Listener(s). Shutdown(ctx context.Context) error } // TLSServer is an optional interface for Server drivers, that adds support // for serving TLS. type TLSServer interface { // ListenAndServeTLS is similar to Server.ListenAndServe, but should // serve using TLS. // See http://go/godoc/net/http/#Server.ListenAndServeTLS. ListenAndServeTLS(addr, certFile, keyFile string, h http.Handler) error } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/example_test.go��������������������������������������������������������������0000664�0000000�0000000�00000012265�13670045075�0017646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2019 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package server_test import ( "context" "errors" "fmt" "log" "net/http" "os" "os/signal" "sync" "time" "gocloud.dev/server" "gocloud.dev/server/health" "gocloud.dev/server/requestlog" ) func ExampleServer_New() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Use the constructor function to create the server. srv := server.New(http.DefaultServeMux, nil) // Register a route. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) // Start the server. If ListenAndServe returns an error, print it and exit. if err := srv.ListenAndServe(":8080"); err != nil { log.Fatalf("%v", err) } } func ExampleServer_RequestLogger() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Create a logger, and assign it to the RequestLogger field of a // server.Options struct. srvOptions := &server.Options{ RequestLogger: requestlog.NewNCSALogger(os.Stdout, func(error) {}), } // Pass the options to the Server constructor. srv := server.New(http.DefaultServeMux, srvOptions) // Register a route. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) // Start the server. You will see requests logged to STDOUT. if err := srv.ListenAndServe(":8080"); err != nil { log.Fatalf("%v", err) } } // customHealthCheck is an example health check. It implements the // health.Checker interface and reports the server is healthy when the healthy // field is set to true. type customHealthCheck struct { mu sync.RWMutex healthy bool } // customHealthCheck implements the health.Checker interface because it has a // CheckHealth method. Because each application may have a different definition // of what it means to be "healthy", you will need to define a CheckHealth method // specific to your application. func (h *customHealthCheck) CheckHealth() error { h.mu.RLock() defer h.mu.RUnlock() if !h.healthy { return errors.New("not ready yet!") } return nil } func ExampleServer_HealthChecks() { // PRAGMA: This example is used on gocloud.dev; PRAGMA comments adjust how it is shown and can be ignored. // Create a health.Checker from the type we defined for our application. // In this example, healthCheck will report the server is unhealthy for 10 seconds // after startup, and as healthy henceforth. Check the /healthz/readiness // HTTP path to see readiness. healthCheck := new(customHealthCheck) time.AfterFunc(10*time.Second, func() { healthCheck.mu.Lock() defer healthCheck.mu.Unlock() healthCheck.healthy = true }) // The server.Options struct takes a slice of health checks, because you // may need to check several things. srvOptions := &server.Options{ HealthChecks: []health.Checker{healthCheck}, } // Pass the options to the Server constructor. srv := server.New(http.DefaultServeMux, srvOptions) // Register a route. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) // Start the server. You will see requests logged to STDOUT. if err := srv.ListenAndServe(":8080"); err != nil { log.Fatalf("%v", err) } } func ExampleServer_Shutdown() { // OPTIONAL: Specify a driver in the options for the constructor. // NewDefaultDriver will be used by default if it is not explicitly set, and // uses http.Server with read, write, and idle timeouts set. When Shutdown // is called on the server, it is called on the driver. srvOptions := &server.Options{ Driver: server.NewDefaultDriver(), } // Pass the options to the Server constructor. srv := server.New(http.DefaultServeMux, srvOptions) // If your application will be behind a load balancer that handles graceful // shutdown of requests, you may not need to call Shutdown on the server // directly. If you need to ensure graceful shutdown directly, it is important // to have a separate goroutine, because ListenAndServe blocks indefinitely. go func() { interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt) // Receive off the chanel in a loop, because the interrupt could be sent // before ListenAndServe starts. for { <-interrupt srv.Shutdown(context.Background()) } }() // Register a route. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) // Start the server. You will see requests logged to STDOUT. // In the absence of an error, ListenAndServe blocks forever. if err := srv.ListenAndServe(":8080"); err != nil { log.Fatalf("%v", err) } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/health/����������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016064�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/health/health.go�������������������������������������������������������������0000664�0000000�0000000�00000005157�13670045075�0017670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package health provides health check handlers. package health // import "gocloud.dev/server/health" import ( "io" "net/http" ) // Handler is an HTTP handler that reports on the success of an // aggregate of Checkers. The zero value is always healthy. type Handler struct { checkers []Checker } // Add adds a new check to the handler. func (h *Handler) Add(c Checker) { h.checkers = append(h.checkers, c) } // ServeHTTP returns 200 if it is healthy, 500 otherwise. func (h *Handler) ServeHTTP(w http.ResponseWriter, _ *http.Request) { for _, c := range h.checkers { if err := c.CheckHealth(); err != nil { writeUnhealthy(w) return } } writeHealthy(w) } func writeHeaders(statusLen string, w http.ResponseWriter) { w.Header().Set("Content-Length", statusLen) w.Header().Set("Content-Type", "text/plain; charset=utf-8") w.Header().Set("X-Content-Type-Options", "nosniff") } func writeUnhealthy(w http.ResponseWriter) { const ( status = "unhealthy" statusLen = "9" ) writeHeaders(statusLen, w) w.WriteHeader(http.StatusInternalServerError) io.WriteString(w, status) } // HandleLive is an http.HandlerFunc that handles liveness checks by // immediately responding with an HTTP 200 status. func HandleLive(w http.ResponseWriter, _ *http.Request) { writeHealthy(w) } func writeHealthy(w http.ResponseWriter) { const ( status = "ok" statusLen = "2" ) writeHeaders(statusLen, w) w.WriteHeader(http.StatusOK) io.WriteString(w, status) } // Checker wraps the CheckHealth method. // // CheckHealth returns nil if the resource is healthy, or a non-nil // error if the resource is not healthy. CheckHealth must be safe to // call from multiple goroutines. type Checker interface { CheckHealth() error } // CheckerFunc is an adapter type to allow the use of ordinary functions as // health checks. If f is a function with the appropriate signature, // CheckerFunc(f) is a Checker that calls f. type CheckerFunc func() error // CheckHealth calls f(). func (f CheckerFunc) CheckHealth() error { return f() } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/health/health_test.go��������������������������������������������������������0000664�0000000�0000000�00000004507�13670045075�0020725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package health import ( "errors" "net/http" "net/http/httptest" "sync" "testing" ) func TestNewHandler(t *testing.T) { s := httptest.NewServer(new(Handler)) defer s.Close() code, err := check(s) if err != nil { t.Fatalf("GET %s: %v", s.URL, err) } if code != http.StatusOK { t.Errorf("got HTTP status %d; want %d", code, http.StatusOK) } } func TestChecker(t *testing.T) { c1 := &checker{err: errors.New("checker 1 down")} c2 := &checker{err: errors.New("checker 2 down")} h := new(Handler) h.Add(c1) h.Add(c2) s := httptest.NewServer(h) defer s.Close() t.Run("AllUnhealthy", func(t *testing.T) { code, err := check(s) if err != nil { t.Fatalf("GET %s: %v", s.URL, err) } if code != http.StatusInternalServerError { t.Errorf("got HTTP status %d; want %d", code, http.StatusInternalServerError) } }) c1.set(nil) t.Run("PartialHealthy", func(t *testing.T) { code, err := check(s) if err != nil { t.Fatalf("GET %s: %v", s.URL, err) } if code != http.StatusInternalServerError { t.Errorf("got HTTP status %d; want %d", code, http.StatusInternalServerError) } }) c2.set(nil) t.Run("AllHealthy", func(t *testing.T) { code, err := check(s) if err != nil { t.Fatalf("GET %s: %v", s.URL, err) } if code != http.StatusOK { t.Errorf("got HTTP status %d; want %d", code, http.StatusOK) } }) } func check(s *httptest.Server) (code int, err error) { resp, err := http.Get(s.URL) if err != nil { return 0, err } resp.Body.Close() return resp.StatusCode, nil } type checker struct { mu sync.Mutex err error } func (c *checker) CheckHealth() error { defer c.mu.Unlock() c.mu.Lock() return c.err } func (c *checker) set(e error) { defer c.mu.Unlock() c.mu.Lock() c.err = e } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/health/sqlhealth/������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0020051�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/health/sqlhealth/sqlhealth.go������������������������������������������������0000664�0000000�0000000�00000004523�13670045075�0022371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package sqlhealth provides a health check for a SQL database connection. package sqlhealth // import "gocloud.dev/server/health/sqlhealth" import ( "context" "database/sql" "errors" "time" ) // Checker checks the health of a SQL database. type Checker struct { cancel context.CancelFunc stopped <-chan struct{} healthy bool } // New starts a new asynchronous ping of the SQL database. Pings will be sent // until one succeeds or Stop is called, whichever comes first. func New(db *sql.DB) *Checker { // We create a context here because we are detaching. ctx, cancel := context.WithCancel(context.Background()) stopped := make(chan struct{}) c := &Checker{ cancel: cancel, stopped: stopped, } go func() { var timer *time.Timer defer func() { if timer != nil { timer.Stop() } close(stopped) }() wait := 250 * time.Millisecond const maxWait = 30 * time.Second for { if err := db.PingContext(ctx); err == nil { c.healthy = true return } if timer == nil { timer = time.NewTimer(wait) } else { // Timer already fired, so resetting does not race. timer.Reset(wait) } select { case <-timer.C: if wait < maxWait { // Back off next ping. wait *= 2 if wait > maxWait { wait = maxWait } } case <-ctx.Done(): return } } }() return c } // CheckHealth returns nil iff the ping started by New has returned // success. func (c *Checker) CheckHealth() error { select { case <-c.stopped: if !c.healthy { return errors.New("ping stopped before becoming healthy") } return nil default: return errors.New("still pinging database") } } // Stop stops any ongoing ping of the database. func (c *Checker) Stop() { c.cancel() <-c.stopped } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/health/sqlhealth/sqlhealth_test.go�������������������������������������������0000664�0000000�0000000�00000003711�13670045075�0023426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package sqlhealth import ( "context" "database/sql" "database/sql/driver" "errors" "sync" "testing" "gocloud.dev/server/health" ) var _ = health.Checker((*Checker)(nil)) func TestCheck(t *testing.T) { connector := new(stubConnector) db := sql.OpenDB(connector) defer db.Close() check := New(db) defer check.Stop() if err := check.CheckHealth(); err == nil { t.Error("checker starts healthy") } connector.setHealthy(true) // Should eventually become healthy. Otherwise, stopped by test timeout. for { if err := check.CheckHealth(); err == nil { break } } } type stubConnector struct { mu sync.RWMutex healthy bool } func (c *stubConnector) setHealthy(h bool) { c.mu.Lock() c.healthy = h c.mu.Unlock() } func (c *stubConnector) Connect(ctx context.Context) (driver.Conn, error) { return &stubConn{c}, nil } func (c *stubConnector) Driver() driver.Driver { return nil } type stubConn struct { c *stubConnector } func (conn *stubConn) Prepare(query string) (driver.Stmt, error) { panic("not implemented") } func (conn *stubConn) Close() error { return nil } func (conn *stubConn) Begin() (driver.Tx, error) { panic("not implemented") } func (conn *stubConn) Ping(ctx context.Context) error { conn.c.mu.RLock() healthy := conn.c.healthy conn.c.mu.RUnlock() if !healthy { return errors.New("unhealthy") } return nil } �������������������������������������������������������go-cloud-0.20.0/server/requestlog/������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017011�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/requestlog/ncsa.go�����������������������������������������������������������0000664�0000000�0000000�00000004350�13670045075�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package requestlog import ( "io" "strconv" "sync" ) // An NCSALogger writes log entries to an io.Writer in the // Combined Log Format. // // Details at http://httpd.apache.org/docs/current/logs.html#combined type NCSALogger struct { onErr func(error) mu sync.Mutex w io.Writer buf []byte } // NewNCSALogger returns a new logger that writes to w. // A nil onErr is treated the same as func(error) {}. func NewNCSALogger(w io.Writer, onErr func(error)) *NCSALogger { return &NCSALogger{ w: w, onErr: onErr, } } // Log writes an entry line to its writer. Multiple concurrent calls // will produce sequential writes to its writer. func (l *NCSALogger) Log(ent *Entry) { if err := l.log(ent); err != nil && l.onErr != nil { l.onErr(err) } } func (l *NCSALogger) log(ent *Entry) error { defer l.mu.Unlock() l.mu.Lock() l.buf = formatEntry(l.buf[:0], ent) _, err := l.w.Write(l.buf) return err } func formatEntry(b []byte, ent *Entry) []byte { const ncsaTime = "02/Jan/2006:15:04:05 -0700" if ent.RemoteIP == "" { b = append(b, '-') } else { b = append(b, ent.RemoteIP...) } b = append(b, " - - ["...) b = ent.ReceivedTime.AppendFormat(b, ncsaTime) b = append(b, "] \""...) b = append(b, ent.RequestMethod...) b = append(b, ' ') b = append(b, ent.RequestURL...) b = append(b, ' ') b = append(b, ent.Proto...) b = append(b, "\" "...) b = strconv.AppendInt(b, int64(ent.Status), 10) b = append(b, ' ') b = strconv.AppendInt(b, int64(ent.ResponseBodySize), 10) b = append(b, ' ') b = strconv.AppendQuote(b, ent.Referer) b = append(b, ' ') b = strconv.AppendQuote(b, ent.UserAgent) b = append(b, '\n') return b } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/requestlog/ncsa_test.go������������������������������������������������������0000664�0000000�0000000�00000006554�13670045075�0021335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package requestlog import ( "bytes" "testing" "time" ) var _ Logger = (*NCSALogger)(nil) func TestNCSALog(t *testing.T) { const ( startTime = 1507914000 startTimeNanos = 512 latencySec = 5 latencyNanos = 123456789 endTime = startTime + latencySec endTimeNanos = startTimeNanos + latencyNanos ) tests := []struct { name string ent Entry want string }{ { name: "AllFields", ent: Entry{ ReceivedTime: time.Unix(startTime, startTimeNanos).UTC(), RequestMethod: "POST", RequestURL: "/foo/bar", RequestHeaderSize: 456, RequestBodySize: 123000, UserAgent: "Chrome proxied through Firefox and Edge", Referer: "http://www.example.com/", Proto: "HTTP/1.1", RemoteIP: "12.34.56.78", ServerIP: "127.0.0.1", Status: 404, ResponseHeaderSize: 555, ResponseBodySize: 789000, Latency: latencySec*time.Second + latencyNanos*time.Nanosecond, }, want: `12.34.56.78 - - [13/Oct/2017:17:00:00 +0000] "POST /foo/bar HTTP/1.1" 404 789000 "http://www.example.com/" "Chrome proxied through Firefox and Edge"` + "\n", }, { name: "OnlyRequiredFields", ent: Entry{ ReceivedTime: time.Unix(startTime, startTimeNanos).UTC(), RequestMethod: "POST", RequestURL: "/foo/bar", Proto: "HTTP/1.1", Status: 404, }, want: `- - - [13/Oct/2017:17:00:00 +0000] "POST /foo/bar HTTP/1.1" 404 0 "" ""` + "\n", }, { name: "OnlyRequiredFieldsAndUserAgent", ent: Entry{ ReceivedTime: time.Unix(startTime, startTimeNanos).UTC(), RequestMethod: "POST", RequestURL: "/foo/bar", Proto: "HTTP/1.1", Status: 404, UserAgent: "Chrome proxied through Firefox and Edge", }, want: `- - - [13/Oct/2017:17:00:00 +0000] "POST /foo/bar HTTP/1.1" 404 0 "" "Chrome proxied through Firefox and Edge"` + "\n", }, { name: "DoubleQuotesInUserAgent", ent: Entry{ ReceivedTime: time.Unix(startTime, startTimeNanos).UTC(), RequestMethod: "POST", RequestURL: "/foo/bar", Proto: "HTTP/1.1", Status: 404, UserAgent: "Chrome \"proxied\" through Firefox and Edge", }, want: `- - - [13/Oct/2017:17:00:00 +0000] "POST /foo/bar HTTP/1.1" 404 0 "" "Chrome \"proxied\" through Firefox and Edge"` + "\n", }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { buf := new(bytes.Buffer) var logErr error l := NewNCSALogger(buf, func(e error) { logErr = e }) l.Log(&test.ent) if logErr != nil { t.Error("Logger called error callback:", logErr) } got := buf.String() if got != test.want { t.Errorf("Log(...) wrote %q; want %q", got, test.want) } }) } } ����������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/requestlog/requestlog.go�����������������������������������������������������0000664�0000000�0000000�00000012203�13670045075�0021530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package requestlog provides an http.Handler that logs information // about requests. package requestlog // import "gocloud.dev/server/requestlog" import ( "bufio" "errors" "io" "io/ioutil" "net" "net/http" "time" "go.opencensus.io/trace" ) // Logger wraps the Log method. Log must be safe to call from multiple // goroutines. Log must not hold onto an Entry after it returns. type Logger interface { Log(*Entry) } // A Handler emits request information to a Logger. type Handler struct { log Logger h http.Handler } // NewHandler returns a handler that emits information to log and calls // h.ServeHTTP. func NewHandler(log Logger, h http.Handler) *Handler { return &Handler{ log: log, h: h, } } // ServeHTTP calls its underlying handler's ServeHTTP method, then calls // Log after the handler returns. // // ServeHTTP will always consume the request body up to the first error, // even if the underlying handler does not. func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { start := time.Now() sc := trace.FromContext(r.Context()).SpanContext() ent := &Entry{ ReceivedTime: start, RequestMethod: r.Method, RequestURL: r.URL.String(), RequestHeaderSize: headerSize(r.Header), UserAgent: r.UserAgent(), Referer: r.Referer(), Proto: r.Proto, RemoteIP: ipFromHostPort(r.RemoteAddr), TraceID: sc.TraceID, SpanID: sc.SpanID, } if addr, ok := r.Context().Value(http.LocalAddrContextKey).(net.Addr); ok { ent.ServerIP = ipFromHostPort(addr.String()) } r2 := new(http.Request) *r2 = *r rcc := &readCounterCloser{r: r.Body} r2.Body = rcc w2 := &responseStats{w: w} h.h.ServeHTTP(w2, r2) ent.Latency = time.Since(start) if rcc.err == nil && rcc.r != nil && !w2.hijacked { // If the handler hasn't encountered an error in the Body (like EOF), // then consume the rest of the Body to provide an accurate rcc.n. io.Copy(ioutil.Discard, rcc) } ent.RequestBodySize = rcc.n ent.Status = w2.code if ent.Status == 0 { ent.Status = http.StatusOK } ent.ResponseHeaderSize, ent.ResponseBodySize = w2.size() h.log.Log(ent) } // Entry records information about a completed HTTP request. type Entry struct { ReceivedTime time.Time RequestMethod string RequestURL string RequestHeaderSize int64 RequestBodySize int64 UserAgent string Referer string Proto string RemoteIP string ServerIP string Status int ResponseHeaderSize int64 ResponseBodySize int64 Latency time.Duration TraceID trace.TraceID SpanID trace.SpanID } func ipFromHostPort(hp string) string { h, _, err := net.SplitHostPort(hp) if err != nil { return "" } if len(h) > 0 && h[0] == '[' { return h[1 : len(h)-1] } return h } type readCounterCloser struct { r io.ReadCloser n int64 err error } func (rcc *readCounterCloser) Read(p []byte) (n int, err error) { if rcc.err != nil { return 0, rcc.err } n, rcc.err = rcc.r.Read(p) rcc.n += int64(n) return n, rcc.err } func (rcc *readCounterCloser) Close() error { rcc.err = errors.New("read from closed reader") return rcc.r.Close() } type writeCounter int64 func (wc *writeCounter) Write(p []byte) (n int, err error) { *wc += writeCounter(len(p)) return len(p), nil } func headerSize(h http.Header) int64 { var wc writeCounter h.Write(&wc) return int64(wc) + 2 // for CRLF } type responseStats struct { w http.ResponseWriter hsize int64 wc writeCounter code int hijacked bool } func (r *responseStats) Header() http.Header { return r.w.Header() } func (r *responseStats) WriteHeader(statusCode int) { if r.code != 0 { return } r.hsize = headerSize(r.w.Header()) r.w.WriteHeader(statusCode) r.code = statusCode } func (r *responseStats) Write(p []byte) (n int, err error) { if r.code == 0 { r.WriteHeader(http.StatusOK) } n, err = r.w.Write(p) r.wc.Write(p[:n]) return } func (r *responseStats) size() (hdr, body int64) { if r.code == 0 { return headerSize(r.w.Header()), 0 } // Use the header size from the time WriteHeader was called. // The Header map can be mutated after the call to add HTTP Trailers, // which we don't want to count. return r.hsize, int64(r.wc) } func (r *responseStats) Hijack() (_ net.Conn, _ *bufio.ReadWriter, err error) { defer func() { if err == nil { r.hijacked = true } }() if hj, ok := r.w.(http.Hijacker); ok { return hj.Hijack() } return nil, nil, errors.New("underlying ResponseWriter does not support hijacking") } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/requestlog/requestlog_test.go������������������������������������������������0000664�0000000�0000000�00000007475�13670045075�0022606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package requestlog import ( "fmt" "io" "net/http" "net/http/httptest" "strings" "testing" "go.opencensus.io/trace" ) func TestHandler(t *testing.T) { const requestMsg = "Hello, World!" const responseMsg = "I see you." const userAgent = "Request Log Test UA" const referer = "http://www.example.com/" r, err := http.NewRequest("POST", "http://localhost/foo", strings.NewReader(requestMsg)) if err != nil { t.Fatal("NewRequest:", err) } r.Header.Set("User-Agent", userAgent) r.Header.Set("Referer", referer) requestHdrSize := len(fmt.Sprintf("User-Agent: %s\r\nReferer: %s\r\nContent-Length: %v\r\n", userAgent, referer, len(requestMsg))) responseHdrSize := len(fmt.Sprintf("Content-Length: %v\r\n", len(responseMsg))) ent, spanCtx, err := roundTrip(r, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Length", fmt.Sprint(len(responseMsg))) w.WriteHeader(http.StatusOK) io.WriteString(w, responseMsg) })) if err != nil { t.Fatal("Could not get entry:", err) } if want := "POST"; ent.RequestMethod != want { t.Errorf("RequestMethod = %q; want %q", ent.RequestMethod, want) } if want := "/foo"; ent.RequestURL != want { t.Errorf("RequestURL = %q; want %q", ent.RequestURL, want) } if ent.RequestHeaderSize < int64(requestHdrSize) { t.Errorf("RequestHeaderSize = %d; want >=%d", ent.RequestHeaderSize, requestHdrSize) } if ent.RequestBodySize != int64(len(requestMsg)) { t.Errorf("RequestBodySize = %d; want %d", ent.RequestBodySize, len(requestMsg)) } if ent.UserAgent != userAgent { t.Errorf("UserAgent = %q; want %q", ent.UserAgent, userAgent) } if ent.Referer != referer { t.Errorf("Referer = %q; want %q", ent.Referer, referer) } if want := "HTTP/1.1"; ent.Proto != want { t.Errorf("Proto = %q; want %q", ent.Proto, want) } if ent.Status != http.StatusOK { t.Errorf("Status = %d; want %d", ent.Status, http.StatusOK) } if ent.ResponseHeaderSize < int64(responseHdrSize) { t.Errorf("ResponseHeaderSize = %d; want >=%d", ent.ResponseHeaderSize, responseHdrSize) } if ent.ResponseBodySize != int64(len(responseMsg)) { t.Errorf("ResponseBodySize = %d; want %d", ent.ResponseBodySize, len(responseMsg)) } if ent.TraceID != spanCtx.TraceID { t.Errorf("TraceID = %v; want %v", ent.TraceID, spanCtx.TraceID) } if ent.SpanID != spanCtx.SpanID { t.Errorf("SpanID = %v; want %v", ent.SpanID, spanCtx.SpanID) } } type testSpanHandler struct { h http.Handler spanCtx *trace.SpanContext } func (sh *testSpanHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ctx, span := trace.StartSpan(r.Context(), "test") defer span.End() r = r.WithContext(ctx) sc := trace.FromContext(ctx).SpanContext() sh.spanCtx = &sc sh.h.ServeHTTP(w, r) } func roundTrip(r *http.Request, h http.Handler) (*Entry, *trace.SpanContext, error) { capture := new(captureLogger) hh := NewHandler(capture, h) handler := &testSpanHandler{h: hh} s := httptest.NewServer(handler) defer s.Close() r.URL.Host = s.URL[len("http://"):] resp, err := http.DefaultClient.Do(r) if err != nil { return nil, nil, err } resp.Body.Close() return &capture.ent, handler.spanCtx, nil } type captureLogger struct { ent Entry } func (cl *captureLogger) Log(ent *Entry) { cl.ent = *ent } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/requestlog/stackdriver.go����������������������������������������������������0000664�0000000�0000000�00000007434�13670045075�0021671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package requestlog import ( "bytes" "encoding/json" "io" "strconv" "sync" "time" ) // A StackdriverLogger writes log entries in the Stackdriver forward JSON // format. The record's fields are suitable for consumption by // Stackdriver Logging. type StackdriverLogger struct { onErr func(error) mu sync.Mutex w io.Writer buf bytes.Buffer enc *json.Encoder } // NewStackdriverLogger returns a new logger that writes to w. // A nil onErr is treated the same as func(error) {}. func NewStackdriverLogger(w io.Writer, onErr func(error)) *StackdriverLogger { l := &StackdriverLogger{ w: w, onErr: onErr, } l.enc = json.NewEncoder(&l.buf) return l } // Log writes a record to its writer. Multiple concurrent calls will // produce sequential writes to its writer. func (l *StackdriverLogger) Log(ent *Entry) { if err := l.log(ent); err != nil && l.onErr != nil { l.onErr(err) } } func (l *StackdriverLogger) log(ent *Entry) error { defer l.mu.Unlock() l.mu.Lock() l.buf.Reset() // r represents the fluent-plugin-google-cloud format // See https://github.com/GoogleCloudPlatform/fluent-plugin-google-cloud/blob/f93046d92f7722db2794a042c3f2dde5df91a90b/lib/fluent/plugin/out_google_cloud.rb#L145 // to check json tags var r struct { HTTPRequest struct { RequestMethod string `json:"requestMethod"` RequestURL string `json:"requestUrl"` RequestSize int64 `json:"requestSize,string"` Status int `json:"status"` ResponseSize int64 `json:"responseSize,string"` UserAgent string `json:"userAgent"` RemoteIP string `json:"remoteIp"` Referer string `json:"referer"` Latency string `json:"latency"` } `json:"httpRequest"` Timestamp struct { Seconds int64 `json:"seconds"` Nanos int `json:"nanos"` } `json:"timestamp"` TraceID string `json:"logging.googleapis.com/trace"` SpanID string `json:"logging.googleapis.com/spanId"` } r.HTTPRequest.RequestMethod = ent.RequestMethod r.HTTPRequest.RequestURL = ent.RequestURL // TODO(light): determine whether this is the formula LogEntry expects. r.HTTPRequest.RequestSize = ent.RequestHeaderSize + ent.RequestBodySize r.HTTPRequest.Status = ent.Status // TODO(light): determine whether this is the formula LogEntry expects. r.HTTPRequest.ResponseSize = ent.ResponseHeaderSize + ent.ResponseBodySize r.HTTPRequest.UserAgent = ent.UserAgent r.HTTPRequest.RemoteIP = ent.RemoteIP r.HTTPRequest.Referer = ent.Referer r.HTTPRequest.Latency = string(appendLatency(nil, ent.Latency)) t := ent.ReceivedTime.Add(ent.Latency) r.Timestamp.Seconds = t.Unix() r.Timestamp.Nanos = t.Nanosecond() r.TraceID = ent.TraceID.String() r.SpanID = ent.SpanID.String() if err := l.enc.Encode(r); err != nil { return err } _, err := l.w.Write(l.buf.Bytes()) return err } func appendLatency(b []byte, d time.Duration) []byte { // Parses format understood by google-fluentd (which is looser than the documented LogEntry format). // See the comment at https://github.com/GoogleCloudPlatform/fluent-plugin-google-cloud/blob/e2f60cdd1d97e79ffe4e91bdbf6bd84837f27fa5/lib/fluent/plugin/out_google_cloud.rb#L1539 b = strconv.AppendFloat(b, d.Seconds(), 'f', 9, 64) b = append(b, 's') return b } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/requestlog/stackdriver_test.go�����������������������������������������������0000664�0000000�0000000�00000014650�13670045075�0022726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package requestlog import ( "bytes" "context" "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/http/httptest" "strings" "testing" "time" "go.opencensus.io/trace" ) func TestStackdriverLog(t *testing.T) { const ( startTime = 1507914000 startTimeNanos = 512 latencySec = 5 latencyNanos = 123456789 endTime = startTime + latencySec endTimeNanos = startTimeNanos + latencyNanos ) ctx, span := trace.StartSpan(context.Background(), "test") defer span.End() sc := trace.FromContext(ctx).SpanContext() buf := new(bytes.Buffer) var logErr error l := NewStackdriverLogger(buf, func(e error) { logErr = e }) want := &Entry{ ReceivedTime: time.Unix(startTime, startTimeNanos), RequestMethod: "POST", RequestURL: "/foo/bar", RequestHeaderSize: 456, RequestBodySize: 123000, UserAgent: "Chrome proxied through Firefox and Edge", Referer: "http://www.example.com/", Proto: "HTTP/1.1", RemoteIP: "12.34.56.78", ServerIP: "127.0.0.1", Status: 404, ResponseHeaderSize: 555, ResponseBodySize: 789000, Latency: latencySec*time.Second + latencyNanos*time.Nanosecond, TraceID: sc.TraceID, SpanID: sc.SpanID, } ent := *want // copy in case Log accidentally mutates l.Log(&ent) if logErr != nil { t.Error("Logger called error callback:", logErr) } var got json.RawMessage if err := json.Unmarshal(buf.Bytes(), &got); err != nil { t.Fatal("Unmarshal:", err) } var r map[string]interface{} if err := json.Unmarshal(got, &r); err != nil { t.Error("Unmarshal record:", err) } else { rr, _ := r["httpRequest"].(map[string]interface{}) if rr == nil { t.Error("httpRequest does not exist in record or is not a JSON object") } if got, want := jsonString(rr, "requestMethod"), ent.RequestMethod; got != want { t.Errorf("httpRequest.requestMethod = %q; want %q", got, want) } if got, want := jsonString(rr, "requestUrl"), ent.RequestURL; got != want { t.Errorf("httpRequest.requestUrl = %q; want %q", got, want) } if got, want := jsonString(rr, "requestSize"), "123456"; got != want { t.Errorf("httpRequest.requestSize = %q; want %q", got, want) } if got, want := jsonNumber(rr, "status"), float64(ent.Status); got != want { t.Errorf("httpRequest.status = %d; want %d", int64(got), int64(want)) } if got, want := jsonString(rr, "responseSize"), "789555"; got != want { t.Errorf("httpRequest.responseSize = %q; want %q", got, want) } if got, want := jsonString(rr, "userAgent"), ent.UserAgent; got != want { t.Errorf("httpRequest.userAgent = %q; want %q", got, want) } if got, want := jsonString(rr, "remoteIp"), ent.RemoteIP; got != want { t.Errorf("httpRequest.remoteIp = %q; want %q", got, want) } if got, want := jsonString(rr, "referer"), ent.Referer; got != want { t.Errorf("httpRequest.referer = %q; want %q", got, want) } if got, want := jsonString(rr, "latency"), "5.123456789"; parseLatency(got) != want { t.Errorf("httpRequest.latency = %q; want %q", got, want+"s") } ts, _ := r["timestamp"].(map[string]interface{}) if ts == nil { t.Error("timestamp does not exist in record or is not a JSON object") } if got, want := jsonNumber(ts, "seconds"), float64(endTime); got != want { t.Errorf("timestamp.seconds = %g; want %g", got, want) } if got, want := jsonNumber(ts, "nanos"), float64(endTimeNanos); got != want { t.Errorf("timestamp.nanos = %g; want %g", got, want) } if got, want := jsonString(r, "logging.googleapis.com/trace"), ent.TraceID.String(); got != want { t.Errorf("traceID = %q; want %q", got, want) } if got, want := jsonString(r, "logging.googleapis.com/spanId"), ent.SpanID.String(); got != want { t.Errorf("spanID = %q; want %q", got, want) } } } func parseLatency(s string) string { s = strings.TrimSpace(s) if !strings.HasSuffix(s, "s") { return "" } s = strings.TrimSpace(s[:len(s)-1]) for _, c := range s { if !(c >= '0' && c <= '9') && c != '.' { return "" } } return s } func jsonString(obj map[string]interface{}, k string) string { v, _ := obj[k].(string) return v } func jsonNumber(obj map[string]interface{}, k string) float64 { v, _ := obj[k].(float64) return v } func BenchmarkStackdriverLog(b *testing.B) { ent := &Entry{ ReceivedTime: time.Date(2017, time.October, 13, 17, 0, 0, 512, time.UTC), RequestMethod: "POST", RequestURL: "/foo/bar", RequestHeaderSize: 456, RequestBodySize: 123000, UserAgent: "Chrome proxied through Firefox and Edge", Referer: "http://www.example.com/", Proto: "HTTP/1.1", RemoteIP: "12.34.56.78", ServerIP: "127.0.0.1", Status: 404, ResponseHeaderSize: 555, ResponseBodySize: 789000, Latency: 5 * time.Second, } var buf bytes.Buffer l := NewStackdriverLogger(&buf, func(error) {}) l.Log(ent) b.ReportAllocs() b.SetBytes(int64(buf.Len())) buf.Reset() b.ResetTimer() l = NewStackdriverLogger(ioutil.Discard, func(error) {}) for i := 0; i < b.N; i++ { l.Log(ent) } } func BenchmarkE2E(b *testing.B) { run := func(b *testing.B, handler http.Handler) { s := httptest.NewServer(handler) defer s.Close() b.ReportAllocs() for i := 0; i < b.N; i++ { resp, err := http.Get(s.URL) if err != nil { b.Fatal(err) } io.Copy(ioutil.Discard, resp.Body) resp.Body.Close() } } b.Run("Baseline", func(b *testing.B) { run(b, http.HandlerFunc(benchHandler)) }) b.Run("WithLog", func(b *testing.B) { l := NewStackdriverLogger(ioutil.Discard, func(error) {}) run(b, NewHandler(l, http.HandlerFunc(benchHandler))) }) } func benchHandler(w http.ResponseWriter, r *http.Request) { const msg = "Hello, World!" w.Header().Set("Content-Length", fmt.Sprint(len(msg))) io.WriteString(w, msg) } ����������������������������������������������������������������������������������������go-cloud-0.20.0/server/sdserver/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0016454�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/sdserver/server.go�����������������������������������������������������������0000664�0000000�0000000�00000004723�13670045075�0020317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package sdserver provides the diagnostic hooks for a server using // Stackdriver. package sdserver // import "gocloud.dev/server/sdserver" import ( "fmt" "os" "github.com/google/wire" "gocloud.dev/gcp" "gocloud.dev/internal/useragent" "gocloud.dev/server" "gocloud.dev/server/requestlog" "contrib.go.opencensus.io/exporter/stackdriver" "contrib.go.opencensus.io/exporter/stackdriver/monitoredresource" "go.opencensus.io/trace" "golang.org/x/oauth2" "google.golang.org/api/option" ) // Set is a Wire provider set that provides the diagnostic hooks for // *server.Server given a GCP token source and a GCP project ID. var Set = wire.NewSet( server.Set, NewExporter, monitoredresource.Autodetect, wire.Bind(new(trace.Exporter), new(*stackdriver.Exporter)), NewRequestLogger, wire.Bind(new(requestlog.Logger), new(*requestlog.StackdriverLogger)), ) // NewExporter returns a new OpenCensus Stackdriver exporter. // // The second return value is a Wire cleanup function that calls Flush // on the exporter. func NewExporter(id gcp.ProjectID, ts gcp.TokenSource, mr monitoredresource.Interface) (*stackdriver.Exporter, func(), error) { opts := []option.ClientOption{ option.WithTokenSource(oauth2.TokenSource(ts)), useragent.ClientOption("server"), } exp, err := stackdriver.NewExporter(stackdriver.Options{ ProjectID: string(id), MonitoringClientOptions: opts, TraceClientOptions: opts, MonitoredResource: mr, }) if err != nil { return nil, nil, err } return exp, func() { exp.Flush() }, err } // NewRequestLogger returns a request logger that sends entries to stdout. func NewRequestLogger() *requestlog.StackdriverLogger { // For now, request logs are written to stdout and get picked up by fluentd. // This also works when running locally. return requestlog.NewStackdriverLogger(os.Stdout, func(e error) { fmt.Println(e) }) } ���������������������������������������������go-cloud-0.20.0/server/server.go��������������������������������������������������������������������0000664�0000000�0000000�00000014445�13670045075�0016464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package server provides a preconfigured HTTP server with diagnostic hooks. package server // import "gocloud.dev/server" import ( "context" "fmt" "net/http" "sync" "time" "github.com/google/wire" "gocloud.dev/server/driver" "gocloud.dev/server/health" "gocloud.dev/server/requestlog" "go.opencensus.io/plugin/ochttp" "go.opencensus.io/trace" ) // Set is a Wire provider set that produces a *Server given the fields of // Options. var Set = wire.NewSet( New, wire.Struct(new(Options), "RequestLogger", "HealthChecks", "TraceExporter", "DefaultSamplingPolicy", "Driver"), wire.Value(&DefaultDriver{}), wire.Bind(new(driver.Server), new(*DefaultDriver)), ) // Server is a preconfigured HTTP server with diagnostic hooks. // The zero value is a server with the default options. type Server struct { reqlog requestlog.Logger handler http.Handler wrappedHandler http.Handler healthHandler health.Handler te trace.Exporter sampler trace.Sampler once sync.Once driver driver.Server } // Options is the set of optional parameters. type Options struct { // RequestLogger specifies the logger that will be used to log requests. RequestLogger requestlog.Logger // HealthChecks specifies the health checks to be run when the // /healthz/readiness endpoint is requested. HealthChecks []health.Checker // TraceExporter exports sampled trace spans. TraceExporter trace.Exporter // DefaultSamplingPolicy is a function that takes a // trace.SamplingParameters struct and returns a true or false decision about // whether it should be sampled and exported. DefaultSamplingPolicy trace.Sampler // Driver serves HTTP requests. Driver driver.Server } // New creates a new server. New(nil, nil) is the same as new(Server). func New(h http.Handler, opts *Options) *Server { srv := &Server{handler: h} if opts != nil { srv.reqlog = opts.RequestLogger srv.te = opts.TraceExporter for _, c := range opts.HealthChecks { srv.healthHandler.Add(c) } srv.sampler = opts.DefaultSamplingPolicy srv.driver = opts.Driver } return srv } func (srv *Server) init() { srv.once.Do(func() { if srv.te != nil { trace.RegisterExporter(srv.te) } if srv.sampler != nil { trace.ApplyConfig(trace.Config{DefaultSampler: srv.sampler}) } if srv.driver == nil { srv.driver = NewDefaultDriver() } if srv.handler == nil { srv.handler = http.DefaultServeMux } // Setup health checks, /healthz route is taken by health checks by default. // Note: App Engine Flex uses /_ah/health by default, which can be changed // in app.yaml. We may want to do an auto-detection for flex in future. const healthPrefix = "/healthz/" mux := http.NewServeMux() mux.HandleFunc(healthPrefix+"liveness", health.HandleLive) mux.Handle(healthPrefix+"readiness", &srv.healthHandler) h := srv.handler if srv.reqlog != nil { h = requestlog.NewHandler(srv.reqlog, h) } h = &ochttp.Handler{ Handler: h, IsPublicEndpoint: true, } mux.Handle("/", h) srv.wrappedHandler = mux }) } // ListenAndServe is a wrapper to use wherever http.ListenAndServe is used. // It wraps the http.Handler provided to New with a handler that handles tracing and // request logging. If the handler is nil, then http.DefaultServeMux will be used. // A configured Requestlogger will log all requests except HealthChecks. func (srv *Server) ListenAndServe(addr string) error { srv.init() return srv.driver.ListenAndServe(addr, srv.wrappedHandler) } // ListenAndServeTLS is a wrapper to use wherever http.ListenAndServeTLS is used. // It wraps the http.Handler provided to New with a handler that handles tracing and // request logging. If the handler is nil, then http.DefaultServeMux will be used. // A configured Requestlogger will log all requests except HealthChecks. func (srv *Server) ListenAndServeTLS(addr, certFile, keyFile string) error { // Check if the driver implements the optional interface. tlsDriver, ok := srv.driver.(driver.TLSServer) if !ok { return fmt.Errorf("driver %T does not support ListenAndServeTLS", srv.driver) } srv.init() return tlsDriver.ListenAndServeTLS(addr, certFile, keyFile, srv.wrappedHandler) } // Shutdown gracefully shuts down the server without interrupting any active connections. func (srv *Server) Shutdown(ctx context.Context) error { if srv.driver == nil { return nil } return srv.driver.Shutdown(ctx) } // DefaultDriver implements the driver.Server interface. The zero value is a valid http.Server. type DefaultDriver struct { Server http.Server } // NewDefaultDriver creates a driver with an http.Server with default timeouts. func NewDefaultDriver() *DefaultDriver { return &DefaultDriver{ Server: http.Server{ ReadTimeout: 30 * time.Second, WriteTimeout: 30 * time.Second, IdleTimeout: 120 * time.Second, }, } } // ListenAndServe sets the address and handler on DefaultDriver's http.Server, // then calls ListenAndServe on it. func (dd *DefaultDriver) ListenAndServe(addr string, h http.Handler) error { dd.Server.Addr = addr dd.Server.Handler = h return dd.Server.ListenAndServe() } // ListenAndServeTLS sets the address and handler on DefaultDriver's http.Server, // then calls ListenAndServeTLS on it. // // DefaultDriver.Server.TLSConfig may be set to configure additional TLS settings. func (dd *DefaultDriver) ListenAndServeTLS(addr, certFile, keyFile string, h http.Handler) error { dd.Server.Addr = addr dd.Server.Handler = h return dd.Server.ListenAndServeTLS(certFile, keyFile) } // Shutdown gracefully shuts down the server without interrupting any active connections, // by calling Shutdown on DefaultDriver's http.Server func (dd *DefaultDriver) Shutdown(ctx context.Context) error { return dd.Server.Shutdown(ctx) } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/server_test.go���������������������������������������������������������������0000664�0000000�0000000�00000010162�13670045075�0017513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package server import ( "context" "errors" "net/http" "net/http/httptest" "testing" "gocloud.dev/server/requestlog" ) const ( certFile = "my-cert" keyFile = "my-key" ) func TestListenAndServe(t *testing.T) { td := new(testDriver) s := New(http.NotFoundHandler(), &Options{Driver: td}) err := s.ListenAndServe(":8080") if err != nil { t.Fatal(err) } if !td.listenAndServeCalled { t.Error("ListenAndServe was not called from the supplied driver") } if td.certFile != "" || td.keyFile != "" { t.Errorf("ListenAndServe got non-empty certFile or keyFile (%q, %q), wanted empty", td.certFile, td.keyFile) } if td.handler == nil { t.Error("testDriver must set handler, got nil") } } func TestListenAndServeTLSNoSupported(t *testing.T) { td := new(testDriverNoTLS) s := New(http.NotFoundHandler(), &Options{Driver: td}) err := s.ListenAndServeTLS(":8080", certFile, keyFile) if err == nil { t.Fatal("expected TLS not supported error") } } func TestListenAndServeTLS(t *testing.T) { td := new(testDriver) s := New(http.NotFoundHandler(), &Options{Driver: td}) err := s.ListenAndServeTLS(":8080", certFile, keyFile) if err != nil { t.Fatal(err) } if !td.listenAndServeCalled { t.Error("ListenAndServe was not called from the supplied driver") } if td.certFile != certFile { t.Errorf("ListenAndServe got certFile %q, want %q", td.certFile, certFile) } if td.keyFile != keyFile { t.Errorf("ListenAndServe got keyFile %q, want %q", td.keyFile, keyFile) } if td.handler == nil { t.Error("testDriver must set handler, got nil") } } func TestMiddleware(t *testing.T) { onLogCalled := 0 tl := &testLogger{ onLog: func(ent *requestlog.Entry) { onLogCalled++ if ent.TraceID.String() == "" { t.Error("TraceID is empty") } if ent.SpanID.String() == "" { t.Error("SpanID is empty") } }, } td := new(testDriver) s := New(http.NotFoundHandler(), &Options{Driver: td, RequestLogger: tl}) err := s.ListenAndServe(":8080") if err != nil { t.Fatal(err) } req, err := http.NewRequest("GET", "/", nil) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() td.handler.ServeHTTP(rr, req) if onLogCalled != 1 { t.Fatal("logging middleware was not called") } // Repeat with TLS. err = s.ListenAndServeTLS(":8081", certFile, keyFile) if err != nil { t.Fatal(err) } req, err = http.NewRequest("GET", "/", nil) if err != nil { t.Fatal(err) } td.handler.ServeHTTP(rr, req) if onLogCalled != 2 { t.Fatal("logging middleware was not called for TLS") } } type testDriverNoTLS string func (td *testDriverNoTLS) ListenAndServe(addr string, h http.Handler) error { return errors.New("this is a method for satisfying the interface") } func (td *testDriverNoTLS) Shutdown(ctx context.Context) error { return errors.New("this is a method for satisfying the interface") } type testDriver struct { listenAndServeCalled bool certFile, keyFile string handler http.Handler } func (td *testDriver) ListenAndServe(addr string, h http.Handler) error { td.listenAndServeCalled = true td.handler = h return nil } func (td *testDriver) ListenAndServeTLS(addr, certFile, keyFile string, h http.Handler) error { td.listenAndServeCalled = true td.certFile = certFile td.keyFile = keyFile td.handler = h return nil } func (td *testDriver) Shutdown(ctx context.Context) error { return errors.New("this is a method for satisfying the interface") } type testLogger struct { onLog func(ent *requestlog.Entry) } func (tl *testLogger) Log(ent *requestlog.Entry) { tl.onLog(ent) } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/xrayserver/������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0017031�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/server/xrayserver/server.go���������������������������������������������������������0000664�0000000�0000000�00000004434�13670045075�0020673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2018 The Go Cloud Development Kit Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package xrayserver provides the diagnostic hooks for a server using // AWS X-Ray. package xrayserver // import "gocloud.dev/server/xrayserver" import ( "fmt" "os" exporter "contrib.go.opencensus.io/exporter/aws" "github.com/aws/aws-sdk-go/aws/client" "github.com/aws/aws-sdk-go/service/xray" "github.com/aws/aws-sdk-go/service/xray/xrayiface" "github.com/google/wire" "go.opencensus.io/trace" "gocloud.dev/server" "gocloud.dev/server/requestlog" ) // Set is a Wire provider set that provides the diagnostic hooks for // *server.Server. This set includes ServiceSet. var Set = wire.NewSet( server.Set, ServiceSet, NewExporter, wire.Bind(new(trace.Exporter), new(*exporter.Exporter)), NewRequestLogger, wire.Bind(new(requestlog.Logger), new(*requestlog.NCSALogger)), ) // ServiceSet is a Wire provider set that provides the AWS X-Ray service // client given an AWS session. var ServiceSet = wire.NewSet( NewXRayClient, wire.Bind(new(xrayiface.XRayAPI), new(*xray.XRay)), ) // NewExporter returns a new X-Ray exporter. // // The second return value is a Wire cleanup function that calls Close // on the exporter, ignoring the error. func NewExporter(api xrayiface.XRayAPI) (*exporter.Exporter, func(), error) { e, err := exporter.NewExporter(exporter.WithAPI(api)) if err != nil { return nil, nil, err } return e, func() { e.Close() }, nil } // NewXRayClient returns a new AWS X-Ray client. func NewXRayClient(p client.ConfigProvider) *xray.XRay { return xray.New(p) } // NewRequestLogger returns a request logger that sends entries to stdout. func NewRequestLogger() *requestlog.NCSALogger { return requestlog.NewNCSALogger(os.Stdout, func(e error) { fmt.Fprintln(os.Stderr, e) }) } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/wire/�������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�13670045075�0014257�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������go-cloud-0.20.0/wire/README.md����������������������������������������������������������������������0000664�0000000�0000000�00000000362�13670045075�0015537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Wire has moved! Wire has moved to its own repository: [github.com/google/wire](https://github.com/google/wire) Read the [announcement][] for more details. [announcement]: https://groups.google.com/d/msg/go-cloud/4HuWfjDAkOY/Y2tUQdB_BQAJ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������